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