При настройке бесшовной интеграции между 1С:ERP Управление предприятием и 1С:Документооборот (ДО) одной из самых востребованных задач является автоматическое изменение статуса документа в ERP по результатам согласования в ДО. Рассмотрим ситуацию, когда при настроенных правилах интеграции статус «Заявки на расходование денежных средств» в ERP упорно отказывается обновляться, несмотря на успешное завершение процессов в Документообороте. Разберем по шагам, как правильно написать код правил, какие настройки проверить и какие нюансы платформы могут блокировать обмен данными.
Прежде чем приступать к написанию кода, проанализируем настройки самих правил интеграции реквизитов. В форме настройки правила для реквизита Статус в ERP крайне важно установить флаг «Обновлять». Если этот флаг не установлен, система запишет статус только один раз при создании связи между объектами. Все последующие изменения (например, переход из состояния «На согласовании» в «Согласован») будут игнорироваться механизмом обмена. Выясним причину: механизм бесшовной интеграции работает через регистрацию изменений (поможет обработка управления регистрацией изменений для планов обмена), и флаг «Обновлять» дает системе понять, что данный реквизит должен синхронизироваться на протяжении всего жизненного цикла документа.
При обмене данными через бесшовную интеграцию 1С:ERP получает данные из ДО в виде объектов XDTO. В правилах интеграции мы обращаемся к Параметры.Источник, который и является этим объектом. Рассмотрим подробнее, почему стандартные обращения могут не работать. Проблема часто кроется в имени свойства. В зависимости от версии подсистемы интеграции, состояние согласования может передаваться в свойствах status или statusApproval. Проанализируем пример кода, который учитывает современные требования подсистемы:
Если Параметры.Источник.statusApproval <> Неопределено Тогда
Если Параметры.Источник.statusApproval.name = "Согласован" Тогда
Параметры.Результат = Перечисления.СтатусыЗаявокНаРасходованиеДенежныхСредств.Согласована;
ИначеЕсли Параметры.Источник.statusApproval.name = "Не согласован" Тогда
Параметры.Результат = Перечисления.СтатусыЗаявокНаРасходованиеДенежныхСредств.Отклонена;
ИначеЕсли Параметры.Источник.statusApproval.name = "На согласовании" Тогда
Параметры.Результат = Перечисления.СтатусыЗаявокНаРасходованиеДенежныхСредств.НеСогласована;
КонецЕсли;
КонецЕсли;
Важный нюанс: Обратите внимание на обязательную проверку на Неопределено. Если объект в Документообороте еще не был запущен по маршруту согласования, свойство statusApproval может отсутствовать в XDTO-пакете. Без этой проверки система выдаст ошибку при попытке обращения к свойству, и обновление статуса прервется.
Текстовое наименование статуса (например, "Согласован") может измениться при обновлении версии 1С:Документооборот или при изменении локализации. Для более стабильной работы рекомендуется использовать внутренние идентификаторы объектов (ID). Посмотрим на пример кода, использующий objectID.id:
// Проверяем наличие свойства через программный интерфейс подсистемы
УстановленСтатусСогласования = ИнтеграцияС1СДокументооборот.СвойствоУстановлено(Параметры.Источник, "statusApproval");
Если УстановленСтатусСогласования Тогда
Если Параметры.Источник.statusApproval.objectID.id = "Согласован" Тогда
Параметры.Результат = Перечисления.СтатусыЗаявокНаРасходованиеДенежныхСредств.Согласована;
ИначеЕсли Параметры.Источник.statusApproval.objectID.id = "НаСогласовании" Тогда
Параметры.Результат = Перечисления.СтатусыЗаявокНаРасходованиеДенежныхСредств.НеСогласована;
ИначеЕсли Параметры.Источник.statusApproval.objectID.id = "НеСогласован" Тогда
Параметры.Результат = Перечисления.СтатусыЗаявокНаРасходованиеДенежныхСредств.Отклонена;
КонецЕсли;
КонецЕсли;
Иногда код написан верно, но статус в ERP все равно не меняется. Выясним, почему это происходит на уровне бизнес-логики конфигурации. Рассмотрим основные причины:
Заявка оплачена. Нельзя изменять статус заявки.Для диагностики этих случаев проанализируем Журнал регистрации в ERP. Ищите записи по метаданным ОбщийМодуль.ИнтеграцияС1СДокументооборотОбмен. Там фиксируются исключения, возникающие при попытке записи объекта.
Проанализируем работу транспортного уровня интеграции. В системе существует регистр сведений Сведения о сообщениях обмена с интегрированными системами. Процесс обмена выглядит так:
Если в регистре дата передачи сообщения не заполняется, значит, сообщение «зависло» на стороне отправителя или узел обмена настроен некорректно. Проверьте, чтобы в настройках интеграции был указан актуальный узел обмена и отсутствовали дубли узлов в плане обмена ИнтеграцияС1СДокументооборот. Для детального анализа этого регистра и выявления ошибок синхронизации подойдёт внешний отчет для мониторинга проблем обмена с Документооборотом.
Если вы используете или планируете переход на 1С:Документооборот 3.0, имейте в виду, что концепция «Состояний» там изменилась — для этого подойдёт интеграция 1С:ERP с 1С:Документооборот 2.1 и 3.0. Вместо одного реквизита согласования используется механизм гибких состояний документа. В правилах интеграции для версии 3.0 обращение может идти через коллекцию states. Также рекомендуется использовать метод ИнтеграцияС1СДокументооборот.СвойствоУстановлено, чтобы код оставался универсальным при обновлениях подсистемы интеграции.
Подводя итог, для успешной синхронизации статусов выполним следующие действия:
Статус.statusApproval <> Неопределено или специализированные функции БСП.objectID.id), а не на строковые представления.Сведения о сообщениях обмена и Журнал регистрации на предмет ошибок блокировок или прав доступа.Такой комплексный подход позволит создать отказоустойчивую систему согласования, где данные между ERP и Документооборотом всегда будут находиться в актуальном состоянии.