CommerceML2 своими руками из любой конфигурации (для сайта) версия 2.1



Не нашел в Интернет практически никаких исходников с сериализацией CommercML2 (вложенные рекурсивно типы объектов), чтобы выгружать товары на сайт. Вот поигрался с XDTO сам, не рубите сгоряча, надеюсь моя публикация кому-то облегчит жизнь. Если знаете как, подскажите как сделать лучше.. Из любой произвольной самопальной конфигурации 1С: Предприятия НЕ СЛОЖНО сделать выгрузку товаров на сайт, в котором уже есть импорт CommerceML2. Использовать методы XDTO проще, чем низкоуровневое программирование XML, жать только в документации и в интернете нет никаких примеров. В версии 2.1 выгружается коммерческое предложение (прайс-лист).

30.08.2012 Добавлен импорт коммерческого предложения (прайс листа с ценами, главный файл ksnikx21.epf). Байка из склепа (о жутком баге): как-то ночтью случайно допустил досадную опечатку в одном из тегов, а именно «Предложение» написал с латинской буквой «е». Двое суток сходил с ума, почему же мои цены напрочь игнорирует модуль обмена данными umi cms, и при этом утверждает, что все импортировалось успешно. Теперь все в порядке. Если есть непонятные глюки с загрузкой xml (например не загружается коммерческое предложение offers commerceml2), подвергните синтаксическому анализу свои теги. п.с. После выгрузки не забывайте чистьть конец файла, удалять весь мусор, который остается после закрытия тега «Коммерческая информация».

13.08.2012 Новая версия с расширенными возможностями добавлена отдельным файлом ksnikx2.epf , в этой обработке кроме справочника Номенклатура в формировании наименования товара используется справочник бухгалтерских групп (категорий) номенклатуры. Сейчас работа идет над загрузкой с яндекс.маркета. Кто хочет помогайте недовольным юзерам осваивать обработку, но и про автора не забывайте 😉 В файле import.xml — пример номенклатуры, в файле offers.xml — пример заказов из комплекта umi.cms

29.06.2012 Кроме этого демонстрационного примера в версию 2 архива добавлена процедура, которая по справочнику Номенклатура создает классификатор и каталог (полный или с отбором на основании заполнения табличной части обработки).

В системе управления вебсайтом UNI.CMS (да и в Битриксе) есть отступление от схемы cml, заставляют очень подробно заполнять владельца классификатора. Результат импорта в UNI.CMS:
====================================
тип "Объект каталога" (root-catalog-object-type) был обновлен
тип "Раздел каталога" (root-catalog-category-type) был обновлен
тип "1C: - ИРИДА" (676a1a6d-d635-4d0c-84c6-363658f94a33) был обновлен
тип "1C: Шокорель" (63389a41-64cf-4a88-bc43-193917af7b61) был обновлен
страница "Каталог товаров 7 дней" (6933ae38-7e4a-4e7b-8fa2-d7a732101ee1) была обновлена
страница "- ИРИДА" (676a1a6d-d635-4d0c-84c6-363658f94a33) была обновлена
страница "Шокорель" (63389a41-64cf-4a88-bc43-193917af7b61) была обновлена
страница "- ИРИДА/Шокорель/Регенерирующий бальзам для ухода за кожей в/глаз" (871fcad4-cbdc-4b5d-b8b7-c5508d013a50) была обновлена
====================================
Только обратите внимание - файл cml.xsd нужно загрузить в ветку "Пакеты XDTO" дерева конфигурации. Чтобы все товары записались на сайт мне пришлось после сохранения файла в моей обработке руками очищать из него атрибуты тегов "Группа" и "Товар" (они одинаковые, удаляются заменой на пустую строку) вот это:

xmlns="cml" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
====================================
Вот как создается CommerceML2:
====================================
// Методы работы с XDTO практически не документированы.
// Эта обработка формирует маленький CommerceML2 (прилагается файл XDTOSample9.xml)
// при помощи удобных методов XDTO в отличии от прошлой ЗаписатьТэгиВXMLДокумент(),
// и вспомогательной ПолучитьСтрокуЗаписиДляXML которые рекурсивно обходят жуткое дерево.
// Задачу формирования CommerceML2 удобнее решать встроенными средствами XDTO.
// Работа с вложенными группами немного напоминает паскалевский Турбо Вижен (Turbo Vision).
Процедура КнопкаВыполнитьНажатие(Кнопка)

//Берем за основу произвольную схему XML без ограничений, накладываемых на названия пакетов,
//присущих пакету cml из дерева конфигурации, чтоб 1Ска не ругалась на несоответствие типов
//при использовании конструкторов типов фабрики. Отплевался от конфигурашного комерцемеля.
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл("D:Tempcml.xsd");
ПостроительДом = Новый ПостроительDOM;
ДокументДом = ПостроительДом.Прочитать(Чтение);
ПостроительСхемы = Новый ПостроительСхемXML;
СхемаХМЛ = ПостроительСхемы.СоздатьСхемуXML(ДокументДом);
НаборСхемХМЛ = Новый НаборСхемXML;
НаборСхемХМЛ.Добавить(СхемаХМЛ);
Фабрика = Новый ФабрикаXDTO(НаборСхемХМЛ); //создали

