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