Разработка и Конфигурация · 10 мин
Как вывести фамилию и инициалы в 1С
Как вывести фамилию и инициалы в 1С: функция ФизическиеЛицаКлиентСервер, ФИОКратко, настройка печатных форм и отчётов, примеры кода и типичные ошибки.
Задача вывести фамилию и инициалы в 1С возникает постоянно: в печатных формах документов, в подписях ответственных лиц, в отчётах и в интерфейсе. Полное ФИО хранится в базе одной строкой, например «Иванов Иван Иванович», а для подписи или компактного вывода нужен формат «Иванов И. И.».
Способ решения зависит от того, где вы работаете. В типовых конфигурациях (Бухгалтерия, Зарплата и управление персоналом, Управление торговлей) есть готовые механизмы сокращения ФИО. В самописной конфигурации или при доработке печатной формы потребуется либо вызов стандартной функции, либо собственный алгоритм разбора строки.
Важно понимать: ФИО физического лица в типовых решениях хранится не только в реквизите справочника, но и в регистре сведений «ФИО физических лиц» с историей изменений. Поэтому простое обращение к реквизиту «Наименование» может вернуть неактуальное значение, если человек менял фамилию.
Как ФИО хранится в типовых конфигурациях
В конфигурациях на базе БСП (библиотеки стандартных подсистем) данные о ФИО разнесены. Справочник «Физические лица» содержит реквизит «ФИО» с текущим значением, а история смены фамилий, имён и отчеств пишется в регистр сведений «ФИО физических лиц» с периодичностью. Это позволяет корректно формировать документы задним числом: приказ от прошлого года покажет фамилию, актуальную на дату документа.
У справочника «Сотрудники» и «Пользователи» есть ссылка на физическое лицо. Поэтому правильная цепочка получения ФИО выглядит так: документ → сотрудник/пользователь → физическое лицо → ФИО. Обращение напрямую к наименованию сотрудника — частая ошибка: наименование может содержать служебные пометки или не совпадать с официальным ФИО.
Для получения актуального ФИО на конкретную дату в типовых решениях используется запрос к регистру сведений со срезом последних. Если история не ведётся (записей в регистре нет), берётся значение реквизита справочника.
Готовая функция ФамилияИнициалы в типовых решениях
В конфигурациях на БСП сокращение ФИО выполняет функция общего модуля ФизическиеЛицаКлиентСервер.ФамилияИнициалы(ФИО). Она принимает полную строку «Фамилия Имя Отчество» и возвращает «Фамилия И. О.». Функция доступна и на сервере, и на клиенте, что удобно при формировании представлений в формах.
Пример вызова в коде:
ФизЛицо = Сотрудник.ФизическоеЛицо;
КраткоеФИО = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(ФизЛицо.ФИО);
// Результат: "Иванов И. И."
Если отчество отсутствует, функция вернёт «Фамилия И.». Если передана пустая строка — результат будет пустым, поэтому перед выводом в печатную форму стоит проверять заполненность ФИО, иначе в подписи останется пустое место или лишний пробел.
В некоторых конфигурациях есть альтернативы: ФизическиеЛицаЗарплатаКадры.ФамилияИнициалыФизлица в ЗУП или процедуры формирования представлений в модуле менеджера справочника. Перед написанием собственного алгоритма проверьте через глобальный поиск по конфигурации (Ctrl+Shift+F, поиск «ФамилияИнициалы»), нет ли уже готовой функции.
КраткоеФИО = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(ФизЛицо.ФИО);Вывод фамилии с инициалами в печатной форме
Самый частый сценарий — подпись руководителя, бухгалтера или материально ответственного лица в макете печатной формы. Порядок действий зависит от того, дорабатываете вы типовой макет или создаёте внешнюю печатную форму.
В типовом макете подпись обычно уже выводится параметром, например [ДолжностьРуководителя] [РуководительРасшифровкаПодписи]. Расшифровка подписи в типовых решениях формируется именно в формате «Фамилия И. О.» — отдельная доработка не нужна. Если требуется изменить формат (например, «И. И. Иванов» вместо «Иванов И. И.»), придётся менять код формирования печатной формы в модуле менеджера документа или подключать внешнюю печатную форму.
- 1Создайте внешнюю обработку с функцией СведенияОВнешнейОбработке и добавьте макет табличного документа
- 2В макете создайте именованную область и параметр, например [ПодписантКратко]
- 3В процедуре Печать получите физическое лицо ответственного и вычислите ФамилияИнициалы
- 4Присвойте результат параметру области через Параметры.ПодписантКратко и выведите область
- 5Подключите обработку через Администрирование → Печатные формы, отчеты и обработки и проверьте вывод на тестовом документе
При формировании табличного документа код выглядит примерно так:
ОбластьПодпись = Макет.ПолучитьОбласть("Подпись");
ОбластьПодпись.Параметры.ПодписантКратко =
ФизическиеЛицаКлиентСервер.ФамилияИнициалы(Руководитель.ФИО);
ТабличныйДокумент.Вывести(ОбластьПодпись);
Собственная функция сокращения ФИО для самописных конфигураций
Если конфигурация не содержит библиотеки стандартных подсистем, функцию придётся написать самостоятельно. Базовый алгоритм: разбить строку по пробелам, первое слово оставить целиком, от остальных взять первые буквы с точками.
Функция ФамилияИнициалы(ФИО) Экспорт
Части = СтрРазделить(СокрЛП(ФИО), " ", Ложь);
Если Части.Количество() = 0 Тогда
Возврат "";
КонецЕсли;
Результат = Части[0];
Для Инд = 1 По Части.Количество() - 1 Цикл
Результат = Результат + " " + Лев(Части[Инд], 1) + ".";
КонецЦикла;
Возврат Результат;
КонецФункции
Функция СтрРазделить доступна на современных версиях платформы. Третий параметр Ложь отбрасывает пустые части, что защищает от двойных пробелов в исходных данных. Если платформа старая и СтрРазделить недоступна, строку разбирают в цикле через СтрНайти и Лев/Сред.
Учтите составные фамилии и имена: «Салтыков-Щедрин», «Жан-Клод». Простой разбор по пробелам корректно обработает дефис внутри слова, но двойная фамилия через пробел («Гарсия Лопес Мария») будет неверно истолкована — «Лопес» станет именем. Для таких случаев нужен отдельный справочный механизм или ручная корректировка данных.
Вывод в отчётах на СКД и в списках
В отчётах на системе компоновки данных сократить ФИО можно без изменения запроса — через выражение в вычисляемом поле или формат представления. Проще всего добавить вычисляемое поле с выражением на встроенном языке, вызывающим функцию сокращения, но для этого функция должна быть доступна в серверном контексте, где формируется отчёт.
Альтернатива — вычислить краткое ФИО прямо в запросе, если конфигурация хранит фамилию, имя и отчество отдельными полями (так устроено, например, в некоторых кадровых регистрах). Тогда в тексте запроса используется конструкция с ПОДСТРОКА:
ВЫБРАТЬ
ФизЛица.Фамилия + " " + ПОДСТРОКА(ФизЛица.Имя, 1, 1) + ". "
+ ПОДСТРОКА(ФизЛица.Отчество, 1, 1) + "." КАК ФИОКратко
В динамических списках и журналах документов представление обычно берётся из реквизита. Менять формат там не рекомендуется: список — рабочий инструмент, и полное ФИО снижает риск перепутать однофамильцев. Сокращение уместно именно в печатных формах и компактных отчётах.
Сравнение способов сокращения ФИО
Стандарт для типовых конфигураций; не работает в самописных решениях без БСП
Подходит для любых конфигураций; требует обработки составных фамилий и пустых значений
Быстро для отчётов; возможно только если фамилия, имя и отчество хранятся раздельно
Проверка результата и границы безопасной доработки
После внедрения проверьте вывод на контрольном наборе: сотрудник с полным ФИО, сотрудник без отчества, сотрудник с двойной фамилией, сотрудник со сменой фамилии в истории. Убедитесь, что в печатной форме нет лишних пробелов, двойных точек и пустых подписей.
Доработку печатных форм выполняйте через внешние обработки, а не через изменение типовых модулей — иначе при обновлении конфигурации изменения будут потеряны или заблокируют автообновление. Перед любыми изменениями сделайте резервную копию информационной базы.
Если ФИО в базе введены небрежно (строчными буквами, с лишними пробелами, в поле «Наименование» вместо «ФИО»), сначала приведите данные в порядок. Никакая функция сокращения не исправит исходно некорректные данные.
Что важно запомнить
В типовых конфигурациях используйте ФизическиеЛицаКлиентСервер.ФамилияИнициалы, в самописных — функцию разбора строки по пробелам. Берите ФИО из физического лица, а не из наименования сотрудника, учитывайте историю смены фамилий и дорабатывайте печатные формы только через внешние обработки или расширения.
Частые вопросы
Как вывести инициалы перед фамилией («И. И. Иванов»)?
Стандартная функция возвращает фамилию первой. Для обратного порядка напишите обёртку: разбейте ФИО на части, соберите инициалы с точками и присоедините фамилию в конец. Либо используйте раздельное хранение фамилии, имени и отчества, если оно есть в вашей конфигурации.
Почему в печатной форме пустая подпись, хотя сотрудник заполнен?
Чаще всего у сотрудника не заполнена ссылка на физическое лицо или у физического лица пустое поле «ФИО». Проверьте карточку сотрудника и связанное физлицо. Вторая причина — параметр макета не заполняется в коде формирования печатной формы.
Можно ли сократить ФИО в типовой печатной форме без программиста?
В большинстве типовых форм расшифровка подписи уже выводится в кратком формате автоматически. Если нужен другой порядок или состав, без доработки кода не обойтись — настройки формата ФИО в пользовательском интерфейсе типовых конфигураций, как правило, отсутствует.
Что делать, если у сотрудника двойная фамилия через пробел?
Простой разбор по пробелам ошибочно примет вторую часть фамилии за имя. Корректное решение — хранить фамилию, имя и отчество в отдельных полях или исправить запись, заменив пробел в фамилии на дефис, если это соответствует документам сотрудника.
Выводится новая фамилия в старом документе — как исправить?
Заполните регистр сведений «ФИО физических лиц»: создайте запись со старой фамилией и датой, с которой она действовала. После этого механизмы типовой конфигурации при перепечатке документа подставят фамилию, актуальную на дату документа.
Работает ли функция ФамилияИнициалы на тонком клиенте и в веб-клиенте?
Да, модуль ФизическиеЛицаКлиентСервер доступен в обоих контекстах, поэтому функцию можно вызывать и на клиенте, и на сервере. Собственные функции размещайте в общем модуле с соответствующими флагами доступности.