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