Как реализовать склонение ФИО во внешней печатной форме 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Использование встроенной функции платформы ПолучитьСклоненияСтроки

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

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


// Получаем ответственных лиц организации на нужную дату
Руководители = ФормированиеПечатныхФормСервер.ОтветственныеЛицаОрганизаций(ДанныеПечати.Организация, ДанныеПечати.Дата);

// Склоняем ФИО руководителя в Родительный падеж
// ПД=Родительный — указывает на нужный падеж
// ПЛ=Мужской — указывает пол для корректного склонения
РезультатСклонения = ПолучитьСклоненияСтроки(Руководители.Руководитель, "Л=ru_RU;ПЛ=Мужской", "ПД=Родительный");

// Извлекаем результат (функция возвращает массив строк)
ФИОРодительный = РезультатСклонения[0];

Проанализируем параметры этой функции. Первый параметр — это сама строка ФИО. Второй параметр — строка параметров, где Л=ru_RU определяет локализацию, а ПЛ — пол (Мужской или Женский). Третий параметр ПД определяет падеж. Важно помнить, что функция возвращает Массив, так как в некоторых случаях правил русского языка может быть несколько вариантов склонения, но чаще всего нам нужен именно первый элемент массива.

Обработка динамических данных и определение пола

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

Выясним причину, по которой это важно: фамилии типа "Коваль" или "Белых" склоняются по-разному в зависимости от того, мужчина это или женщина. Если в вашем запросе к данным печати есть поле Пол, мы можем использовать его следующим образом:


// В запросе получаем ФИО и Пол (ПеречислениеСсылка.ПолФизическогоЛица)
Для Каждого СтрокаДанных Из ДанныеДляПечати Цикл
    
    // Формируем параметр пола для функции
    ПараметрПола = ?(СтрокаДанных.Пол = ПредопределенноеЗначение("Перечисление.ПолФизическогоЛица.Мужской"), "Мужской", "Женский");
    
    // Выполняем склонение
    МассивСклонений = ПолучитьСклоненияСтроки(СтрокаДанных.ФИО, "Л=ru_RU; ПЛ=" + ПараметрПола, "ПД=Родительный");
    
    Если МассивСклонений.Количество() > 0 Тогда
        СтрокаДанных.ФИОДляПечати = МассивСклонений[0];
    КонецЕсли;
    
КонецЦикла;

Обратите внимание на синтаксис: внутри строки параметров "ПЛ=" + ПараметрПола не должно быть лишних пробелов или пропущенных запятых, иначе платформа выдаст ошибку Ожидается символ ')' или Неверные параметры.

Альтернативный метод: Склонение через БСП

Если вы работаете в современной конфигурации (ЗУП 3.1, БП 3.0, ERP 2.5), мы крайне рекомендуем использовать программный интерфейс Библиотеки стандартных подсистем (БСП). Это более надежный способ, так как БСП умеет обращаться к специальным регистрам сведений, где хранятся исключения для редких фамилий.

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


// Пример склонения через БСП
Результат = СклонениеПредставленийОбъектов.ПросклонятьФИО(Объект.ФизЛицо, 2); // 2 - это порядковый номер падежа (Родительный)

// Результат будет содержать уже готовую строку
ФИОВПадеже = Результат;

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

  1. Учет исключений: Если пользователь вручную исправил склонение фамилии в карточке сотрудника (через специальную форму), БСП подставит именно исправленный вариант.
  2. Автоматический пол: Система сама найдет пол физического лица в базе данных.
  3. Склонение должностей: В БСП есть отдельные функции для склонения должностей, которые работают по иным алгоритмам, нежели ФИО.

Типичные ошибки и способы их исправления

Проанализируем ситуацию, возникшую у автора темы на форуме. При написании кода была допущена ошибка: ФИО = ПолучитьСклоненияСтроки(Руководители.Руководитель> "Л=ru_RU;ПЛ=Мужской", "ПД=Родительный");. Здесь лишний символ "больше" и отсутствие запятой привели к тому, что внешняя печатная форма вообще отказывалась работать.

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

Работа с инициалами и должностями

Часто в печатных формах требуется формат "Иванову И.И.". Платформенная функция позволяет управлять форматом вывода. Однако, если вам нужно просклонять и должность, и ФИО вместе (например, "Генеральному директору Иванову И.И."), лучше делать это по отдельности.

Рассмотрим пример комплексного формирования строки:


// Склоняем должность вручную или через БСП
ДолжностьПадеж = СклонениеПредставленийОбъектов.ПросклонятьПредставление(ДанныеПечати.ДолжностьРуководителя, 2);

// Склоняем ФИО
ФИОПадеж = СклонениеПредставленийОбъектов.ПросклонятьФИО(ДанныеПечати.Руководитель, 2);

// Собираем итоговую строку
ДанныеДляВывода = ДолжностьПадеж + " " + ФИОПадеж;

Важный момент: для склонения должностей (профессий) лучше использовать СклонениеПредставленийОбъектов.ПросклонятьПредставление, так как алгоритм ПолучитьСклоненияСтроки может некорректно обрабатывать составные названия профессий, пытаясь найти в них фамилию или имя.

Оптимизация при массовой печати

Если вы формируете печатную форму для большого количества документов (например, рассылка уведомлений сотням сотрудников), вызов функции склонения для каждой строки может создать задержку. В современных версиях БСП предусмотрены методы пакетного склонения, когда вы передаете массив объектов, а система возвращает таблицу соответствий. Это значительно ускоряет процесс за счет уменьшения количества обращений к внутренним механизмам анализа текста.

Подводя итог, можно сказать: для простых внешних форм на платформе 8.3.13+ достаточно использовать ПолучитьСклоненияСтроки, не забывая правильно передавать параметр пола. Для сложных корпоративных систем лучшим выбором будет использование методов БСП, которые обеспечивают более высокую точность и учитывают ручные корректировки пользователей в регистрах склонений.

← На главную