Бесшовная интеграция между решениями на базе Библиотеки интеграции с документооборотом (БИД), такими как 1С:ERP Управление предприятием, 1С:Комплексная автоматизация или 1С:Управление торговлей, и 1С:Документооборот (1С:ДО) — это мощный инструмент. Он позволяет пользователям работать в интерфейсе одной системы, прозрачно обращаясь к объектам и процессам другой. Однако часто возникает неприятная ситуация: первичное создание связанного документа (например, договора контрагента) проходит успешно, но последующие изменения реквизитов (статусы, ответственные лица, комментарии, файлы) категорически отказываются синхронизироваться.
В этой статье мы подробно разберем, почему ломается двусторонний обмен при бесшовной интеграции, проанализируем внутренние механизмы платформы 1С:Предприятие, изучим код запроса изменений и предоставим пошаговый план решения этой проблемы.
Типичный сценарий проблемы выглядит следующим образом. Администратор настраивает правила интеграции для договоров. Пользователь в 1С:ERP заходит на вкладку «Документооборот», нажимает кнопку создания связанного документа в 1С:ДО. Документ успешно создается, все реквизиты заполняются строго по правилам сопоставления. Но если в дальнейшем изменить комментарий, статус согласования или ответственного сотрудника на любой из сторон, данные не обновляются. При этом регламентные задания выполняются, а журнал регистрации не фиксирует никаких явных ошибок.
Давайте заглянем под капот системы и проанализируем, как происходит запрос изменений со стороны 1С:ERP к 1С:Документооборот. Обратимся к коду общего модуля интеграции, где выполняется отправка запроса к веб-сервису:
Запрос = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMGetChangesRequest");
Запрос.lastMessageId = Константы.НомерПоследнегоПринятогоСообщенияДокументооборота.Получить();
Ответ = Прокси.execute(Запрос);
ИнтеграцияС1СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, Ответ);
Для каждого ОбъектXDTO Из Ответ.objects Цикл
// Обработка полученных изменений объектов
КонецЦикла;
При возникновении описываемой проблемы коллекция Ответ.objects оказывается абсолютно пустой. Это означает, что веб-сервер 1С:Документооборот успешно отвечает на запрос, но сообщает, что никаких изменений для передачи в 1С:ERP у него нет. Выясним, почему так происходит и как заставить систему регистрировать и передавать эти изменения.
---
Большинство руководств и инструкций (включая некоторые разделы на ИТС) акцентируют внимание на том, что для работы бесшовной интеграции необходимо опубликовать на веб-сервере (IIS или Apache) базу 1С:Документооборот и её веб-сервис DMService. Пользователи следуют этой рекомендации, и интеграция начинает частично работать: ERP отправляет прямые запросы в ДО через этот веб-сервис.
Однако для полноценной двусторонней интеграции этого недостаточно. Рассмотрим схему взаимодействия:
Решение: Обязательно опубликуйте на веб-сервере обе информационные базы — и 1С:ERP, и 1С:Документооборот. Убедитесь, что в настройках интеграции на стороне 1С:ДО корректно указан URL-адрес публикации базы 1С:ERP, а на стороне 1С:ERP — адрес публикации 1С:ДО.
---
Даже после правильной публикации баз обмен может не пойти из-за накопившихся старых ошибок. В процессе неудачных попыток обмена (когда базы не видели друг друга) в служебных таблицах регистрируются ошибочные пакеты. Новые изменения встают в очередь за старыми ошибками, и весь процесс синхронизации блокируется.
Нам необходимо проанализировать состояние очередей обмена и очистить их от «мусора». Выполним следующие шаги:
Очередь сообщений для отправки в документооборот (в некоторых версиях БИД он может называться иначе, связанный с очередью интеграции).---
За генерацию, отправку и получение пакетов изменений отвечают фоновые процессы. Если регламентные задания отключены или зависли, интеграция прекратит работать. Проверим активность следующих регламентных заданий в обеих базах.
В информационной базе 1С:ERP должны регулярно выполняться задания:
Интеграция с 1С:Документооборотом - Выполнить обмен данными — отвечает за отправку изменений из ERP и получение ответов.В информационной базе 1С:Документооборот критически важно настроить задание:
Формирование сообщений обмена для интегрируемых конфигураций (или в синониме ИнтегрированныеСистемыФормированиеСообщений) — именно оно считывает регистрации измененных объектов из планов обмена, упаковывает их в XML/XDTO-пакеты и помещает в очередь отправки. Без работы этого задания вызов DMGetChangesRequest всегда будет возвращать пустой результат!---
Проанализируем настройки самих правил интеграции объектов. Перейдем в настройки правил интеграции между ERP и ДО:
---
Если вы используете современную редакцию 1С:Документооборот 3.0, архитектура взаимодействия претерпела существенные изменения. Механизм непрерывного опроса (polling) через DMGetChangesRequest уступил место технологии Сервисов интеграции на платформенном уровне (очереди сообщений платформы «1С:Предприятие»).
При использовании 1С:ДО 3.0 обратите внимание на следующие архитектурные нюансы:
DMService используются специализированные платформенные Сервисы интеграции. Публикация обеих баз на веб-сервере остается строго обязательной.Запуск обработки очередей интеграции и Маршрутизация сообщений.---
Чтобы быстро локализовать и устранить проблему отсутствия синхронизации изменений, рекомендуем действовать по следующему чек-листу:
ИнтегрированныеСистемы на стороне 1С:ДО. Если ручная регистрация объекта на плане обмена приводит к его успешной передаче после запуска регламентных заданий, значит, проблема в подписках на события, которые должны автоматически регистрировать изменения.НомерПоследнегоПринятогоСообщенияДокументооборота станет больше фактического номера в ДО). В таком случае ERP будет запрашивать несуществующие сообщения из будущего. Принудительно выровняйте счетчики номеров сообщений в константах обеих систем.Выполнив указанные настройки, опубликовав обе базы на веб-сервере и очистив зависшие очереди сообщений, вы обеспечите стабильную и быструю двустороннюю бесшовную интеграцию между вашими конфигурациями 1С.