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

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

Как склонять слова в 1С: практическое руководство

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

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

В платформе «1С:Предприятие 8.3» есть встроенный механизм склонения: глобальный метод ПолучитьСклоненияСтроки и его вариант для ФИО ПолучитьСклоненияСтрокиПоНомеруПадежа. Они работают локально (на Windows — через компоненту NameDecl.dll, на Linux — через внешнюю компоненту склонения) и не требуют интернета. В типовых конфигурациях поверх них построены функции БСП, например ФизическиеЛицаКлиентСервер.ПросклонятьФИО и СклонениеПредставленийОбъектов.

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

Какие инструменты склонения есть в 1С

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

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

В типовых конфигурациях (ЗУП, ERP, УТ, БП) поверх платформенных методов надстроены функции Библиотеки стандартных подсистем. Они дополнительно кэшируют результаты и умеют склонять представления объектов через механизм «Склонение представлений объектов».

Как просклонять ФИО: пошаговый пример

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

Результат = ПолучитьСклоненияСтрокиПоНомеруПадежа(4, "Иванов Иван Иванович", 1);

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

Если конфигурация построена на БСП, надёжнее использовать её обёртку — она сама обрабатывает ошибки и недоступность компоненты:

РезультатСклонения = Неопределено;

Если ФизическиеЛицаКлиентСервер.ПросклонятьФИО("Петрова Анна Сергеевна", 3, РезультатСклонения, 2) Тогда

// РезультатСклонения = "Петровой Анне Сергеевне" (дательный падеж)

КонецЕсли;

Порядок действий
  1. 1
    Определите, что склоняете: ФИО физлица или произвольную фразу (должность, подразделение)
  2. 2
    Для ФИО получите пол из справочника «Физические лица» (перечисление ПолФизическогоЛица) и приведите его к числу 1 или 2
  3. 3
    Вызовите ПолучитьСклоненияСтрокиПоНомеруПадежа с нужным номером падежа или функцию БСП ПросклонятьФИО
  4. 4
    Проверьте результат на тестовом наборе: мужская фамилия, женская, несклоняемая (Коваленко, Шевченко)
  5. 5
    Подставьте результат в шаблон печатной формы или текста письма

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

Как склонять должности и произвольные фразы

Для фраз вроде «генеральный директор», «начальник отдела продаж» используется ПолучитьСклоненияСтроки. Метод возвращает массив, где каждый элемент — массив склонений одного слова фразы. Собрать нужный падеж приходится вручную:

Фраза = "Генеральный директор";

Склонения = ПолучитьСклоненияСтроки(Фраза, , 1);

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

Для Каждого Слово Из Склонения Цикл

Результат = Результат + " " + Слово[4]; // творительный падеж (индекс с 0)

КонецЦикла;

// " генеральным директором"

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

Ограничения и типичные проблемы

Компонента склонения — отдельная внешняя библиотека. На сервере Linux она должна быть установлена вместе с сервером 1С, иначе вызов методов завершится ошибкой «Ошибка вызова метода внешней компоненты». На клиенте (тонкий/веб-клиент) склонение обычно недоступно — выполняйте его на сервере.

Автоопределение пола ошибается на несклоняемых фамилиях (Коваленко, Савченко, Дюма) и иностранных именах. Всегда передавайте пол явно, если он известен. Ещё одна ловушка — инициалы: строку «Иванов И. И.» механизм склоняет хуже, чем полное ФИО, поэтому сначала склоняйте полную форму, а инициалы сокращайте уже после склонения имени и отчества.

Типичные ошибки
01
Вызов склонения в клиентском контексте — компонента недоступна, метод падает с ошибкой; выносите вызов в серверную процедуру
02
Передача пола = 0 (автоопределение) для несклоняемых фамилий — женская фамилия «Савченко» может быть просклоняна как мужская
03
Склонение строки с инициалами «Иванов И. И.» — результат непредсказуем; склоняйте полное ФИО, сокращайте потом
04
Отсутствие обработки неуспеха функции БСП — в документ попадает пустая строка вместо ФИО
05
Склонение ФИО, хранящегося одной строкой с лишними пробелами — компонента может вернуть некорректный результат; нормализуйте строку СокрЛП

Альтернативы, когда встроенное склонение недоступно

Если компонента не установлена и установить её нельзя (например, ограничения хостинга), есть три рабочих варианта. Первый — внешние веб-сервисы склонения (morpher.ru и аналоги): точность высокая, но нужен интернет, есть лимиты запросов и передача персональных данных третьей стороне, что требует оценки по 152-ФЗ.

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

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

Сравнение вариантов

Встроенная компонента платформы

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

Веб-сервис склонения

Высокое качество, работает везде. Ограничение: интернет, лимиты, передача персональных данных вовне

Хранение падежных форм в справочнике

Полный контроль и предсказуемость. Ограничение: ручное заполнение и поддержка актуальности

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

Минимальный тестовый набор: мужская склоняемая фамилия (Иванов), женская (Иванова), несклоняемая мужская и женская (Шевченко), фамилия на -ых/-ово (Дурново), двойное имя или отчество. Для каждого случая проверьте все шесть падежей и сравните с ожидаемым результатом, сверенным вручную.

Признак корректной работы: несклоняемые фамилии остаются неизменными во всех падежах, а женские фамилии на -ова/-ина склоняются по женской модели («Ивановой», а не «Ивановым»). Если женская фамилия склоняется как мужская — почти наверняка не передан или неверно определён пол.

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

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

Женская фамилия Иванова в дательном падеже
Норма

Ивановой

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

Иванову — пол определён как мужской, передайте пол = 2 явно

Несклоняемая фамилия Шевченко в родительном
Норма

Шевченко (без изменений)

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

Шевченки — компонента ошиблась, добавьте исключение

Должность «генеральный директор» в творительном
Норма

генеральным директором

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

склонено только первое слово — не собраны все элементы массива

Вызов на сервере Linux
Норма

Строка склоняется без исключений

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

Ошибка внешней компоненты — компонента склонения не установлена

FAQ

Работает ли склонение в тонком и веб-клиенте?

Как правило, нет — компонента склонения доступна на сервере и в толстом клиенте. Правильный подход: вызывать склонение в серверной процедуре и возвращать на клиент готовую строку.

Как просклонять ФИО с инициалами, например «Иванов И. И.»?

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

Почему ПолучитьСклоненияСтрокиПоНомеруПадежа выдаёт ошибку на сервере Linux?

Метод использует внешнюю компоненту склонения, которая устанавливается отдельно вместе с сервером 1С. Проверьте, что компонента установлена для нужной разрядности сервера, и что у процесса сервера есть права на её загрузку.

Можно ли склонять названия организаций и контрагентов?

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

Как ускорить склонение в отчёте по сотням сотрудников?

Кэшируйте результаты: складывайте пары «исходная строка + падеж → результат» в соответствие и проверяйте его перед каждым вызовом. В конфигурациях на БСП используйте регистр склонений представлений — он делает то же самое на уровне подсистемы.

Что делать, если фамилия склоняется неправильно и пол передан верно?

Компонента платформы не знает всех исключений. Для таких случаев заведите таблицу переопределений (соответствие или регистр сведений «исходная строка → правильные падежные формы») и проверяйте её до вызова встроенного механизма.

Итог

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

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