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

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

1С: как сделать инициалы из ФИО

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

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

В типовых конфигурациях на базе Библиотеки стандартных подсистем (БСП) — «Управление торговлей», «ERP», «Бухгалтерия предприятия», «Зарплата и управление персоналом» — уже есть готовые механизмы формирования инициалов, и в большинстве случаев писать код с нуля не требуется. Ниже разобраны все основные варианты: от настройки без программирования до функции на встроенном языке.

Где в 1С хранится ФИО и почему это важно

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

В простых справочниках (например, «Контрагенты» с видом «Физическое лицо» или самописные справочники) ФИО может храниться одной строкой в наименовании или в отдельном реквизите. В этом случае инициалы придётся получать разбором строки, и истории изменений не будет.

Как получить инициалы в типовой конфигурации без программирования

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

Порядок проверки в типовой бухгалтерии: откройте раздел «Главное» → «Реквизиты и платежи» (или «Организации»), перейдите к подписям ответственных лиц и убедитесь, что указаны правильные сотрудники. Печатная форма сама сократит их ФИО до формата «Иванов И. И.».

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

Готовая функция БСП: ФамилияИнициалы

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

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

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

Если нужно получить ФИО физического лица на дату документа, в серверном коде используют модуль ФизическиеЛица или ФизическиеЛицаЗарплатаКадры (в ЗУП), которые возвращают структуру с фамилией, именем и отчеством из регистра на указанную дату. Затем результат передают в ту же функцию формирования инициалов.

Обратите внимание: функция корректно обрабатывает пустое отчество — вернёт «Иванов И.» без лишней точки. Это важно для иностранных сотрудников, у которых отчества нет.

Как сделать инициалы запросом

Когда инициалы нужны прямо в отчёте на СКД или в динамическом списке, изменять код нежелательно. В этом случае ФИО можно сократить средствами языка запросов, если части ФИО хранятся в отдельных полях регистра.

Идея проста: из имени и отчества берётся первый символ функцией ПОДСТРОКА, и результат складывается с фамилией:

bsl
ВЫБРАТЬ
	ФИО.Фамилия + " "
	+ ПОДСТРОКА(ФИО.Имя, 1, 1) + "."
	+ ВЫБОР
		КОГДА ФИО.Отчество <> ""
			ТОГДА " " + ПОДСТРОКА(ФИО.Отчество, 1, 1) + "."
		ИНАЧЕ ""
	КОНЕЦ КАК ФамилияИнициалы
ИЗ
	РегистрСведений.ФИОФизическихЛиц.СрезПоследних(&Дата) КАК ФИО

Такой запрос корректно работает для простых случаев. Ограничение: если ФИО хранится одной строкой, разобрать её в запросе сложно — язык запросов 1С не имеет полноценной функции поиска позиции символа во всех версиях платформы, поэтому для строки «Иванов Иван Иванович» проще использовать вычисляемое поле СКД с вызовом функции общего модуля.

Самописная функция разбора ФИО

Если конфигурация самописная или БСП недоступна, инициалы формируют разбором строки по пробелам. Типовой подход — функция в общем модуле:

bsl
Функция ФамилияИнициалы(ФИО) Экспорт
	Части = СтрРазделить(СокрЛП(ФИО), " ", Ложь);
	Если Части.Количество() = 0 Тогда
		Возврат "";
	КонецЕсли;
	Результат = Части[0];
	Для Инд = 1 По Части.Количество() - 1 Цикл
		Результат = Результат + " " + Лев(Части[Инд], 1) + ".";
	КонецЦикла;
	Возврат Результат;
КонецФункции

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

Типичные ошибки
01
Разбор ФИО по пробелам при двойных фамилиях с пробелом — первая часть фамилии ошибочно превращается в инициал. Храните части ФИО отдельно.
02
Использование текущего наименования сотрудника вместо среза регистра на дату документа — в старых документах после смены фамилии печатается новая фамилия.
03
Добавление точки и пробела для пустого отчества — получается «Иванов И. .». Проверяйте отчество на пустоту перед склейкой.
04
Изменение типового общего модуля вместо расширения — конфигурация снимается с полной поддержки и усложняет обновление.

Инициалы в печатной форме и макете

При выводе в табличный документ или макет Word/Office инициалы обычно подставляются как параметр области. Порядок действий: в модуле менеджера документа в процедуре печати получите данные ответственного лица, сформируйте строку с инициалами и передайте её в параметр макета, например Область.Параметры.РуководительИнициалы = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(Данные.РуководительФИО);.

В макетах Word (формат MXL не нужен, если используется офисный макет) параметр вставляется через конструкцию вида {РуководительИнициалы}. Убедитесь, что имя параметра в макете совпадает с именем в коде — несовпадение регистра или лишний пробел приводят к пустому полю в распечатке.

Порядок действий для печатной формы
  1. 1
    Определите, откуда берётся ФИО: регистр «ФИО физических лиц», реквизит справочника или строка.
  2. 2
    В модуле печати получите ФИО на дату документа (срез регистра на дату).
  3. 3
    Сформируйте инициалы функцией ФизическиеЛицаКлиентСервер.ФамилияИнициалы() или собственной функцией.
  4. 4
    Передайте результат в параметр макета и проверьте имя параметра.
  5. 5
    Распечатайте тестовый документ и проверьте формат: фамилия полностью, инициалы с точками, без лишних пробелов.

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

После внедрения проверьте несколько сценариев: сотрудник без отчества, сотрудник с двойной фамилией, документ прошлой датой после смены фамилии, пустое ФИО (не должно падать с ошибкой, а выводить пустую строку). Также проверьте печать на реальном принтере или в PDF — иногда лишние пробелы заметны только на бумаге.

Контрольные точки

Как проверить результат

Сотрудник без отчества
Норма

«Петров П.» без лишних точек и пробелов

Тревожный признак

«Петров П. .» или ошибка выполнения

Документ прошлой датой после смены фамилии
Норма

Печатается фамилия, действовавшая на дату документа

Тревожный признак

Печатается текущая фамилия

Двойная фамилия через дефис
Норма

«Салтыков-Щедрин М. Е.»

Тревожный признак

Фамилия обрезана или превращена в инициал

Пустое ФИО
Норма

Пустая строка в печатной форме

Тревожный признак

Исключение «Индекс находится за границами массива»

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

Итог

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

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

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

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

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

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

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

Можно ли сделать инициалы в отчёте на СКД без изменения конфигурации?

Да, если части ФИО хранятся раздельно — используйте ПОДСТРОКА в запросе набора данных. Если ФИО одной строкой, добавьте вычисляемое поле СКД и в его выражении вызовите функцию общего модуля конфигурации, формирующую инициалы. Это делается в настройках отчёта без изменения кода модулей.

Что делать с двойными фамилиями и фамилиями из нескольких слов?

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

Как получить инициалы на дату документа в ЗУП?

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