Наименования в родительном падеже: от метаданных до СКД
Содержание
Родительный падеж в 1С делают тремя способами. Первый: хранят готовую форму в реквизите справочника. Второй: склоняют строку на лету функцией платформы ПолучитьСклоненияСтроки или общим модулем БСП СклонениеПредставленийОбъектов. Третий, для заголовков форм и списков: прописывают нужную форму в свойствах объекта метаданных. Язык запросов и СКД склонять сами не умеют. Падеж готовят заранее или подставляют после выполнения запроса.
Типичная ситуация. Бухгалтер печатает акт, а там «в лице Генеральный директор Петров Сергей Николаевич». Или в шапке отчёта стоит «Остатки по склад Центральный». Ниже разобраны все варианты для справочников, отчётов и печатных форм: что настроить без программиста и что дописать в коде.
С чего начать: какой способ подходит вашей задаче
Сначала поймите, где должна появиться форма в родительном падеже. От этого зависит инструмент.
| Где нужен падеж | Способ | Кто делает | Риски |
|---|---|---|---|
| Заголовки форм, сообщения, представление списка | Свойства объекта метаданных | Разработчик в конфигураторе | Только для расширения или своей конфигурации |
| Должность, подразделение, организация в печатной форме | Дополнительный реквизит с готовой формой | Пользователь с правами администратора | Новые элементы надо заполнять руками |
| ФИО в приказах, договорах, доверенностях | Типовое склонение БСП | Бухгалтер, кадровик | Ошибки на редких фамилиях |
| Произвольная строка в коде | ПолучитьСклоненияСтроки | Программист | Ошибки на аббревиатурах и кавычках |
| Отчёт на СКД или запрос | Готовая форма из реквизита или склонение после запроса | Программист | Скорость на больших выборках |
Правило простое: чем важнее документ, тем ближе к «готовой строке» должен быть способ. Автоматическое склонение годится для черновиков и отчётов. Для договоров и приказов форму лучше проверить глазами и сохранить.
Представления объектов в метаданных: что платформа берёт сама
У каждого справочника и документа в конфигураторе есть группа свойств представления. Откройте объект, вызовите палитру свойств и найдите блок Представления:
- 📌 Представление объекта — как называется один элемент. Например, «Склад».
- 📌 Расширенное представление объекта — заголовок формы элемента. Например, «Карточка склада».
- 📌 Представление списка и Расширенное представление списка — заголовок формы списка, например «Склады организации».
Платформа не склоняет эти строки. Она выводит их как есть. Значит, падеж здесь задают вручную, под конкретную фразу. Хотите заголовок «Список складов» — так и пишите в расширенном представлении списка.
Как поменять без снятия с поддержки
В типовой конфигурации представления лучше править в расширении:
- Создайте расширение:
Конфигурация → Расширения конфигурации → Добавить. - Заимствуйте нужный справочник или документ.
- В заимствованном объекте задайте свои представления.
- Сохраните расширение и обновите его в базе.
Синоним объекта тоже не склоняется. Он идёт в меню и командный интерфейс. Не пытайтесь вписать в синоним родительный падеж ради одной фразы в отчёте: команда в меню станет звучать странно.
Этот способ не про данные. Он не поможет, если нужно склонить «Склад Центральный» или «Бухгалтерия» из справочника подразделений. Для данных нужны следующие разделы.
Готовая форма в дополнительном реквизите справочника
Самый надёжный способ для должностей, подразделений и складов: хранить родительный падеж рядом с наименованием. Человек один раз пишет «главного бухгалтера», и дальше печатная форма берёт строку без всяких алгоритмов.
Как добавить реквизит без программиста
В конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) есть механизм дополнительных реквизитов:
- Откройте
Администрирование → Общие настройки. - Включите флажок
Дополнительные реквизиты и сведенияи перейдите по ссылкеДополнительные реквизиты. - Выберите набор нужного справочника, например «Должности» или «Подразделения».
- Добавьте новый реквизит. Название: «Наименование в родительном падеже». Тип значения: строка.
- Откройте элементы справочника и заполните новое поле.
После этого реквизит появится на вкладке или в группе дополнительных полей карточки.
Когда лучше реквизит в расширении
Дополнительный реквизит хранится в табличной части ДополнительныеРеквизиты или в регистре дополнительных сведений. Брать его в запросе неудобно: нужно соединение по свойству. Если реквизит используют несколько печатных форм и отчётов, программист добавит обычный реквизит в расширении. Например, НаименованиеРодительный, строка 150 символов.
| Вариант | Плюсы | Минусы |
|---|---|---|
| Дополнительный реквизит БСП | Без конфигуратора, переживает обновление | Сложнее выбирать в запросе |
| Реквизит в расширении | Прямое поле в запросе и СКД | Нужен программист и проверка после обновлений |
Готовую форму кто-то должен заполнять. Новая должность без родительного падежа даст пустую строку в печатной форме. Подстрахуйтесь кодом: если поле пустое, вызывайте автоматическое склонение. Пример ниже.
Как заполнить готовые формы для всего справочника разом
Вручную заполнять 300 должностей долго. Быстрее сделать черновик кодом, а человеку оставить только проверку. Пример для реквизита НаименованиеРодительный, добавленного в расширении:
Выборка = Справочники.Должности.Выбрать();
Пока Выборка.Следующий() Цикл
Если ЗначениеЗаполнено(Выборка.НаименованиеРодительный) Тогда
Продолжить; // ручные правки не трогаем
КонецЕсли;
Объект = Выборка.ПолучитьОбъект();
Объект.НаименованиеРодительный = ВРодительномПадеже(Объект.Наименование);
Объект.Записать();
КонецЦикла;
Функция ВРодительномПадеже описана в следующем разделе. После прогона отсортируйте список по новому полю и просмотрите строки с аббревиатурами и кавычками: там чаще всего встречаются ошибки.
Запускайте массовую запись сначала в копии базы. Запись элементов меняет дату изменения и может запустить обмен с другими базами.
Склонение строки кодом на встроенном языке
Для склонения на лету в платформе 8.3 есть глобальная функция ПолучитьСклоненияСтроки. Она принимает строку и параметры склонения, а возвращает массив вариантов. Падеж задают параметром ПД. Полный список параметров, в том числе пол для ФИО, смотрите в синтакс-помощнике вашей версии платформы.
// Родительный падеж произвольной строки с запасным вариантом
Функция ВРодительномПадеже(Знач Текст, Знач ГотоваяФорма = "") Экспорт
// 1. Если человек уже записал форму вручную — берём её
Если ЗначениеЗаполнено(ГотоваяФорма) Тогда
Возврат ГотоваяФорма;
КонецЕсли;
Если ПустаяСтрока(Текст) Тогда
Возврат "";
КонецЕсли;
// 2. Иначе склоняем средствами платформы
Варианты = ПолучитьСклоненияСтроки(Текст, "ПД=Родительный;");
Если Варианты.Количество() = 0 Тогда
Возврат Текст; // не смогли — выводим как есть
КонецЕсли;
Возврат Варианты[0];
КонецФункции
Вызывайте функцию на сервере, в общем модуле с флагом Сервер. Результат не кешируется: при каждом вызове строка склоняется заново.
Модуль БСП для ФИО и ссылок
В типовых конфигурациях на БСП есть общий модуль СклонениеПредставленийОбъектов. Его функция ПросклонятьПредставление принимает строку, номер падежа (2 — родительный) и, по желанию, ссылку на объект. Если передать ссылку на физическое лицо, модуль сначала найдёт сохранённое склонение, в том числе ручную правку кадровика.
Набор параметров функции менялся между версиями БСП. Перед доработкой откройте модуль в конфигураторе и сверьте сигнатуру.
Чего код не умеет
Автоматическое склонение работает по словарю и правилам. Оно ошибается на строках, которых нет в обычной речи:
- 🔤 аббревиатуры и коды: «ООО», «ОП-3», «Склад №2»;
- 🔤 названия в кавычках: «Ромашка» склонять нельзя, склоняется только слово перед ней;
- 🔤 несклоняемые фамилии: Шевченко, Дюма, женские фамилии на согласную (Анна Шульц);
- 🔤 составные должности: «заместитель главного бухгалтера по налогам».
Для таких строк держите готовую форму в реквизите и передавайте её вторым параметром функции.
Родительный падеж в запросе и схеме компоновки
Язык запросов не умеет склонять. В нём нет функции, которая вернёт родительный падеж поля. Варианта два.
Готовая форма прямо в запросе
Если форма хранится в дополнительном реквизите, соедините справочник с его табличной частью:
ВЫБРАТЬ
Должности.Ссылка КАК Должность,
Должности.Наименование КАК Наименование,
ЕСТЬNULL(ДопРеквизиты.Значение, "") КАК НаименованиеРодительный
ИЗ
Справочник.Должности КАК Должности
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Должности.ДополнительныеРеквизиты КАК ДопРеквизиты
ПО (ДопРеквизиты.Ссылка = Должности.Ссылка)
И (ДопРеквизиты.Свойство = &СвойствоРодительный)
Параметр &СвойствоРодительный — ссылка на созданный вами дополнительный реквизит. Найдите её в коде по наименованию из плана видов характеристик дополнительных реквизитов. Если реквизит добавлен в расширении, соединение не нужно: поле выбирается напрямую.
Склонение после выполнения запроса
Когда готовой формы нет, склоняйте уже результат:
- Выполните запрос и выгрузите результат в таблицу значений.
- Добавьте колонку для падежа.
- В цикле заполните её функцией
ВРодительномПадеже. - Выведите таблицу в макет или передайте её в СКД как внешний набор данных.
Таблица = Запрос.Выполнить().Выгрузить();
Таблица.Колонки.Добавить("НаименованиеРодительный", Новый ОписаниеТипов("Строка"));
Для Каждого Строка Из Таблица Цикл
Строка.НаименованиеРодительный = ВРодительномПадеже(Строка.Наименование,
Строка.НаименованиеРодительныйГотовое);
КонецЦикла;
Здесь НаименованиеРодительныйГотовое — поле с готовой формой из запроса, если она есть.
Что делать в отчёте на СКД
В отчёте на СКД есть два пути:
- 📊 Поле набора данных. Вывести готовую форму из реквизита как обычное поле. Быстро и без кода.
- 📊 Внешний набор. Выполнить схему в коллекцию значений, дописать колонку и вывести результат. Для этого в модуле отчёта отключают стандартную обработку в
ПриКомпоновкеРезультата.
Не склоняйте сотни строк в каждом прогоне отчёта. Функция медленнее обычной выборки поля. Если отчёт строят часто, один раз заполните готовые формы обработкой и дальше берите их из реквизита.
Заголовок отчёта в нужном падеже
Частая просьба: «Остатки склада Центральный» вместо «Остатки по складу: Центральный». Заголовок отчёта на СКД — это параметр вывода. Его можно собрать в коде перед компоновкой:
Склад = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(
Новый ПараметрКомпоновкиДанных("Склад"));
Если Склад <> Неопределено И ЗначениеЗаполнено(Склад.Значение) Тогда
Заголовок = "Остатки склада " + ВРодительномПадеже(Строка(Склад.Значение));
КомпоновщикНастроек.Настройки.ПараметрыВывода.УстановитьЗначениеПараметра("Заголовок", Заголовок);
КонецЕсли;
Склоняется одна строка за прогон, поэтому на скорость отчёта это не влияет. Если пользователь выбрал несколько складов, заголовок лучше оставить общим, без склонения.
Составные типы: когда в поле то физлицо, то организация
Поле «Контрагент» или «Ответственный» может ссылаться на разные справочники. Для каждого типа правила склонения свои:
- 👤 Физическое лицо — склоняются фамилия, имя и отчество с учётом пола.
- 🏢 Организация или контрагент-юрлицо — склоняется только организационно-правовая форма, если она написана словами. «Общество с ограниченной ответственностью «Вектор»» → «Общества с ограниченной ответственностью «Вектор»». Сокращение «ООО «Вектор»» не меняется.
- 🏬 Склад, подразделение — склоняется наименование, если это обычные слова.
Поэтому сначала определите тип значения, а потом выбирайте способ:
Функция ПредставлениеВРодительном(Значение) Экспорт
Если Не ЗначениеЗаполнено(Значение) Тогда
Возврат "";
КонецЕсли;
Представление = Строка(Значение);
Если ТипЗнч(Значение) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
// ФИО — через модуль БСП, он учтёт ручные правки
Возврат СклонениеПредставленийОбъектов.ПросклонятьПредставление(Представление, 2, Значение);
ИначеЕсли ТипЗнч(Значение) = Тип("СправочникСсылка.Контрагенты") Тогда
// Название в кавычках не склоняем
Возврат Представление;
Иначе
Возврат ВРодительномПадеже(Представление);
КонецЕсли;
КонецФункции
Для юрлиц надёжнее хранить полное наименование в родительном падеже отдельно: «в лице» в договоре читают юристы. Проверка на пустое значение в начале функции нужна обязательно. Составное поле часто остаётся незаполненным, и без проверки в печатную форму уйдёт пустая строка или представление вида «<Объект не найден>».
Ещё один нюанс составного типа: значение может оказаться типом, которого вы не ждали. Например, в поле добавили новый справочник после обновления. Ветка Иначе в примере страхует от этого: строка склонится общим способом, а не потеряется.
Где ломается склонение и как это исправить
Ещё одна частая ловушка — регистр букв. Наименование должности в справочнике обычно пишут с заглавной: «Главный бухгалтер». В середине фразы «в лице …» нужна строчная. Переведите первую букву в нижний регистр: НРег(Лев(Текст, 1)) + Сред(Текст, 2).
Частые вопросы
Можно ли склонять наименования без программиста?
Администрирование → Общие настройки и заполните его. Вывести поле в типовую печатную форму без доработки обычно нельзя, а в отчёт на СКД — можно через настройку полей.Работает ли ПолучитьСклоненияСтроки в веб-клиенте?
Как получить родительный падеж в сумме прописью?
ЧислоПрописью склоняет предмет счёта по параметрам: «рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2». Формы для 1, 2 и 5 единиц задаёте сами, платформа подставит нужную.