//Без сериализации XDMO не получится сделать рекурсию при добавлении
//в классификатор вложенных групп и ссылку на группы в товарах каталога
//но сериализация без проблем сочетается с элементарной записью XML
Сериализатор = Новый СериализаторXDTO(Фабрика);
Запись = Новый ЗаписьXML;
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь);
Запись.ОткрытьФайл("D:TempXDTOSample25.xml", ПараметрыЗаписиXML);
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("КоммерческаяИнформация");
Запись.ЗаписатьАтрибут("ВерсияСхемы"        , "2.04");
Запись.ЗаписатьАтрибут("ДатаФормирования", ФорматДатыДляXML(ТекущаяДата(), Истина, Истина));
Запись.ЗаписатьНачалоЭлемента("Классификатор");
ИдКлассификатора = Новый УникальныйИдентификатор;
ЗаписатьТекстовыйУзел(Запись, ОписаниеОшибокXML, "Ид", ФорматНаименованияДляXML(ИдКлассификатора)); //УниканьныйИдентификатор
ЗаписатьТекстовыйУзел(Запись, ОписаниеОшибокXML, "Наименование", ФорматНаименованияДляXML("Классификатор товаров 7 дней"));
// Оказалась обязательной расшифровка для поля Владелец в классификаторе и в каталоге
//ЗаписатьТекстовыйУзел(Запись, ОписаниеОшибокXML, "Владелец", ФорматНаименованияДляXML("*******"));

Запись.ЗаписатьНачалоЭлемента("Владелец");
ЗаписатьТекстовыйУзел(Запись, ОписаниеОшибокXML, "Ид", ФорматНаименованияДляXML("3b9d2388-fdee-11e0-a341-0022153a8c09")); //УниканьныйИдентификатор
ЗаписатьТекстовыйУзел(Запись, ОписаниеОшибокXML, "Наименование", ФорматНаименованияДляXML("**********"));
ЗаписатьТекстовыйУзел(Запись, ОписаниеОшибокXML, "ОфициальноеНаименование", ФорматНаименованияДляXML("******************************************")); //УниканьныйИдентификатор
ЗаписатьТекстовыйУзел(Запись, ОписаниеОшибокXML, "ИНН", ФорматНаименованияДляXML("36********11"));
Запись.ЗаписатьКонецЭлемента();//Владелец


//ЗаписатьТекстовыйУзел(Запись, ОписаниеОшибокXML, "Описание", ФорматНаименованияДляXML("Классификатор товаров в формате CommerceML2 для сайта  *************"));
Запись.ЗаписатьНачалоЭлемента("Группы");
// Начинаем обрабатывать корневую группу, но помним, что в CommerceML положено
// при записи корневой группы иерархического справочника делать рекурсию
ТекЭлемент = Справочники.Номенклатура.НайтиПоКоду("ЦБ042097");
ГруппаНоменклатурыТип = Фабрика.Тип("cml", "Группа");
ГруппаНоменклатуры = Фабрика.Создать(ГруппаНоменклатурыТип);
ЗаполнитьЗначенияСвойств(ГруппаНоменклатуры, ТекЭлемент);
ГруппаНоменклатуры.Ид = СокрЛП(ТекЭлемент.УникальныйИдентификатор());
ГруппаНоменклатуры.Наименование = ТекЭлемент.Наименование;
//Из-за того, что писал описания, каталог на сайт не загружался, закомментировал их.
//ГруппаНоменклатуры.Описание = ТекЭлемент.ПолноеНаименование();

//Вот так при желании вставляется СписокXDTO внутрь ОбъектXDTO, но в CommerceML
//запись свойства по-другому написана, а так мы поступим с группами в товарах каталога
//Создаем ОбъектXDTO, внутри которого пустой список типа СписокXDTO
//Свойства = Фабрика.Создать(ГруппаНоменклатуры.Свойства()[3].Тип);
//Внутри контейнера вставляем одно пустое свойство
//Свойство = Фабрика.Создать(Свойства.Свойство.ВладеющееСвойство.Тип, Неопределено);
//Свойства.Свойство.Добавить(Свойство);
//ГруппаНоменклатуры.Свойства = Свойства;

