Двойные xml id при обмене с битриксом

Было дело значит, что загрузили товары с Битрикса в 1с через дополнительный модуль обмена Битрикс для 1С. Все хорошо было, пока не решили запустить обмен с сайтом, все через тот же модуль обмена. Товары-то выгружались нормально, только количество не выгружалось и еще пара косяков, а вот заказы не шли — Не мог модуль обмена понять, что за версия XML на нашем БУС 14.0.7, да и откуда ему понять, если битриксойды продают обновления за деньги, а версия на тот момент уже последняя была 15.5! Нужно обновить БУС и все заработает. Но денег-то лишних нет, да и за такие обновления платить-то западло! Не суть. Перешли на работу с нативным модулем обмена 1С УТ11, благо, что он еще не отказывается от CommerceML2. Заказы пошли загружаться, а вот на сайте из заказа стали пропадать товары. Хм… да уж!

Оказывается, что при загрузке товаров с сайта и использовании модуля от Битрикс XML_ID берется следующим образом:

  1. XML_ID по полю Б_идентификатор, который содержит тот ID, что был загружен с сайта
  2. XML_ID по функции Объект.УникальныйИдентификатор()

Тогда получается, что в отсутствии понимания и наличия базовой функцией в УТ 11 Функция УникальныйИдентификаторОбъекта() поля Б_идентификатор сайта, при выгрузке заказа обновлялся ID товара, но на тот, что был сгенерирован 1Сом и БУС про него не знает. Товар исчез, т.к. с таким ID ничего нет.

Тогда решили уйти вовсе от обмена через модуль Битрикса в пользу нативного модуля УТ11. Пошла выгрузка — и, как и ожидалось, все товары и разделы создались заново! Конечно, ведь 1С выгружыл свои ID, а БУСу они не знакомы.

Тогда было решено привести функцию УникальныйИдентификаторОбъекта к универсальному виду, т.е. если есть ID от БУС, то брать его, если нет, то брать 1Совский.

Функция УникальныйИдентификаторОбъекта(Объект, Характеристика = Неопределено)
 Попытка
 Ид = Строка(Объект.Б_Идентификатор);
 Исключение;
 Ид = Строка(Объект.УникальныйИдентификатор());
 Конецпопытки;
 Если (Ид="")тогда
 Ид = Строка(Объект.УникальныйИдентификатор());
 КонецЕсли;
 
 Если ЗначениеЗаполнено(Характеристика) Тогда
 
 ИдХаракетеристики = Строка(Характеристика.УникальныйИдентификатор());
 
 Ид = Ид + "#" + ИдХаракетеристики;
 
 КонецЕсли;
 
 Возврат Ид;
 
КонецФункции

и стало теперь все хорошо и в заказах и в товарах.

Добавить комментарий

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