Было дело значит, что загрузили товары с Битрикса в 1с через дополнительный модуль обмена Битрикс для 1С. Все хорошо было, пока не решили запустить обмен с сайтом, все через тот же модуль обмена. Товары-то выгружались нормально, только количество не выгружалось и еще пара косяков, а вот заказы не шли — Не мог модуль обмена понять, что за версия XML на нашем БУС 14.0.7, да и откуда ему понять, если битриксойды продают обновления за деньги, а версия на тот момент уже последняя была 15.5! Нужно обновить БУС и все заработает. Но денег-то лишних нет, да и за такие обновления платить-то западло! Не суть. Перешли на работу с нативным модулем обмена 1С УТ11, благо, что он еще не отказывается от CommerceML2. Заказы пошли загружаться, а вот на сайте из заказа стали пропадать товары. Хм… да уж!
Оказывается, что при загрузке товаров с сайта и использовании модуля от Битрикс XML_ID берется следующим образом:
- XML_ID по полю Б_идентификатор, который содержит тот ID, что был загружен с сайта
- XML_ID по функции Объект.УникальныйИдентификатор()
Тогда получается, что в отсутствии понимания и наличия базовой функцией в УТ 11 Функция УникальныйИдентификаторОбъекта() поля Б_идентификатор сайта, при выгрузке заказа обновлялся ID товара, но на тот, что был сгенерирован 1Сом и БУС про него не знает. Товар исчез, т.к. с таким ID ничего нет.
Тогда решили уйти вовсе от обмена через модуль Битрикса в пользу нативного модуля УТ11. Пошла выгрузка — и, как и ожидалось, все товары и разделы создались заново! Конечно, ведь 1С выгружыл свои ID, а БУСу они не знакомы.
Тогда было решено привести функцию УникальныйИдентификаторОбъекта к универсальному виду, т.е. если есть ID от БУС, то брать его, если нет, то брать 1Совский.
Функция УникальныйИдентификаторОбъекта(Объект, Характеристика = Неопределено) Попытка Ид = Строка(Объект.Б_Идентификатор); Исключение; Ид = Строка(Объект.УникальныйИдентификатор()); Конецпопытки; Если (Ид="")тогда Ид = Строка(Объект.УникальныйИдентификатор()); КонецЕсли; Если ЗначениеЗаполнено(Характеристика) Тогда ИдХаракетеристики = Строка(Характеристика.УникальныйИдентификатор()); Ид = Ид + "#" + ИдХаракетеристики; КонецЕсли; Возврат Ид; КонецФункции
и стало теперь все хорошо и в заказах и в товарах.