//И немного каши из топора, работать с таким объектом можно, а интегрировать его не удается
//По номеру извлекаем (списочный СписокXDTO "Элементы.Свойство") тип, соответствующий фрагменту ОбъектXDTO "{cml}Группа".Свойства
//Свойства = Фабрика.Создать(фабрика.Пакеты[1][48]); // Правильнее искать тип данных по имени а не по номеру, потому что при добавлении
//Элементы = Фабрика.Создать("{cml}СписокСвойств"); // новых типов данных в пакет XDTO индексы сбиваются и в коде приходится менять
//цыфОрки (именно данный номер типа данных), но так не получается потому что {Обработка.Демо.Форма.Форма1(229)}: Ошибка при вызове
//метода контекста (Создать) Элементы = Фабрика.Создать("{cml}СписокСвойств"); по причине: Несоответствие типов (параметр номер '2')
//Сообщить("СписокXDTO "+СокрЛП(Свойства.Свойство.Количество())+" шт. "); // в данном случае = 1 шт.
//{Обработка.Демо.Форма.Форма1(245)}: Ошибка при установке значения атрибута контекста (Свойства)
//    ГруппаНоменклатуры.Свойства = Свойства;
//по причине:
//Несоответствие типов XDTO:
//Тип '{cml}СписокСвойств' не соответствует типу ''
//Тип свойства не соответствует типу значения
// '' само собой в номенклатуре, а '{cml}СписокСвойств' справа

//А вот это именно тот результат, который совпадает с выгрузкой Битрикса
ГруппаНоменклатуры.Сбросить("Свойства");
//Если у вложенной группы есть родитель, тогда делаем начало вложенной группы
ТекЭлемент = Справочники.Номенклатура.НайтиПоКоду("ЦБ053031");
Если ЗначениеЗаполнено(ТекЭлемент.Родитель) Тогда
//Создаем ОбъектXDTO, внутри которого пустой список типа СписокXDTO
Группы = Фабрика.Создать(ГруппаНоменклатуры.Свойства()[4].Тип);
//Подготавливаем вложенную группу для вставки в список
ГруппаНоменклатурыТип2 = Фабрика.Тип("cml", "Группа");
ГруппаНоменклатуры2 = Фабрика.Создать(ГруппаНоменклатурыТип2);
ЗаполнитьЗначенияСвойств(ГруппаНоменклатуры2, ТекЭлемент);
ГруппаНоменклатуры2.Ид = СокрЛП(ТекЭлемент.УникальныйИдентификатор());
ГруппаНоменклатуры2.Наименование = ТекЭлемент.Наименование;
//ГруппаНоменклатуры2.Описание = ТекЭлемент.ПолноеНаименование();
//Подготавливаем контейнер для укладки вложенной группы в список
//Группа = Фабрика.Создать(Группы.Группа.ВладеющееСвойство.Тип, ГруппаНоменклатуры2);
//Внутри контейнера вставляем нужную группу
Группы.Группа.Добавить(ГруппаНоменклатуры2);
ГруппаНоменклатуры.Группы = Группы;
Иначе
Запись.ЗаписатьНачалоЭлемента("Группы");
Запись.ЗаписатьКонецЭлемента(); // Группы
КонецЕсли;

Сериализатор.Фабрика.ЗаписатьXML(Запись, ГруппаНоменклатуры);

//Элементы = Фабрика.Создать(фабрика.Пакеты[1][47]);
//Группа = Фабрика.Создать(Группы.Группа.ВладеющееСвойство.Тип, СокрЛП(ТекЭлемент.Родитель.УникальныйИдентификатор()));
//Группы.Группа.Добавить(Группа);
//ГруппаНоменклатуры2.Группы = Группы; //Несоответствие свойства и элемента данных XDTO
//ГруппаНоменклатуры2.Описание = ТекЭлемент.ПолноеНаименование();
//Сериализатор.Фабрика.ЗаписатьXML(Запись, ГруппаНоменклатуры2);

Запись.ЗаписатьКонецЭлемента(); // Группы
Запись.ЗаписатьКонецЭлемента(); // Классификатор

Запись.ЗаписатьНачалоЭлемента("Каталог");
ЗаписатьАтрибут(Запись, ОписаниеОшибокXML, "СодержитТолькоИзменения", "false");
ЗаписатьТекстовыйУзел(Запись, ОписаниеОшибокXML, "Ид", ФорматНаименованияДляXML(Новый УникальныйИдентификатор)); //УниканьныйИдентификатор
ЗаписатьТекстовыйУзел(Запись, ОписаниеОшибокXML, "ИдКлассификатора", ФорматНаименованияДляXML(ИдКлассификатора)); //УниканьныйИдентификатор
ЗаписатьТекстовыйУзел(Запись, ОписаниеОшибокXML, "Наименование", ФорматНаименованияДляXML("Каталог товаров 7 дней"));
//ЗаписатьТекстовыйУзел(Запись, ОписаниеОшибокXML, "Владелец", ФорматНаименованияДляXML("7 дней"));
Запись.ЗаписатьНачалоЭлемента("Владелец");
ЗаписатьТекстовыйУзел(Запись, ОписаниеОшибокXML, "Ид", ФорматНаименованияДляXML("3b9d2388-fdee-11e0-a341-0022153a8c09")); //УниканьныйИдентификатор
ЗаписатьТекстовыйУзел(Запись, ОписаниеОшибокXML, "Наименование", ФорматНаименованияДляXML("И**********."));
ЗаписатьТекстовыйУзел(Запись, ОписаниеОшибокXML, "ОфициальноеНаименование", ФорматНаименованияДляXML("3*****************************************************4")); //УниканьныйИдентификатор
ЗаписатьТекстовыйУзел(Запись, ОписаниеОшибокXML, "ИНН", ФорматНаименованияДляXML("3*************1"));
Запись.ЗаписатьКонецЭлемента();//Владелец
Запись.ЗаписатьНачалоЭлемента("Товары");

