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

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

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

1. Стандартный способ: функция «Формат()» для справочников

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

Пример использования в отчете или печатной форме:

Формат(ФизическоеЛицо.Наименование, "П=ФИОКраткое");

Где:

  • 📌 ФизическоеЛицо — ссылка на элемент справочника «Физические лица».
  • 📌 "П=ФИОКраткое" — предопределенный формат вывода, который автоматически преобразует «Иванов Иван Иванович» в «Иванов И.И.».

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

💡

Если функция Формат() возвращает ошибку, проверьте, что передаете именно ссылку на элемент справочника, а не строку с ФИО. Для строкового значения используйте конструкцию Формат(ФИОКакСтрока, "С=ФИОКраткое")

2. Получение ФИО из документов (например, из «Приема на работу»)

Если фамилия с инициалами нужна из документа (например, «Прием на работу» в 1С:ЗУП), путь будет другим. Здесь данные о сотруднике хранятся в реквизите ФизическоеЛицо, и к ним можно обратиться через точку.

Пример для печатной формы приказа:

Формат(Документ.ФизическоеЛицо.Наименование, "П=ФИОКраткое");

Если документ содержит реквизит Сотрудник (как в 1С:Зарплата и Управление Персоналом 3.1), используйте:

Формат(Документ.Сотрудник.ФизическоеЛицо.Наименование, "П=ФИОКраткое");

Важно: в некоторых конфигурациях (например, 1С:Бухгалтерия 3.0) физические лица могут быть привязаны к контрагентам. Тогда путь будет таким:

Формат(Документ.Контрагент.ФизическоеЛицо.Наименование, "П=ФИОКраткое");

🔹 Убедитесь, что реквизит не пустой (добавьте проверку Если Документ.ФизическоеЛицо <> Неопределено Тогда)

🔹 Проверьте, что физическое лицо заполнено в карточке сотрудника/контрагента

🔹 Для документов старше 2020 года в ЗУП 2.5 путь может отличаться (используйте Документ.Сотрудник.ФизЛицо)

-->

3. Программный код: разбор строки ФИО вручную

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

Пример функции на встроенном языке :

Функция ПолучитьФИОКраткое(ФИОКакСтрока)

// Разбиваем строку на части по пробелу

МассивЧастей = СтроковыеФункции.РазделитьСтроку(ФИОКакСтрока, " ");

// Проверяем количество частей (фамилия + имя + [отчество])

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

Фамилия = МассивЧастей[0];

Имя = Лев(МассивЧастей[1], 1) + ".";

Отчество = Лев(МассивЧастей[2], 1) + ".";

Возврат Фамилия + " " + Имя + Отчество;

ИначеЕсли МассивЧастей.Количество() = 2 Тогда

// Нет отчества

Фамилия = МассивЧастей[0];

Имя = Лев(МассивЧастей[1], 1) + ".";

Возврат Фамилия + " " + Имя;

Иначе

// Неожиданный формат - возвращаем исходную строку

Возврат ФИОКакСтрока;

КонецЕсли;

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

Этот код обрабатывает:

  • 👍 Полное ФИО: «Иванов Иван Иванович» → «Иванов И.И.»
  • 👍 Без отчества: «Иванов Иван» → «Иванов И.»
  • ⚠️ Двойные фамилии: «Иванов-Петров Иван Иванович» — требует доработки (нужно разбивать по дефису).
Обработка двойных фамилий

Чтобы корректно обработать фамилии типа «Иванов-Петров», модифицируйте функцию:

1. Перед разбивкой по пробелу проверьте наличие дефиса в первой части строки.

2. Если дефис есть, считайте первую часть за фамилию целиком (включая дефис).

Пример:

Если Найти(МассивЧастей[0], "-") > 0 Тогда Фамилия = МассивЧастей[0];

4. Использование запроса для массового получения ФИО

Если нужно получить фамилии с инициалами для списка сотрудников (например, в отчете), удобно использовать запрос на языке 1С. Это позволит обработать данные на стороне СУБД, что быстрее, чем обход коллекции на клиенте.

Пример запроса для 1С:ЗУП 3.1:

Выбрать

Сотрудник.Ссылка Как Сотрудник,

Формат(Сотрудник.ФизическоеЛицо.Наименование, "П=ФИОКраткое") Как ФИОКраткое

Из

Справочник.Сотрудники Как Сотрудник

Где

Сотрудник.ПометкаУдаления = Ложь

Для 1С:Бухгалтерия 3.0 (если нужны контрагенты-физлица):

Выбрать

Контрагент.Ссылка Как Контрагент,

Формат(Контрагент.ФизическоеЛицо.Наименование, "П=ФИОКраткое") Как ФИОКраткое

Из

Справочник.Контрагенты Как Контрагент

Где

Контрагент.ЭтотФизЛицо = Истина

И Контрагент.ПометкаУдаления = Ложь

Преимущества этого метода:

  • 🚀 Быстрая обработка больших объемов данных (тысячи записей).
  • 🔄 Легко добавить фильтры (например, по подразделению или дате приема).
  • 📊 Результат можно сразу выгрузить в табличный документ или отчет.
📊 Какой способ вы используете чаще всего?
Стандартную функцию Формат()
Программный код
Запросы 1С
Ручной ввод в печатные формы

5. Особенности для разных конфигураций 1С

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

Конфигурация Справочник с ФИО Пример пути к ФИО Особенности
1С:ЗУП 3.1 Сотрудники → ФизическоеЛицо Сотрудник.ФизическоеЛицо.Наименование Отчество может отсутствовать. В документах используется реквизит ФизЛицо.
1С:Бухгалтерия 3.0 Контрагенты (если физлицо) Контрагент.ФизическоеЛицо.Наименование Физлица отмечены флагом ЭтотФизЛицо = Истина.
1С:Управление Торговлей 11 Контрагенты или ФизическиеЛица Контрагент.ФизЛицо.Наименование Для клиентов-физлиц может использоваться справочник «Физические лица» напрямую.
1С:ERP 2.5 ФизическиеЛица или Сотрудники Сотрудник.ФизЛицо.Наименование В документах часто используется реквизит ФизЛицоКод.

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

  1. Откройте конфигуратор (Ctrl+Shift+C).
  2. Найдите справочник, где хранятся физические лица (например, через поиск по слову «Физическ»).
  3. Проверьте структуру реквизитов — часто ФИО хранится в поле Наименование или ПолноеНаименование.
💡

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

6. Типичные ошибки и как их избежать

Даже опытные пользователи сталкиваются с проблемами при получении фамилии с инициалами. Вот самые распространенные ошибки и способы их решения:

1. Ошибка «Неопределено» при обращении к ФизическомуЛицу

Причина: в карточке сотрудника или контрагента не заполнено физическое лицо.

Решение: добавьте проверку перед форматированием:

Если Документ.ФизическоеЛицо <> Неопределено Тогда

ФИО = Формат(Документ.ФизическоеЛицо.Наименование, "П=ФИОКраткое");

Иначе

ФИО = "";

КонецЕсли;

2. Некорректный вывод для иностранных ФИО

Причина: в некоторых конфигурациях иностранные фамилии/имена хранятся в латинице, а функция Формат() может некорректно обрабатывать точки после инициалов.

Решение: используйте ручной разбор строки (см. раздел 3) или доработайте функцию для учета латиницы.

3. Пустая строка вместо ФИО в отчете

Причина: в запросе не учтена связь между справочниками (например, Сотрудник.ФизическоеЛицо не заполнен).

Решение: добавьте в запрос условие ЛЕВОЕ СОЕДИНЕНИЕ:

Выбрать

Сотрудник.Ссылка Как Сотрудник,

Формат(Сотрудник.ФизическоеЛицо.Наименование, "П=ФИОКраткое") Как ФИОКраткое

Из

Справочник.Сотрудники Как Сотрудник

ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица Как ФизЛицо

ПО Сотрудник.ФизическоеЛицо = ФизЛицо.Ссылка

Как проверить заполненность физических лиц в базе

Запустите отчет «Анализ заполненности данных» (доступен в ЗУП 3.1 и ERP 2.5). Он покажет сотрудников без привязанных физлиц. В Бухгалтерии 3.0 аналогичную проверку можно сделать запросом:

Выбрать Контрагент.Ссылка Из Справочник.Контрагенты Как Контрагент Где Контрагент.ЭтотФизЛицо = Истина И Контрагент.ФизическоеЛицо = Значение(Справочник.ФизическиеЛица.ПустаяСсылка)

