При переходе с интеграции с «1С:Документооборотом 2.1» на «1С:Документооборот 3.0» разработчики часто сталкиваются с изменением архитектуры взаимодействия. Если ранее 1С:ERP сама периодически опрашивала ДО регламентным заданием (модель Pull), то в новой редакции на базе «Библиотеки интеграции с 1С:Документооборотом» (БИД) реализован механизм обратных вызовов (модель Push / Callback). Как только в ДО 3.0 согласуется документ или меняется состояние процесса, система Документооборота незамедлительно обращается к ERP через SOAP веб-сервис.
Рассмотрим подробнее, какой веб-сервис задействован в этой цепочке, почему обращение сложно обнаружить в стандартном Журнале регистрации и как правильно настроить отладку серверного кода в 1С:ERP.
Проанализируем состав объектов конфигурации 1С:ERP, входящих в подсистему интеграции с Документооборотом. Для приема оповещений и пакетов изменений используется штатный веб-сервис:
Имя веб-сервиса: DMILService
Имя вызываемой операции: PutChangesRequest (или DMILPutChangesRequest в зависимости от версии WSDL-описания библиотеки БИД).
Именно в точку входа этой операции ДО 3.0 передает сведения об изменении состояний документов. Внутри этого сервиса полученный пакет распаковывается и передается в обработчики интеграции для изменения реквизитов и статусов документов учетной системы.
При анализе входящих параметров в операции PutChangesRequest разработчики обращают внимание на то, что данные передаются не в виде открытого XML-текста, а упакованы в ДвоичныеДанные (тип xs:base64Binary в SOAP-пакете).
Выясним причину такого решения разработчиков фирмы «1С». Это штатный платформенный подход, который решает сразу две ключевые задачи:
Внутри программного модуля веб-сервиса распаковка и чтение данных производятся с помощью стандартных объектов работы с потоками и архивами:
// Пример распаковки и чтения данных в методе веб-сервиса
ДвоичныеДанныеПакета = ВходящиеДанные;
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("zip");
ДвоичныеДанныеПакета.Записать(ИмяВременногоФайла);
ЧтениеАрхива = Новый ЧтениеZipФайла(ИмяВременногоФайла);
Для Каждого ЭлементАрхива Из ЧтениеАрхива.Элементы Цикл
ЧтениеАрхива.Извлечь(ЭлементАрхива, КаталогВременныхФайлов(), РежимВосстановленияПутейФайловZIP.НеВосстанавливать);
КонецЦикла;
ЧтениеАрхива.Закрыть();
Платформа 1С:Предприятие по умолчанию не фиксирует в Журнале регистрации (ЖР) события вызова методов веб-сервисов, если в самом коде не прописана процедура ЗаписьЖурналаРегистрации(). Кроме того, веб-сервис выполняется в рамках отдельного сеанса, который быстро стартует и сразу завершается.
Разберем по шагам, как настроить фильтр Журнала регистрации в 1С:ERP, чтобы увидеть хотя бы факт подключения сторонней базы:
Веб-сервис или WS-соединение.Чтобы отладчик в Конфигураторе 1С:ERP остановился на точке останова внутри процедуры веб-сервиса DMILService, необходимо подготовить серверную среду. Пройдем этот путь последовательно.
1C:Enterprise Server должна быть запущена с флагом отладки (параметр -debug для TCP или соответствующий запуск службы отладки для HTTP).default.vrd и убедимся, что там включена отладка. Секция должна содержать параметры подключения отладчика:
<!-- Пример для отладки по протоколу TCP -->
<debug enable="true" protocol="tcp" url="tcp://ИмяСервераОтладки:1560" />
DMILService, откроем его модуль и поставим точку останова в самом начале тела функции PutChangesRequest.Посмотрим на поведение связки в нештатных ситуациях. Если база 1С:ERP недоступна (например, веб-сервер остановлен, возникла ошибка соединения или отладка заблокировала выполнение по тайм-ауту), «1С:Документооборот 3.0» не теряет изменения.
Пакеты со статусами сохраняются во внутреннюю очередь сообщений ДО (регистр сведений Очередь сообщений обмена с интегрированными системами). Затем фоновое регламентное задание ДО 3.0 с заданной периодичностью опрашивает очередь и повторяет вызов веб-сервиса DMILService до успешной обработки пакета.