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

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

Как сократить ФИО до инициалов в 1С

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

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

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

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

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

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

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

Сокращение ФИО типовыми средствами конфигурации

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

Типовой вызов выглядит примерно так:

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

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

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

Собственная функция сокращения ФИО на встроенном языке

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

Функция СократитьФИО(ФИО) Экспорт

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

СтрокаБезЛишнихПробелов = СокрЛП(СтрЗаменить(ФИО, " ", " "));

Части = СтрРазделить(СтрокаБезЛишнихПробелов, " ");

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

Возврат "";

КонецЕсли;

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

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

Результат = Результат + " " + Лев(Части[1], 1) + ".";

КонецЕсли;

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

Результат = Результат + " " + Лев(Части[2], 1) + ".";

КонецЕсли;

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

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

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

Обратите внимание на функцию СтрРазделить — она доступна в современных версиях платформы. В старых версиях строку разбирают в цикле через СтрНайти по позиции пробела.

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

Вывод сокращённого ФИО в печатных формах и отчётах

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

ОбластьПодпись.Параметры.Руководитель = СократитьФИО(ДанныеРуководителя.ФИО);

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

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

Нестандартные случаи и ограничения

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

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

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

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

Проверка результата и контроль качества данных

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

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

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

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

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

Получается «Иванов И. И.»

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

Обрезана фамилия или потерян один инициал

ФИО без отчества «Петров Пётр»
Норма

Получается «Петров П.» без ошибки

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

Ошибка обращения к элементу массива или висячая точка

Пустая строка или одно слово
Норма

Возвращается пустая строка или само слово без инициалов

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

Исключение в журнале регистрации

Часто задаваемые вопросы

Можно ли сократить ФИО в запросе 1С без кода на встроенном языке?

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

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

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

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

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

Как обработать двойную фамилию через дефис?

Дефис не является разделителем при разборе по пробелам, поэтому «Салтыков-Щедрин Николай» обработается корректно: фамилия останется целиком, инициал возьмётся от имени. Проблемы возникают только с фамилиями из двух слов через пробел.

Где разместить свою функцию, чтобы она не пропала при обновлении?

Создайте собственный общий модуль (например, с префиксом организации) и разместите функцию там. Не изменяйте типовые модули — при обновлении конфигурации изменения в них будут затёрты или вызовут конфликты сравнения и объединения.

Можно ли сократить ФИО без программирования, только настройкой?

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

Итог

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

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