Как в 1С:Документооборот автоматически подставить согласующего из дополнительного реквизита контрагента

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

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

Разберем постановку задачи

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

Архитектура решения: механизм автоподстановок

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

Проанализируем шаги, необходимые для реализации:

  1. Создание нового элемента в справочнике «Автоподстановки для объектов или процессов».
  2. Написание скрипта на языке 1С, который получит доступ к данным документа.
  3. Поиск контрагента в документе и извлечение значения его дополнительного реквизита.
  4. Подключение созданной автоподстановки в шаблон процесса «Согласование».

Реализация программного кода (Скрипт)

Рассмотрим подробнее, как должен выглядеть программный код для извлечения данных. В контексте выполнения автоподстановки нам доступна переменная Источник, которая представляет собой сам объект документа (например, СправочникСсылка.ВнутренниеДокументы).

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


// Инициализируем переменную для хранения найденного контрагента
ПеременнаяКонтрагент = Неопределено;

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

// Если контрагент найден, ищем его дополнительный реквизит
Если ПеременнаяКонтрагент <> Неопределено Тогда
    // Используем встроенные функции БСП для получения значения дополнительного реквизита
    // Название реквизита должно точно совпадать с тем, что указано в системе
    ИмяРеквизита = "Ответственный согласующий (Контрагенты)";
    
    РезультатСкрипта = УправлениеСвойствами.ЗначениеСвойства(ПеременнаяКонтрагент, ИмяРеквизита);
    
    // Проверяем, что в реквизите действительно указан пользователь или роль
    Если ЗначениеЗаполнено(РезультатСкрипта) 
       И (ТипЗнч(РезультатСкрипта) = Тип("СправочникСсылка.Пользователи") 
       Или ТипЗнч(РезультатСкрипта) = Тип("СправочникСсылка.РолиИсполнителей")) Тогда
        
        // Возвращаем результат. Автоподстановка может возвращать одного пользователя,
        // роль или массив пользователей.
        Результат = РезультатСкрипта;
    КонецЕсли;
КонецЕсли;

Нюансы работы с дополнительными реквизитами

Выясним причину, по которой код может не сработать. При обращении к дополнительным реквизитам через функцию УправлениеСвойствами.ЗначениеСвойства(), крайне важно правильно передать ссылку на само свойство. Если вы используете поиск по строке (наименованию), помните, что при переименовании реквизита в пользовательском интерфейсе код перестанет работать. Более надежным способом является поиск реквизита по его уникальному идентификатору (GUID) или использование фиксированного имени в метаданных.

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


Если Результат = Неопределено Тогда
    // Например, подставляем руководителя подразделения ответственного за документ
    Результат = Источник.Ответственный.Руководитель;
КонецЕсли;

Как подключить скрипт в интерфейсе 1С:Документооборот

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

  1. Перейдем в раздел «Настройка и администрирование» — «Автоподстановки».
  2. Создадим новую автоподстановку. В поле «Тип объекта» выберем соответствующий вид документа (например, «Внутренний документ»).
  3. Вставим наш программный код в соответствующее поле редактора.
  4. Сохраним автоподстановку под понятным именем, например, ИзДопРеквизитаКонтрагента.
  5. Откроем нужный Шаблон процесса (Согласование).
  6. На вкладке «Список участников» нажмем кнопку добавления и выберем в списке не конкретного пользователя, а нашу новую автоподстановку.

Особенности для различных версий программы

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

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

Итоги

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

← На главную