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

Справочники и Данные · 12 мин

Как в 1С разделить ФИО на фамилию, имя и отчество

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

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

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

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

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

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

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

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

Как получить части ФИО без программирования

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

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

Для выгрузки в Excel или стороннюю систему используйте типовую обработку «Выгрузка и загрузка данных XML» или универсальный отчёт: в настройках выберите регистр «ФИО физических лиц» и отметьте нужные поля. Так вы получите раздельные колонки без единой строки кода.

Разделение ФИО при загрузке данных из Excel

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

Правильная стратегия — не разделять строку внутри 1С, а подготовить данные заранее. В Excel разделите колонку с ФИО через «Данные → Текст по столбцам» с разделителем «пробел» или формулами ЛЕВСИМВ/ПСТР и ПОИСК. Получите три колонки и загружайте их в соответствующие поля справочника или регистра.

Если разделение в Excel невозможно (данные приходят регулярно в одном формате), в обработке загрузки для поля можно указать произвольное выражение на встроенном языке. Там доступны функции работы со строками, и можно написать выражение, извлекающее нужную часть по номеру слова.

Загрузка ФИО из Excel по частям
  1. 1
    Откройте файл и разделите колонку ФИО через «Текст по столбцам» с разделителем-пробелом
  2. 2
    Проверьте строки с двойными фамилиями и отсутствующими отчествами, исправьте вручную
  3. 3
    Сохраните файл в формате MXL или оставьте как есть, если обработка читает Excel
  4. 4
    В 1С откройте «Загрузка данных из табличного документа» и сопоставьте колонки полям Фамилия, Имя, Отчество
  5. 5
    Выполните загрузку и выборочно откройте несколько карточек для контроля

Программное разделение ФИО на встроенном языке

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

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

Функция РазделитьФИО(ФИОСтрока)

Результат = Новый Структура("Фамилия, Имя, Отчество", "", "", "");

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

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

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

КонецЕсли;

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

Результат.Имя = Части[1];

КонецЕсли;

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

Результат.Отчество = Части[2];

КонецЕсли;

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

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

Обратите внимание на третий параметр Ложь в СтрРазделить — он отбрасывает пустые элементы, которые возникают при двойных пробелах. Без этого «Иванов Иван» с двумя пробелами даст смещение: именем окажется пустая строка. СокрЛП убирает пробелы по краям строки.

1c
Части = СтрРазделить(СокрЛП(ФИОСтрока), " ", Ложь); Фамилия = Части[0]; Имя = Части[1]; Отчество = ?(Части.Количество() > 2, Части[2], "");

Обратная задача: инициалы и сокращённое представление

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

Если пишете сами, алгоритм такой: разделите строку, как показано выше, затем от имени и отчества возьмите первые символы через Лев(Имя, 1) и добавьте точки. Проверяйте длину строки перед взятием символа — у пустого отчества Лев("", 1) вернёт пустую строку, и лишняя точка испортит представление.

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

Способы получить части ФИО

Регистр «ФИО физических лиц»

Типовой и самый надёжный путь: части уже разделены, есть история изменений. Подходит, если данные ведутся в типовом справочнике физлиц.

Разделение в Excel перед загрузкой

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

СтрРазделить() в коде

Универсально для обработок и обменов. Требует обработки частных случаев: двойные фамилии, отсутствие отчества, лишние пробелы.

Типовые функции БСП

Готовые ФамилияИнициалы() и похожие — для сокращённых представлений в печати. Не подходят, если исходник хранится одной строкой в нетиповом реквизите.

Проверка результата и типичные ошибки

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

Самые коварные случаи — двойные фамилии и имена. «Гаспарян Арутюн Самвелович» разбирается без проблем, а вот «Салтыков-Щедрин Михаил Евграфович» при дефисе тоже корректен (дефис не является разделителем). Проблемы начинаются с фамилий через пробел («Гарсия Лорка Федерико») и частиц («де Ла Круа Хуан Пабло») — автоматика здесь гарантированно ошибётся, такие записи нужно обрабатывать вручную.

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

Типичные ошибки
01
СтрРазделить без третьего параметра Ложь — двойные пробелы дают пустые элементы, и имя с отчеством смещаются
02
Отсутствие проверки количества частей — при ФИО из двух слов обращение к Части[2] вызывает ошибку выполнения
03
Игнорирование двойных фамилий и фамилий с частицами — автоматика раскидывает их по полям неверно
04
Массовая обработка без резервной копии — при ошибке в алгоритме испорченные данные придётся восстанавливать вручную
05
Разделение строки представления вместо использования регистра ФИО — дублирование того, что типовая конфигурация уже хранит по частям

Когда разделять не нужно: альтернативы

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

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

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

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

Поле «Отчество»
Норма

Пусто только у записей, где отчества действительно нет

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

Массово пустые отчества или отчества, попавшие в поле «Имя»

Поле «Имя»
Норма

Содержит только имя без окончаний -ович/-вна

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

Имена с отчеством в одном поле или пустые значения

Поле «Фамилия»
Норма

Одна фамилия, включая дефис для двойных

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

Фамилия обрезана или содержит имя

Сокращённое представление
Норма

Формат «Иванов И. И.», у безотчественных — «Иванов И.»

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

Лишние точки, двойные пробелы, «Иванов И. .»

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

Как разделить ФИО, если оно хранится в одном реквизите нетипового справочника?

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

СтрРазделить недоступна — платформа старая. Что делать?

На платформах до 8.3.6 используйте приём с заменой: СтрЗаменить(ФИО, " ", Символы.ПС), затем получайте слова через СтрПолучитьСтроку(Результат, Номер), а их количество — через СтрЧислоСтрок. Логика индексов та же: первая строка — фамилия, вторая — имя, третья — отчество.

Как обработать ФИО, где отчество отсутствует?

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

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

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

Как массово исправить ФИО, введённые с ошибками разделения?

Выгрузите проблемные записи в табличный документ, исправьте части вручную или формулами, затем загрузите обратно обработкой загрузки с режимом обновления существующих элементов по ключевому полю. Так вы сохраните визуальный контроль над каждой исправленной строкой.

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

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

Итог

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

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