Доброго времени суток. Столкнулся с такой задачей: нужно сделать обработку для выгрузки каталога номенклатуры в формат yml. Нахожу только платные решения, может быть у кого то есть пример или какой-то аналог, который помог бы новичку? Буду очень благодарен
А в чем собственно проблема? Если я не ошибаюсь, yml - тот же xml с незначительными изменениями. Пишите выгрузку обычного XML, по правилам yml и согласно нужного вам формата прайса.
[необходимо зарегистрироваться для просмотра ссылки]
ps. по сути пишеште самый обычный xml. но есть куча мелочей - важен порядок тегов - именно как в примере, их присутствие - они помоему там на 80% обязательны, отсутствие дублей товара.... и куча других мелочей... вобщем дерзайте - по ходу разберетесь!
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.Закрыть();
Если ЛокальнаяВыгрузка = ЛожьТогда
ОтправитьФайлНаСервер(КоличествоВыгруженныхТоваров);
Иначе
Сообщить("Выгрузка успешно завершилась. Выгружено " + КоличествоВыгруженныхТоваров + " товаров");
КонецЕсли;
КонецПроцедуры
На глаз - не скажу. Пишите конкретно какая ошибка...
Единственное, что могу сказать сразу - файл вы в итоге получите, но вот формат его не будет соответствовать требуемому... ИМХО.. Но давайте сначала определимся где у вас ошибка и что конкретно пишет!
Murano @ Сегодня, 13:11
, Все пошло не так))) Где процедура формирующая выборку номенклатуры????
зы. Если ВЫборкуНоменклатуры заменить на ТекущуюДату() Организация заменить на "YML" + исправить мелкие ошибки в процедуре записи - то получиться вот такой файл:
salton @ Сегодня, 13:28
, приятного аппетита как таковой процедуры нету, выборка совершается в построителе отчета. Тупые вопросы и ошибки из-за нехватки опыта у меня, т.к. с 1С знаком всего 2мес. За это прошу простить меня
как таковой процедуры нету, выборка совершается в построителе отчета. Тупые вопросы и ошибки из-за нехватки опыта у меня, т.к. с 1С знаком всего 2мес. За это прошу простить меня
Не совсем понятно, что вы имеете ввиду, что выборка совершается в построителе отчета.... Но! Где-то в отчете есть код запроса который выбирает номенклатуру. Если нет - его нужно сделать (запрос или прямую выборку по справочнику).
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦеныНоменклатурыКонтрагентов.Номенклатура,
| ЦеныНоменклатурыКонтрагентов.Валюта,
| ЦеныНоменклатурыКонтрагентов.Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаНоменклатура = РезультатЗапроса.Выбрать();
Пока ВыборкаНоменклатура.Следующий() Цикл
ну почему же... правильно... но, задача не вывести отчет на экран... задача в другом
Цитата(Murano @ 25.09.17, 13:50)
Тупые вопросы и ошибки из-за нехватки опыта у меня, т.к. с 1С знаком всего 2мес.
возьмите за правило прежде чем что-то делать нужно сесть и расписать полностью весь план действий. Берешь задачу - в твоем случае - это выгрузка прайса в яндекс маркет. Разбиваешь задачу на части: 1. Написать процедуру или функцию для получения самого прайса. 2. Написать процедуру по созданию YML файла и записи/выгрузке его в указанное место 3. Написать процедуру/функцию по заполнению YML.
И начинай выполнять по очереди. Создал процедуру получения прайса - загони временно в ТЗ - посмотри в отладчике нужные данные получаешь или нет. Процедура по созданию YML у Вас уже есть. Вот в эту процедуру и передай данные из первой процедуры с прайсом (для этого сделайте ее функцией и возвращай ТЗ, Массив, или Структуру). В конце напишешь функцию по выгрузке файла куда надо - ОтправитьФайлНаСервер(файлYML) - скорее всего это будет по ФТП куда-то... И все это сделайте внешней обработкой!
salton @ Сегодня, 14:14
, 1. Она есть, но мне нужно в ней с запроса данные во вложенный запрос вставить только, да? 2. Тоже есть, и выгрузка есть 3. По сути, то в чем была изначально проблема.
Про1С-ник
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2539 раз
Рейтинг: 0
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку("Чего-то там в первой строке");
ЗаписьXML.УстановитьСтроку("<!DOCTYPE yml_catalog SYSTEM ""shops.dtd"">");
Личные бесплатные консультации не даю, для этого есть форум!
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!