Склонение в 1С программно выполняет функция платформы ПолучитьСклоненияСтроки(): она появилась в 1С 8.3.13 и склоняет по падежам ФИО, должности и обычные словосочетания на русском языке. Ниже — функции для общего модуля под типовые задачи: строка в нужном падеже, ФИО с подсказкой пола, должность и наименование организации для договора и приказа, слово при числе. В конце — ограничения встроенного склонения и когда нужен сервис.
Обычно это печатные формы:
В типовых на БСП часть работы уже сделана: в КА 2.5 в карточке физического лица рядом с полем «Полное имя» и в карточке должности рядом с наименованием есть ссылка «Склонения» — там видны все падежи, их можно поправить вручную. Правки хранятся в регистре сведений «Склонения представлений объектов». В своей печатной форме или в конфигурации без этой подсистемы склонять придётся кодом.
Синтаксис: ПолучитьСклоненияСтроки(СклоняемаяСтрока, ОписаниеСтроки, ФорматнаяСтрока). Второй и третий параметры необязательные. Это строки вида Имя=Значение через точку с запятой, как у Формат().
| Параметр | Где задаётся | Значения |
|---|---|---|
Л (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",
ФИОВПадеже(ФИО, "Винительный", Пол),
ДолжностьВПадеже(Должность, "Родительный"));
КонецФункции
Для слова при числе в платформе две функции. СтрокаСЧислом() (с 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.13. Раньше ФИО склоняли внешней компонентой: в БСП от неё осталась устаревшая функция ПросклонятьФИОСПомощьюКомпоненты(), которая теперь просто вызывает ПросклонятьФИО(). У «Морфера» свои условия и лимиты — проверьте их до подключения к массовой печати и помните, что ФИО сотрудников при этом уходят на сторонний сервер.
ПолучитьСклоненияСтроки() в процедуре с директивой &НаКлиенте не пройдёт проверку модуля для тонкого клиента: «Процедура или функция с указанным именем не определена (ПолучитьСклоненияСтроки)». Перенесите вызов в функцию формы с директивой &НаСервереБезКонтекста, а она пусть вызывает серверный модуль, например СклонениеСтрок.ФИОВПадеже(). В обычном приложении (толстый клиент) функция доступна и в модуле формы."в лице " + ПолучитьСклоненияСтроки(Должность, , "ПД=Родительный") напечатает «в лице Массив». Нужен элемент [0], а перед ним проверка количества.ПД ошибки не будет: функция вернёт строку как есть, и в договоре останется «в лице Генеральный директор».ПолучитьСклоненияСтрокиПоЧислу() сочетание ЧС=Количественное и ПЧ=ЧислоСОкончанием вызывает исключение: окончание вида «12-го» бывает только у порядковых числительных. Дробное число с ЧС=Порядковое — тоже исключение.Такого параметра у ПолучитьСклоненияСтроки() нет. Форму при числе даёт ПолучитьСклоненияСтрокиПоЧислу(): в синтакс-помощнике для слова «автомобиль», числа 5 и дательного падежа с прописью получается «пяти автомобилям». Если нужно множественное число без самого числа («директорам»), храните эту форму сами — в реквизите справочника или в своём регистре.
ПолучитьСклоненияСтроки() — с 8.3.13, ПолучитьСклоненияСтрокиПоЧислу() — с 8.3.14, СтрокаСЧислом() — с 8.3.10. Если на свежей платформе функция «не определена», проверьте свойство конфигурации «Режим совместимости»: при совместимости со старой версией новые методы могут быть недоступны.
Нет, функции склонения в языке запросов нет (что там есть для строк — в статье «Строка в запросе 1С»). Склоняйте после выполнения запроса: обойдите результат на сервере, заполните колонку таблицы значений и передайте её в макет или во внешний набор данных СКД.
Передайте пол через ПЛ и склоняйте полное ФИО, а не фамилию с инициалами. Если вариантов вернулось больше одного, дайте пользователю выбрать. Правильный вариант сохраните: в типовых на БСП — по ссылке «Склонения» в карточке, в своей доработке — в регистре сведений с измерением «Объект» и ресурсами по падежам. Когда правок много, подключите «Морфер».
Если склонение нужно встроить в несколько печатных форм — договор, приказы, доверенности — с ручными правками и обработкой ИП и организаций, проще поручить это программисту: доработка печатных форм. Опишите задачу и приложите пример документа на странице «Разместить задачу» — оценка бесплатная, ответ в течение рабочего дня.
Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.