Почему не работает двусторонняя синхронизация связанных объектов при бесшовной интеграции 1С:ERP и 1С:Документооборот?

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

Бесшовная интеграция между решениями на базе Библиотеки интеграции с документооборотом (БИД), такими как 1С:ERP Управление предприятием, 1С:Комплексная автоматизация или 1С:Управление торговлей, и 1С:Документооборот (1С:ДО) — это мощный инструмент. Он позволяет пользователям работать в интерфейсе одной системы, прозрачно обращаясь к объектам и процессам другой. Однако часто возникает неприятная ситуация: первичное создание связанного документа (например, договора контрагента) проходит успешно, но последующие изменения реквизитов (статусы, ответственные лица, комментарии, файлы) категорически отказываются синхронизироваться.

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

Симптомы проблемы и анализ механизма обмена

Типичный сценарий проблемы выглядит следующим образом. Администратор настраивает правила интеграции для договоров. Пользователь в 1С:ERP заходит на вкладку «Документооборот», нажимает кнопку создания связанного документа в 1С:ДО. Документ успешно создается, все реквизиты заполняются строго по правилам сопоставления. Но если в дальнейшем изменить комментарий, статус согласования или ответственного сотрудника на любой из сторон, данные не обновляются. При этом регламентные задания выполняются, а журнал регистрации не фиксирует никаких явных ошибок.

Давайте заглянем под капот системы и проанализируем, как происходит запрос изменений со стороны 1С:ERP к 1С:Документооборот. Обратимся к коду общего модуля интеграции, где выполняется отправка запроса к веб-сервису:


Запрос = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMGetChangesRequest");
Запрос.lastMessageId = Константы.НомерПоследнегоПринятогоСообщенияДокументооборота.Получить();

Ответ = Прокси.execute(Запрос);
ИнтеграцияС1СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, Ответ);

Для каждого ОбъектXDTO Из Ответ.objects Цикл
    // Обработка полученных изменений объектов
КонецЦикла;

При возникновении описываемой проблемы коллекция Ответ.objects оказывается абсолютно пустой. Это означает, что веб-сервер 1С:Документооборот успешно отвечает на запрос, но сообщает, что никаких изменений для передачи в 1С:ERP у него нет. Выясним, почему так происходит и как заставить систему регистрировать и передавать эти изменения.

---

Причина 1. Ошибка публикации баз на веб-сервере

Большинство руководств и инструкций (включая некоторые разделы на ИТС) акцентируют внимание на том, что для работы бесшовной интеграции необходимо опубликовать на веб-сервере (IIS или Apache) базу 1С:Документооборот и её веб-сервис DMService. Пользователи следуют этой рекомендации, и интеграция начинает частично работать: ERP отправляет прямые запросы в ДО через этот веб-сервис.

Однако для полноценной двусторонней интеграции этого недостаточно. Рассмотрим схему взаимодействия:

Решение: Обязательно опубликуйте на веб-сервере обе информационные базы — и 1С:ERP, и 1С:Документооборот. Убедитесь, что в настройках интеграции на стороне 1С:ДО корректно указан URL-адрес публикации базы 1С:ERP, а на стороне 1С:ERP — адрес публикации 1С:ДО.

---

Причина 2. Зависание и засорение очереди обмена сообщениями

Даже после правильной публикации баз обмен может не пойти из-за накопившихся старых ошибок. В процессе неудачных попыток обмена (когда базы не видели друг друга) в служебных таблицах регистрируются ошибочные пакеты. Новые изменения встают в очередь за старыми ошибками, и весь процесс синхронизации блокируется.

Нам необходимо проанализировать состояние очередей обмена и очистить их от «мусора». Выполним следующие шаги:

  1. Откроем в 1С:ERP через функции для технического специалиста регистр сведений Очередь сообщений для отправки в документооборот (в некоторых версиях БИД он может называться иначе, связанный с очередью интеграции).
  2. Если в регистре содержатся старые записи с ошибками, полностью очистим его. При корректно работающем обмене этот регистр должен оперативно очищаться автоматически сразу после успешной отправки пакетов.
  3. Перейдем в базу 1С:Документооборот и проверим аналогичные регистры очереди сообщений в интегрированные системы. При необходимости очистим и их, чтобы начать синхронизацию с «чистого листа».

---

Причина 3. Неправильная настройка регламентных заданий

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

В информационной базе 1С:ERP должны регулярно выполняться задания:

В информационной базе 1С:Документооборот критически важно настроить задание:

---

Причина 4. Флаг «Обновлять» в правилах интеграции

Проанализируем настройки самих правил интеграции объектов. Перейдем в настройки правил интеграции между ERP и ДО:

  1. Найдем правило сопоставления для нужного типа объекта (например, для договоров).
  2. Откроем таблицу сопоставления реквизитов.
  3. Обратим внимание на колонку «Обновлять». Если для конкретного реквизита (например, «Комментарий» или «Статус») этот флаг не установлен, то система передаст значение только один раз при первоначальном создании документа. Все последующие изменения этого реквизита будут игнорироваться при регистрации изменений. Установим этот флаг для всех динамически изменяемых полей.

---

Особенности бесшовной интеграции с 1С:Документооборот редакции 3.0

Если вы используете современную редакцию 1С:Документооборот 3.0, архитектура взаимодействия претерпела существенные изменения. Механизм непрерывного опроса (polling) через DMGetChangesRequest уступил место технологии Сервисов интеграции на платформенном уровне (очереди сообщений платформы «1С:Предприятие»).

При использовании 1С:ДО 3.0 обратите внимание на следующие архитектурные нюансы:

---

Комплексный чек-лист для проверки бесшовной интеграции

Чтобы быстро локализовать и устранить проблему отсутствия синхронизации изменений, рекомендуем действовать по следующему чек-листу:

  1. Проверка сетевой доступности: Убедитесь, что сервер, на котором крутится служба 1С:ERP, физически имеет доступ к веб-публикации 1С:ДО, и наоборот. Настройте брандмауэры и правила маршрутизации.
  2. Авторизация служебного пользователя: Регламентные задания выполняются от имени служебного пользователя интеграции. Проверьте, что у этого пользователя в обеих базах достаточно прав на чтение, изменение и просмотр всех синхронизируемых объектов. При изменении паролей обязательно обновите их в константах подключения интеграции.
  3. Регистрация на планах обмена: Проверьте, зарегистрирован ли измененный объект на плане обмена ИнтегрированныеСистемы на стороне 1С:ДО. Если ручная регистрация объекта на плане обмена приводит к его успешной передаче после запуска регламентных заданий, значит, проблема в подписках на события, которые должны автоматически регистрировать изменения.
  4. Контроль номеров сообщений: При восстановлении баз из резервных копий может сбиться нумерация сообщений (значение константы НомерПоследнегоПринятогоСообщенияДокументооборота станет больше фактического номера в ДО). В таком случае ERP будет запрашивать несуществующие сообщения из будущего. Принудительно выровняйте счетчики номеров сообщений в константах обеих систем.

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

← На главную