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

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

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

Архитектура механизма передачи состояний между ДО и ERP

Для понимания причин сбоя проанализируем последовательность шагов, по которой статус передается из 1С:ДО в 1С:ERP:

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

Пошаговая диагностика и устранение неполадок

Если цепочка прерывается на одном из этапов, статус документа не изменится. Разберем ключевые места проверки и методы исправления.

1. Проверка правил интеграции и сопоставления типов

Рассмотрим правила заполнения реквизитов на стороне 1С:ERP. Перейдем в настройки правил интеграции с 1С:Документооборотом для объекта ЗаявкаНаРасходованиеДенежныхСредств на закладку Получение из 1С:Документооборота:

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

Если Источник.statusApproval = "Согласован" Тогда
    Результат = Перечисления.СтатусыЗаявокНаРасходованиеДенежныхСредств.Согласована;
ИначеЕсли Источник.statusApproval = "НеСогласован" Тогда
    Результат = Перечисления.СтатусыЗаявокНаРасходованиеДенежныхСредств.Отклонена;
КонецЕсли;

2. Проверка узла плана обмена и зависших сообщений в 1С:ДО

Если при переносе интеграции с тестовой базы на рабочую создается новый узел плана обмена или изменяется его GUID, метод веб-сервиса DMService.getMessages() возвращает пустой результат (Ответ.messageId = Неопределено), так как пакеты формируются для другого узла-получателя. Выполним следующие действия в 1С:ДО:

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

3. Отладка получения и обработки пакета в 1С:ERP

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

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

4. Проверка прав учетной записи и настроек процесса в 1С:ДО

Обратим внимание на дополнительные системные настройки:

  1. Права веб-сервиса: Пользователь, под которым ERP авторизуется в ДО через DMService, должен иметь полные права (без ограничений RLS) на справочники СообщенияИнтегрированныхСистем, ВнутренниеДокументы и план обмена ИнтегрированныеСистемы.
  2. Шаблон процесса: В свойствах шаблона процесса согласования в 1С:ДО обязательно должна быть включена опция автоматической установки состояния (например, Устанавливать состояние: Согласован). Если состояние меняется только внутри задачи процесса, но не передается на сам внутренний документ ДО, запись в регистр ТекущиеСостоянияДокументов не попадет, и обмен не зарегистрирует событие.
← На главную