// Записываю товар
ТекЭлемент = Справочники.Номенклатура.НайтиПоКоду("ЦБ053035");
//В группу и в товар 1Ска пихает вот такие атрибуты:

//xmlns="cml" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
структурныйТип = Фабрика.Тип("cml", "Товар");
НоменклатураXDTO = Фабрика.Создать(структурныйТип);
ЗаполнитьЗначенияСвойств(НоменклатураXDTO, ТекЭлемент);
НоменклатураXDTO.Ид = СокрЛП(ТекЭлемент.УникальныйИдентификатор());
НоменклатураXDTO.ПолноеНаименование = ТекЭлемент.ПолноеНаименование();
Группы = Фабрика.Создать(НоменклатураXDTO.Свойства()[8].Тип);
//Элементы = Фабрика.Создать(фабрика.Пакеты[1][47]);
Ид = Фабрика.Создать(Группы.Ид.ВладеющееСвойство.Тип, СокрЛП(ТекЭлемент.Родитель.УникальныйИдентификатор()));
Группы.Ид.Добавить(Ид);
НоменклатураXDTO.Группы = Группы; //Несоответствие свойства и элемента данных XDTO лечится строкой Группы = Фабрика.Создать(НоменклатураXDTO.Свойства()[8].Тип)
Сериализатор.Фабрика.ЗаписатьXML(Запись, НоменклатураXDTO);

// Записываю товар
ТекЭлемент = Справочники.Номенклатура.НайтиПоКоду("ЦБ053033");
//xmlns="cml" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
структурныйТип = Фабрика.Тип("cml", "Товар");
НоменклатураXDTO = Фабрика.Создать(структурныйТип);
ЗаполнитьЗначенияСвойств(НоменклатураXDTO, ТекЭлемент);
НоменклатураXDTO.Ид = СокрЛП(ТекЭлемент.УникальныйИдентификатор());
НоменклатураXDTO.ПолноеНаименование = ТекЭлемент.ПолноеНаименование();
Группы = Фабрика.Создать(НоменклатураXDTO.Свойства()[8].Тип);
//Элементы = Фабрика.Создать(фабрика.Пакеты[1][47]);
Ид = Фабрика.Создать(Группы.Ид.ВладеющееСвойство.Тип, СокрЛП(ТекЭлемент.Родитель.УникальныйИдентификатор()));
Группы.Ид.Добавить(Ид);
НоменклатураXDTO.Группы = Группы; //Несоответствие свойства и элемента данных XDTO лечится строкой Группы = Фабрика.Создать(НоменклатураXDTO.Свойства()[8].Тип)
Сериализатор.Фабрика.ЗаписатьXML(Запись, НоменклатураXDTO);

Запись.ЗаписатьКонецЭлемента(); // Товары
//ЗаписатьТекстовыйУзел(Запись, ОписаниеОшибокXML, "Описание", ФорматНаименованияДляXML("Товар каталога (2 уровня группировки товаров)"));

Запись.ЗаписатьКонецЭлемента(); // Каталог
Запись.ЗаписатьКонецЭлемента(); // Коммерческая информация

Запись.Закрыть();
КонецПроцедуры

 

