Как ограничить запуск процесса исполнения только согласованными документами при интеграции 1С:КА и 1С:ДО?

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

При интеграции систем 1С:Комплексная автоматизация (1С:КА) и 1С:Документооборот (1С:ДО) часто возникает архитектурная задача: необходимо выстроить жесткую последовательность бизнес-процессов. Типичный пример — запретить отправку заявки на исполнение (оплату), пока она не прошла стадию согласования. Рассмотрим, почему стандартные условия шаблонов могут не срабатывать в интегрированной среде и как решить эту проблему различными способами.

Метод 1. Использование комплексного процесса в 1С:ДО

Проанализируем самый правильный с точки зрения методологии 1С:ДО способ. Вместо создания двух независимых процессов (Согласование и Исполнение) рекомендуется использовать один Комплексный процесс. Это позволяет настроить автоматическую смену этапов без участия пользователя в 1С:КА.

Разберем по шагам, как это работает:

  1. Создадим шаблон комплексного процесса и добавим в него два действия: сначала Согласование, затем Исполнение.
  2. Установим порядок выполнения Смешанный или Последовательный.
  3. В настройках действия «Исполнение» укажем условие старта. Система автоматически позволяет выбрать условие Если Согласован.
  4. Если задачи исполнения должны прийти сотруднику не сразу, используем механизм Отложенного старта. В настройках этапа можно указать задержку в несколько часов или дней.

Преимущество этого метода в том, что пользователю в 1С:КА достаточно запустить один процесс. Если согласование не будет пройдено, задача на исполнение просто не создастся, и система сама остановит маршрут.

Метод 2. Программная проверка статуса через встроенный язык

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


УстановитьПривилегированныйРежим(Истина);

Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   ТекущиеСостоянияДокументов.Состояние
    |ИЗ
    |   РегистрСведений.ТекущиеСостоянияДокументов КАК ТекущиеСостоянияДокументов
    |ГДЕ
    |   ТекущиеСостоянияДокументов.Документ = &Документ
    |   И ТекущиеСостоянияДокументов.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияДокументов.Согласован)";

Запрос.УстановитьПараметр("Документ", Предмет.Ссылка);
РезультатЗапроса = Запрос.Выполнить();

Если РезультатЗапроса.Пустой() Тогда
    Результат = Ложь; // Документ не согласован
Иначе
    Результат = Истина; // Документ согласован
КонецЕсли;

УстановитьПривилегированныйРежим(Ложь);

Важно помнить, что при работе через веб-сервисы (интеграция) код должен исполняться на стороне 1С:Документооборот. В 1С:КА статус может быть неактуальным, если не настроена оперативная синхронизация через регистр ОбъектыИнтеграцииС1СДокументооборот.

Метод 3. Фильтрация списка шаблонов на стороне 1С:КА через расширение

Иногда возникает проблема: в 1С:ДО шаблоны настроены верно, но при нажатии кнопки «Создать на основании -> Процесс 1С:ДО» в 1С:КА вываливается огромный список всех доступных шаблонов. Чтобы этого избежать, можно использовать расширение и перехватить заполнение дерева шаблонов.

Рассмотрим пример модификации метода ЗаполнитьДеревоШаблонов в модуле Обработки.ИнтеграцияС1СДокументооборот. Проанализируем логику фильтрации по статусу объекта в учетной системе:


&Вместо("ЗаполнитьДеревоШаблонов")
Процедура Расш_ЗаполнитьДеревоШаблонов(РезультатДеревоШаблонов)
    // Получаем текущую ссылку на объект в КА (например, Заявка на расход)
    ТекущийОбъектКА = ИнтеграцияС1СДокументооборот.СсылкаИзUUID(ПредметID);
    
    Для каждого Раздел из РезультатДеревоШаблонов.BusinessProcessTemplatesTree Цикл
        Для каждого Шаблон из Раздел.elements Цикл
            // Проверяем статус заявки: если статус не "К оплате", скрываем шаблон исполнения
            Если Шаблон.name = "Оплатить" И ТекущийОбъектКА.Статус <> Перечисления.СтатусыЗаявокНаРасходованиеДенежныхСредств.КОплате Тогда
                Продолжить; // Пропускаем добавление шаблона в список
            КонецЕсли;
            
            // Логика добавления разрешенных шаблонов в дерево...
            НоваяСтрока = Дерево.Строки.Добавить();
            НоваяСтрока.Наименование = Шаблон.name;
        КонецЦикла;
    КонецЦикла;
КонецПроцедуры

Этот подход позволяет пользователю видеть только те действия, которые допустимы для текущего состояния документа в 1С:КА. Это радикально снижает вероятность ошибок персонала.

Метод 4. Настройка правил интеграции и автоматический старт

Выясним причину, по которой шаблоны могут отображаться некорректно. В настройках интеграции на стороне учетной системы (1С:КА) есть раздел «Правила интеграции». Проверьте вкладку «Шаблоны процессов». Там можно жестко ограничить, какие именно шаблоны доступны для конкретного вида документа.

Кроме того, наиболее эффективным методом является настройка Автоматического старта процесса в 1С:ДО по событию изменения состояния документа. Алгоритм следующий:

  1. В 1С:ДО настраивается автоматический старт шаблона «Исполнение».
  2. В качестве условия старта выбирается Изменение состояния документа.
  3. Указывается конкретное состояние: Согласован.

В этом случае пользователю в 1С:КА вообще не нужно запускать второй процесс вручную. Как только согласование будет завершено (в самой 1С:ДО или через задачу в КА), система автоматически создаст процесс исполнения. Это исключает необходимость программных проверок и лишних действий пользователя.

Заключение и рекомендации

Подводя итог, можно выделить следующие рекомендации по выбору способа решения:

← На главную