Как программно получить ФИО и должности ответственных лиц организации и контрагента в 1С:УНФ

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

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

В данной статье мы разберем по шагам, как правильно извлекать эти данные, используя встроенные функции общих модулей, и как адаптировать это решение для системы компоновки данных (СКД).

Изменение архитектуры: Почему регистры сведений ушли в прошлое

Прежде чем переходить к коду, проанализируем ситуацию с хранением данных. В старых редакциях 1С информация об ответственных лицах хранилась в периодическом регистре сведений ОтветственныеЛицаОрганизаций. Однако в актуальных версиях УНФ разработчики перешли на использование справочника Подписи.

Выясним причину таких изменений:

  1. Факсимильные подписи: В справочнике удобнее хранить файлы изображений (сканы подписей и печатей) для их последующего вывода в электронные документы.
  2. Периоды действия: Справочник позволяет гибко настраивать даты начала и окончания действия полномочий конкретного лица.
  3. Основания полномочий: Здесь же хранится информация о доверенностях (номер, дата), что критично для корректного формирования договоров.

Получение ответственных лиц нашей организации

Для того чтобы не писать сложные запросы к справочнику Подписи вручную, в типовых конфигурациях предусмотрены функции общих модулей. Рассмотрим наиболее эффективный способ получения структуры ответственных лиц.

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

Пример вызова функции в коде:


// ОрганизацияСсылка - ссылка на элемент справочника "Организации"
СтруктураОтветственных = УправлениеНебольшойФирмойЭлектронныеДокументыСервер.ОтветственныеЛицаОрганизационнойЕдиницы(ОрганизацияСсылка);

// Теперь мы можем обратиться к полям структуры
ФИОРуководителя = СтруктураОтветственных.РуководительФИО;
ДолжностьРуководителя = СтруктураОтветственных.РуководительДолжность;

Если вам требуется более детальная информация, например, для формирования юридически значимых документов, рекомендуется использовать функцию СведенияОбОрганизации из модуля УправлениеНебольшойФирмойСервер. Она собирает полный пакет данных, включая контактную информацию и коды (ИНН, КПП).

Получение данных подписанта со стороны контрагента

Ситуация с контрагентами отличается. Информация о том, кто подписывает документы от имени партнера, обычно привязана либо к самому контрагенту, либо к его контактным лицам.

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


// Получаем ссылку на контактное лицо-подписант
ПодписантСсылка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КонтрагентСсылка, "КонтактноеЛицоПодписант");

Если ЗначениеЗаполнено(ПодписантСсылка) Тогда
    ФИОПодписанта = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПодписантСсылка, "Наименование");
    ДолжностьПодписанта = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПодписантСсылка, "Должность");
КонецЕсли;

Важный нюанс: Часто в печатных формах требуется выводить ФИО в родительном падеже (например, «в лице Директора Иванова Ивана Ивановича»). Для этого в УНФ следует использовать функции модуля СклонениеПредставленийОбъектов.

Реализация задачи в Системе компоновки данных (СКД)

Если задача стоит в формировании «подвала» именно внутри отчета на СКД, как упоминалось в исходном вопросе, мы столкнемся с ограничением: в запросе СКД нельзя напрямую вызвать функцию общего модуля. Рассмотрим два варианта решения.

Вариант 1: Вычисляемые поля

В схеме компоновки данных на закладке «Вычисляемые поля» можно создать новое поле и в колонке «Выражение» вызвать функцию. Для этого у общего модуля должен быть установлен флаг Вызов сервера. Например:

УНФПечатьСервер.ПолучитьПредставлениеПодписанта(Организация, ТекущаяДата())

Вариант 2: Набор данных - Объект

Если логика получения данных слишком сложная (нужно проверять основные подписи, сроки действия доверенностей и наличие факсимиле), лучше подготовить данные в программном коде перед выводом отчета.

  1. Создадим таблицу значений с колонками РуководительФИО, РуководительДолжность, КонтрагентПодписантФИО.
  2. Заполним её, используя описанные выше функции.
  3. Передадим эту таблицу в СКД как внешний набор данных.

Работа со справочником «Подписи» напрямую

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Подписи.ФизическоеЛицо.Наименование КАК ФИО,
    |	Подписи.Должность КАК Должность,
    |	Подписи.ДействуетС КАК ДатаНачала,
    |	Подписи.ДействуетПо КАК ДатаОкончания
    |ИЗ
    |	Справочник.Подписи КАК Подписи
    |ГДЕ
    |	Подписи.Владелец = &Организация
    |	И Подписи.ИспользоватьКакОсновную = ИСТИНА
    |	И &ДатаАктуальности МЕЖДУ Подписи.ДействуетС И Подписи.ДействуетПо";

Запрос.УстановитьПараметр("Организация", СсылкаНаОрганизацию);
Запрос.УстановитьПараметр("ДатаАктуальности", ТекущаяДата());

Такой подход позволяет точно определить, кто имел право подписи на дату формирования документа, что особенно важно при печати старых актов или накладных.

Резюме

Подведем итоги. Для красивого и корректного решения задачи в УНФ 1.6/3.0 мы рекомендуем:

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

← На главную