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