Как отладить бесшовную интеграцию между 1С:ERP и 1С:Документооборот и найти причину очистки данных

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

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

Выясним причину: почему очищаются данные в 1С:ДО

Прежде чем приступать к технической отладке, проанализируем механизм работы интеграции. Когда мы создаем или изменяем объект в ERP, система инициирует вызов веб-сервиса DMService на стороне Документооборота. В рамках этого вызова передается пакет данных в формате XDTO.

Проблема очистки полей чаще всего связана с тем, что в ERP включена синхронизация данных текущего пользователя. Если в базе ERP у пользователя не заполнены реквизиты Должность или График работы, или они заполнены в формате, который не сопоставляется с данными ДО, система формирует пустые значения в XDTO-пакете. При получении такого пакета 1С:Документооборот воспринимает отсутствие данных как команду к обновлению и затирает существующие значения в справочнике Пользователи. Ситуация проявляется именно для текущего сеанса, так как интеграция обновляет данные именно того сотрудника, под которым выполняется действие. Для воспроизведения и проверки такого поведения под нужной учетной записью можно использовать обработку для запуска 1С под любым пользователем без пароля.

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

Если стандартная отладка через конфигуратор затруднена (например, из-за жестких настроек безопасности или особенностей работы фоновых заданий на платформе 8.3.19), воспользуемся методом программного логирования. Разберем по шагам, как это реализовать.

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

Рассмотрим пример кода для записи стека:


Попытка
    // Искусственно вызываем исключение, чтобы получить доступ к информации об ошибке
    ВызватьИсключение "Лог стека вызовов";
Исключение
    ИнформацияОбОшибке = ИнформацияОбОшибке();
    ТекстСтека = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
    
    // Записываем полученный стек в Журнал регистрации
    ЗаписьЖурналаРегистрации("ОтладкаИнтеграции",
        УровеньЖурналаРегистрации.Предупреждение,
        ,
        ,
        ТекстСтека);
КонецПопытки;

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

Настройка отладчика для веб-сервисов на IIS

Для тех, кто предпочитает классическую отладку «в живую», необходимо правильно подготовить серверную среду. Работа через IIS (Internet Information Services) требует специфических настроек.

Во-первых, убедимся, что сервер 1С запущен в режиме отладки. Для этого в строке запуска службы 1C:Enterprise 8.3 Server Agent должен присутствовать флаг -debug. Если сервер работает на Linux, соответствующие изменения вносятся в конфигурационный файл /etc/sysconfig/srv1cv83.

Во-вторых, настроим параметры публикации на веб-сервере. Проанализируем файл web.config, который находится в каталоге публикации базы ДО. В нем должна быть разрешена отладка. Однако более важным является настройка самого Конфигуратора в базе «1С:Документооборот»:

  1. Откроем Конфигуратор 1С:ДО.
  2. Перейдем в меню Сервис — Параметры.
  3. На закладке Запуск 1С:Предприятия — Дополнительные установим флаг «Устанавливать режим отладки».
  4. Перейдем в меню Отладка — Подключение.
  5. Нажмем кнопку «Автоматическое подключение» и установим флажки для типов приложений: «Веб-сервисы» и «Фоновые задания».

Важный нюанс: начиная с платформы 8.3.7, рекомендуется использовать протокол HTTP для отладки вместо TCP/IP. Это значительно стабильнее при работе через прокси-серверы и IIS. Убедитесь, что в настройках отладки выбран именно HTTP.

Решение проблем с фоновыми заданиями на платформе 8.3.19

Если вы столкнулись с багом платформы 8.3.19, когда фоновые задания «пролетают» мимо точек останова, воспользуемся механизмом отладки по идентификатору назначения. Это позволит отладчику сфокусироваться на конкретном потоке данных, а если традиционная интеграция слишком сложна в отладке — применить роботизацию действий пользователя для переноса данных между системами.

Разберем, как это сделать программно. В коде ERP, непосредственно перед вызовом функций интеграции, добавим установку идентификатора:


// Устанавливаем уникальный ключ для текущего сеанса отладки
Отладка.УстановитьИдентификаторНазначенияОтладки("DEBUG_ERP_TO_DO");

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

Как быстро исправить проблему без изменения кода

Если в ходе анализа выяснилось, что ERP действительно передает пустые поля, а времени на переписывание логики формирования XDTO-пакетов нет, можно прибегнуть к административной настройке. Рассмотрим, как это сделать:

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

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

← На главную