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