Как правильно организовать интеграцию и обмен нестандартными данными между 1С и 1С-Битрикс

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При интеграции 1С с веб-сайтами на платформе 1С-Битрикс часто возникает необходимость передавать нестандартные объекты, отсутствующие в базовом протоколе CommerceML. Это могут быть заявки на регистрацию пользователей личного кабинета, новости, бренды с логотипами или производственные документы. Разберем подробнее, как устроена архитектура штатного модуля обмена, как реализовать загрузку/выгрузку произвольных данных и как устранить типовые ошибки, возникающие в процессе разработки.

Выбор архитектурного подхода для обмена данными

При проектировании интеграции с сайтом существует два основных подхода в зависимости от требований к скорости обработки данных:

  1. Real-time обмен через HTTP/REST-сервисы. Подходит для интерактивных сценариев — например, когда пользователь заполняет форму заявки на сайте и должен мгновенно получить ответ. В 1С создается HTTP-сервис, принимающий JSON- или XML-запрос. Для предотвращения долгих блокировок сервис быстро фиксирует входные данные и передает их на обработку фоновому заданию.
  2. Пакетный обмен через файлы (штатный модуль 1С-Битрикс). Использует механизм планов обмена 1С и расписание. Это наиболее предпочтительный вариант при передаче объемных справочников, новостей или пакетных статусов, так как он минимизирует пиковые нагрузки на веб-сервер и базу 1С.

Устройство и доработка штатного модуля интеграции 1С-Битрикс

Штатный модуль обмена от 1С-Битрикс встраивается в конфигурацию 1С через механизм объединения конфигураций (или путем добавления отдельного CF-файла расширения). Проанализируем ключевые объекты платформы 1С, отвечающие за функционирование обмена:

  1. План обмена Б_ОбменССайтом. Хранит узлы обмена, настройки авторизации, расписание и реквизиты интеграции (например, флаг ОбменЗаказами).
  2. Общий модуль Б_ПроцедурыОбменаССайтом. Содержит всю логику формирования XML-пакетов и их обработки. Главной точкой входа является процедура:
    
    Процедура ВыполнитьОбмен(Настройка, ПринудительнаяПолноеОбновлениеДанныхТовара = Ложь)
    
  3. Макет СхемаXSDОбмена. Располагается внутри плана обмена Б_ОбменССайтом и служит для строгой валидации входящих и исходящих XML-файлов через XDTO.

Для создания собственной выгрузки или загрузки новых документов (например, заявок на модерацию пользователей) создается новый документ в 1С, который привязывается к узлам плана обмена Б_ОбменССайтом. Обработка входящих данных на стороне 1С проектируется по аналогии с загрузкой заказов покупателей.

Исправление ошибки валидации XSD-схемы (MaxLenght = '10000')

При передаче сложных данных, таких как медиафайлы или логотипы в формате Base64, разработчики сталкиваются с ошибкой проверки XML-файла:

Ошибка: Не соответствует простому типу: {urn:1C.ru:commerceml_2}ЗначениеТип Несоответствие фасету MaxLength = '10000'

Данная ошибка означает, что длина строки Base64 превышает ограничение, заложенное в схеме валидации XSD. Для решения проблемы выполним следующие шаги:

  1. Откроем конфигуратор 1С и перейдем к плану обмена Б_ОбменССайтом.
  2. Найдем и откроем макет СхемаXSDОбмена.
  3. Выполним поиск по тексту макета значения 10000 для фасета maxLength элемента текстовых значений.
  4. Увеличим ограничение длины строки (например, заменим 10000 на 100000 или более, в зависимости от объема передаваемых файлов).
  5. Сохраним изменения в макете и конфигурации.

В коде модуля валидация по данной схеме инициализируется следующим образом:

СхемаXSD = ПланыОбмена.Б_ОбменССайтом.ПолучитьМакет("СхемаXSDОбмена");

Особенности флага выгрузки изменений

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


Если (ПараметрыОбмена.ВыгружатьТолькоИзменения И НЕ ПараметрыОбмена.ВыполнятьПолнуюВыгрузкуПринудительно) 
   ИЛИ (ПараметрыОбмена.КоличествоЭлементовСправочникаВПакете <> 0) Тогда
    XDTOПользовательскиеСправочники.СодержитТолькоИзменения = XMLСтрока(Истина);
Иначе
    XDTOПользовательскиеСправочники.СодержитТолькоИзменения = XMLСтрока(Ложь);
КонецЕсли;

Если параметр КоличествоЭлементовСправочникаВПакете программно переопределяется и не равен нулю, флаг СодержитТолькоИзменения будет принимать значение Истина даже при явной попытке сбросить выборку. Проанализируйте этот участок кода при доработке процедур порционного обмена.

Рекомендации по сохранению обновляемости

При внесении изменений в модуль обмена важно помнить о последующих обновлениях системы:

  1. На стороне 1С: Чтобы при обновлении конфигурации или модуля обмена 1С-Битрикс ваши изменения не перезаписались, дописывайте код через механизмы расширений конфигурации (используя аннотации &Перед, &После или &Вместо), избегая прямой правки основного модуля.
  2. На стороне 1С-Битрикс: Кастомную логику обработки приходящих данных следует размещать в папке /local/php_interface/ с подключением через обработчики событий сайта, чтобы обновлять ядро CMS без риска сброса интеграционных компонентов.
← На главную