К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как получить директора организации в 1С

Как программно получить руководителя организации в 1С: через ответственных лиц, регистр сведений, функции БСП. Готовые примеры кода, проверка результата и типичные ошибки.

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

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

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

Где хранится директор в типовых конфигурациях

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

Первый — регистр сведений «Ответственные лица организаций» (в БСП-конфигурациях) или «Ответственные лица организаций» в Бухгалтерии. Записи содержат организацию, физическое лицо, должность и период действия. Это самый распространённый вариант: он позволяет хранить историю смены руководителей и получать «кто был директором на дату документа».

Второй — реквизит справочника «Организации», например «Руководитель» или «Директор» типа «СправочникСсылка.ФизическиеЛица». Так делают в простых или старых конфигурациях. История здесь не хранится: при смене директора старое значение теряется, и старые документы при переформировании покажут нового руководителя.

Третий — хранение в кадровых данных: руководитель определяется через должность в ЗУП-подобных конфигурациях. Это редкий сценарий для задачи «подставить подписанта», обычно он дополняет, а не заменяет регистр ответственных лиц.

Как проверить, где хранится руководитель в вашей базе

Откройте конфигуратор и посмотрите дерево метаданных. Если в ветке «Регистры сведений» есть «ОтветственныеЛицаОрганизаций» — вероятнее всего, используется механизм ответственных лиц. Дополнительно проверьте наличие общих модулей «ОтветственныеЛицаБСП», «ОтветственныеЛицаСервер» или «ОтветственныеЛицаБП».

Если регистра нет, откройте справочник «Организации» и посмотрите его реквизиты. Ссылочный реквизит на физическое лицо с названием вроде «Руководитель» укажет на второй вариант хранения.

Пользовательский способ проверки: откройте карточку организации в режиме предприятия. Если рядом с реквизитами есть ссылка «Ответственные лица» или вкладка с подписантами — данные лежат в регистре. Если поле «Руководитель» заполняется прямо в форме — это реквизит справочника.

Регистр «ОтветственныеЛицаОрганизаций» естьМеханизм ответственных лиц

Используйте функции БСП/БП или запрос к регистру

Реквизит «Руководитель» в справочникеПростое хранение

Читайте реквизит напрямую, истории нет

Ссылка «Ответственные лица» в карточкеРегистр сведений

Данные периодические, нужна дата среза

Ни регистра, ни реквизитаНетиповая схема

Ищите в расширениях и дополнительных сведениях

Получение директора через функции БСП

В конфигурациях на БСП (УТ 11, ERP, КА, ЗУП) правильный путь — использовать программный интерфейс библиотеки, а не прямые запросы. Это защищает код от изменений структуры регистра при обновлениях.

Типовой вызов выглядит так: модуль ОтветственныеЛицаБСП (или ОтветственныеЛицаСервер, в зависимости от версии) возвращает структуру с данными ответственных лиц по организации на дату. Из структуры берётся руководитель и его должность.

bsl
// Вариант для конфигураций на БСП
Ответственные = ОтветственныеЛицаБСП.ОтветственныеЛицаОрганизации(
    Организация, ТекущаяДатаСеанса());

Директор = Ответственные.Руководитель;          // Ссылка на физлицо
ДолжностьДиректора = Ответственные.ДолжностьРуководителя;

// Для представления в печатной форме
ФИОДиректора = ФизическиеЛицаКлиентСервер.ФамилияИнициалыФизЛица(
    Строка(Директор));

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

Для получения ФИО в нужном формате (склонение, инициалы) используйте данные регистра «ФИО физических лиц» или функции работы с физлицами, а не поле «Наименование» справочника — наименование может содержать лишние пробелы и не склоняется.

Получение директора в 1С:Бухгалтерии

В «Бухгалтерии предприятия» есть собственный программный интерфейс. Основная функция — ОтветственныеЛицаБП.ОтветственныеЛица, которая возвращает структуру с руководителем, главным бухгалтером и другими лицами на указанную дату.

bsl
// 1С:Бухгалтерия 3.0
ОтветственныеЛица = ОтветственныеЛицаБП.ОтветственныеЛица(
    Организация, ДатаДокумента);