57 Comments

  1. DimaP

    Товары для мужчин -> Жёлтая принцесса 😀

    Reply
  2. ksnik
    Reply
  3. ksnik

    Забыл сказать — в своей разработке CommerceML2 своими руками из любой конфигурации (для сайта) версия 2. я использовал фрагменты общего модуля из типовой конфигурации «Управление торговлей»:

    Функция ФорматДатыДляXML

    Функция ФорматНаименованияДляXML

    Процедура ЗаписатьТекстовыйУзел

    ПолучитьСтрокуЗаписиДляXML

    Функция ПодставитьПараметрыВСтроку

    Процедура ДобавитьОписаниеОшибки

    Процедура ЗаписатьАтрибут

    Reply
  4. ksnik

    (4) artbear, это выгрузка для сайта и обусловлена она требованиями компаний, специализирующихся на веб-дизайне. Чтение данных CommerceML в произвольной конфигурации подскажите, зачем Вам понадобилось, в чем заключается специфика задачи, почему для этой цели не пригодились более изъезженные способы, как xml, xls, txt, …?

    Reply
  5. ksnik

    (4) artbear, если в произвольной конфигурации (например в обменной для сайта) создать объекты, которые будут называться идентично объектам схемы CommerceML, тогда программирование взаимодействия благодаря функции XDTO «заполнить…» во много раз упростится.

    Reply
  6. ksnik

    (7) artbear, советую создать конфигурацию для обмена, а в ней у объектов поля идентичные схеме CommerceML. Тогда можно будет автоматически перезаполнить (методом ЗаполнитьЗначенияСвойств(ГруппаНоменклатуры, ТекЭлемент))

    Я это делать сейчас не буду, но актуально, если и придется — то сперва так. А из 1С в 1С уже легкими методами. Пока решаю задачу загрузки правильных наименований товара с сайта http://gs46.gs1ru.org/GEPIR31/process?p=gtin&lng=ru&gtin=4607175850315&mode=party&protolog=on через гребанный soap. Давайте работать вместе.

    Reply
  7. Созинов

    Спасибо за статью, как раз во время попалась на глаза, поскольку необходимо решать подобную задачу.

    В статье только код бы оформить, а так +. Спасибо.

    Reply
  8. ksnik

    (9) EfiopReal, это тема не закрытая, доделывайте, делитесь, а я ошибок пока на ооочень больших выборках данных не выявил, это тоже важное обстоятельство.

    Reply
  9. forever-lilya

    Здраствуйте. Кто-нибудь уже пользовался обработкой?

    Reply
  10. forever-lilya

    Автор, можно мануал для пользователя-не программиста по использованию вашей обработки. Вот ошибочка выскочила, ка крешить?

    Запускаю обработку, выбираю в поле ссылку либо на элемент, либо на группу номенклатуры.

    {Форма.Форма2.Форма(2222)}: Ошибка при вызове метода контекста (Создать)

    КорневаяГруппа = Фабрика.Создать(НоменклатураГруппаТип);

    по причине:

    Несоответствие типов (параметр номер ‘1’)

    Reply
  11. ksnik

    (12) forever-lilya, у нас платформа 8.2, но конфа еще от 8.0

    У Вас какие версии платформы и конфигурации?

    Вы не забыли загрузить в конфигурацию прилагающийся xdto пакет из архива разработки cml?

    Можете вырезать мне и прислать свой справочник номенклатуры (то есть для этой обработки требуется в конфе справочник «Номенклатура» и мой xdto пакет «cml»), я посмотрю почему у Вас не работает?

    Reply
  12. forever-lilya

    1С:Предприятие 8.2 (8.2.15.318)

    При загрузке xdto пакета вылетает ошибка

    http://s2.hostingkartinok.com/uploads/images/2012/08/7f398120191da6f7a89507e158840865.png

    Reply
  13. forever-lilya

    помогите, пожалуйста решить проблему

    Reply
  14. ksnik

    (15) forever-lilya, только что выгрузил пакет еще раз для Вас, попробуйте вот этот http://zalil.ru/33659346

    Reply
  15. ksnik

    (15) forever-lilya, Да, я забыл, если не загрузится — откройте его текстовым редактором (например akelpad) — в конце файла мусор 1Совский удалите.

    Reply
  16. AlexO

    (8)

    (4) artbear,

    а чтение каким образом выполнять?

    мне вот тоже интересно 🙂

    советую создать конфигурацию для обмена, а в ней у объектов поля идентичные схеме CommerceML. Тогда можно будет автоматически перезаполнить (методом ЗаполнитьЗначенияСвойств(ГруппаНоменклатуры, ТекЭлемент))

    это как так — еще дополнительную конфу делать? А потом перегружать туда-сюда?

    И оформите код в статье — а то читать сложно.

    Reply
  17. ksnik

    (18) AlexO, зщадача выполнять чтение интересная, но пока второстепенная.

    Гораздо более важно актуализировать наименования товаров через глобальные базы артикулов и штрихкодов, работа существенно ускорится, если у Вас есть предложения в этом направлении?

    > дополнительную конфу делать? А потом перегружать туда-сюда?

    Вероятно так и буду делать, если Вы не подскажете другие примеры.

    Если эта тема Вам интересна, может погуглите и у знакомых поспрашиваете и сюда напишете?

    Reply
  18. forever-lilya

    Спасибо!

    Reply
  19. AlexO

    (19)

    актуализировать наименования товаров через глобальные базы артикулов и штрихкодов

    кто ж вас знает, что у вас там за глобальные базы… выгружайте в txt из них, и сравнивайте 🙂

    подскажете другие примеры

    напишите парсер выгрузки в CML, а потом загрузки в 1С.

    В этом и проблема, что нужны инструменты под определенный формат, и создавать их только вручную можно.

    Reply
  20. ksnik

    > кто ж вас знает, что у вас там за глобальные базы…

    Как раз загвоздка в том, что база gepir хоть и очень качествеенная, но в ней очень мало товаров.

    Иногда яндекс.маркет дает лучшие результаты.

    О том и вопрос, где брать наименования товаров (желательно от поставщиков), чтоб не было слишком трудоемко??

    А Вы что еще видели или делали в этом направлении?

    Reply
  21. forever-lilya

    Здраствуйте! Помогите, пожалуйста. В вашей обработке я выбираю одну группу номенклатуры, а в итоге в файл XDTOSample24.xml записываются все группы и подгруппы, даже те, которых не выбирала. Не могу разобраться…

    Reply
  22. forever-lilya

    Кто-нибудь пользовался обработкой? У кого работает правильно? У кого правильно выгружаются группы в иерархие?

    Reply
  23. Yashazz

    Люди добрые, а знает кто-нибудь, где взять правильный формат xml-файлов обмена для Битрикс? Надоело в угадайку играть. То иерархию не читает, то ещё что. Есть ли описание или xsd-схема для классического обмена с Битрикс?

    Плизз!

    пы.сы. очень неохота гонять выгрузку из УТ и смотреть, как да что она сделала…

    Reply
  24. forever-lilya

    Не правильно выстраивается иерархия номенклатуры, проблемка, как решить?

    Reply
  25. ksnik
    Reply
  26. ksnik
    Reply
  27. ksnik

    Ну и прилагаю к обработке еще один файл — новую версию. Сейчас Юрий Пермитин дал мне свой парсер яндекс.маркета и работа кипит, скоро будет готовый варант упорядочивания наименований номенклатуры и вариант загрузки картинок! Присоединяйтесь пожалуйста к обмену опытом! Самое нужное сейчас на данном этапе работы — доступ в gepir, если есть идеи или сведения пожалуйста поделитесь!!! Ребята из gepir-а не отвечают на е-мейл.

    Reply
  28. ksnik

    (25) Yashazz, Битрикса полно в интернете, он кстати немного не стандартный, впрочем как и в umi-cms тоже с точностью соответствия cml2 не загонялись, но я к сожалению далек об Битрикса, хотя могу скинуть красивые примеры cml2 из комплекта поставки umi (они приведены во вложении в эту обработку).

    Reply
  29. ksnik

    (23) forever-lilya, отвечаю на

    >в итоге в файл XDTOSample24.xml записываются все группы и подгруппы, даже те, которых не выбирала. Не могу разобраться…

    cml2 пакет, который формируется такими обработками, состоит из 2х частей — (1) классификатор (типы данных) и (2) каталог товаров (экземпляры типа). Классификатор (состоящий из групп номенклатуры) это заготовки шаблонов данных для разных товарных категорий интернет-магазина или сайта-витрины. Он невидимый визуально, это как классы объектов в объектной модели. Полностью грузится чтобы проверить работу механизма обмена данными. Если мешают на сайте лишние типы данных и хотите обрезать классификатор, это тоже возможно, скачайте консоль запросов, скопируйте в нее самый первый текст запроса (не забудьте заполнить параметры запроса) и добавьте такое условие, какое хотите. Например как во втором запросе, если хотите не список значений а одну группу, можно настроить условие не «в списке» а просто «в иерархии». Пробуйте, это пригодится! Или шлите мне справочник. А здесь, на форуме, развивать эту тему не нужно — такие детальные подробности мало кого заинтересуют.

    Reply
  30. Yashazz

    (30) К сожалению, нифига в интернетах по Битриксу нет. Есть куча руководств для типовых 1С, а вот нормального описания формата, т.е. порядка, состава и смысла тегов в xml-файле (не говоря уж о полноценной схеме) — нету. Не знаю, где и искать… Спасибо на добром слове.

    Reply
  31. ksnik

    (32) Yashazz, А в группе http://infostart.ru/community/groups/622/ разве нету? тогда создайте тему поиска, будем искать вместе! Не могу полностью согласиться с Вашим не достаточно задорным настроением, считаю что формат красивый и прозрачный, я бы зарегистрирровался на тематических форумах по битриксу и попросил у их пользователей файлы примеров.

    Reply
  32. forever-lilya

    Спасибо огромное!!!!!!!!!!!

    Reply
  33. AlexO

    (22)

    А Вы что еще видели или делали в этом направлении?

    я немного с другой стороны в этом вопросе — со стороны обменом между конфигурациями в том числе и по форматам XML.

    Т.е. у меня нет схем XML (CML и прочих) именно от какой-то конкретной реализации.

    (33)

    я бы зарегистрирровался на тематических форумах по битриксу и попросил у их пользователей файлы примеров

    как я помню — там все жадные (деньги же платили!), да и формат выгрузки периодически меняется…

    Но по Битрикс я тоже не встречал никакой доументации по обмену, тем более — на уровне форматов.

    Reply
  34. ksnik

    (35) AlexO, кажется если открыть файл выгрузки из 1С в Битрикс в формате cml2 через текстовый редактор (например acelpad) все сразу становится понятно, или нет? Yt gjvy.? Не помню, пробовал ли я тогда гуглить по названиям узлов, но вот сейчас понравилась статейка про DOM http://www.structuralist.narod.ru/it/internet/dom.htm

    Навигационные атрибуты объекта Node

    Атрибут Описание

    firstChild Возвращает первый узел-потомок

    lastChild Возвращает последний узел-потомок

    previousSibling Возвращает предыдущий соседний узел, имеющий с текущим одного родителя

    nextSibling Возвращает следующий соседний узел, имеющий с текущим одного родителя

    parentNode Возвращает родительский узел

    ownerDocument Возвращает корневой узел документа, содержащий текущей узел

    nodeName Возвращает имя узла

    nodeValue Возвращает значение узла в текстовом формате

    nodeType Возвращает тип узла в виде числа

    Reply
  35. AlexO

    (36)

    кажется если открыть файл выгрузки из 1С в Битрикс в формате cml2

    т.е. по оброненной булавке вы, как А.Кристи, делаете, вывод, что это булавка соседки-швеи, и именно она — убийца? 😀

    Может, это типичный файл, а может — зависит от условий выгрузки. Спорить не буду, не знаю 🙂

    Но вот, например, если вы будете судить о форматах выгрузки в другие Банки — по выгрузке из 1С в какой-нибудь СберБанк (как самую распространенно-встречающуюся), то ждет вас разочарование и уныние.

    Хотя там вообще — сплошной текст без намека на XML 🙂

    Reply
  36. Yashazz

    (35) (37) Именно такая фигня. Никто ничего не знает или делает вид. А изучать файл — можно, конечно, но совершенно верно замечено, файл может здорово зависеть от условий выгрузки, тут целое исследование затевать надо.

    Reply
  37. ksnik

    В версии 2 потеряна некоторая доля универсальности. Это связано с тем, что запрос по номенклатуре, соединенный с номенклатурными группами бухгалтерии (который появился в версии 2) может оказаться не совместимым с произвольной конфигурацией. То есть если у Вас с помощью моей обработки не получается формирование классификатора (версии 2), тогда можно скачать версию 1 (она не удалена а прикреплена во вложенных файлах) и посмотреть текст запроса по номенклатуре в ней. Размет текста запроса очень большой, сюда вставить увы нереально.

    Reply
  38. zhenyat

    (38) Yashazz, 1с:Предприятие 8 — Стандарты и форматы — достаточно подробное описание, я основываясь на этих статьях и на примерах файлов из них, с нуля написала свою обработку для обмена заказной конфигурации на 1с v7.7 с магазином на битриксе

    Reply
  39. ksnik

    (38) Yashazz, еще вторая редакция схемы http://v8.1c.ru/edi/edi_stnd/90/92.htm

    Reply
  40. savvato

    выгружает ли обработка каталог и предложения с учетом характеристик номенклатуры? Посмотрел код не увидел.Просьба не пинать…

    Reply
  41. ksnik

    (42) savvato, выгружается только штрихкод товара (в коммерческом предложении). Характеристика должна быть создана в пакете XDTO (найдите в нем «Товар») Характеристики как правило выгружаются в каталоге, примерно после этих строчек (по аналогии с данным фрагментом, ПолноеНаименование — характеристика):

    Номенклатура = Фабрика.Создать(НоменклатураТип);

    //ЗаполнитьЗначенияСвойств(Номенклатура, ТекСтр.Ссылка);

    Номенклатура.Ид = СокрЛП(ТекСтр.Ссылка.УникальныйИдентификатор());

    Если СтрДлина(СокрЛП(ТекСтр.НаименованиеПолное)) < 10 Тогда

    Номенклатура.ПолноеНаименование = ТекСтр.СовсемПолное;

    Иначе

    Номенклатура.ПолноеНаименование = ТекСтр.НаименованиеПолное;

    КонецЕсли;

    Reply
  42. savvato

    а в ofers.xml в таком случае попадут остатки? С учетом характеристик номенклатуры? У меня в каталоге к примеру есть товар:рубашка. И ведеться учет по характеристикам :размер и цвет. Естественно разные остатки в зависимости от характеристик. Заранее спасибо за ответ, от меня Вам огромный жирный +. Тема очень актуальна для меня. Не очень сильно дружу с программированием в 1С, поэтому прошу ткнуть носом, как говориться…

    Reply
  43. ksnik

    (44) savvato, в import.xml — основная информация (то есть то, что занимает большой объем и относительно редко меняется) через классификатор групп номенклатуры (в umi.cms это типы данных) и каталог (непосредственно товары с прицепленными идентификаторами групп и свойствами), в offers.xml — то, что грузить нужно чаще, например цены и остатки. В Вашем случае характеристики размер и цвет я бы добавил в реквизиты классификатора (в umi.cms эти поля автоматически добавятся на сайт), а значения заполнения этих реквизитов присвоить можно в каталоге по аналогии с «полным наименованием», как я уже привел пример в прошлом фрагменте. Я пока сам пока еще не занимался учетом в разрезе характеристик, думаю что это зависит от интернет магазина. Мне кажется, в простейшем случае чтобы остатки учитывались точно, нужно делать копии отдельного товара на каждое значение зхарактеристики, а свойства — только для информации (для показа на сайте и не более).

    Извините что не достаточно универсальный ответ, в основном пишу о том, как работало у меня.

    Reply
  44. savvato
    {Форма.Форма2.Форма(2222)}: Ошибка при вызове метода контекста (Создать)

    КорневаяГруппа = Фабрика.Создать(НоменклатураГруппаТип);

    по причине:

    Несоответствие типов (параметр номер ‘1’)

    вылетела такая же ошибка как и тут, только

    Форма.Форма2.Форма(324)}

    1С:Предприятие 8.2 (8.2.15.318) Конфигурация «Розница»

    cml пакет добавил в конфу

    Reply
  45. ksnik

    (46) savvato, чего-то ничего в голову не приходит, вот скриншот. Помогло?

    Reply
  46. savvato
    {Форма.Форма2.Форма(2727)}: Ошибка при вызове метода контекста (Выполнить)
    РезТаб = Запрос.Выполнить().Выгрузить();
    по причине:
    {(16, 17)}: Поле не найдено «Номенклатура.ГруппаДляБухгалтерии»
    Номенклатура.<<?>>ГруппаДляБухгалтерии КАК ГруппаДляБухгалтерии
    

    помогло, сенкс, но вылезла след. ошибка, привел выше. Просьба не пинать, оч. заинтересоан в Вашей обработке.

    Reply
  47. ksnik

    (48) savvato, об этом уже написано выше, если у Вас нет справочника номенклатурных групп, тогда Вам не удастся использовать их для вывода на сайт. Пользуйтесь запросом из первой версии обработки и внимательнее читайте комментарии к публикации.

    Reply
  48. savvato

    Справочник номенклатурных групп есть .

    Привел переменные в соответствие со своей конфой:

    ГруппаДляБухгалтерии -> НоменклатурнаяГруппа

    ОстаткиТоваровКомпании -> ТоварыНаСкладах

    Теперь вывалилась ошибка в запросе

    {Форма.Форма2(2726)}: Ошибка при вызове метода контекста (Выполнить): {(4, 48)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
    неограниченной длины и поля несовместимых типов.
    КОГДА Номенклатура.Ссылка.НаименованиеПолное <<?>>= NULL
    РезТаб = Запрос.Выполнить().Выгрузить();
    по причине:
    {(4, 48)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
    неограниченной длины и поля несовместимых типов.
    КОГДА Номенклатура.Ссылка.НаименованиеПолное <<?>>= NULL
    

    Показать

    Куда ковырнуть?

    Reply
  49. ksnik

    (50) savvato, а консоль запросов не пробовали запускать?

    Reply
  50. savvato

    Запускаю конструктор запросов

    получаю вылет, или конструктор это не консоль?

    Reply
  51. ksnik

    (51) savvato, текст запроса не соответствует Вашему дереву конфигурации. Попробуйте подогнать не текст запроса а создайте копию базы и попробуйте подогнать дерево конфигурации, может разберетесь. А еще лучше потренироваться на кошках, на чем-нить меньшего размера, чем мое двухкилометровое чудо. Строковой реквизит полное наименование хоть есть?

    Reply
  52. ksnik

    А еще можно погуглить, скопируйте текст ошибки в поиск и увидите что можно попробовать сделать.

    Reply
  53. savvato

    Строковый реквизит НименованиеПолное есть. С конфой играться нет возможности, так как в ней уже ведеться учет. Может еще какие нибудь мысли есть?

    Reply
  54. ksnik

    (55) savvato, попробуйте сравнивать допустимые типы, попробуйте функцию ЕстьNull или уберите null, разберитесь почему там написано такое условие. Или возьмите запрос из первой версии обработки и не парьтесь. Адаптация к конфигурации второй версии требует минимум профессиональных знаний, а Ваши вопросы показывают, что у Вас их нет и желания разобраться тоже нет. Сообщение об ошибке натыкать не потрудились? Консоль запросов открыть и фрагмент запроса в ней запустить не потрудились? Я не могу сейчас заниматься с розницей. Писать в эту тему такие вопросы пожалуйста больше не нужно, задавайте их лучше в форумах по программированию, ато я буду ставить за них минусы.

    Reply
  55. Yashazz

    Коллеги, подытожу: не связывайтесь с битриксоидами-самопальщиками. В моём случае всё кончилось большими удивлёнными глазами, когда я сообщил, что вообще-то ни в одном стандарте ОЭИ, в т.ч. CML, нет таких тегов, как BolshayaKartinka, и что телепатически угадать наличие подобных тегов в своей выгрузке я не сумел не потому, что полный ламер. И ещё позабавил постоянный рефрен «Ну типовая 1С ведь всё выгружает!». Ужосъ.

    Reply
  56. margo2007

    1. Файл cml не загружается, т.к. в конце файла записаны какие-то «левые» символы. Поэтому у 14 forever-lilya выходила ошибка.

    2.При редактировании в блокноте теряется кодировка UTF-8, надо убирать эти символы в другом редакторе, в Word получается. (Это для тех, кто захочет исправить. А то Вы будете злиться и нормально не объясните.)

    3. Обработка под именем «Космачев» в рознице что-то формирует, по крайней мере ошибка не вылетает. Могли бы и ответить (55) savvato,

    Reply
  57. holostyak

    Судя по комментам — одна головная боль с этой обработкой…

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *