Получение фамилии с инициалами (например, «Иванов И.И.») — одна из самых частых задач при работе с 1С:Предприятие 8.3. Такой формат требуется для печатных форм документов, отчетов, списков сотрудников или контрагентов. Казалось бы, простая операция, но в зависимости от конфигурации (ЗУП, БП, УТ, КА) и источника данных (справочники, документы, регистры) решения могут кардинально отличаться.
В этой статье мы разберем 5 рабочих способов получить ФИО в формате «Фамилия И.О.» — от стандартных функций платформы до программного кода на встроенном языке. Вы узнаете, как обойти типичные ошибки (например, отсутствие отчества у физического лица), как адаптировать решение под разные конфигурации, и где искать данные, если фамилия хранится не в очевидном месте. Особое внимание уделим методу с использованием функции «Формат()», который работает даже в типовых конфигурациях без доработок.
Материал будет полезен и начинающим пользователям, и опытным разработчикам. Первые найдут здесь готовые инструкции с пошаговыми скриншотами, вторые — оптимизированные фрагменты кода и нюансы работы с разными версиями платформы.
1. Стандартный способ: функция «Формат()» для справочников
Самый универсальный метод — использование встроенной функции Формат(). Она работает во всех конфигурациях на базе 1С:Предприятие 8.3 и не требует правки кода. Подходит для справочников «Физические лица», «Сотрудники», «Контрагенты» (если это физлица).
Пример использования в отчете или печатной форме:
Формат(ФизическоеЛицо.Наименование, "П=ФИОКраткое");
Где:
- 📌
ФизическоеЛицо— ссылка на элемент справочника «Физические лица». - 📌
"П=ФИОКраткое"— предопределенный формат вывода, который автоматически преобразует «Иванов Иван Иванович» в «Иванов И.И.».
Этот метод учитывает отсутствие отчества: если его нет, результат будет «Иванов И.». Также корректно обрабатываются двойные фамилии (например, «Иванов-Петров И.И.»).
Если функция Формат() возвращает ошибку, проверьте, что передаете именно ссылку на элемент справочника, а не строку с ФИО. Для строкового значения используйте конструкцию Формат(ФИОКакСтрока, "С=ФИОКраткое")
2. Получение ФИО из документов (например, из «Приема на работу»)
Если фамилия с инициалами нужна из документа (например, «Прием на работу» в 1С:ЗУП), путь будет другим. Здесь данные о сотруднике хранятся в реквизите ФизическоеЛицо, и к ним можно обратиться через точку.
Пример для печатной формы приказа:
Формат(Документ.ФизическоеЛицо.Наименование, "П=ФИОКраткое");
Если документ содержит реквизит Сотрудник (как в 1С:Зарплата и Управление Персоналом 3.1), используйте:
Формат(Документ.Сотрудник.ФизическоеЛицо.Наименование, "П=ФИОКраткое");
Важно: в некоторых конфигурациях (например, 1С:Бухгалтерия 3.0) физические лица могут быть привязаны к контрагентам. Тогда путь будет таким:
Формат(Документ.Контрагент.ФизическоеЛицо.Наименование, "П=ФИОКраткое");
🔹 Убедитесь, что реквизит не пустой (добавьте проверку Если Документ.ФизическоеЛицо <> Неопределено Тогда)
🔹 Проверьте, что физическое лицо заполнено в карточке сотрудника/контрагента
🔹 Для документов старше 2020 года в ЗУП 2.5 путь может отличаться (используйте Документ.Сотрудник.ФизЛицо)
-->
3. Программный код: разбор строки ФИО вручную
Когда стандартные методы не подходят (например, если ФИО хранится в виде строки без привязки к справочнику), можно разобрать строку вручную с помощью кода. Этот способ универсален, но требует аккуратности при обработке исключений.
Пример функции на встроенном языке 1С:
Функция ПолучитьФИОКраткое(ФИОКакСтрока)
// Разбиваем строку на части по пробелу
МассивЧастей = СтроковыеФункции.РазделитьСтроку(ФИОКакСтрока, " ");
// Проверяем количество частей (фамилия + имя + [отчество])
Если МассивЧастей.Количество() = 3 Тогда
Фамилия = МассивЧастей[0];
Имя = Лев(МассивЧастей[1], 1) + ".";
Отчество = Лев(МассивЧастей[2], 1) + ".";
Возврат Фамилия + " " + Имя + Отчество;
ИначеЕсли МассивЧастей.Количество() = 2 Тогда
// Нет отчества
Фамилия = МассивЧастей[0];
Имя = Лев(МассивЧастей[1], 1) + ".";
Возврат Фамилия + " " + Имя;
Иначе
// Неожиданный формат - возвращаем исходную строку
Возврат ФИОКакСтрока;
КонецЕсли;
КонецФункции
Этот код обрабатывает:
- 👍 Полное ФИО: «Иванов Иван Иванович» → «Иванов И.И.»
- 👍 Без отчества: «Иванов Иван» → «Иванов И.»
- ⚠️ Двойные фамилии: «Иванов-Петров Иван Иванович» — требует доработки (нужно разбивать по дефису).
Обработка двойных фамилий
Чтобы корректно обработать фамилии типа «Иванов-Петров», модифицируйте функцию:
1. Перед разбивкой по пробелу проверьте наличие дефиса в первой части строки.
2. Если дефис есть, считайте первую часть за фамилию целиком (включая дефис).
Пример:
Если Найти(МассивЧастей[0], "-") > 0 Тогда Фамилия = МассивЧастей[0];
4. Использование запроса для массового получения ФИО
Если нужно получить фамилии с инициалами для списка сотрудников (например, в отчете), удобно использовать запрос на языке 1С. Это позволит обработать данные на стороне СУБД, что быстрее, чем обход коллекции на клиенте.
Пример запроса для 1С:ЗУП 3.1:
Выбрать
Сотрудник.Ссылка Как Сотрудник,
Формат(Сотрудник.ФизическоеЛицо.Наименование, "П=ФИОКраткое") Как ФИОКраткое
Из
Справочник.Сотрудники Как Сотрудник
Где
Сотрудник.ПометкаУдаления = Ложь
Для 1С:Бухгалтерия 3.0 (если нужны контрагенты-физлица):
Выбрать
Контрагент.Ссылка Как Контрагент,
Формат(Контрагент.ФизическоеЛицо.Наименование, "П=ФИОКраткое") Как ФИОКраткое
Из
Справочник.Контрагенты Как Контрагент
Где
Контрагент.ЭтотФизЛицо = Истина
И Контрагент.ПометкаУдаления = Ложь
Преимущества этого метода:
- 🚀 Быстрая обработка больших объемов данных (тысячи записей).
- 🔄 Легко добавить фильтры (например, по подразделению или дате приема).
- 📊 Результат можно сразу выгрузить в табличный документ или отчет.
5. Особенности для разных конфигураций 1С
Каждая типовая конфигурация имеет свои нюансы хранения ФИО. В таблице ниже — ключевые различия:
| Конфигурация | Справочник с ФИО | Пример пути к ФИО | Особенности |
|---|---|---|---|
| 1С:ЗУП 3.1 | Сотрудники → ФизическоеЛицо | Сотрудник.ФизическоеЛицо.Наименование |
Отчество может отсутствовать. В документах используется реквизит ФизЛицо. |
| 1С:Бухгалтерия 3.0 | Контрагенты (если физлицо) | Контрагент.ФизическоеЛицо.Наименование |
Физлица отмечены флагом ЭтотФизЛицо = Истина. |
| 1С:Управление Торговлей 11 | Контрагенты или ФизическиеЛица | Контрагент.ФизЛицо.Наименование |
Для клиентов-физлиц может использоваться справочник «Физические лица» напрямую. |
| 1С:ERP 2.5 | ФизическиеЛица или Сотрудники | Сотрудник.ФизЛицо.Наименование |
В документах часто используется реквизит ФизЛицоКод. |
Если вы работаете с нетиповой конфигурацией, путь к ФИО может отличаться. В этом случае:
- Откройте конфигуратор (
Ctrl+Shift+C). - Найдите справочник, где хранятся физические лица (например, через поиск по слову «Физическ»).
- Проверьте структуру реквизитов — часто ФИО хранится в поле
НаименованиеилиПолноеНаименование.
В конфигурациях на базе БСП (Библиотека Стандартных Подсистем) для вывода ФИО часто используется общий модуль ОбщегоНазначенияКлиентСервер с функцией ФорматированнаяСтрокаФИО().
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) + ". " Иначе "" КонецЕсли;
Результат = ИмяКраткое + ОтчествоКраткое + Фамилия;
Почему функция Формат() возвращает ошибку «Неверный формат»?
Ошибка возникает в двух случаях:
- Вы передаете не ссылку на справочник, а строку. Используйте
Формат(ФизЛицо, "С=ФИОКраткое")для строк. - Версия платформы старше 8.3.6. Обновите 1С или используйте альтернативный код:
Функция СтароеФИОКраткое(ФИО)
Части = СтроковыеФункции.РазделитьСтроку(ФИО, " ");
Возврат Части[0] + " " + Лев(Части[1], 1) + ". " + Если Части.Количество() > 2 Тогда Лев(Части[2], 1) + "." Иначе "" КонецЕсли;
КонецФункции
Как получить ФИО из документа «Кадровый перевод» в ЗУП 3.1?
В документе «Кадровый перевод» путь к ФИО такой:
Формат(Документ.Сотрудник.ФизическоеЛицо.Наименование, "П=ФИОКраткое");
Если нужно ФИО предыдущего сотрудника (при замене), используйте реквизит Документ.СотрудникДоИзменения.
Можно ли получить ФИО в формате «Иванов И.» (без отчества, если оно есть)?
Да, для этого модифицируйте функцию разбора строки:
Функция ФамилияИИмяКраткое(ФИОКакСтрока)
Части = СтроковыеФункции.РазделитьСтроку(ФИОКакСтрока, " ");
Фамилия = Части[0];
ИмяКраткое = Лев(Части[1], 1) + ".";
Возврат Фамилия + " " + ИмяКраткое;
КонецФункции
Или используйте запрос с подстрокой:
Выбрать
Сотрудник.Ссылка Как Сотрудник,
Лев(Сотрудник.ФизическоеЛицо.Наименование,
Найти(Сотрудник.ФизическоеЛицо.Наименование, " ", Найти(Сотрудник.ФизическоеЛицо.Наименование, " ") + 1)) Как ФамилияИИмя
Из Справочник.Сотрудники Как Сотрудник
Где в 1С хранится отчество, если его нет в поле «Наименование»?
В некоторых конфигурациях (например, 1С:Зарплата и Кадры 7.7) отчество может храниться в отдельных реквизитах:
ФизЛицо.ОтчествоФизЛицо.ОтчествоПолное
Проверьте структуру справочника в конфигураторе (Ctrl+Shift+C → найдите справочник «ФизическиеЛица» → откройте реквизиты).