Как программно получить должность руководителя в 1С:ЗУП 3.1?

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

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

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

Почему ломаются прямые запросы к регистрам данных?

Ранее многие программисты получали должность руководителя простым запросом к регистру сведений СведенияОбОтветственныхЛицах. Однако в современных версиях 1С:ЗУП 3.1 этот подход вызывает ошибку «Поле не найдено». Проанализируем причину:

  1. Ресурс ДолжностьРуководителя в регистре сведений СведенияОбОтветственныхЛицах был переименован разработчиками в УдалитьДолжностьРуководителя.
  2. Текстовые представления должностей и оснований их подписей теперь формируются динамически. Для этого задействуется специализированный регистр сведений ОснованияПолномочийОтветственныхЛиц.
  3. Прямое обращение через запрос к таблицам базы данных нарушает стандарты разработки «1С» и делает ваш код крайне уязвимым к последующим обновлениям системы.

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

Способ 1. Использование общего модуля СведенияОбОтветственныхЛицах (Рекомендуемый)

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

Рассмотрим пример кода:


// Определяем список необходимых сведений через запятую
Сведения = "Руководитель,ДолжностьРуководителяСтрокой,ОснованиеПодписиРуководителя";

// Вызываем экспортный метод общего модуля
ДанныеРуководителя = СведенияОбОтветственныхЛицах.СведенияОбОтветственныхЛицах(Организация, Сведения, Период);

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

Выясним, в чем преимущества данного подхода:

Способ 2. Использование метода ОтветственныеЛицаОрганизации общего модуля ЗарплатаКадры

Если вам требуется быстро получить структуру ответственных лиц в одну строку кода, можно воспользоваться методом общего модуля ЗарплатаКадры, который часто применяется в типовых механизмах конфигурации.

Разберем по шагам его вызов:


// Получаем структуру ответственных лиц на текущую дату
ДанныеПодписантов = ЗарплатаКадры.ОтветственныеЛицаОрганизации(Организация, "Руководитель,ДолжностьРуководителя", ТекущаяДата());

// Читаем полученные значения
РуководительСсылка = ДанныеПодписантов.Руководитель; // Возвращает ссылку на ФизическоеЛицо
ДолжностьРуководителя = ДанныеПодписантов.ДолжностьРуководителя; // Возвращает ссылку на Должность или строку

Этот метод удобен для быстрой инициализации параметров в простых обработках, однако он менее детализирован по сравнению с первым способом, так как не всегда автоматически подтягивает текстовые основания полномочий для подписей документов.

Способ 3. Альтернативный метод через регламентированную отчетность

Существует еще один крайне стабильный метод получения сведений об организации, который присутствует не только в ЗУП 3.1, но и в других конфигурациях на платформе «1С:Предприятие» (например, в «1С:Бухгалтерия» или «1С:ERP»). Он использует механизмы регламентированной отчетности.

Посмотрим на пример использования:


// Формируем массив необходимых показателей
Показатели = СтрРазделить("НаимЮЛСокр,НаимЮЛПол,ФИОРук,ДолжнРук", ",");

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

// Результат будет содержаться в структуре
ФИО_Руководителя = СведенияОрганизация.ФИОРук;
Должность_Руководителя = СведенияОрганизация.ДолжнРук;

Этот метод особенно удобен при разработке печатных форм, так как за один вызов вы можете получить не только ответственных лиц, но и все основные реквизиты компании: юридический адрес, ИНН, КПП, ОГРН и сокращенное наименование.

Особенности получения руководителей подразделений (ПРОФ и КОРП)

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

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

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

Используя описанные выше стандартные методы API, вы гарантируете стабильную работу своего программного кода и успешное обновление конфигурации 1С:ЗУП в будущем.

← На главную