Чем дальше изучал исходники модуля обмена в 1С, тем больше убеждался, что скорее всего разработчики 1С-Битрикс, хотели реализовать что-то подобное, но времени на это не хватило. Взять тот же механизм импорта пользовательских справочников, по сути, мы можем любой объект 1С разложить на составляющие и компонента на сайте сама все сделает: проверит выгружаемый объект, создаст недостающие поля и импортирует все на сайт.
Вот тут и пришла идея, а что если модулю обмена в 1С, подсунуть документ и сказать, что это не документ, а справочник, и тогда система сама все сделает. В итоге получилось расширение для 1С (для справки, это внешняя доработка, которая не требует обновления базы, а подключается как внешнее дополнение к модулю обмена от Битрикс). Модуль добавляет в список выбора документы, для которых включена регистрация в плане обмена.
Список документов:
-
Заказ клиента
-
Реализация товаров и услуг
-
Приходный кассовый ордер
-
Операция по платежной карте
-
Поступление безналичных денежных средств
В рабочей базе это выглядит так:
Переопределив несколько процедур, выгрузка пошла на сайт, система сама создала HL блок и поля.
Но связать выгруженный заказ из 1С с заказом на сайте оказалось не просто, общий реквизит Б_Идентификатор несет в себе ID заказа, но не является прямым реквизитом объекта и потому не доступен для выбора. В расширении добавил возможность выгружать общие реквизиты как для документов, так и для справочников.
Все, общий реквизит выгружается. Дальше, чтобы обновить свойство заказа на сайте подписываемся на событие OnAfterUpdate и через поле B_IDENTIFIKATOR находим заказ в базе и обновляем его свойства.
Кажется, все отлично и инструмент получился универсальным и кода много не написано, все на базе типовых функций обмена, а что делать если требуется выгрузить динамический реквизит, к примеру, причину отмены заказа, которая в явном виде не хранится, а собирается из записей в табличной части заказа.
Для этих целей в форму настройки выгрузки добавил возможность указывать произвольный алгоритм расчета, подобный механизм реализован при загрузке заказов с сайта, выгрузке свойств номенклатуры и обязательно должен быть в нашем модуле.
В итоге получился универсальный модуль, который расширяет возможности модуля обмена от 1С-Битрикс и позволяет:
-
Выгружать документы в HL блоки
-
Импортировать общие реквизиты
-
Передавать динамические (собирательные) реквизиты с произвольным алгоритмом
Такой вот инструмент получился в итоге, буду рад если кому-то упростит настройку синхронизации.
P.S. Тестировал на конфигурации Управление торговлей, редакция 11 (11.4.2.109) Платформа: 1С:Предприятие 8.3 (8.3.10.2650)