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