Склонение 1С программно: ФИО, должности, организации

Дата: 06.10.2026 16:54:16
Строки
Склонение
Печатные формы
БСП
Комментарий:
0
Платформа:
8.3
Конфигурация:
Любая
Формы:
Любые

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

Где нужно склонение

Обычно это печатные формы:

  • договор: «в лице генерального директора Петрова Петра Петровича, действующего на основании Устава» — должность и ФИО в родительном падеже, причастие по полу;
  • приказ: «Принять Сидорову Анну Викторовну на должность менеджера по продажам» — ФИО в винительном, должность в родительном;
  • заявление, служебная записка: «Генеральному директору ООО «Вектор» Петрову П. П. от менеджера по продажам Сидоровой А. В.»;
  • сроки и количества: «5 рабочих дней», «в течение четырнадцати календарных дней», «21 позиция».

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

Склонение 1С по падежам: функция ПолучитьСклоненияСтроки

Синтаксис: ПолучитьСклоненияСтроки(СклоняемаяСтрока, ОписаниеСтроки, ФорматнаяСтрока). Второй и третий параметры необязательные. Это строки вида Имя=Значение через точку с запятой, как у Формат().

ПараметрГде задаётсяЗначения
Л (L)ОписаниеСтрокикод локализации, например ru_RU; поддерживается только русский язык
ПЛ (GN)ОписаниеСтрокиМужской или Женский — подсказка для имён собственных; без неё пол платформа определяет сама
ПД (CS)ФорматнаяСтрокаИменительный, Родительный, Дательный, Винительный, Творительный, Предложный

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

Отдельных параметров для рода и числа нет: есть только пол ПЛ для имён собственных, а форму слова при числе даёт другая функция — ПолучитьСклоненияСтрокиПоЧислу(), о ней ниже.

Создайте общий модуль СклонениеСтрок с флажком «Сервер» и вставьте в него код. Обёртка берёт на себя склонение строки по номеру или имени падежа, пустые значения и ошибки платформы; остальные листинги статьи опираются на её функцию СтрокаВПадеже().

// Общий модуль СклонениеСтрок, флажок «Сервер». Нужна платформа 8.3.13 или новее.
// С клиента вызывайте через серверную функцию формы (&НаСервереБезКонтекста).

