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

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

Как получить инициалы в 1С

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

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

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

Получение инициалов в типовых конфигурациях

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

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

ФИО = "Иванов Петр Сергеевич";

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

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

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

Разбор строки ФИО вручную

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

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

Результат = "";

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

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

Возврат "";

КонецЕсли;

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

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

Результат = Результат + " "

+ ВРег(Лев(Части[Индекс], 1)) + ".";

КонецЦикла;

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

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

Функция СтрРазделить доступна в платформе 8.3.6 и новее. Параметр «Ложь» отбрасывает пустые части, что защищает от двойных пробелов в исходной строке. Для старых версий платформы используйте цикл с СтрНайти или функцию СтрЗаменить с последующим разбором.

bsl
ФИО = "Петрова   Анна  Владимировна";
Части = СтрРазделить(СокрЛП(ФИО), " ", Ложь);
Инициалы = Части[0] + " " + ВРег(Лев(Части[1],1)) + "." + ВРег(Лев(Части[2],1)) + ".";

Инициалы из справочника физических лиц

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

Правильный подход — получить срез последних на нужную дату и затем вычислить инициалы:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| ФИО.Фамилия,

| ФИО.Имя,

| ФИО.Отчество

|ИЗ

| РегистрСведений.ФИОФизическихЛиц.СрезПоследних(&Дата, ФизическоеЛицо = &ФизЛицо) КАК ФИО";

Запрос.УстановитьПараметр("Дата", ДатаДокумента);

Запрос.УстановитьПараметр("ФизЛицо", Сотрудник.ФизическоеЛицо);

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

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

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

Наиболее частое применение — подписи в макетах документов: «Директор Иванов И. И.», «Сдал Петров П. П.». В макете табличного документа параметр выводится через заполнение области:

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

ОбластьПодпись.Параметры.РуководительИнициалы =

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

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

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

При выводе в СКД (систему компоновки данных) инициалы удобно вычислять в выражении поля или в событии «ПриКомпоновкеРезультата», чтобы не хранить отдельное поле в базе данных.

Сравнение подходов

Типовая функция ИнициалыФизЛица

Быстро и надежно, но доступна только в конфигурациях с БСП и требует строку ФИО в ожидаемом формате

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

Работает везде, но чувствительна к качеству данных: двойные фамилии и лишние пробелы нужно обрабатывать отдельно

Поля регистра ФИО физических лиц

Самый точный вариант с поддержкой истории, но требует запроса и доступен только там, где ведется этот регистр

Типичные ошибки и ограничения

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

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

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

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

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

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

Стандартное ФИО «Иванов Петр Сергеевич»
Норма

Возвращается «Иванов П. С.»

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

Пустая строка или неверный порядок букв

ФИО без отчества
Норма

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

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

Ошибка обращения к индексу или «Иванов П. .»

Строка с двойными пробелами
Норма

Результат идентичен варианту с одиночными пробелами

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

Пропущенные инициалы или пустые части в ответе

Когда обращаться к программисту

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

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

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

Какая функция возвращает инициалы в 1С:Бухгалтерии 8.3?

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

Как получить инициалы в формате «И. И. Иванов»?

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

Что делать, если у сотрудника нет отчества?

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

Почему в старом документе выводится новая фамилия сотрудника?

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

Можно ли получить инициалы без программирования?

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

Работает ли СтрРазделить на всех версиях платформы?

Функция СтрРазделить появилась в платформе 8.3.6. На более ранних версиях строку разбирают циклом с поиском пробела через СтрНайти или заменой пробелов на символ-разделитель с последующим разбором.

Итог

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

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