Группа: Пользователи
Сообщений: 32
Спасибо сказали: 0 раз
Рейтинг: 0
Доброго времени суток. Столкнулся с такой задачей: нужно сделать обработку для выгрузки каталога номенклатуры в формат yml. Нахожу только платные решения, может быть у кого то есть пример или какой-то аналог, который помог бы новичку? Буду очень благодарен
А в чем собственно проблема? Если я не ошибаюсь, yml - тот же xml с незначительными изменениями. Пишите выгрузку обычного XML, по правилам yml и согласно нужного вам формата прайса.
[необходимо зарегистрироваться для просмотра ссылки]
ps. по сути пишеште самый обычный xml. но есть куча мелочей - важен порядок тегов - именно как в примере, их присутствие - они помоему там на 80% обязательны, отсутствие дублей товара.... и куча других мелочей... вобщем дерзайте - по ходу разберетесь!
Группа: Пользователи
Сообщений: 32
Спасибо сказали: 0 раз
Рейтинг: 0
salton @ Сегодня, 9:18
, Да у меня ошибка какая-то выдает из-за циклов, я уже по всякому пробовал, но ничего не получается..поэтому думаю, мб тут помогут
salton @ Сегодня, 9:18
, Может вы как-то на глаз найдете в чем проблема, а то я уже день не могу найти ошибку
// Проверим существование папки для записи изображений Если ЛокальнаяВыгрузка = Ложь Тогда Каталог = "C:\1C"; КонецЕсли; ПутьКИзображениям =Каталог + "\Picture\"; КоличествоВыгруженныхТоваров = 0; ПапкаКатолога = Новый Файл(Каталог); Если Не ПапкаКатолога.Существует() Тогда СоздатьКаталог(ПутьКИзображениям); КонецЕсли; ПапкаХранилища = Новый Файл(ПутьКИзображениям); // Очищаем каталог перд загрзузкой новых файлов Если Не ПапкаХранилища.Существует() Тогда СоздатьКаталог(ПутьКИзображениям); Иначе Попытка УдалитьФайлы(ПутьКИзображениям,"*.*"); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЕсли;
ЗаписьХМL = Новый ЗаписьXML;
ЗаписьХМL.ОткрытьФайл(Каталог + "\" + Организация + ".xml");
ЗаписьХМ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.ЗаписатьНачалоЭлемента("price"); Если ЗначениеЗаполнено(ВыборкаНоменклатура.Цена) Тогда ЗаписьХМL.ЗаписатьТекст(Строка(ВыборкаНоменклатура.Цена)); КонецЕсли; ЗаписьХМL.ЗаписатьКонецЭлемента();
КонецЦикла; ЗаписьХМL. ЗаписатьКонецЭлемента(); //Относится к "offer"
КонецЦикла;
ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к "offers" ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к элементу "shop" ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к элементу "yml_catalog" ЗаписьХМL.Закрыть(); Если ЛокальнаяВыгрузка = Ложь Тогда ОтправитьФайлНаСервер(КоличествоВыгруженныхТоваров); Иначе Сообщить("Выгрузка успешно завершилась. Выгружено " + КоличествоВыгруженныхТоваров + " товаров"); КонецЕсли;
На глаз - не скажу. Пишите конкретно какая ошибка...
Единственное, что могу сказать сразу - файл вы в итоге получите, но вот формат его не будет соответствовать требуемому... ИМХО.. Но давайте сначала определимся где у вас ошибка и что конкретно пишет!
// Проверим существование папки для записи изображений Если ЛокальнаяВыгрузка = Ложь Тогда Каталог = "C:\1C"; КонецЕсли; ПутьКИзображениям =Каталог + "\Picture\"; КоличествоВыгруженныхТоваров = 0; ПапкаКатолога = Новый Файл(Каталог); Если Не ПапкаКатолога.Существует() Тогда СоздатьКаталог(ПутьКИзображениям); КонецЕсли; ПапкаХранилища = Новый Файл(ПутьКИзображениям); // Очищаем каталог перд загрзузкой новых файлов Если Не ПапкаХранилища.Существует() Тогда СоздатьКаталог(ПутьКИзображениям); Иначе Попытка УдалитьФайлы(ПутьКИзображениям,"*.*"); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЕсли;
ЗаписьХМL = Новый ЗаписьXML;
ЗаписьХМL.ОткрытьФайл(Каталог + "\" + Организация + ".xml");
ЗаписьХМ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.ЗаписатьНачалоЭлемента("price"); Если ЗначениеЗаполнено(ВыборкаНоменклатура.Цена) Тогда ЗаписьХМL.ЗаписатьТекст(Строка(ВыборкаНоменклатура.Цена)); КонецЕсли; ЗаписьХМL.ЗаписатьКонецЭлемента();
ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к "offers" ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к элементу "shop" ЗаписьХМL.ЗаписатьКонецЭлемента(); //Относится к элементу "yml_catalog" ЗаписьХМL.Закрыть(); Если ЛокальнаяВыгрузка = Ложь Тогда ОтправитьФайлНаСервер(КоличествоВыгруженныхТоваров); Иначе Сообщить("Выгрузка успешно завершилась. Выгружено " + КоличествоВыгруженныхТоваров + " товаров"); КонецЕсли;
Murano @ Сегодня, 13:11
, Все пошло не так))) Где процедура формирующая выборку номенклатуры????
зы. Если ВЫборкуНоменклатуры заменить на ТекущуюДату() Организация заменить на "YML" + исправить мелкие ошибки в процедуре записи - то получиться вот такой файл:
Группа: Пользователи
Сообщений: 32
Спасибо сказали: 0 раз
Рейтинг: 0
salton @ Сегодня, 13:28
, приятного аппетита как таковой процедуры нету, выборка совершается в построителе отчета. Тупые вопросы и ошибки из-за нехватки опыта у меня, т.к. с 1С знаком всего 2мес. За это прошу простить меня
как таковой процедуры нету, выборка совершается в построителе отчета. Тупые вопросы и ошибки из-за нехватки опыта у меня, т.к. с 1С знаком всего 2мес. За это прошу простить меня
Не совсем понятно, что вы имеете ввиду, что выборка совершается в построителе отчета.... Но! Где-то в отчете есть код запроса который выбирает номенклатуру. Если нет - его нужно сделать (запрос или прямую выборку по справочнику).
ТекстЗапроса = "ВЫБРАТЬ | Номенклатура.Ссылка КАК Номенклатура |ПОМЕСТИТЬ ВТНоменклатура |{ВЫБРАТЬ | Номенклатура.* КАК Номенклатура} |ИЗ | Справочник.Номенклатура КАК Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТНоменклатура.Номенклатура.Код КАК Код, | ВТНоменклатура.Номенклатура.Наименование КАК Наименование, | ВТНоменклатура.Номенклатура.Артикул КАК Артикул, | ВТНоменклатура.Номенклатура.БазоваяЕдиницаИзмерения КАК ЕдиницаИзмерения, | ВТНоменклатура.Номенклатура.Комментарий КАК Комментарий, | ВТНоменклатура.Номенклатура.НаименованиеПолное КАК НаименованиеПолное, | ВТНоменклатура.Номенклатура.ДополнительноеОписаниеНоменклатуры КАК Описание, | ЦеныНоменклатурыСрезПоследних.Цена, | ВТНоменклатура.Номенклатура.Родитель КАК НоменклатураРодитель, | ВТНоменклатура.Номенклатура.ЭтоГруппа КАК ЭтоГруппа, | ТоварыНаСкладахОстатки.Склад, | ЦеныНоменклатурыСрезПоследних.ТипЦен, | ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток, | ВТНоменклатура.Номенклатура.ОсновноеИзображение.Хранилище КАК Хранилище, | ВТНоменклатура.Номенклатура.ОсновноеИзображение.Объект.Код КАК КодИзображения, | ВТНоменклатура.Номенклатура.Ссылка КАК НоменклатураСсылка |{ВЫБРАТЬ | НоменклатураСсылка.* КАК Номенклатура, | ТипЦен.* КАК ТипЦен, | Склад.* КАК Склад} |ИЗ | ВТНоменклатура КАК ВТНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, {(Номенклатура).* КАК Номенклатура, (Склад).* КАК Склад}) КАК ТоварыНаСкладахОстатки | ПО ВТНоменклатура.Номенклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(Номенклатура).* КАК Номенклатура, (ТипЦен).* КАК ТипЦен}) КАК ЦеныНоменклатурыСрезПоследних | ПО ВТНоменклатура.Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура |ГДЕ | ТоварыНаСкладахОстатки.Склад.ТипЦенРозничнойТорговли = ЦеныНоменклатурыСрезПоследних.ТипЦен |{ГДЕ | ВТНоменклатура.Номенклатура.Ссылка.* КАК Номенклатура, | ЦеныНоменклатурыСрезПоследних.ТипЦен.* КАК ТипЦен, | ТоварыНаСкладахОстатки.Склад.* КАК Склад} | |УПОРЯДОЧИТЬ ПО | НоменклатураСсылка |ИТОГИ ПО | НоменклатураРодитель |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВТНоменклатура";
ну почему же... правильно... но, задача не вывести отчет на экран... задача в другом
Цитата(Murano @ 25.09.17, 13:50)
Тупые вопросы и ошибки из-за нехватки опыта у меня, т.к. с 1С знаком всего 2мес.
возьмите за правило прежде чем что-то делать нужно сесть и расписать полностью весь план действий. Берешь задачу - в твоем случае - это выгрузка прайса в яндекс маркет. Разбиваешь задачу на части: 1. Написать процедуру или функцию для получения самого прайса. 2. Написать процедуру по созданию YML файла и записи/выгрузке его в указанное место 3. Написать процедуру/функцию по заполнению YML.
И начинай выполнять по очереди. Создал процедуру получения прайса - загони временно в ТЗ - посмотри в отладчике нужные данные получаешь или нет. Процедура по созданию YML у Вас уже есть. Вот в эту процедуру и передай данные из первой процедуры с прайсом (для этого сделайте ее функцией и возвращай ТЗ, Массив, или Структуру). В конце напишешь функцию по выгрузке файла куда надо - ОтправитьФайлНаСервер(файлYML) - скорее всего это будет по ФТП куда-то... И все это сделайте внешней обработкой!
Группа: Пользователи
Сообщений: 32
Спасибо сказали: 0 раз
Рейтинг: 0
salton @ Сегодня, 14:14
, 1. Она есть, но мне нужно в ней с запроса данные во вложенный запрос вставить только, да? 2. Тоже есть, и выгрузка есть 3. По сути, то в чем была изначально проблема.
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 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С форуме!