Доброго времени суток. Столкнулся с такой задачей: нужно сделать обработку для выгрузки каталога номенклатуры в формат yml. Нахожу только платные решения, может быть у кого то есть пример или какой-то аналог, который помог бы новичку? Буду очень благодарен
А в чем собственно проблема? Если я не ошибаюсь, yml - тот же xml с незначительными изменениями. Пишите выгрузку обычного XML, по правилам yml и согласно нужного вам формата прайса.
http://pro1c.org.ua/redirect.php?https://yandex.ru/support/partnermarket/yml/about-yml.html
а вот пример написания самого файла
ЗаписьXML=Новый ЗаписьXML();
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьНачалоЭлемента("yml_catalog");
ЗаписьXML.ЗаписатьАтрибут("date", Формат(ТекущаяДата(),"ДФ='yyyy-MM-dd HH:mm:ss'"));
ЗаписьXML.ЗаписатьНачалоЭлемента("shop");
ЗаписьXML.ЗаписатьАтрибут("name", НашеНаименованиеМагазина));
ЗаписьXML.ЗаписатьАтрибут("company", НашеНаименованиеФирмы));
итд....
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();
СтрокаXML=ЗаписьXML.Закрыть();
salton @ Сегодня, 9:18
,
Да у меня ошибка какая-то выдает из-за циклов, я уже по всякому пробовал, но ничего не получается..поэтому думаю, мб тут помогут
salton @ Сегодня, 9:18
,
Может вы как-то на глаз найдете в чем проблема, а то я уже день не могу найти ошибку
Процедура СохранитьВКаталог(ВыборкаТоваров) Экспорт
// Проверим существование папки для записи изображений
Если ЛокальнаяВыгрузка = Ложь Тогда
Каталог = "C:\1C";
КонецЕсли;
ПутьКИзображениям =Каталог + "\Picture\";
КоличествоВыгруженныхТоваров = 0;
ПапкаКатолога = Новый Файл(Каталог);
Если Не ПапкаКатолога.Существует() Тогда
СоздатьКаталог(ПутьКИзображениям);
КонецЕсли;
ПапкаХранилища = Новый Файл(ПутьКИзображениям);
// Очищаем каталог перд загрзузкой новых файлов
Если Не ПапкаХранилища.Существует() Тогда
СоздатьКаталог(ПутьКИзображениям);
Иначе
Попытка
УдалитьФайлы(ПутьКИзображениям,"*.*");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
ЗаписьХМL = Новый ЗаписьXML;
ЗаписьХМL.ОткрытьФайл(Каталог + "\" + Организация + ".xml");
// Записать директиву
ЗаписьХМL.ЗаписатьОбъявлениеXML();
//ЗаписьХМL.ЗаписатьНачалоЭлемента(Строка("OCTYPE xml_catalog SYSTEM" +" " + "hops.dtd"));
ЗаписьХМL.ЗаписатьНачалоЭлемента("yml_catalog");
ЗаписьХМL.ЗаписатьАтрибут("date",Строка(Формат(КонецДня(ТекущаяДата()) - 3539, "ДФ=yyyy-MM-dd")+" "+Формат(КонецДня(ТекущаяДата()) - 3539, "ДФ=ЧЧ")+":"+Формат(КонецДня(ТекущаяДата()) - 3539, "ДФ=мм")));
ЗаписьХМL.ЗаписатьНачалоЭлемента("shop");
// начинаем обход результата запроса
ОбходПоГруппирокам = ОбходРезультатаЗапроса.ПоГруппировкам;
ВыборкаНоменклатураРодитель = ВыборкаТоваров.Выбрать(ОбходПоГруппирокам, "НоменклатураРодитель");
//Пока ВыборкаНоменклатураРодитель.Следующий() Цикл
ЗаписьХМL.ЗаписатьНачалоЭлемента("name");
//Operation name;
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("company");
ЗаписьХМL.ЗаписатьТекст (Организация);
//company name;
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("url");
//url;
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("currencies");
ЗаписьХМL.ЗаписатьТекст (Строка("UAH"));
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("categories");
Пока ВыборкаНоменклатураРодитель.Следующий() Цикл
ЗаписьХМL.ЗаписатьНачалоЭлемента("category");
ЗаписьХМL.ЗаписатьТекст(ВыборкаНоменклатура.Наименование);
ЗаписьХМL.ЗаписатьАтрибут("id",Прав(ВыборкаНоменклатура.Код,7 ));
ЗаписьХМL.ЗаписатьКонецЭлемента();
КонецЦикла;
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("offers");
Пока ВыборкаНоменклатураРодитель.Следующий() Цикл
ЗаписьХМL.ЗаписатьНачалоЭлемента("offer");
Если ЗначениеЗаполнено(ВыборкаНоменклатура.Код) Тогда
КоличествоВыгруженныхТоваров = КоличествоВыгруженныхТоваров + 1;
ЗаписьХМL.ЗаписатьАтрибут("id",Прав(ВыборкаНоменклатура.Код,7 ));
Если ВыборкаНоменклатура.Остаток > 0 И НЕ ВыборкаНоменклатура.НоменклатураСсылка.шЗаказная Тогда
ЗаписьХМL.ЗаписатьАтрибут("available",Строка("в наличии"));
ИначеЕсли ВыборкаНоменклатура.Остаток >= 0 И ВыборкаНоменклатура.НоменклатураСсылка.шЗаказная Тогда
ЗаписьХМL.ЗаписатьАтрибут("available",Строка("под заказ"));
Иначе
ЗаписьХМL.ЗаписатьАтрибут("available",Строка("наличие уточняйте"));
КонецЕсли;
ЗаписьХМL.ЗаписатьНачалоЭлемента("url");
///
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("price");
Если ЗначениеЗаполнено(ВыборкаНоменклатура.Цена) Тогда
ЗаписьХМL.ЗаписатьТекст(Строка(ВыборкаНоменклатура.Цена));
КонецЕсли;
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("currencyId");
ЗаписьХМL.ЗаписатьТекст (Строка("UAH"));
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("measure");
ЗаписьХМL.ЗаписатьТекст (Строка(ВыборкаНоменклатура.ЕдиницаИзмерения));
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("categoryId");
ЗаписьХМL.ЗаписатьТекст("id",Прав(ВыборкаНоменклатура.Код,7 ));
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("picture");
//ЗаписьХМL.ЗаписатьТекст (ВыборкаНоменклатура.НаименованиеПолное);
ЗаписьХМL.ЗаписатьКонецЭлемента();
// ЗДЕСЬ ДОЛЖЕН БЫТЬ <vendor>Польша</vendor>
// <vendorCode></vendorCode>
ЗаписьХМL.ЗаписатьНачалоЭлемента("model");
ЗаписьХМL.ЗаписатьТекст(ВыборкаНоменклатура.Наименование);
ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьНачалоЭлемента("description");
ЗаписьХМL.ЗаписатьТекст (ВыборкаНоменклатура.Описание);
ЗаписьХМL.ЗаписатьКонецЭлемента();
КонецЦикла;
ЗаписьХМL. ЗаписатьКонецЭлемента(); //Относится к "offer"
КонецЦикла;
ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к "offers"
ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к элементу "shop"
ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к элементу "yml_catalog"
ЗаписьХМL.Закрыть();
Если ЛокальнаяВыгрузка = Ложь Тогда
ОтправитьФайлНаСервер(КоличествоВыгруженныхТоваров);
Иначе
Сообщить("Выгрузка успешно завершилась. Выгружено " + КоличествоВыгруженныхТоваров + " товаров");
КонецЕсли;
КонецПроцедуры
На глаз - не скажу. Пишите конкретно какая ошибка...
Единственное, что могу сказать сразу - файл вы в итоге получите, но вот формат его не будет соответствовать требуемому... ИМХО.. Но давайте сначала определимся где у вас ошибка и что конкретно пишет!
salton @ Сегодня, 12:32
,
{ВнешняяОбработка.ВыгрузкаДанныхПоНоменклатуре.МодульОбъекта(159,4)}: Ожидается ключевое слово 'КонецЕсли' ('EndIf')
<<?>>КонецЦикла; (Проверка: Толстый клиент (обычное приложение))
{ВнешняяОбработка.ВыгрузкаДанныхПоНоменклатуре.МодульОбъекта(162,3)}: Ожидается ключевое слово 'КонецПроцедуры' ('EndProcedure')
<<?>>КонецЦикла; (Проверка: Толстый клиент (обычное приложение))
вот так не будет, проверяй
Код
salton @ Сегодня, 13:08
, что-то пошло не так
! | http://pro1c.org.ua/index.php?act=announce&id=2: 8 |
Murano @ Сегодня, 13:11
,
Все пошло не так)))
Где процедура формирующая выборку номенклатуры????
зы. Если ВЫборкуНоменклатуры заменить на ТекущуюДату()
Организация заменить на "YML" + исправить мелкие ошибки в процедуре записи - то получиться вот такой файл:
<yml_catalog date="2017-09-25 23:01">
<shop>
<name/>
<company>YML</company>
<url/>
<currencies>UAH</currencies>
<categories>
<category id="3:24:43">25.09.2017 13:24:43</category>
</categories>
<offers>
<offer id="3:24:43" available="в наличии">
<url/>
<price>25.09.2017 13:24:43</price>
<currencyId>UAH</currencyId>
<measure>25.09.2017 13:24:43</measure>
<categoryId>id25.09.2017 13:24:43</categoryId>
<picture/>
<model>25.09.2017 13:24:43</model>
<description>25.09.2017 13:24:43</description>
</offer>
</offers>
</shop>
</yml_catalog>
salton @ Сегодня, 13:28
,
приятного аппетита
как таковой процедуры нету, выборка совершается в построителе отчета. Тупые вопросы и ошибки из-за нехватки опыта у меня, т.к. с 1С знаком всего 2мес. За это прошу простить меня
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦеныНоменклатурыКонтрагентов.Номенклатура,
| ЦеныНоменклатурыКонтрагентов.Валюта,
| ЦеныНоменклатурыКонтрагентов.Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаНоменклатура = РезультатЗапроса.Выбрать();
Пока ВыборкаНоменклатура.Следующий() Цикл
Номеклатура = Справочники.Номенклатура.
ВыборкаВыборкаНоменклатура = Номенклатура.Выбрать(Родитель,,Отбор, "Наименование Убыв");
salton @ Сегодня, 14:05
,
мой построитель отчета выглядит так:
Процедура ИнициализацияПостроителяОтчета() Экспорт
ТекстЗапроса =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Номенклатура
|ПОМЕСТИТЬ ВТНоменклатура
|{ВЫБРАТЬ
| Номенклатура.* КАК Номенклатура}
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТНоменклатура.Номенклатура.Код КАК Код,
| ВТНоменклатура.Номенклатура.Наименование КАК Наименование,
| ВТНоменклатура.Номенклатура.Артикул КАК Артикул,
| ВТНоменклатура.Номенклатура.БазоваяЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ВТНоменклатура.Номенклатура.Комментарий КАК Комментарий,
| ВТНоменклатура.Номенклатура.НаименованиеПолное КАК НаименованиеПолное,
| ВТНоменклатура.Номенклатура.ДополнительноеОписаниеНоменклатуры КАК Описание,
| ЦеныНоменклатурыСрезПоследних.Цена,
| ВТНоменклатура.Номенклатура.Родитель КАК НоменклатураРодитель,
| ВТНоменклатура.Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| ТоварыНаСкладахОстатки.Склад,
| ЦеныНоменклатурыСрезПоследних.ТипЦен,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток,
| ВТНоменклатура.Номенклатура.ОсновноеИзображение.Хранилище КАК Хранилище,
| ВТНоменклатура.Номенклатура.ОсновноеИзображение.Объект.Код КАК КодИзображения,
| ВТНоменклатура.Номенклатура.Ссылка КАК НоменклатураСсылка
|{ВЫБРАТЬ
| НоменклатураСсылка.* КАК Номенклатура,
| ТипЦен.* КАК ТипЦен,
| Склад.* КАК Склад}
|ИЗ
| ВТНоменклатура КАК ВТНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, {(Номенклатура).* КАК Номенклатура, (Склад).* КАК Склад}) КАК ТоварыНаСкладахОстатки
| ПО ВТНоменклатура.Номенклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(Номенклатура).* КАК Номенклатура, (ТипЦен).* КАК ТипЦен}) КАК ЦеныНоменклатурыСрезПоследних
| ПО ВТНоменклатура.Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
|ГДЕ
| ТоварыНаСкладахОстатки.Склад.ТипЦенРозничнойТорговли = ЦеныНоменклатурыСрезПоследних.ТипЦен
|{ГДЕ
| ВТНоменклатура.Номенклатура.Ссылка.* КАК Номенклатура,
| ЦеныНоменклатурыСрезПоследних.ТипЦен.* КАК ТипЦен,
| ТоварыНаСкладахОстатки.Склад.* КАК Склад}
|
|УПОРЯДОЧИТЬ ПО
| НоменклатураСсылка
|ИТОГИ ПО
| НоменклатураРодитель
|;
|
|////////////////////////////////////////////////////////////////////////////////
|УНИЧТОЖИТЬ ВТНоменклатура";
ПостроительОтчета.Текст = ТекстЗапроса;
ПараметрыПостроителя = ПостроительОтчета.Параметры;
//ПараметрыПостроителя.Вставить("ТипЦен", ТипЦен);
ПараметрыПостроителя.Вставить("ВидДанных", Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение);
КонецПроцедуры
salton @ Сегодня, 14:14
,
1. Она есть, но мне нужно в ней с запроса данные во вложенный запрос вставить только, да?
2. Тоже есть, и выгрузка есть
3. По сути, то в чем была изначально проблема.
во внешней обработке и делаю
salton @ Сегодня, 14:32
,
Чувствую себя как в первый раз на высшей математике
Доброго времени суток. Имеется обработка для выгрузки прайс-листа в yml файл, а как сделать чтобы вторым рядком в нем было
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
как по стандарту?
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку("Чего-то там в первой строке");
ЗаписьXML.УстановитьСтроку("<!DOCTYPE yml_catalog SYSTEM ""shops.dtd"">");
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua