Как настроить повторное согласование в 1С:ERP через бесшовную интеграцию с 1С:Документооборот 3.0 без интерактивных окон

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

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

Почему возникает требование интерактивного действия?

Проанализируем ситуацию: в 1С:Документооборот 3.0 механизмы обработки документов претерпели значительные изменения по сравнению с версией 2.1. Теперь вместо жестких бизнес-процессов используются Правила обработки документов. При нажатии кнопки "Повторить" (отправка на новый цикл согласования) система ДО по умолчанию пытается вызвать форму для уточнения состава участников или параметров процесса.

Рассмотрим техническую сторону вопроса. Взаимодействие систем происходит через веб-сервис DMService. Когда пользователь в ERP нажимает кнопку выполнения задачи, запрос уходит в ДО. Если логика ДО подразумевает открытие какого-либо диалогового окна (даже если там просто нужно нажать "ОК"), веб-сервис не может "пробросить" это окно в интерфейс ERP. В результате процесс прерывается, так как контекст для отрисовки формы отсутствует. Выясним, как это можно обойти программно.

Шаг 1. Подготовка флага выполнения через веб-сервис

Для начала нам необходимо гарантировать, что система "понимает", когда действие выполняется удаленно через интеграцию. Разберем изменения, которые необходимо внести в модуль обработки запросов. Нам потребуется расширение для конфигурации 1С:Документооборот.

Найдем модуль ОбработкаЗапросовXDTOБизнесПроцессыИЗадачи. Нам нужно убедиться, что в параметрах выполнения задачи присутствует признак работы через веб-сервис. Если его нет, его нужно добавить принудительно. Рассмотрим пример кода, который необходимо вставить:


// В расширении для модуля ОбработкаЗапросовXDTOБизнесПроцессыИЗадачи
&После("ВыполнитьДействиеЗадачи")
Процедура Инт_ВыполнитьДействиеЗадачи(Запрос, Ответ)
    // Устанавливаем признак, что выполнение идет через интеграцию
    ПараметрыВыполнения.Вставить("ВыполнениеДействийЧерезВебСервис", Истина);
КонецПроцедуры

Этот шаг критически важен, так как он создает маркер, на который мы будем ориентироваться в дальнейшем, чтобы не сломать стандартное поведение системы при работе непосредственно в самом интерфейсе Документооборота.

Шаг 2. Подавление интерактивного окна в общем модуле

Теперь перейдем к основной части решения. Основная логика проверки необходимости вызова формы сосредоточена в общем модуле ИнтеграцияЗадач. Проанализируем процедуру ПередИнтерактивнымВыполнениемДействияСогласованиеОзнакомиться. Именно здесь система принимает решение: нужно ли показывать пользователю список согласующих для повторного цикла.

Нам необходимо внедрить проверку: если действие вызвано через веб-сервис, мы принудительно отключаем требование интерактива. Посмотрим, как выглядит структура кода в расширении:


&После("ПередИнтерактивнымВыполнениемДействияСогласованиеОзнакомиться")
Процедура Инт_ПередИнтерактивнымВыполнениемДействияСогласованиеОзнакомиться(ДанныеВыполнения, ПараметрыВыполнения)
    
    РезультатДействия = ДанныеВыполнения.РезультатДействия;
    
    // Проверяем, что выбран результат "Отправлено повторно"
    Если РезультатДействия = Справочники.РезультатыДействийЗадач.ОтправленоПовторно Тогда
        
        // Используем наш флаг из Шага 1
        Если ПараметрыВыполнения.Свойство("ВыполнениеДействийЧерезВебСервис") 
            И ПараметрыВыполнения.ВыполнениеДействийЧерезВебСервис Тогда
            
            // Программное подавление требования интерактивного окна
            ДанныеВыполнения.ТребуетсяИнтерактивноеДействие = Ложь;
            
            // Очищаем параметры, которые могут заставить систему искать форму
            Если ДанныеВыполнения.ДополнительныеПараметры.Свойство("БизнесПроцесс") Тогда
                ДанныеВыполнения.ДополнительныеПараметры.Удалить("БизнесПроцесс");
            КонецЕсли;
            
            Если ДанныеВыполнения.ДополнительныеПараметры.Свойство("ТочкаМаршрута") Тогда
                ДанныеВыполнения.ДополнительныеПараметры.Удалить("ТочкаМаршрута");
            КонецЕсли;
            
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

Разбор ключевых моментов решения

Рассмотрим подробнее, что именно делают эти строки кода:

  1. ДанныеВыполнения.ТребуетсяИнтерактивноеДействие = Ложь; — это "сердце" решения. Мы сообщаем ядру интеграции, что не нужно ждать ответа от пользователя, и процесс можно продолжать автоматически.
  2. Удаление свойств БизнесПроцесс и ТочкаМаршрута — это необходимо для того, чтобы стандартные механизмы ДО не пытались инициализировать контекст формы выбора участников. Поскольку мы работаем в режиме "без правок", система подхватит настройки из Правил обработки документов.
  3. Безопасность — использование свойства ВыполнениеДействийЧерезВебСервис гарантирует, что если пользователь зайдет напрямую в базу ДО и нажмет "Повторить", он все еще увидит форму выбора участников (если это разрешено настройками), так как для него этот флаг будет равен Ложь.

Рекомендации по настройке Правил обработки

Помимо внесения правок в код, проанализируем настройки самих процессов в 1С:Документооборот 3.0. Чтобы минимизировать вероятность ошибок при программном обходе интерактива, выполним следующие действия:

Заключение

Описанный метод позволяет полностью автоматизировать процесс возврата документа на согласование из ERP 2.5 без перехода в интерфейс Документооборота. Мы рассмотрели, как с помощью расширения и манипуляции параметрами ДанныеВыполнения можно обойти жесткое ограничение веб-сервиса. Помните, что данный подход следует применять с осторожностью, если в вашей организации бизнес-процесс требует обязательного ручного изменения списка согласующих на каждом новом цикле.

← На главную