При совместной работе решений 1С:ERP Управление предприятием и 1С:Документооборот (ДО) в режиме бесшовной интеграции специалисты часто сталкиваются со сложными распределенными ошибками. Наиболее популярными среди них являются сбои при автоматическом старте бизнес-процессов из-за невозможности определить исполнителей, а также «зависание» статусов документов, когда успешное согласование в 1С:ДО никак не отражается на стороне 1С:ERP. В этой статье мы подробно разберем причины возникновения этих неполадок и пошагово настроим систему для их устранения.
Рассмотрим ситуацию: при попытке автоматического запуска бизнес-процесса в 1С:ДО система генерирует критическую ошибку в журнале регистрации следующего вида:
{ОбщийМодуль.БизнесСобытияВызовСервера.Модуль(705)}: Ошибка при вызове метода контекста (Заполнить) БизнесПроцесс.Заполнить(ПараметрыЗаполнения); по причине: Ошибка при выполнении обработчика - 'ОбработкаЗаполнения' ... Не найдены исполнители для автоподстановки 'Заказ поставщику.Ответственный за документ'.
Проанализируем, почему это происходит. Механизм автоподстановок в 1С:ДО предназначен для динамического определения участников процесса на основании реквизитов связанного предмета. В данном случае шаблон бизнес-процесса настроен так, чтобы направлять задачу сотруднику, указанному в поле Ответственный карточки внутреннего документа. Если в момент старта процесса это поле оказывается пустым, система аварийно завершает работу, выдавая описанное исключение.
Для успешного решения проблемы нам необходимо проверить всю цепочку передачи данных:
Заказ поставщику) реквизит Ответственный физически заполнен пользователем. Если поле пустое, интеграция передаст пустое значение.Ответственный из заказа ERP во внутренний документ ДО, карточка в 1С:ДО всегда будет создаваться без ответственного.Рассмотрим, как программно предопределить заполнение ответственного или согласующего лица через правила интеграции, если стандартные механизмы не дают результата. Мы можем использовать выражения на встроенном языке для вычисления согласующего лица (менеджера) на основе направления деятельности или подразделения документа. Разберем пример кода, который можно прописать в правилах обмена на стороне ERP:
мСогласующий = Неопределено;
Если ТипЗнч(Параметры.Источник.ДокументОснование) = Тип("ДокументСсылка.СТ_ЗаказВСнабжение") Тогда
Если ЗначениеЗаполнено(Параметры.Источник.ДокументОснование)
И ЗначениеЗаполнено(Параметры.Источник.ДокументОснование.НаправлениеДеятельности) Тогда
мСогласующий = Параметры.Источник.ДокументОснование.НаправлениеДеятельности.СТ_Менеджер;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(мСогласующий) Тогда
мСогласующий = Параметры.Источник.Подразделение.СТ_СогласующийРасходБюджета;
КонецЕсли;
Параметры.Результат = мСогласующий;
Этот алгоритм позволяет гибко определить ответственное лицо еще на этапе выгрузки данных, минимизируя человеческий фактор (например, когда пользователь забыл заполнить направление деятельности в документе ERP).
Чтобы исключить жесткое падение бизнес-процессов, выполним следующие настройки в 1С:Документооборот:
Вторая частая проблема интеграции — ситуация, когда процесс согласования в 1С:ДО успешно завершается, но в 1С:ERP статус документа (например, Состояние согласования) остается неизменным (например, «На согласовании» вместо «Согласован»).
Проанализируем архитектуру этой подсистемы. Обновление реквизитов в ERP на основе данных ДО — это асинхронный процесс, выполняемый через регламентные задания. Давайте разберем по шагам ключевые точки отказа этого механизма.
Синхронизация статусов не происходит мгновенно. Изменение состояния документа в 1С:ДО регистрируется в очереди обмена и передается в ERP. Нам необходимо проверить:
Формирование сообщений обмена для интегрированных систем.Интеграция с 1С:Документооборот - Выполнить обмен данными. Откроем журнал регистрации в ERP и убедимся, что это задание завершается успешно, без генерации ошибок.Частой ошибкой настройки является путаница между различными типами состояний в 1С:ДО. В 1С:ДО у документа есть независимые состояния:
Если в 1С:ДО документ прошел процесс согласования и сразу перешел в статус «Зарегистрирован», а правила получения в ERP настроены исключительно на чтение реквизита Состояние согласования, то ERP проигнорирует статус регистрации. Система будет по-прежнему ожидать передачи статуса «Согласован». В этом случае необходимо скорректировать правила получения данных.
Перейдем в настройки бесшовной интеграции на стороне 1С:ERP. Откроем правила получения данных из 1С:ДО для нашего типа документа. Для реквизита, отвечающего за статус согласования, обязательно должен быть установлен флаг «Обновлять». Если этот флаг снят, 1С:ERP запишет статус только один раз при первоначальном связывании документов, а все последующие изменения в ДО обновляться в ERP не будут.
Наиболее надежный способ синхронизации статусов, который решает проблему различий в перечислениях конфигураций — написание собственного алгоритма получения данных. В правилах интеграции в 1С:ERP для реквизита статуса выберем способ получения «Выражение на встроенном языке» и напишем обработчик:
// Пример сопоставления статусов согласования и регистрации
Если Параметры.statusApproval.name = "Согласован" Тогда
Параметры.Результат = Перечисления.СтатусыЗаказовПоставщикам.Подтвержден;
ИначеЕсли Параметры.statusApproval.name = "Не согласован" Тогда
Параметры.Результат = Перечисления.СтатусыЗаказовПоставщикам.Отклонен;
ИначеЕсли Параметры.statusApproval.name = "На согласовании" Тогда
Параметры.Результат = Перечисления.СтатусыЗаказовПоставщикам.НаСогласовании;
ИначеЕсли ЗначениеЗаполнено(Параметры.РегистрацияНомер) Тогда
// Если документ зарегистрирован, мы также можем считать его согласованным в ERP
Параметры.Результат = Перечисления.СтатусыЗаказовПоставщикам.Подтвержден;
КонецЕсли;
Использование подобных выражений позволяет обойти любые жесткие ограничения типовой синхронизации и гарантирует корректное обновление статусов документов в ERP при любых изменениях в процессах 1С:Документооборота.