Как оптимизировать повторяющиеся действия «Обработка» для нескольких процессов в 1С:Документооборот 2.1?

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

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

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

Метод 1. Вынос логики в общий модуль (Расширение)

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

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

  1. Создадим новое расширение (или используем существующее).
  2. Добавим в него общий модуль, например, уд_ОбработкаБизнесПроцессов. Установим ему флаги Сервер и Вызов сервера.
  3. Напишем процедуру, которая будет принимать параметры процесса.

Посмотрим на пример кода в общем модуле:


Процедура ЗаполнитьИсполнителейИзВнешнейБазы(ПараметрыДействия, ОбъектПроцесса) Экспорт
    // ПараметрыДействия — это структура, передаваемая из блока "Обработка"
    // ОбъектПроцесса — ссылка на сам бизнес-процесс или документ
    
    // Здесь ваша логика запроса к внешней ИС или чтение доп. реквизитов
    СписокИсполнителей = ПолучитьСписокИзИнтегрированнойБазы(ОбъектПроцесса.Предмет);
    
    Для Каждого ТекущийИсполнитель Из СписокИсполнителей Цикл
        // Логика добавления исполнителей в процесс
    КонецЦикла;
КонецПроцедуры

Теперь в самом шаблоне процесса, в действии Обработка, нам достаточно написать всего одну строку:


уд_ОбработкаБизнесПроцессов.ЗаполнитьИсполнителейИзВнешнейБазы(ПараметрыДействия, БизнесПроцессСсылка);

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

Метод 2. Использование собственных автоподстановок

Выясним причину, по которой автору вопроса пришлось использовать блок Обработка. Это необходимость назначать исполнителей, количество которых заранее неизвестно. 1С:ДО предоставляет мощный механизм — Автоподстановки. Многие привыкли к стандартным вариантам («Автор документа», «Руководитель автора»), но платформа позволяет создавать свои собственные.

Рассмотрим, как создать универсальную автоподстановку, которая заменит блок Обработка:

  1. Перейдем в раздел Настройка и администрирование — Автоподстановки.
  2. Создадим новую запись. В поле «Скрипт» мы можем написать код, который возвращает массив пользователей.
  3. Главное преимущество — автоподстановка может возвращать не одного человека, а целый Массив или СписокЗначений.

Пример скрипта для автоподстановки:


// Скрипт должен вернуть массив ссылок на Пользователей
Результат = Новый Массив;

ДокументСсылка = Предмет; // Предмет — встроенная переменная в контексте автоподстановки
ИсполнителиСтрокой = ОбщегоНазначения.ЗначениеДопРеквизита(ДокументСсылка, "ИдентификаторыВнешнейБазы");

// Логика поиска пользователей в ДО по ID из внешней базы
Для Каждого Ид Из РазбитьСтроку(ИсполнителиСтрокой, ",") Цикл
    НайденныйПользователь = Справочники.Пользователи.НайтиПоРеквизиту("ВнешнийИдентификатор", Ид);
    Если ЗначениеЗаполнено(НайденныйПользователь) Тогда
        Результат.Добавить(НайденныйПользователь);
    КонецЕсли;
КонецЦикла;

Возврат Результат;

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

Метод 3. Механизм бизнес-событий

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

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

Как обрабатывать ситуации с «лишними» задачами?

Часто возникает проблема: в шаблоне настроено 10 этапов, а по логике внешней базы нужно только 3. Если просто оставить исполнителя пустым, процесс может зациклиться или выдать ошибку «Не указан исполнитель».

Проанализируем варианты решения:

  1. Условия маршрутизации: В каждом этапе можно прописать условие. Например, проверять наличие исполнителя в конкретном доп. реквизите. Если реквизит пуст — этап пропускается.
  2. Служебный пользователь: Если количество этапов фиксировано, но исполнители меняются, можно вешать «ненужные» задачи на технического пользователя (например, «Бот-автоисполнитель») и программно завершать их сразу после создания.
  3. Комплексные процессы: В комплексных процессах можно использовать скрипты для управления схемой маршрута. Это позволяет динамически добавлять или удалять действия из очереди выполнения.

Рекомендации по интеграции с внешними системами

Если список исполнителей получается из другой базы (ERP, ЗУП или самописная система), старайтесь избегать прямых COM-соединений внутри процесса. Это сильно замедляет работу пользователя. Рассмотрим более эффективные подходы:

Итог: Оптимальный путь — это сочетание собственных автоподстановок (для визуальной чистоты шаблонов) и общих модулей в расширении (для удобства поддержки кода). Такой подход позволит вам централизованно управлять логикой и избавит от необходимости ручного редактирования каждого шаблона процесса.

← На главную