При разработке печатных форм, отчетов и алгоритмов заполнения документов в 1С:ERP часто возникает задача определить актуального руководителя, главного бухгалтера или кассира организации на определенную дату. Также требуется правильно вывести их фамилии с инициалами. Рассмотрим подробнее, какие типовые механизмы и общие модули платформы предназначены для решения этих задач.
В типовых конфигурациях на базе ERP и Библиотеки стандартных подсистем для работы с подписантами предусмотрен общий модуль ОтветственныеЛицаБП. Разберем основные методы, которые предоставляет данный модуль.
Если нам необходимо получить сразу всех ответственных лиц организации (руководителя, главного бухгалтера, кассира), используем функцию ОтветственныеЛица. Посмотрим на пример вызова функции:
ДатаСреза = ТекущаяДатаСеанса();
СведенияОбОтветственных = ОтветственныеЛицаБП.ОтветственныеЛица(Организация, ДатаСреза);
// Доступ к полученным данным:
СсылкаРуководитель = СведенияОбОтветственных.Руководитель;
ФИОРуководителя = СведенияОбОтветственных.РуководительПредставление;
ДолжностьДиректора = СведенияОбОтветственных.РуководительДолжность;
ГлавбухСсылка = СведенияОбОтветственных.ГлавныйБухгалтер;
ГлавбухФИО = СведенияОбОтветственных.ГлавныйБухгалтерПредставление;
Функция возвращает структуру с полным набором данных по ключевым должностным лицам, актуальным на переданную дату среза.
Когда требуется получить данные только по одному конкретному подписанту, удобнее использовать метод ОтветственноеЛицо. Разберем по шагам, как получить только руководителя компании:
ТипЛица = Перечисления.ОтветственныеЛицаОрганизаций.Руководитель;
ДанныеДиректора = ОтветственныеЛицаБП.ОтветственноеЛицо(Организация, ТипЛица, ДатаСреза);
Проанализируем структуру хранения данных. В конфигурации сведения о назначении ответственных лиц хранятся в периодическом регистре сведений ОтветственныеЛицаОрганизаций.
Если мы формируем сложный отчет или пакетную печать большого количества документов, многократный вызов функций модуля в цикле может замедлить работу. В таких ситуациях эффективнее сделать прямой запрос к срезу последних регистра сведений:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Срез.ОтветственноеЛицо КАК ОтветственноеЛицо,
| Срез.ФизическоеЛицо КАК ФизическоеЛицо,
| Срез.Должность КАК Должность
|ИЗ
| РегистрСведений.ОтветственныеЛицаОрганизаций.СрезПоследних(&Период, СтруктурнаяЕдиница = &Организация) КАК Срез";
Запрос.УстановитьПараметр("Период", ДатаДокумента);
Запрос.УстановитьПараметр("Организация", СсылкаНаОрганизацию);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Обработка полученных строк
КонецЦикла;
Для корректного вывода подписей в печатных формах требуется сокращать полное имя физического лица до вида «Фамилия И. О.» или «И. О. Фамилия». Для этой цели служит метод общего модуля ФизическиеЛицаКлиентСервер.ФамилияИнициалы.
Рассмотрим различные варианты использования этой функции:
ПолноеФИО = "Иванов Иван Иванович";
КраткоеФИО = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(ПолноеФИО);
// Результат: "Иванов И. И."
Истина во второй параметр функции:
КраткоеФИО = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(ПолноеФИО, Истина);
// Результат: "И. И. Иванов"
Разберем важные особенности, с которыми можно столкнуться на практике:
ФизическиеЛица содержит только текущие данные. Если сотрудник менял фамилию, для ретроспективных печатных форм необходимо считывать актуальные данные на дату документа из периодического регистра сведений ФИОФизическихЛиц.СклонениеПредставленийОбъектов.ПросклонятьФИО.ОтветственныеЛицаБП возвращает только уставных руководителей. Если документ подписывает сотрудник по доверенности или приказу, информацию о правомочном лице необходимо получать через механизмы справочников ОснованияПраваПодписи или модуль ПечатьТорговыхДокументов.