// Возвращает текст в нужном падеже.
//   Текст - ФИО, должность или словосочетание в именительном падеже.
//   Падеж - номер от 1 до 6 или имя: "Родительный", "Дательный" и т.д.
//   Пол   - "Мужской", "Женский" или "" (подсказка для ФИО).
Функция СтрокаВПадеже(Знач Текст, Знач Падеж, Знач Пол = "") Экспорт

    Текст = СокрЛП(Текст);
    ИмяПадежа = ПараметрПадежа(Падеж);
    Если ПустаяСтрока(Текст) Или ИмяПадежа = "Именительный" Тогда
        Возврат Текст;
    КонецЕсли;

    // Язык указываем явно: по умолчанию берётся локализация базы,
    // а склонение поддерживается только для русского
    ОписаниеСтроки = "Л=ru_RU";
    Если Не ПустаяСтрока(Пол) Тогда
        ОписаниеСтроки = ОписаниеСтроки + ";ПЛ=" + Пол;
    КонецЕсли;

    Попытка
        Варианты = ПолучитьСклоненияСтроки(Текст, ОписаниеСтроки, "ПД=" + ИмяПадежа);
    Исключение
        // Печать не должна падать из-за склонения: пишем в журнал и отдаём исходный текст
        ЗаписьЖурналаРегистрации("Склонение строки", УровеньЖурналаРегистрации.Предупреждение, , ,
            Текст + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
        Возврат Текст;
    КонецПопытки;

    // Функция возвращает массив вариантов, для печати берём первый
    Если Варианты.Количество() = 0 Тогда
        Возврат Текст;
    КонецЕсли;
    Возврат Варианты[0];

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

// Все шесть падежей сразу: для формы ручной правки или записи в свой регистр.
// Возвращает структуру с ключами Именительный, Родительный ... Предложный.
Функция СтрокаПоВсемПадежам(Знач Текст, Знач Пол = "") Экспорт

    Результат = Новый Структура;
    Для Каждого ИмяПадежа Из ИменаПадежей() Цикл
        Результат.Вставить(ИмяПадежа, СтрокаВПадеже(Текст, ИмяПадежа, Пол));
    КонецЦикла;
    Возврат Результат;

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

// Имена падежей по порядку номеров - именно их ждёт параметр ПД.
Функция ИменаПадежей()

    Возврат СтрРазделить("Именительный,Родительный,Дательный,Винительный,Творительный,Предложный", ",");

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

// Номер падежа (1..6) или имя в любом регистре -> значение для ПД.
Функция ПараметрПадежа(Падеж)

    Имена = ИменаПадежей();
    Если ТипЗнч(Падеж) = Тип("Число") Тогда
        Если Падеж >= 1 И Падеж <= 6 И Падеж = Цел(Падеж) Тогда
            Возврат Имена[Падеж - 1];
        КонецЕсли;
    ИначеЕсли ТипЗнч(Падеж) = Тип("Строка") Тогда
        Имя = ТРег(СокрЛП(Падеж));
        Если Имена.Найти(Имя) <> Неопределено Тогда
            Возврат Имя;
        КонецЕсли;
    КонецЕсли;

    ВызватьИсключение СтрШаблон("Неизвестный падеж: %1. Нужен номер от 1 до 6 или имя падежа.", Падеж);

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

ФИО: пол, регистр и инициалы

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

// ФИО в падеже. Пол можно не передавать: определим по отчеству,
// а если не выйдет - платформа попробует распознать его сама.
Функция ФИОВПадеже(Знач ФИО, Знач Падеж, Знач Пол = "") Экспорт

    ФИО = СокрЛП(ФИО);
    Если ПустаяСтрока(ФИО) Тогда
        Возврат "";
    КонецЕсли;
    Если ПустаяСтрока(Пол) Тогда
        Пол = ПолПоОтчеству(ФИО);
    КонецЕсли;

    // "ИВАНОВ ИВАН ИВАНОВИЧ" приводим к виду "Иванов Иван Иванович",
    // после склонения возвращаем исходный регистр (так же поступает БСП)
    ВсеЗаглавные = (ФИО = ВРег(ФИО));
    ВсеСтрочные = (ФИО = НРег(ФИО));
    Если ВсеЗаглавные Или ВсеСтрочные Тогда
        ФИО = ТРег(ФИО);
    КонецЕсли;

    Результат = СтрокаВПадеже(ФИО, Падеж, Пол);

    Если ВсеЗаглавные Тогда
        Результат = ВРег(Результат);
    ИначеЕсли ВсеСтрочные Тогда
        Результат = НРег(Результат);
    КонецЕсли;
    Возврат Результат;

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

// "Петров Петр Петрович", Дательный -> "Петрову П. П."
// Склоняем полное ФИО (по имени и отчеству пол определяется надёжнее), потом сокращаем.
Функция ФамилияИнициалыВПадеже(Знач ФИО, Знач Падеж, Знач Пол = "") Экспорт

    Слова = СтрРазделить(ФИОВПадеже(ФИО, Падеж, Пол), " ", Ложь);
    Если Слова.Количество() = 0 Тогда
        Возврат "";
    КонецЕсли;

    Результат = Слова[0];
    Для Номер = 1 По Мин(Слова.ВГраница(), 2) Цикл
        Результат = Результат + " " + Лев(Слова[Номер], 1) + ".";
    КонецЦикла;
    Возврат Результат;

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

// Пол по отчеству для параметра ПЛ: "Мужской", "Женский" или "".
// Порядок слов - "Фамилия Имя Отчество".
Функция ПолПоОтчеству(Знач ФИО) Экспорт

    Слова = СтрРазделить(НРег(СокрЛП(ФИО)), " ", Ложь);
    Если Слова.Количество() < 3 Тогда
        Возврат ""; // отчества нет или вместо него инициал
    КонецЕсли;

    Последнее = Слова[Слова.ВГраница()];
    Если Последнее = "оглы" Или СтрЗаканчиваетсяНа(Слова[2], "ич") Тогда
        Возврат "Мужской";
    ИначеЕсли Последнее = "кызы" Или СтрЗаканчиваетсяНа(Слова[2], "на") Тогда
        Возврат "Женский";
    КонецЕсли;
    Возврат "";

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

// Быстрая проверка: вызовите из консоли кода или внешней обработки на сервере.
Процедура ПримерыСклоненияФИО() Экспорт

    Сообщить(ФИОВПадеже("Петров Петр Петрович", "Родительный"));   // Петрова Петра Петровича
    Сообщить(ФИОВПадеже("Сидорова Анна Викторовна", 3));          // Сидоровой Анне Викторовне
    Сообщить(ФИОВПадеже("ШЕВЧУК ОЛЬГА ИВАНОВНА", "Творительный")); // ШЕВЧУК ОЛЬГОЙ ИВАНОВНОЙ
    Сообщить(ФамилияИнициалыВПадеже("Шевчук Олег Иванович", 3));   // Шевчуку О. И.

КонецПроцедуры

Если у физического лица заполнен пол (в УТ 11.4 и КА 2.5 это реквизит Пол справочника «Физические лица» с типом ПеречислениеСсылка.ПолФизическогоЛица), берите его оттуда, а ПолПоОтчеству() оставьте запасным вариантом. Про СтрРазделить, СтрЗаканчиваетсяНа и ТРег — в справочнике строковых функций.

Склонение должности и наименования организации

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

// Должность в падеже для середины фразы: "Генеральный директор" -> "генерального директора".
// Первую букву делаем строчной, только если вторая строчная ("IT-директор" не трогаем).
Функция ДолжностьВПадеже(Знач Должность, Знач Падеж, СоСтрочнойБуквы = Истина) Экспорт

    Результат = СтрокаВПадеже(Должность, Падеж);
    ВтораяБуква = Сред(Результат, 2, 1);
    Если СоСтрочнойБуквы И ВтораяБуква <> "" И ВтораяБуква = НРег(ВтораяБуква) Тогда
        Результат = НРег(Лев(Результат, 1)) + Сред(Результат, 2);
    КонецЕсли;
    Возврат Результат;

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

// Наименование организации в падеже: склоняется только организационно-правовая форма,
// название в кавычках остаётся как есть, аббревиатуры (ООО, АО) не склоняются.
// "Общество с ограниченной ответственностью «Вектор»", 2
//     -> "Общества с ограниченной ответственностью «Вектор»"
Функция НаименованиеОрганизацииВПадеже(Знач Наименование, Знач Падеж) Экспорт

    Наименование = СокрЛП(Наименование);

    // Индивидуальный предприниматель: статус и ФИО склоняем по отдельности
    Для Каждого Префикс Из СтрРазделить("индивидуальный предприниматель,ип", ",") Цикл
        Если СтрНачинаетсяС(НРег(Наименование), Префикс + " ") Тогда
            Статус = Лев(Наименование, СтрДлина(Префикс));
            ФИО = Сред(Наименование, СтрДлина(Префикс) + 2);
            Если Статус <> ВРег(Статус) Тогда // аббревиатуру ИП не склоняем
                Статус = СтрокаВПадеже(Статус, Падеж);
            КонецЕсли;
            Возврат Статус + " " + ФИОВПадеже(ФИО, Падеж);
        КонецЕсли;
    КонецЦикла;

    ПозицияКавычки = ПозицияОткрывающейКавычки(Наименование);
    Если ПозицияКавычки <= 1 Тогда
        Возврат Наименование; // перед названием нет правовой формы
    КонецЕсли;

    ПравоваяФорма = СокрП(Лев(Наименование, ПозицияКавычки - 1));
    Если ПравоваяФорма = ВРег(ПравоваяФорма) Тогда
        Возврат Наименование; // ООО, АО, ПАО
    КонецЕсли;

    Возврат СтрокаВПадеже(ПравоваяФорма, Падеж) + " " + Сред(Наименование, ПозицияКавычки);

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

// Позиция первой открывающей кавычки (« или "), 0 - кавычек нет.
Функция ПозицияОткрывающейКавычки(Текст)

    Елочка = СтрНайти(Текст, "«");
    Прямая = СтрНайти(Текст, """");
    Если Елочка = 0 Или Прямая = 0 Тогда
        Возврат Макс(Елочка, Прямая);
    КонецЕсли;
    Возврат Мин(Елочка, Прямая);

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

// Преамбула договора:
// Общество с ограниченной ответственностью «Вектор», в лице генерального директора
// Петрова Петра Петровича, действующего на основании Устава
Функция ПреамбулаДоговора(НаименованиеПолное, Должность, ФИО, Основание = "Устава", Знач Пол = "") Экспорт

    Если ПустаяСтрока(Пол) Тогда
        Пол = ПолПоОтчеству(ФИО);
    КонецЕсли;
    Действующего = ?(Пол = "Женский", "действующей", "действующего");

    Возврат СтрШаблон("%1, в лице %2 %3, %4 на основании %5",
        НаименованиеПолное,
        ДолжностьВПадеже(Должность, "Родительный"),
        ФИОВПадеже(ФИО, "Родительный", Пол),
        Действующего,
        Основание);

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

// Шапка заявления или служебной записки:
// Генеральному директору ООО «Вектор» Петрову П. П.
// от менеджера по продажам Сидоровой А. В.
Функция ШапкаЗаявления(Руководитель, ДолжностьРуководителя, Организация, Автор, ДолжностьАвтора) Экспорт

    Кому = СтрШаблон("%1 %2 %3",
        ДолжностьВПадеже(ДолжностьРуководителя, "Дательный", Ложь),
        НаименованиеОрганизацииВПадеже(Организация, "Родительный"),
        ФамилияИнициалыВПадеже(Руководитель, "Дательный"));

    ОтКого = СтрШаблон("от %1 %2",
        ДолжностьВПадеже(ДолжностьАвтора, "Родительный"),
        ФамилияИнициалыВПадеже(Автор, "Родительный"));

    Возврат Кому + Символы.ПС + ОтКого;

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

// Пункт приказа: "Принять Сидорову Анну Викторовну на должность менеджера по продажам"
Функция ПунктПриказаОПриеме(ФИО, Должность, Пол = "") Экспорт

    Возврат СтрШаблон("Принять %1 на должность %2",
        ФИОВПадеже(ФИО, "Винительный", Пол),
        ДолжностьВПадеже(Должность, "Родительный"));

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

Слово при числе: «5 рабочих дней», «21 позиция»

Для слова при числе в платформе две функции. СтрокаСЧислом() (с 8.3.10) подставляет число в одну из форм, которые вы перечислили сами, и работает на любом клиенте. ПолучитьСклоненияСтрокиПоЧислу() (с 8.3.14) сама согласует словосочетание с числом, ставит его в падеж и пишет число цифрами, прописью или с окончанием («2-го»). На тонком клиенте её, как и ПолучитьСклоненияСтроки(), нет.

&НаКлиенте
Процедура ПоказатьСклонениеПоЧислу(Команда)

    // СтрокаСЧислом работает и в тонком, и в веб-клиенте: формы слова задаём сами.
    // Порядок форм: ноль; один; два; немного; много; другое (дробные).
    Шаблон = ";%1 позиция;;%1 позиции;%1 позиций;%1 позиции";
    Для Каждого Количество Из СтрРазделить("1,3,5,11,21,104", ",") Цикл
        Сообщить(СтрокаСЧислом(Шаблон, Число(Количество), ВидЧисловогоЗначения.Количественное, "Л=ru"));
    КонецЦикла;
    // 1 позиция, 3 позиции, 5 позиций, 11 позиций, 21 позиция, 104 позиции

    // ПолучитьСклоненияСтрокиПоЧислу на клиенте нет - вызываем сервер
    Сообщить(УсловияДоговораНаСервере(5, 14));

КонецПроцедуры

&НаСервереБезКонтекста
Функция УсловияДоговораНаСервере(РабочихДней, КалендарныхДней)

    Строки = Новый Массив;

    // Платформа сама согласует словосочетание с числом и ставит его в падеж
    Строки.Добавить("Срок поставки — " + ПолучитьСклоненияСтрокиПоЧислу("рабочий день",
        РабочихДней, "", "ЧС=Количественное", "ПД=Именительный; ПЧ=Число")[0] + ".");
    // Срок поставки — 5 рабочих дней.

    Строки.Добавить("Оплата в течение " + ПолучитьСклоненияСтрокиПоЧислу("календарный день",
        КалендарныхДней, "", "ЧС=Количественное", "ПД=Родительный; ПЧ=ЧислоПрописью")[0] + ".");
    // Оплата в течение четырнадцати календарных дней.

    Строки.Добавить("Окончательный расчёт — после " + ПолучитьСклоненияСтрокиПоЧислу("этап",
        2, "", "ЧС=Порядковое", "ПД=Родительный; ПЧ=ЧислоСОкончанием")[0] + ".");
    // Окончательный расчёт — после 2-го этапа.

    Возврат СтрСоединить(Строки, Символы.ПС);

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

Формы в шаблоне СтрокаСЧислом идут так: ноль; один; два; немного; много; другое. Категории «ноль» и «два» в русском не используются, их места пустые. У ПолучитьСклоненияСтрокиПоЧислу в описании строки задаётся ЧС (Количественное или Порядковое), в форматной строке — ПД и ПЧ (Число, ЧислоПрописью, ЧислоСОкончанием, Авто). Сумму прописью по-прежнему формирует ЧислоПрописью(), где род предмета исчисления задаётся буквой м, ж или с.

Типовые на БСП и сервис «Морфер»

В конфигурациях на БСП есть подсистема «Склонение представлений объектов» с общим модулем СклонениеПредставленийОбъектов. Функции ПросклонятьФИО() и ПросклонятьПредставление() принимают падеж числом от 1 до 6 и, по желанию, ссылку на объект. Сначала они ищут склонение в регистре «Склонения представлений объектов» (там же ручные правки), затем спрашивают «Морфер», если он включён, и только потом вызывают ПолучитьСклоненияСтроки(). Результат для объекта сохраняется в регистр. Для каких объектов склонения хранятся в регистре, задаёт определяемый тип ОбъектСклонения: в УТ 11.4 — только физические лица, в КА 2.5 — ещё должности, подразделения организаций и позиции штатного расписания.

// Конфигурации на БСП с подсистемой «Склонение представлений объектов» (сверено по КА 2.5).
// Внутри БСП: сначала регистр склонений (там и ручные правки), затем «Морфер»,
// если он включён, и только потом ПолучитьСклоненияСтроки. Падеж - число, 2 = родительный.
// Результат: "генерального директора Петрова Петра Петровича".
Функция ПодписантВРодительномПадеже(ФизическоеЛицо, Должность) Экспорт

    Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ФизическоеЛицо, "ФИО, Пол");
    НаименованиеДолжности = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Должность, "Наименование");

    ПолЧислом = Неопределено; // пол не заполнен - платформа определит сама
    Если Реквизиты.Пол = Перечисления.ПолФизическогоЛица.Мужской Тогда
        ПолЧислом = 1;
    ИначеЕсли Реквизиты.Пол = Перечисления.ПолФизическогоЛица.Женский Тогда
        ПолЧислом = 2;
    КонецЕсли;

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

    Возврат НРег(Лев(ДолжностьРП, 1)) + Сред(ДолжностьРП, 2) + " " + ФИОРП;

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

«Морфер» включается флажком «Использовать альтернативный сервис склонения «Морфер»». В УТ 11.4 он находится в разделе НСИ и администрирование → Администрирование → Интернет-поддержка и сервисы, группа «Склонения представлений объектов», рядом — кнопка настройки доступа к сервису. Серверу 1С нужен выход в интернет. В конфигурации без БСП к сервису можно обратиться напрямую — адрес и формат ответа взяты из кода БСП.

// Склонение через сервис «Морфер» без БСП. Адрес и формат ответа - как в коде БСП.
// Токен, если он есть, храните в настройках, а не в тексте модуля.
// Возвращает структуру с падежами или Неопределено, если сервис не ответил.
Функция СклоненияЧерезМорфер(Текст, Токен = "") Экспорт

    АдресРесурса = "/russian/declension?s=" + КодироватьСтроку(Текст, СпособКодированияСтроки.КодировкаURL);
    Если Не ПустаяСтрока(Токен) Тогда
        АдресРесурса = АдресРесурса + "&token=" + Токен;
    КонецЕсли;
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Accept", "application/json");

    Попытка
        Соединение = Новый HTTPСоединение("ws3.morpher.ru", , , , , 10, Новый ЗащищенноеСоединениеOpenSSL);
        Ответ = Соединение.Получить(Новый HTTPЗапрос(АдресРесурса, Заголовки));
    Исключение
        ЗаписьЖурналаРегистрации("Склонение.Морфер", УровеньЖурналаРегистрации.Ошибка, , ,
            ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
        Возврат Неопределено;
    КонецПопытки;

    Если Ответ.КодСостояния <> 200 Тогда
        ЗаписьЖурналаРегистрации("Склонение.Морфер", УровеньЖурналаРегистрации.Ошибка, , ,
            СтрШаблон("Код ответа %1: %2", Ответ.КодСостояния, Ответ.ПолучитьТелоКакСтроку()));
        Возврат Неопределено;
    КонецЕсли;

    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
    Данные = ПрочитатьJSON(Чтение, Истина); // соответствие
    Чтение.Закрыть();
    Если ТипЗнч(Данные) <> Тип("Соответствие") Тогда
        Возврат Неопределено;
    КонецЕсли;

    // Падежи в ответе обозначены буквами: Р, Д, В, Т, П
    Возврат Новый Структура("Именительный, Родительный, Дательный, Винительный, Творительный, Предложный",
        Текст, Данные.Получить("Р"), Данные.Получить("Д"), Данные.Получить("В"),
        Данные.Получить("Т"), Данные.Получить("П"));

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

Разбор ключевых строк

  • "ПД=" + ИмяПадежа — падеж задаётся только третьим параметром; без него функция вернёт исходную строку.
  • "Л=ru_RU" — язык указан явно, как в БСП: иначе берётся локализация информационной базы, а склоняется только русский текст.
  • Попытка … Исключение — сбой склонения не роняет печать: в журнал уходит предупреждение, в документ — исходный текст.
  • Сред(Наименование, ПозицияКавычки) — всё, начиная с первой кавычки, попадает в результат без изменений.
  • &НаСервереБезКонтекста — серверный вызов без передачи данных формы: туда уходят два числа, обратно приходит строка.

Ограничения встроенного склонения и когда нужен сервис

  • Только русский язык — так сказано в синтакс-помощнике.
  • Только сервер, толстый клиент и внешнее соединение. На тонком, веб- и мобильном клиенте из функций склонения доступна только СтрокаСЧислом().
  • Нет памяти. Исправления платформа не хранит: ошибка в редкой фамилии повторится в каждом документе, пока вы не сохраните правильный вариант сами.
  • Нет контекста. Организацию, аббревиатуру или фамилию, похожую на обычное слово, функция не распознаёт — строку режут на части.
  • Версия платформы. На платформе ниже 8.3.18.1128 БСП в УТ 11.4 при ошибке встроенного склонения советует обновить её или включить «Морфер».

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

Типичные ошибки

  • Вызов на клиенте. ПолучитьСклоненияСтроки() в процедуре с директивой &НаКлиенте не пройдёт проверку модуля для тонкого клиента: «Процедура или функция с указанным именем не определена (ПолучитьСклоненияСтроки)». Перенесите вызов в функцию формы с директивой &НаСервереБезКонтекста, а она пусть вызывает серверный модуль, например СклонениеСтрок.ФИОВПадеже(). В обычном приложении (толстый клиент) функция доступна и в модуле формы.
  • Массив вместо строки. Выражение "в лице " + ПолучитьСклоненияСтроки(Должность, , "ПД=Родительный") напечатает «в лице Массив». Нужен элемент [0], а перед ним проверка количества.
  • Забыт падеж. Без ПД ошибки не будет: функция вернёт строку как есть, и в договоре останется «в лице Генеральный директор».
  • Наименование целиком. В «ООО «Вектор»» склонять нечего, а в полном наименовании меняется только правовая форма. Отдав функции всё наименование, вы зависите от того, как платформа разберёт слова, — отделяйте название по первой кавычке.
  • Несовместимые параметры. В ПолучитьСклоненияСтрокиПоЧислу() сочетание ЧС=Количественное и ПЧ=ЧислоСОкончанием вызывает исключение: окончание вида «12-го» бывает только у порядковых числительных. Дробное число с ЧС=Порядковое — тоже исключение.
  • Склонение в цикле без кеша. При печати пачки документов одни и те же должности и ФИО склоняются заново в каждом документе. Складывайте результаты в соответствие или вынесите обёртку в общий модуль с повторным использованием возвращаемых значений «На время вызова».

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

Можно ли получить множественное число?

Такого параметра у ПолучитьСклоненияСтроки() нет. Форму при числе даёт ПолучитьСклоненияСтрокиПоЧислу(): в синтакс-помощнике для слова «автомобиль», числа 5 и дательного падежа с прописью получается «пяти автомобилям». Если нужно множественное число без самого числа («директорам»), храните эту форму сами — в реквизите справочника или в своём регистре.

С какой версии платформы работает склонение?

ПолучитьСклоненияСтроки() — с 8.3.13, ПолучитьСклоненияСтрокиПоЧислу() — с 8.3.14, СтрокаСЧислом() — с 8.3.10. Если на свежей платформе функция «не определена», проверьте свойство конфигурации «Режим совместимости»: при совместимости со старой версией новые методы могут быть недоступны.

Можно ли склонять прямо в запросе?

Нет, функции склонения в языке запросов нет (что там есть для строк — в статье «Строка в запросе 1С»). Склоняйте после выполнения запроса: обойдите результат на сервере, заполните колонку таблицы значений и передайте её в макет или во внешний набор данных СКД.

Платформа ошибается в фамилии — что делать?

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

Когда проще заказать

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

По теме

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

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


1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.