Как настроить синхронизацию статусов заявок на расходование ДС при интеграции 1С:ERP и 1С:Документооборот?

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

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

Обязательная настройка правил интеграции

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

Разбор логики работы с XDTO-объектами

При обмене данными через бесшовную интеграцию 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. Документ оплачен: Если по «Заявке на расходование ДС» уже введены платежные документы или она находится в статусе «К оплате», ERP программно запрещает редактирование статуса. В Журнале регистрации это может отражаться как ошибка Заявка оплачена. Нельзя изменять статус заявки.
  2. Интерактивная блокировка: Если в момент выполнения регламентного задания по обмену данными документ открыт пользователем в ERP на редактирование, система не сможет записать новый статус из-за объектной блокировки.
  3. Права доступа: Фоновое задание, выполняющее обмен, должно обладать правами на изменение статусов и проведение соответствующих документов.

Для диагностики этих случаев проанализируем Журнал регистрации в ERP. Ищите записи по метаданным ОбщийМодуль.ИнтеграцияС1СДокументооборотОбмен. Там фиксируются исключения, возникающие при попытке записи объекта.

Мониторинг очереди сообщений

Проанализируем работу транспортного уровня интеграции. В системе существует регистр сведений Сведения о сообщениях обмена с интегрированными системами. Процесс обмена выглядит так:

Если в регистре дата передачи сообщения не заполняется, значит, сообщение «зависло» на стороне отправителя или узел обмена настроен некорректно. Проверьте, чтобы в настройках интеграции был указан актуальный узел обмена и отсутствовали дубли узлов в плане обмена ИнтеграцияС1СДокументооборот. Для детального анализа этого регистра и выявления ошибок синхронизации подойдёт внешний отчет для мониторинга проблем обмена с Документооборотом.

Особенности для новых версий (ДО 3.0)

Если вы используете или планируете переход на 1С:Документооборот 3.0, имейте в виду, что концепция «Состояний» там изменилась — для этого подойдёт интеграция 1С:ERP с 1С:Документооборот 2.1 и 3.0. Вместо одного реквизита согласования используется механизм гибких состояний документа. В правилах интеграции для версии 3.0 обращение может идти через коллекцию states. Также рекомендуется использовать метод ИнтеграцияС1СДокументооборот.СвойствоУстановлено, чтобы код оставался универсальным при обновлениях подсистемы интеграции.

Итоги и рекомендации

Подводя итог, для успешной синхронизации статусов выполним следующие действия:

  1. Проверим наличие галочки «Обновлять» в правилах интеграции для реквизита Статус.
  2. Используем в коде проверку на наличие свойства через statusApproval <> Неопределено или специализированные функции БСП.
  3. При написании условий ориентируемся на внутренние идентификаторы (objectID.id), а не на строковые представления.
  4. Регулярно проверяем регистр Сведения о сообщениях обмена и Журнал регистрации на предмет ошибок блокировок или прав доступа.

Такой комплексный подход позволит создать отказоустойчивую систему согласования, где данные между ERP и Документооборотом всегда будут находиться в актуальном состоянии.

← На главную