При настройке обмена между «1С:Управление торговлей» и сайтом под управлением «1С-Битрикс» часто возникает задача выгрузить дополнительные данные товара, например, вес или коэффициент пересчета в погонные метры. Начинающие разработчики пытаются найти наименования полей базы данных сайта (такие как CATALOG_PRICE_1 или CATALOG_WEIGHT) внутри пакетов XDTO конфигурации 1С и внести туда изменения. Разберем, почему этот подход не работает и как решить задачу штатными и безопасными способами.
Идентификаторы вида CATALOG_PRICE_1 и CATALOG_WEIGHT — это наименования столбцов в таблицах базы данных сайта на Битриксе. В формате обмена CommerceML (CML) и схемах XDTO 1С таких наименований нет и быть не может.
Сопоставление данных при выгрузке происходит на стороне интернет-магазина:
<ИдТипаЦены>). Модуль импорта Битрикса при первичном обмене сопоставляет этот идентификатор с типом цены на сайте и записывает значение в колонку CATALOG_PRICE_1.<ЗначенияРеквизитов> или в виде атрибута базовой единицы. Парсер сайта автоматически считывает это значение и помещает его в системную колонку веса каталога (CATALOG_WEIGHT).Важно: Прямая доработка пакета XDTO (например, CML208) в 1С не приведет к желаемому результату. Попадая на сайт, нестандартные теги просто будут проигнорированы штатным импортером Битрикса. Кроме того, редактирование схемы XDTO создает сложности при обновлении конфигурации 1С.
Рассмотрим наименее трудоемкий вариант. Разработчики «1С-Битрикс» предоставляют бесплатный модуль обмена для 1С, который устанавливается в конфигурацию как расширение или выгружаемая обработка.
В этом модуле реквизиты веса и габаритов уже заложены в штатный функционал. Выгрузка веса происходит автоматически при соблюдении следующих условий:
Проанализируем ситуацию, когда помимо веса на сайт нужно передать кастомные показатели — например, коэффициент пересчета площади в погонные метры. Для таких задач не требуется менять код выгрузки.
Разберем по шагам, как выгрузить произвольное поле:
Номенклатура.Число.При стандартном обмене платформа 1С автоматически поместит все дополнительные реквизиты в XML-блок <ЗначенияСвойств>. На стороне сайта эти данные автоматически создадутся как свойства инфоблока, и их можно будет использовать в карточке товара или в калькуляциях на PHP.
Если коэффициент или вес необходимо записать строго в системное поле Битрикса, а не просто сохранить в свойствах элемента инфоблока, лучшим решением будет сочетение выгрузки дополнительного реквизита из 1С и обработка его на стороне сайта.
Схема работы выглядит следующим образом:
<ЗначенияСвойств> (Способ 2).init.php регистрируется обработчик события обмена (например, OnSuccessCatalogImport1C или событие обновления элемента инфоблока).CCatalogProduct::Update).Если реквизит не является дополнительным свойством номенклатуры, а рассчитывается динамически в коде 1С, его можно добавить в структуру выгрузки программно, не меняя схему XDTO.
Для этого создадим расширение конфигурации и перехватим процедуру заполнения структуры свойств выгружаемого номенклатурного позиционирования до момента формирования XML. Посмотрим на логику такого решения:
&АнаЛизИнициализации
Процедура Расш1_ЗаполнитьСвойстваВыгрузкиНоменклатуры(СтруктураДанных, НоменклатураСсылка)
// Вычисляем значение нужного коэффициента
ЗначениеКоэффициента = ПолучитьКоэффициентПересчета(НоменклатураСсылка);
// Добавляем значение в структуру дополнительных реквизитов,
// которая штатно сериализуется в блок ЗначенияСвойств
НовоеСвойство = Новый Структура;
НовоеСвойство.Вставить("Имя", "КоэффициентПогонныхМетров");
НовоеСвойство.Вставить("Значение", ЗначениеКоэффициента);
СтруктураДанных.Свойства.Добавить(НовоеСвойство);
КонецПроцедуры
Таким образом, использование штатного модуля обмена и механизма дополнительных реквизитов позволяет полностью решить задачу передачи любых пользовательских данных из 1С на сайт без рисков поломки структуры XML и проблем при обновлении системы.