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

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

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

В этой статье мы подробно разберем, как обойти эти ограничения, используя возможности внутреннего языка 1С. Мы рассмотрим механизмы создания условий маршрутизации, гибких автоподстановок и скриптов для определения исполнителей. Совместно мы пройдем путь от постановки задачи до написания программного кода.

Понимание контекста: работа с объектом «Предмет»

Прежде чем приступать к написанию кода, проанализируем, как система «видит» документ внутри бизнес-процесса. Главным объектом взаимодействия является Предмет. В коде условий или автоподстановок под этим словом понимается ссылка на документ (или другой объект), который прикреплен к процессу. Чтобы обратиться к данным его табличной части, нам необходимо знать имя этой ТЧ в конфигураторе.

Рассмотрим стандартную ситуацию: у нас есть внутренний документ с табличной частью Товары. В этой таблице есть колонка Сумма и Ответственный. Наша задача — изменить ход процесса или состав участников на основании этих данных.

Метод 1: Написание условий маршрутизации на внутреннем языке

Условия маршрутизации определяют, по какой ветке пойдет процесс (например, нужно ли дополнительное согласование финансового директора). Если логика зависит от строк ТЧ, выберем способ задания условия «На внутреннем языке».

Выясним причину, почему это эффективно: в этом режиме система ожидает от нас возврата булева значения (Истина или Ложь) в переменную Результат. Разберем по шагам логику скрипта, который проверяет, есть ли в таблице хотя бы одна строка с суммой более 100 000 рублей:


Результат = Ложь;
// Проверяем, что предмет вообще заполнен и имеет нужную ТЧ
Если Предмет <> Неопределено Тогда
    Для Каждого СтрокаТЧ Из Предмет.Товары Цикл
        Если СтрокаТЧ.Сумма > 100000 Тогда
            Результат = Истина;
            Прервать; // Условие выполнено, дальше искать нет смысла
        КонецЕсли;
    КонецЦикла;
КонецЕсли;

Этот простой цикл позволяет системе динамически принимать решение о направлении маршрута, анализируя содержимое каждой строки. Важно помнить, что Предмет может быть неопределен, если процесс запущен без основного документа, поэтому проверка на Неопределено обязательна для стабильной работы.

Метод 2: Создание продвинутых автоподстановок

Часто возникает вопрос: как автоматически назначить исполнителей, если их список должен формироваться на основе данных из таблицы? Например, в ТЧ перечислены разные отделы, и согласовать документ должны руководители всех этих отделов. Здесь нам помогут «Дополнительные автоподстановки».

Вопреки распространенному заблуждению, автоподстановка может возвращать не одного пользователя, а целый массив (список) объектов. Проанализируем ситуацию, когда нам нужно собрать всех ответственных, указанных в табличной части предмета:

  1. Перейдем в раздел Настройка и администрирование — Бизнес-процессы — Автоподстановки.
  2. Создадим новую автоподстановку и выберем тип «Скрипт».
  3. В поле кода напишем алгоритм формирования массива исполнителей.

Посмотрим на пример такого кода:


СписокИсполнителей = Новый Массив;

Если Предмет <> Неопределено Тогда
    Для Каждого СтрокаТЧ Из Предмет.Товары Цикл
        // Добавляем пользователя, если его еще нет в списке (избегаем дублей)
        Если ЗначениеЗаполнено(СтрокаТЧ.Ответственный) 
            И СписокИсполнителей.Найти(СтрокаТЧ.Ответственный) = Неопределено Тогда
            СписокИсполнителей.Добавить(СтрокаТЧ.Ответственный);
        КонецЕсли;
    КонецЦикла;
КонецЕсли;

Результат = СписокИсполнителей;

Этот скрипт вернет системе массив ссылок на справочник Пользователи. В результате, при старте процесса «Согласование», программа автоматически подставит в список участников всех людей, найденных в табличной части.

Метод 3: Использование скриптов для определения исполнителей в шаблонах

В сложных шаблонах процессов (например, комплексных процессах) существует возможность указать исполнителя не просто через автоподстановку, а через «Скрипт определения исполнителей» непосредственно в настройках действия. Это дает еще больше гибкости.

Рассмотрим подробнее преимущества этого метода:

Пример логики для поиска руководителей подразделений из ТЧ документа:


ИсполнителиДляЗадачи = Новый Массив;

Для Каждого СтрокаТЧ Из Предмет.Подразделения Цикл
    // Предположим, в ТЧ есть ссылка на подразделение
    Подразделение = СтрокаТЧ.Подразделение;
    // Используем типовую функцию для поиска руководителя
    Руководитель = РаботаСПользователями.ПолучитьРуководителяПодразделения(Подразделение);
    
    Если ЗначениеЗаполнено(Руководитель) Тогда
        ИсполнителиДляЗадачи.Добавить(Руководитель);
    КонецЕсли;
КонецЦикла;

Возврат ИсполнителиДляЗадачи;

Важные технические нюансы и оптимизация

При работе со скриптами в 1С:Документооборот 2.1 следует учитывать несколько критически важных моментов, чтобы избежать ошибок и падения производительности системы.

Работа с несколькими предметами. В одном процессе может быть несколько документов (основной предмет, вспомогательный). Проанализируем код: если вы используете переменную Предмет, убедитесь, что вы обращаетесь именно к тому типу документа, который ожидаете. Безопаснее использовать конструкцию:


Если ТипЗнч(Предмет) = Тип("СправочникСсылка.ВнутренниеДокументы") Тогда
    // Обработка
КонецЕсли;

Производительность. Избегайте сложных запросов к базе данных внутри цикла по строкам табличной части. Если вам нужно получить данные по всем строкам, лучше сначала выгрузить колонку ТЧ в массив, а затем одним запросом получить все необходимые дополнительные данные (например, контактную информацию пользователей или их руководителей).

Условия выбора исполнителей. Не забывайте про механизм Условия выбора исполнителей. Это промежуточный слой между ролью и конкретным человеком. Вы можете настроить правило: «Если в ТЧ документа значение колонки Категория равно Срочно, то роль Согласующий исполняется Петровым, иначе — Сидоровым». Это позволяет оставить схему процесса чистой, не перегружая её лишними блоками кода.

Подводя итог, можно сказать, что работа с табличными частями в маршрутах 1С:Документооборот 2.1 — это мощный инструмент автоматизации. Хотя визуальный интерфейс накладывает ограничения, использование внутреннего языка позволяет реализовать практически любую бизнес-логику, делая процессы по-настоящему интеллектуальными.

← На главную