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

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

Как вывести фамилию и инициалы в 1С

Как вывести фамилию и инициалы в 1С: функция ФизическиеЛицаКлиентСервер, ФИОКратко, настройка печатных форм и отчётов, примеры кода и типичные ошибки.

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

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

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

Как ФИО хранится в типовых конфигурациях

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

У справочника «Сотрудники» и «Пользователи» есть ссылка на физическое лицо. Поэтому правильная цепочка получения ФИО выглядит так: документ → сотрудник/пользователь → физическое лицо → ФИО. Обращение напрямую к наименованию сотрудника — частая ошибка: наименование может содержать служебные пометки или не совпадать с официальным ФИО.

Для получения актуального ФИО на конкретную дату в типовых решениях используется запрос к регистру сведений со срезом последних. Если история не ведётся (записей в регистре нет), берётся значение реквизита справочника.

Готовая функция ФамилияИнициалы в типовых решениях

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

Пример вызова в коде:

ФизЛицо = Сотрудник.ФизическоеЛицо;

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

// Результат: "Иванов И. И."

Если отчество отсутствует, функция вернёт «Фамилия И.». Если передана пустая строка — результат будет пустым, поэтому перед выводом в печатную форму стоит проверять заполненность ФИО, иначе в подписи останется пустое место или лишний пробел.

В некоторых конфигурациях есть альтернативы: ФизическиеЛицаЗарплатаКадры.ФамилияИнициалыФизлица в ЗУП или процедуры формирования представлений в модуле менеджера справочника. Перед написанием собственного алгоритма проверьте через глобальный поиск по конфигурации (Ctrl+Shift+F, поиск «ФамилияИнициалы»), нет ли уже готовой функции.

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

Вывод фамилии с инициалами в печатной форме

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

В типовом макете подпись обычно уже выводится параметром, например [ДолжностьРуководителя] [РуководительРасшифровкаПодписи]. Расшифровка подписи в типовых решениях формируется именно в формате «Фамилия И. О.» — отдельная доработка не нужна. Если требуется изменить формат (например, «И. И. Иванов» вместо «Иванов И. И.»), придётся менять код формирования печатной формы в модуле менеджера документа или подключать внешнюю печатную форму.

Порядок действий для внешней печатной формы
  1. 1
    Создайте внешнюю обработку с функцией СведенияОВнешнейОбработке и добавьте макет табличного документа
  2. 2
    В макете создайте именованную область и параметр, например [ПодписантКратко]
  3. 3
    В процедуре Печать получите физическое лицо ответственного и вычислите ФамилияИнициалы
  4. 4
    Присвойте результат параметру области через Параметры.ПодписантКратко и выведите область
  5. 5
    Подключите обработку через Администрирование → Печатные формы, отчеты и обработки и проверьте вывод на тестовом документе

При формировании табличного документа код выглядит примерно так:

ОбластьПодпись = Макет.ПолучитьОбласть("Подпись");

ОбластьПодпись.Параметры.ПодписантКратко =

ФизическиеЛицаКлиентСервер.ФамилияИнициалы(Руководитель.ФИО);

ТабличныйДокумент.Вывести(ОбластьПодпись);

Собственная функция сокращения ФИО для самописных конфигураций

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

Функция ФамилияИнициалы(ФИО) Экспорт

Части = СтрРазделить(СокрЛП(ФИО), " ", Ложь);

Если Части.Количество() = 0 Тогда

Возврат "";

КонецЕсли;

Результат = Части[0];

Для Инд = 1 По Части.Количество() - 1 Цикл

Результат = Результат + " " + Лев(Части[Инд], 1) + ".";

КонецЦикла;

Возврат Результат;

КонецФункции

Функция СтрРазделить доступна на современных версиях платформы. Третий параметр Ложь отбрасывает пустые части, что защищает от двойных пробелов в исходных данных. Если платформа старая и СтрРазделить недоступна, строку разбирают в цикле через СтрНайти и Лев/Сред.

Учтите составные фамилии и имена: «Салтыков-Щедрин», «Жан-Клод». Простой разбор по пробелам корректно обработает дефис внутри слова, но двойная фамилия через пробел («Гарсия Лопес Мария») будет неверно истолкована — «Лопес» станет именем. Для таких случаев нужен отдельный справочный механизм или ручная корректировка данных.

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

Вывод в отчётах на СКД и в списках

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

Альтернатива — вычислить краткое ФИО прямо в запросе, если конфигурация хранит фамилию, имя и отчество отдельными полями (так устроено, например, в некоторых кадровых регистрах). Тогда в тексте запроса используется конструкция с ПОДСТРОКА:

ВЫБРАТЬ

ФизЛица.Фамилия + " " + ПОДСТРОКА(ФизЛица.Имя, 1, 1) + ". "

+ ПОДСТРОКА(ФизЛица.Отчество, 1, 1) + "." КАК ФИОКратко

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

Сравнение способов сокращения ФИО

ФизическиеЛицаКлиентСервер.ФамилияИнициалы

Стандарт для типовых конфигураций; не работает в самописных решениях без БСП

Собственная функция разбора строки

Подходит для любых конфигураций; требует обработки составных фамилий и пустых значений

Сокращение в запросе через ПОДСТРОКА

Быстро для отчётов; возможно только если фамилия, имя и отчество хранятся раздельно

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

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

Доработку печатных форм выполняйте через внешние обработки, а не через изменение типовых модулей — иначе при обновлении конфигурации изменения будут потеряны или заблокируют автообновление. Перед любыми изменениями сделайте резервную копию информационной базы.

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

Итог

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

В типовых конфигурациях используйте ФизическиеЛицаКлиентСервер.ФамилияИнициалы, в самописных — функцию разбора строки по пробелам. Берите ФИО из физического лица, а не из наименования сотрудника, учитывайте историю смены фамилий и дорабатывайте печатные формы только через внешние обработки или расширения.

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

Как вывести инициалы перед фамилией («И. И. Иванов»)?

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

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

Чаще всего у сотрудника не заполнена ссылка на физическое лицо или у физического лица пустое поле «ФИО». Проверьте карточку сотрудника и связанное физлицо. Вторая причина — параметр макета не заполняется в коде формирования печатной формы.

Можно ли сократить ФИО в типовой печатной форме без программиста?

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

Что делать, если у сотрудника двойная фамилия через пробел?

Простой разбор по пробелам ошибочно примет вторую часть фамилии за имя. Корректное решение — хранить фамилию, имя и отчество в отдельных полях или исправить запись, заменив пробел в фамилии на дефис, если это соответствует документам сотрудника.

Выводится новая фамилия в старом документе — как исправить?

Заполните регистр сведений «ФИО физических лиц»: создайте запись со старой фамилией и датой, с которой она действовала. После этого механизмы типовой конфигурации при перепечатке документа подставят фамилию, актуальную на дату документа.

Работает ли функция ФамилияИнициалы на тонком клиенте и в веб-клиенте?

Да, модуль ФизическиеЛицаКлиентСервер доступен в обоих контекстах, поэтому функцию можно вызывать и на клиенте, и на сервере. Собственные функции размещайте в общем модуле с соответствующими флагами доступности.