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