Расширенный обмен с сайтом на платформе 1С-Битрикс




Столкнулся с проблемой выгрузки реквизитов из заказа. Перечитал подобные обращения на форуме, но универсального механизма так и не нашел. Вариантов выгрузки масса: начиная от создания произвольного плана обмена в 1с, регистрации изменений и выгрузке данных в формате csv на сайт, заканчивая полной переработкой обмена.

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

Чем дальше изучал исходники модуля обмена в 1С, тем больше убеждался, что скорее всего разработчики 1С-Битрикс, хотели реализовать что-то подобное, но времени на это не хватило. Взять тот же механизм импорта пользовательских справочников, по сути, мы можем любой объект 1С разложить на составляющие и компонента на сайте сама все сделает: проверит выгружаемый объект, создаст недостающие поля и импортирует все на сайт. 

Вот тут и пришла идея, а что если модулю обмена в 1С, подсунуть документ и сказать, что это не документ, а справочник, и тогда система сама все сделает. В итоге получилось расширение для 1С (для справки, это внешняя доработка, которая не требует обновления базы, а подключается как внешнее дополнение к модулю обмена от Битрикс). Модуль добавляет в список выбора  документы, для которых включена регистрация в плане обмена.

Список документов:

  • Заказ клиента

  • Реализация товаров и услуг

  • Приходный кассовый ордер

  • Операция по платежной карте

  • Поступление безналичных денежных средств

В рабочей  базе это выглядит так:

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

Но связать выгруженный заказ из 1С с заказом на сайте оказалось не просто, общий реквизит Б_Идентификатор несет в себе ID заказа, но не является прямым реквизитом объекта и потому не доступен для выбора. В расширении добавил возможность выгружать общие реквизиты как для документов, так и для справочников.

Все, общий реквизит выгружается.  Дальше, чтобы обновить свойство  заказа на сайте подписываемся на событие OnAfterUpdate и через поле B_IDENTIFIKATOR находим заказ в базе и обновляем его свойства.

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

Для этих целей в форму настройки выгрузки добавил возможность указывать произвольный алгоритм расчета, подобный механизм реализован при загрузке заказов с сайта, выгрузке свойств номенклатуры и обязательно должен быть в нашем модуле.

В итоге получился универсальный модуль, который расширяет возможности модуля обмена от 1С-Битрикс и позволяет:

  1. Выгружать документы в HL блоки

  2. Импортировать общие реквизиты

  3. Передавать  динамические (собирательные) реквизиты с произвольным алгоритмом

Такой вот инструмент получился в итоге, буду рад если кому-то упростит настройку синхронизации.

P.S. Тестировал на конфигурации Управление торговлей, редакция 11 (11.4.2.109) Платформа:  1С:Предприятие 8.3 (8.3.10.2650)

Leave a Comment

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