Директор = ОтветственныеЛица.Руководитель;              // физлицо
ДиректорПредставление = ОтветственныеЛица.РуководительПредставление;
Должность = ОтветственныеЛица.РуководительДолжностьПредставление;

Важная особенность Бухгалтерии: функция учитывает не только постоянные назначения, но и временное исполнение обязанностей, если оно оформлено в базе. Поэтому при корректно заполненных данных вы получите именно того, кто подписывает документы на дату документа, а не «штатного» директора.

Для печатных форм документов в БП есть и более специализированные функции, например получение данных ответственных лиц сразу со всеми представлениями для подстановки в макет. Ищите их в модуле ОтветственныеЛицаБП по слову «Представление».

Универсальный способ: запрос к регистру сведений

Если готовых функций нет или нужен свой вариант (например, в СКД-отчёте или внешней обработке), обратитесь к регистру напрямую. Так как регистр периодический, используйте виртуальную таблицу «СрезПоследних» на нужную дату.

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

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

Если роль хранится как должность-строка, фильтруйте по должности с учётом того, что пользователь мог ввести «Директор», «Генеральный директор», «Директор филиала». Жёсткое сравнение здесь ненадёжно, лучше опираться на стандартное перечисление ролей, если оно есть.

Если директор хранится реквизитом справочника

Самый простой случай: реквизит «Руководитель» в справочнике «Организации». Доступ — прямое обращение через точку или запрос:

bsl
// Прямое обращение (вызывает запрос к БД неявно)
Директор = Организация.Руководитель;

// Через запрос — предпочтительно при массовой обработке
Запрос = Новый Запрос("ВЫБРАТЬ Руководитель ИЗ Справочник.Организации
|ГДЕ Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", Организация);

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

Проверка результата и типичные ошибки

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

Контрольные точки

Как проверить результат

Печатная форма на текущую дату
Норма

ФИО и должность совпадают с карточкой организации

Тревожный признак

Пустое поле или чужое ФИО

Документ прошлого периода
Норма

Подставляется руководитель, действовавший на дату документа

Тревожный признак

Всегда текущий директор — дата среза игнорируется

Организация без заполненных ответственных
Норма

Код возвращает пустое значение и обрабатывает его

Тревожный признак

Ошибка выполнения или падение печатной формы

Формат ФИО
Норма

Фамилия и инициалы по правилам формы

Тревожный признак

Полное наименование справочника с лишними пробелами

Типичные ошибки
01
Срез последних без даты — получаете текущего директора даже для старых документов
02
Обращение к несуществующему ключу структуры — пустое значение без сообщения об ошибке
03
Использование наименования физлица вместо данных регистра ФИО — лишние пробелы и отсутствие склонения
04
Игнорирование пустого результата — печатная форма падает, если ответственные не заполнены
05
Правка типового модуля вместо расширения — доработка слетает при обновлении

Отдельно отметьте сценарий «ответственные лица не заполнены». Ваш код обязан корректно обрабатывать пустой результат: либо подставлять заглушку с понятным текстом, либо выдавать пользователю сообщение «Заполните ответственных лиц организации». Молчаливый пустой подписант в печатной форме — источник претензий при проверках документов.

Итог

Что важно запомнить

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

Частые вопросы

Почему функция возвращает пустого руководителя, хотя в карточке организации директор указан?

Чаще всего дата среза раньше даты начала действия записи в регистре, либо запись заведена с другой ролью (например, «Исполнительный директор» вместо «Руководитель»). Откройте регистр ответственных лиц и проверьте период и роль записи.

Как получить директора на конкретную дату документа, а не текущую?

Передайте дату документа вторым параметром в функцию ответственных лиц или в параметр виртуальной таблицы «СрезПоследних». Если передавать ТекущаяДатаСеанса() — для старых документов всегда подставится сегодняшний руководитель.

Можно ли получить ФИО директора с инициалами для печатной формы?

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

Что делать, если в базе несколько организаций и у каждой свой директор?

Все перечисленные способы принимают организацию параметром — передавайте конкретную ссылку из документа или отчёта. Не храните директора в глобальной переменной: при пакетной печати документов разных организаций подставится неверный подписант.

Как вывести директора в СКД-отчёте без программирования?

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

Сохранится ли мой код после обновления конфигурации?

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