Как программно получить данные руководителя и главного бухгалтера в 1С:Бухгалтерия 3.0?

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

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

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

Метод 1: Использование общего модуля ОтветственныеЛицаБП

Проанализируем наиболее универсальный и рекомендуемый способ получения ответственных лиц. В конфигурации БП 3.0 существует специализированный модуль ОтветственныеЛицаБП, который содержит функции для работы со сведениями о подписантах. Основным инструментом здесь является функция ОтветственныеЛица().

Рассмотрим пример кода, который позволяет получить структуру со всеми ответственными лицами на определенную дату:


// Параметры:
// Организация - Ссылка на справочник "Организации"
// Дата - Дата, на которую получаем срез данных
// Подразделение - (необязательно) Ссылка на подразделение организации

СтруктураЛиц = ОтветственныеЛицаБП.ОтветственныеЛица(Объект.Организация, ТекущаяДата());

// Извлекаем нужные данные
ФизЛицоРуководитель = СтруктураЛиц.Руководитель;
ФизЛицоГлавБух = СтруктураЛиц.ГлавныйБухгалтер;
ДолжностьРуководителя = СтруктураЛиц.РуководительДолжность;

Выясним, что именно возвращает эта функция. Она возвращает структуру, ключами которой являются наименования ролей (Руководитель, ГлавныйБухгалтер, Кассир и т.д.), а значениями — ссылки на справочник ФизическиеЛица. Это крайне важно: система возвращает именно физическое лицо, а не сотрудника, что соответствует архитектуре 1С:БП 3.0.

Метод 2: Модуль РегламентированнаяОтчетность

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

Функция ОтветственныеЛицаОрганизаций() позволяет получить аналогичные данные. Рассмотрим, как это выглядит в коде:


ПараметрыОтветственных = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизаций(Объект.Организация, Объект.Дата);

РуководительСсылка = ПараметрыОтветственных.Руководитель;
ГлавныйБухгалтерСсылка = ПараметрыОтветственных.ГлавныйБухгалтер;

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

Метод 3: Получение данных через менеджер печати

Проанализируем ситуацию, когда нам нужно получить не только ссылки на объекты, но и уже подготовленные строковые представления (например, ФИО в формате "Иванов И.И.") для вывода в печатную форму. В этом случае целесообразно использовать модуль УправлениеПечатьюБП.

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


Сведения = УправлениеПечатьюБП.СведенияОрганизации(Объект.Организация, Объект.Дата);

// В структуре будут доступны следующие поля:
ФИОРуководителя = Сведения.РуководительФИО; 
ФИОГлавБуха = Сведения.ГлавныйБухгалтерФИО;
Должность = Сведения.РуководительДолжность;

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

Работа с регистром сведений Ответственные лица

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

Регистр является периодическим, что позволяет хранить историю смены руководства. Ключевые измерения регистра:

  1. СтруктурнаяЕдиница — ссылка на Организацию или Подразделение.
  2. ОтветственноеЛицо — значение перечисления (Руководитель, ГлавныйБухгалтер и т.д.).

Если мы пишем запрос, нам необходимо обращаться к виртуальной таблице СрезПоследних. Разберем пример запроса:


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

Запрос.УстановитьПараметр("Дата", Объект.Дата);
Запрос.УстановитьПараметр("Организация", Объект.Организация);

Важные нюансы и различия

При программном получении ответственных лиц необходимо учитывать несколько критических моментов, которые могут привести к ошибкам в логике приложения:

1. Физическое лицо vs Сотрудник. Помните, что в БП 3.0 в качестве ответственных лиц всегда выступают ссылки на справочник ФизическиеЛица. Если ваша логика требует работы с объектом Сотрудники (например, для получения табельного номера), вам придется выполнить дополнительный поиск по ФизЛицу в справочнике сотрудников.

2. Форматирование ФИО. Чтобы преобразовать полученную ссылку на физическое лицо в удобный формат "Фамилия И.О.", используйте стандартную функцию БСП:

ФИОСокращенно = ФизическиеЛица.ФамилияИнициалыФизЛица(СсылкаНаФизЛицо);

3. Исполняющие обязанности и право подписи. Рассмотрим ситуацию, когда документ подписывает не основной директор, а лицо по доверенности. Стандартная функция ОтветственныеЛицаБП.ОтветственныеЛица() возвращает "основных" лиц из регистра. Однако в документах часто есть реквизиты ПодписываетЗаРуководителя. При разработке печатных форм всегда проверяйте, не заполнено ли поле альтернативного подписанта в самом документе.

4. Особенности КОРП-версий. В версиях КОРП руководитель может быть назначен не только для всей организации, но и для конкретного обособленного подразделения. При вызове функций всегда старайтесь передавать параметр Подразделение, если оно известно, чтобы получить корректные данные для филиала.

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

← На главную