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

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

При работе с программным продуктом 1С:Документооборот 8 КОРП версии 2.1 пользователи часто сталкиваются с тем, что стандартных реквизитов в настройках заполнения шаблонов файлов недостаточно. Одной из типичных задач является вывод должности сотрудника, подготовившего или подписавшего документ, а также формирование списка участников рабочей группы непосредственно в тексте документа Word.

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

Вывод должности ответственного лица

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

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


РезультатОбработки = "";
Сотрудник = Файл.ВладелецФайла.Подготовил;

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

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

Вывод участников рабочей группы списком

Более сложная задача — это вывод участников рабочей группы документа. Сложность заключается в том, что рабочая группа не является табличной частью документа в привычном понимании программиста, а хранится в отдельном регистре сведений РабочиеГруппы. Кроме того, участником может быть не только конкретный пользователь, но и целое подразделение или роль.

Рассмотрим по шагам, как написать эффективный запрос для получения этого списка. Нам необходимо выполнить соединение данных документа с записями регистра по ссылке на объект.

Проанализируем пример скрипта, который собирает всех участников в одну текстовую строку с разделением по строкам:


РезультатОбработки = "";
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	РабочиеГруппы.Участник КАК Участник
    |ИЗ
    |	РегистрСведений.РабочиеГруппы КАК РабочиеГруппы
    |ГДЕ
    |	РабочиеГруппы.Объект = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", Файл.ВладелецФайла);

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

МассивУчастников = Новый Массив;

Пока Выборка.Следующий() Цикл
    // Добавляем строковое представление участника в массив
    МассивУчастников.Добавить(Строка(Выборка.Участник));
КонецЦикла;

// Соединяем участников, разделяя их переносом строки
РезультатОбработки = СтрСоединить(МассивУчастников, Символы.ПС);

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

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

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

Посмотрим на алгоритм реализации такой проверки:

  1. Получаем список участников из регистра РабочиеГруппы.
  2. Для каждого участника проверяем его тип.
  3. Если тип — СправочникСсылка.Пользователи, просто добавляем в список.
  4. Если тип — СправочникСсылка.СтруктураПредприятия (подразделение), вызываем функцию РаботаСПользователями.ПолучитьСоставПодразделения.

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

Оптимизация и использование алгоритмов

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

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

Также стоит обратить внимание на производительность. При формировании запроса в ГДЕ всегда указывайте РабочиеГруппы.Объект = &Ссылка. Это позволит SQL-серверу использовать индекс по полю Объект и мгновенно находить нужные записи, не перебирая весь регистр, который в крупных организациях может содержать миллионы строк.

Работа с падежами

Если в шаблоне документа ФИО и должность должны стоять в дательном падеже (например, «Кому: Директору Иванову И.И.»), используйте встроенную функцию склонения. В 1С:ДО 2.1 это обычно делается так:

РезультатОбработки = СклонениеПредставленийОбъектов.ПросклонятьФИО(ФИО, 3); (где 3 — дательный падеж).

Важно: Склонять нужно каждого участника по отдельности внутри цикла обхода выборки запроса, а не всю итоговую строку целиком, так как алгоритм склонения не сможет корректно обработать длинный список имен, разделенных переносами. Также в визуальное оформление часто входит вставка QR-кода в файлы doc и docx.

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

← На главную