При разработке и кастомизации печатных форм в конфигурации 1С:ERP Управление предприятием 2 (а также в других решениях на базе БСП, таких как 1С:ЗУП 3 или 1С:Комплексная автоматизация) разработчики часто сталкиваются с необходимостью вывода персональных данных сотрудников. Наиболее востребованными реквизитами являются адрес регистрации (или проживания) физического лица и его ФИО в сокращенном формате (фамилия и инициалы). Для создания отдельных отчетов на базе типовых алгоритмов подойдёт руководство по созданию внешних печатных форм.
В этой статье мы подробно разберем, как правильно извлекать эти данные из информационной базы, какие стандартные механизмы Библиотеки Стандартных Подсистем (БСП) для этого предназначены, и как избежать распространенных ошибок при передаче параметров в клиент-серверные функции.
Адреса и телефоны в современных конфигурациях 1С хранятся в специализированном табличном виде. Для быстрого получения адреса физического лица мы можем использовать экспортные методы общего модуля УправлениеКонтактнойИнформацией. Рассмотрим пример кода, который позволяет вытащить адрес по прописке:
АдресПрописке = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(
СсылкаНаДокумент.ФизическоеЛицо,
Справочники.ВидыКонтактнойИнформации.АдресПоПропискеФизическиеЛица
);
В данном примере мы передаем в функцию два параметра: ссылку на физическое лицо (источник данных) и предопределенный элемент справочника ВидыКонтактнойИнформации. Этот метод прост, надежен и отлично подходит, если нам требуется быстро получить только один конкретный вид контактной информации.
Хотя прямой запрос к контактной информации работает исправно, в крупных ERP-системах рекомендуется использовать специализированный программный интерфейс — модуль КадровыйУчет. Этот подход считается стандартом разработки по нескольким причинам:
Представление система сразу возвращает очищенную, готовую для вывода в печатную форму строку.Рассмотрим, как применить этот метод на практике:
// Формируем массив из одного или нескольких физлиц
МассивФизЛиц = Новый Массив;
МассивФизЛиц.Добавить(СсылкаНаДокумент.ФизическоеЛицо);
// Определяем список необходимых полей через запятую
ИменаПолей = "ФИОПолные, ФамилияИО, АдресПоПропискеПредставление";
// Получаем таблицу данных на дату документа
ТаблицаДанных = КадровыйУчет.КадровыеДанныеФизическихЛиц(
Истина,
МассивФизЛиц,
ИменаПолей,
СсылкаНаДокумент.Дата
);
Если ТаблицаДанных.Количество() > 0 Тогда
КадровыеДанные = ТаблицаДанных[0];
// Заполняем параметры макета печатной формы
ОбластьМакета.Параметры.ФИОСотрудника = КадровыеДанные.ФамилияИО;
ОбластьМакета.Параметры.АдресСотрудника = КадровыеДанные.АдресПоПропискеПредставление;
КонецЕсли;
Этот код является наиболее отказоустойчивым и гибким при работе в конфигурациях 1С:ERP и 1С:ЗУП.
При попытке преобразовать полное имя физического лица в формат с инициалами разработчики часто совершают ошибку, передавая ссылку на справочник ФизическиеЛица в клиент-серверные функции форматирования. Разберем, почему возникает эта проблема и как ее решить.
В БСП функции форматирования имен разделены по контексту исполнения:
ФизическиеЛица: Метод ФизическиеЛица.ФамилияИнициалыФизЛица(СсылкаНаФизЛицо) выполняется на сервере, имеет прямой доступ к базе данных и может принимать на вход непосредственно ссылку на элемент справочника. Он сам прочитает наименование из базы и вернет результат.ФизическиеЛицаКлиентСервер: Метод ФизическиеЛицаКлиентСервер.ФамилияИнициалыФизЛица() (или ФизическиеЛицаКлиентСервер.ФамилияИнициалы() в новых версиях БСП) предназначен для работы в том числе на тонком клиенте. У него нет прямого доступа к СУБД, поэтому он ожидает на вход исключительно строковое значение ФИО. Если передать туда ссылку, функция вернет пустую строку.Выясним, как правильно передавать параметры. Чтобы преобразовать ссылку в строку, мы можем использовать стандартную функцию СокрЛП() или явное приведение типов. Платформа 1С автоматически получает представление объекта при приведении ссылки к строковому типу.
Посмотрим на пример правильного вызова на стороне сервера:
// Вариант 1. С использованием серверного модуля (передаем ссылку)
ФИОсИнициалами = ФизическиеЛица.ФамилияИнициалыФизЛица(СсылкаНаДокумент.ФизическоеЛицо);
// Вариант 2. С использованием клиент-серверного модуля (передаем строковое представление)
СтрокаФИО = СокрЛП(СсылкаНаДокумент.ФизическоеЛицо);
ФИОсИнициалами = ФизическиеЛицаКлиентСервер.ФамилияИнициалыФизЛица(СтрокаФИО);
Оба варианта работают корректно, однако первый вариант предпочтительнее использовать в серверных процедурах печати, так как он минимизирует объем написанного вручную кода.
Помимо базового сокращения ФИО, БСП предлагает мощный арсенал функций, которые избавляют разработчика от написания "велосипедов":
1. Склонение ФИО по падежам. Очень часто в печатных формах договоров требуется вывести имя сотрудника в родительном или дательном падеже (например, "выдано Козлову И. И."). Для этого используем модуль склонения:
ПадежДательный = 3; // 1 - Именительный, 2 - Родительный, 3 - Дательный и т.д.
ПолСотрудника = 1; // 1 - Мужской, 2 - Женский
ФИОвПадеже = СклонениеПредставленийОбъектов.ПросклонятьФИО(
СокрЛП(СсылкаНаДокумент.ФизическоеЛицо),
ПадежДательный,
ПолСотрудника
);
2. Настройка формата инициалов. Функция ФизическиеЛицаКлиентСервер.ФамилияИнициалы позволяет гибко задавать положение инициалов (в начале или в конце строки):
// Результат: "И.О. Иванов" (инициалы в начале)
ФИО_Начало = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(СтрокаФИО, , Истина);
// Результат: "Иванов И.О." (инициалы в конце)
ФИО_Конец = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(СтрокаФИО, , Ложь);
3. Разбор адреса на составляющие. Если вам необходимо вывести адрес не одной строкой, а разбить его по полям (индекс, город, улица, дом) в отдельные ячейки макета, используйте функции работы с адресами:
АдресныеСведения = РаботаСАдресами.СведенияОбАдресе(АдресПрописке);
// На выходе получаем структуру с полями: Индекс, Регион, Город, Улица, Дом и т.д.
Город = АдресныеСведения.Город;
Улица = АдресныеСведения.Улица;
Использование данных методов гарантирует совместимость вашего кода с будущими обновлениями конфигурации 1С:ERP и обеспечивает высокую скорость формирования печатных форм. Для быстрой модификации готовых бланков можно использовать расширение для постобработки печатных форм БСП.