⚠️ Внимание: В конфигурациях до версии 8.3.10 функция Формат() с параметром "П=ФИОКраткое" может работать нестабильно. Для старых версий используйте альтернативный синтаксис: Формат(ФизЛицо, "ФИОКраткое") (без "П=").

7. Альтернативные методы: внешние обработки и расширения

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

1. Внешними обработками

На сайте Infostart или ITS есть готовые обработки для работы с ФИО. Например:

  • 📄 «Универсальная обработка ФИО» — позволяет гибко настраивать формат вывода.
  • 📄 «Печатные формы с ФИО» — шаблоны для документов, где требуется краткое ФИО.

2. Расширениями конфигурации

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

Функция ПолноеФИОВКраткий(ФизЛицо) Экспорт

Возврат Формат(ФизЛицо.Наименование, "П=ФИОКраткое");

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

Подключите расширение в конфигураторе и используйте функцию в отчетах или документах.

3. Интеграцией с внешними сервисами

Для сложных случаев (например, транслитерация ФИО или проверка по ФМС) можно подключить веб-сервис. Пример кода для обращения к API:

HTTPЗапрос = Новый HTTPЗапрос("https://api.fio-service.ru/format");

HTTPЗапрос.УстановитьТелоИзСтроки("{\"fio\": \"" + ФИОКакСтрока + "\"}");

Ответ = HTTPЗапрос.Выполнить();

Результат = JSON.Прочитать(Ответ.ПолучитьТелоКакСтроку()).fio_short;

⚠️ Внимание: При использовании внешних сервисов убедитесь, что передача персональных данных соответствует 152-ФЗ «О персональных данных». Для внутреннего использования лучше ограничиться стандартными средствами 1С.

FAQ: Частые вопросы по работе с ФИО в 1С

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

Используйте функцию Формат() с параметром "П=ИОФ":

Формат(ФизЛицо.Наименование, "П=ИОФ");

Если нужно вручную: разберите строку на части и переставьте местами:

ИмяКраткое = Лев(Имя, 1) + ". ";

ОтчествоКраткое = Если Отчество <> "" Тогда Лев(Отчество, 1) + ". " Иначе "" КонецЕсли;

Результат = ИмяКраткое + ОтчествоКраткое + Фамилия;

Почему функция Формат() возвращает ошибку «Неверный формат»?

Ошибка возникает в двух случаях:

  1. Вы передаете не ссылку на справочник, а строку. Используйте Формат(ФизЛицо, "С=ФИОКраткое") для строк.
  2. Версия платформы старше 8.3.6. Обновите 1С или используйте альтернативный код:
Функция СтароеФИОКраткое(ФИО)

Части = СтроковыеФункции.РазделитьСтроку(ФИО, " ");

Возврат Части[0] + " " + Лев(Части[1], 1) + ". " + Если Части.Количество() > 2 Тогда Лев(Части[2], 1) + "." Иначе "" КонецЕсли;

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

Как получить ФИО из документа «Кадровый перевод» в ЗУП 3.1?

В документе «Кадровый перевод» путь к ФИО такой:

Формат(Документ.Сотрудник.ФизическоеЛицо.Наименование, "П=ФИОКраткое");

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

Можно ли получить ФИО в формате «Иванов И.» (без отчества, если оно есть)?

Да, для этого модифицируйте функцию разбора строки:

Функция ФамилияИИмяКраткое(ФИОКакСтрока)

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

Фамилия = Части[0];

ИмяКраткое = Лев(Части[1], 1) + ".";

Возврат Фамилия + " " + ИмяКраткое;

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

Или используйте запрос с подстрокой:

Выбрать

Сотрудник.Ссылка Как Сотрудник,

Лев(Сотрудник.ФизическоеЛицо.Наименование,

Найти(Сотрудник.ФизическоеЛицо.Наименование, " ", Найти(Сотрудник.ФизическоеЛицо.Наименование, " ") + 1)) Как ФамилияИИмя

Из Справочник.Сотрудники Как Сотрудник

Где в 1С хранится отчество, если его нет в поле «Наименование»?

В некоторых конфигурациях (например, 1С:Зарплата и Кадры 7.7) отчество может храниться в отдельных реквизитах:

  • ФизЛицо.Отчество
  • ФизЛицо.ОтчествоПолное

Проверьте структуру справочника в конфигураторе (Ctrl+Shift+C → найдите справочник «ФизическиеЛица» → откройте реквизиты).