Как вывести адрес и ФИО сотрудника с инициалами в печатную форму в 1С:ERP?

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

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

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

Способ 1. Получение адреса сотрудника с помощью модуля управления контактной информацией

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


АдресПрописке = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(
    СсылкаНаДокумент.ФизическоеЛицо,
    Справочники.ВидыКонтактнойИнформации.АдресПоПропискеФизическиеЛица
);

В данном примере мы передаем в функцию два параметра: ссылку на физическое лицо (источник данных) и предопределенный элемент справочника ВидыКонтактнойИнформации. Этот метод прост, надежен и отлично подходит, если нам требуется быстро получить только один конкретный вид контактной информации.

Способ 2. Оптимальный метод получения кадровых данных в 1С:ERP

Хотя прямой запрос к контактной информации работает исправно, в крупных ERP-системах рекомендуется использовать специализированный программный интерфейс — модуль КадровыйУчет. Этот подход считается стандартом разработки по нескольким причинам:

  1. Поддержка истории изменений: Адреса и фамилии сотрудников могут меняться со временем. Метод кадрового учета позволяет получить данные, актуальные на конкретную дату (например, на дату проведения документа).
  2. Пакетное получение данных: За один серверный вызов мы можем получить ФИО, адрес, паспортные данные и телефон. Это значительно оптимизирует нагрузку на базу данных.
  3. Готовое текстовое представление: При запросе полей с суффиксом Представление система сразу возвращает очищенную, готовую для вывода в печатную форму строку.

Рассмотрим, как применить этот метод на практике:


// Формируем массив из одного или нескольких физлиц
МассивФизЛиц = Новый Массив;
МассивФизЛиц.Добавить(СсылкаНаДокумент.ФизическоеЛицо);

// Определяем список необходимых полей через запятую
ИменаПолей = "ФИОПолные, ФамилияИО, АдресПоПропискеПредставление";

// Получаем таблицу данных на дату документа
ТаблицаДанных = КадровыйУчет.КадровыеДанныеФизическихЛиц(
    Истина, 
    МассивФизЛиц, 
    ИменаПолей, 
    СсылкаНаДокумент.Дата
);

Если ТаблицаДанных.Количество() > 0 Тогда
    КадровыеДанные = ТаблицаДанных[0];
    
    // Заполняем параметры макета печатной формы
    ОбластьМакета.Параметры.ФИОСотрудника = КадровыеДанные.ФамилияИО;
    ОбластьМакета.Параметры.АдресСотрудника = КадровыеДанные.АдресПоПропискеПредставление;
КонецЕсли;

Этот код является наиболее отказоустойчивым и гибким при работе в конфигурациях 1С:ERP и 1С:ЗУП.

Вывод ФИО с инициалами: разбираем особенности клиент-серверного взаимодействия

При попытке преобразовать полное имя физического лица в формат с инициалами разработчики часто совершают ошибку, передавая ссылку на справочник ФизическиеЛица в клиент-серверные функции форматирования. Разберем, почему возникает эта проблема и как ее решить.

В БСП функции форматирования имен разделены по контексту исполнения:

Выясним, как правильно передавать параметры. Чтобы преобразовать ссылку в строку, мы можем использовать стандартную функцию СокрЛП() или явное приведение типов. Платформа 1С автоматически получает представление объекта при приведении ссылки к строковому типу.

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


// Вариант 1. С использованием серверного модуля (передаем ссылку)
ФИОсИнициалами = ФизическиеЛица.ФамилияИнициалыФизЛица(СсылкаНаДокумент.ФизическоеЛицо);

// Вариант 2. С использованием клиент-серверного модуля (передаем строковое представление)
СтрокаФИО = СокрЛП(СсылкаНаДокумент.ФизическоеЛицо);
ФИОсИнициалами = ФизическиеЛицаКлиентСервер.ФамилияИнициалыФизЛица(СтрокаФИО);

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

Дополнительные полезные инструменты БСП для работы с именами и адресами

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

1. Склонение ФИО по падежам. Очень часто в печатных формах договоров требуется вывести имя сотрудника в родительном или дательном падеже (например, "выдано Козлову И. И."). Для этого используем модуль склонения:


ПадежДательный = 3; // 1 - Именительный, 2 - Родительный, 3 - Дательный и т.д.
ПолСотрудника = 1;  // 1 - Мужской, 2 - Женский

ФИОвПадеже = СклонениеПредставленийОбъектов.ПросклонятьФИО(
    СокрЛП(СсылкаНаДокумент.ФизическоеЛицо), 
    ПадежДательный, 
    ПолСотрудника
);

2. Настройка формата инициалов. Функция ФизическиеЛицаКлиентСервер.ФамилияИнициалы позволяет гибко задавать положение инициалов (в начале или в конце строки):


// Результат: "И.О. Иванов" (инициалы в начале)
ФИО_Начало = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(СтрокаФИО, , Истина);

// Результат: "Иванов И.О." (инициалы в конце)
ФИО_Конец = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(СтрокаФИО, , Ложь);

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


АдресныеСведения = РаботаСАдресами.СведенияОбАдресе(АдресПрописке);
// На выходе получаем структуру с полями: Индекс, Регион, Город, Улица, Дом и т.д.
Город = АдресныеСведения.Город;
Улица = АдресныеСведения.Улица;

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

← На главную