Наименования в родительном падеже: от метаданных до СКД

· 10 мин

Содержание

Родительный падеж в 1С делают тремя способами. Первый: хранят готовую форму в реквизите справочника. Второй: склоняют строку на лету функцией платформы ПолучитьСклоненияСтроки или общим модулем БСП СклонениеПредставленийОбъектов. Третий, для заголовков форм и списков: прописывают нужную форму в свойствах объекта метаданных. Язык запросов и СКД склонять сами не умеют. Падеж готовят заранее или подставляют после выполнения запроса.

Типичная ситуация. Бухгалтер печатает акт, а там «в лице Генеральный директор Петров Сергей Николаевич». Или в шапке отчёта стоит «Остатки по склад Центральный». Ниже разобраны все варианты для справочников, отчётов и печатных форм: что настроить без программиста и что дописать в коде.

С чего начать: какой способ подходит вашей задаче

Сначала поймите, где должна появиться форма в родительном падеже. От этого зависит инструмент.

Где нужен падежСпособКто делаетРиски
Заголовки форм, сообщения, представление спискаСвойства объекта метаданныхРазработчик в конфигуратореТолько для расширения или своей конфигурации
Должность, подразделение, организация в печатной формеДополнительный реквизит с готовой формойПользователь с правами администратораНовые элементы надо заполнять руками
ФИО в приказах, договорах, доверенностяхТиповое склонение БСПБухгалтер, кадровикОшибки на редких фамилиях
Произвольная строка в кодеПолучитьСклоненияСтрокиПрограммистОшибки на аббревиатурах и кавычках
Отчёт на СКД или запросГотовая форма из реквизита или склонение после запросаПрограммистСкорость на больших выборках

Правило простое: чем важнее документ, тем ближе к «готовой строке» должен быть способ. Автоматическое склонение годится для черновиков и отчётов. Для договоров и приказов форму лучше проверить глазами и сохранить.

Представления объектов в метаданных: что платформа берёт сама

У каждого справочника и документа в конфигураторе есть группа свойств представления. Откройте объект, вызовите палитру свойств и найдите блок Представления:

  • 📌 Представление объекта — как называется один элемент. Например, «Склад».
  • 📌 Расширенное представление объекта — заголовок формы элемента. Например, «Карточка склада».
  • 📌 Представление списка и Расширенное представление списка — заголовок формы списка, например «Склады организации».

Платформа не склоняет эти строки. Она выводит их как есть. Значит, падеж здесь задают вручную, под конкретную фразу. Хотите заголовок «Список складов» — так и пишите в расширенном представлении списка.

Как поменять без снятия с поддержки

В типовой конфигурации представления лучше править в расширении:

  1. Создайте расширение: Конфигурация → Расширения конфигурации → Добавить.
  2. Заимствуйте нужный справочник или документ.
  3. В заимствованном объекте задайте свои представления.
  4. Сохраните расширение и обновите его в базе.

Синоним объекта тоже не склоняется. Он идёт в меню и командный интерфейс. Не пытайтесь вписать в синоним родительный падеж ради одной фразы в отчёте: команда в меню станет звучать странно.

Этот способ не про данные. Он не поможет, если нужно склонить «Склад Центральный» или «Бухгалтерия» из справочника подразделений. Для данных нужны следующие разделы.

Готовая форма в дополнительном реквизите справочника

Самый надёжный способ для должностей, подразделений и складов: хранить родительный падеж рядом с наименованием. Человек один раз пишет «главного бухгалтера», и дальше печатная форма берёт строку без всяких алгоритмов.

Как добавить реквизит без программиста

В конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) есть механизм дополнительных реквизитов:

  1. Откройте Администрирование → Общие настройки.
  2. Включите флажок Дополнительные реквизиты и сведения и перейдите по ссылке Дополнительные реквизиты.
  3. Выберите набор нужного справочника, например «Должности» или «Подразделения».
  4. Добавьте новый реквизит. Название: «Наименование в родительном падеже». Тип значения: строка.
  5. Откройте элементы справочника и заполните новое поле.

После этого реквизит появится на вкладке или в группе дополнительных полей карточки.

Когда лучше реквизит в расширении

Дополнительный реквизит хранится в табличной части ДополнительныеРеквизиты или в регистре дополнительных сведений. Брать его в запросе неудобно: нужно соединение по свойству. Если реквизит используют несколько печатных форм и отчётов, программист добавит обычный реквизит в расширении. Например, НаименованиеРодительный, строка 150 символов.

ВариантПлюсыМинусы
Дополнительный реквизит БСПБез конфигуратора, переживает обновлениеСложнее выбирать в запросе
Реквизит в расширенииПрямое поле в запросе и СКДНужен программист и проверка после обновлений

Готовую форму кто-то должен заполнять. Новая должность без родительного падежа даст пустую строку в печатной форме. Подстрахуйтесь кодом: если поле пустое, вызывайте автоматическое склонение. Пример ниже.

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

Вручную заполнять 300 должностей долго. Быстрее сделать черновик кодом, а человеку оставить только проверку. Пример для реквизита НаименованиеРодительный, добавленного в расширении:

Выборка = Справочники.Должности.Выбрать();
Пока Выборка.Следующий() Цикл
    Если ЗначениеЗаполнено(Выборка.НаименованиеРодительный) Тогда
        Продолжить; // ручные правки не трогаем
    КонецЕсли;
    Объект = Выборка.ПолучитьОбъект();
    Объект.НаименованиеРодительный = ВРодительномПадеже(Объект.Наименование);
    Объект.Записать();
КонецЦикла;

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

Запускайте массовую запись сначала в копии базы. Запись элементов меняет дату изменения и может запустить обмен с другими базами.

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

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

// Родительный падеж произвольной строки с запасным вариантом
Функция ВРодительномПадеже(Знач Текст, Знач ГотоваяФорма = "") Экспорт
    
    // 1. Если человек уже записал форму вручную — берём её
    Если ЗначениеЗаполнено(ГотоваяФорма) Тогда
        Возврат ГотоваяФорма;
    КонецЕсли;
    
    Если ПустаяСтрока(Текст) Тогда
        Возврат "";
    КонецЕсли;
    
    // 2. Иначе склоняем средствами платформы
    Варианты = ПолучитьСклоненияСтроки(Текст, "ПД=Родительный;");
    Если Варианты.Количество() = 0 Тогда
        Возврат Текст; // не смогли — выводим как есть
    КонецЕсли;
    
    Возврат Варианты[0];
    
КонецФункции

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

Модуль БСП для ФИО и ссылок

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

Набор параметров функции менялся между версиями БСП. Перед доработкой откройте модуль в конфигураторе и сверьте сигнатуру.

Чего код не умеет

Автоматическое склонение работает по словарю и правилам. Оно ошибается на строках, которых нет в обычной речи:

  • 🔤 аббревиатуры и коды: «ООО», «ОП-3», «Склад №2»;
  • 🔤 названия в кавычках: «Ромашка» склонять нельзя, склоняется только слово перед ней;
  • 🔤 несклоняемые фамилии: Шевченко, Дюма, женские фамилии на согласную (Анна Шульц);
  • 🔤 составные должности: «заместитель главного бухгалтера по налогам».

Для таких строк держите готовую форму в реквизите и передавайте её вторым параметром функции.

Родительный падеж в запросе и схеме компоновки

Язык запросов не умеет склонять. В нём нет функции, которая вернёт родительный падеж поля. Варианта два.

Готовая форма прямо в запросе

Если форма хранится в дополнительном реквизите, соедините справочник с его табличной частью:

ВЫБРАТЬ
    Должности.Ссылка КАК Должность,
    Должности.Наименование КАК Наименование,
    ЕСТЬNULL(ДопРеквизиты.Значение, "") КАК НаименованиеРодительный
ИЗ
    Справочник.Должности КАК Должности
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Должности.ДополнительныеРеквизиты КАК ДопРеквизиты
        ПО (ДопРеквизиты.Ссылка = Должности.Ссылка)
            И (ДопРеквизиты.Свойство = &СвойствоРодительный)

Параметр &СвойствоРодительный — ссылка на созданный вами дополнительный реквизит. Найдите её в коде по наименованию из плана видов характеристик дополнительных реквизитов. Если реквизит добавлен в расширении, соединение не нужно: поле выбирается напрямую.

Склонение после выполнения запроса

Когда готовой формы нет, склоняйте уже результат:

  1. Выполните запрос и выгрузите результат в таблицу значений.
  2. Добавьте колонку для падежа.
  3. В цикле заполните её функцией ВРодительномПадеже.
  4. Выведите таблицу в макет или передайте её в СКД как внешний набор данных.
Таблица = Запрос.Выполнить().Выгрузить();
Таблица.Колонки.Добавить("НаименованиеРодительный", Новый ОписаниеТипов("Строка"));

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

Здесь НаименованиеРодительныйГотовое — поле с готовой формой из запроса, если она есть.

Что делать в отчёте на СКД

В отчёте на СКД есть два пути:

  • 📊 Поле набора данных. Вывести готовую форму из реквизита как обычное поле. Быстро и без кода.
  • 📊 Внешний набор. Выполнить схему в коллекцию значений, дописать колонку и вывести результат. Для этого в модуле отчёта отключают стандартную обработку в ПриКомпоновкеРезультата.

Не склоняйте сотни строк в каждом прогоне отчёта. Функция медленнее обычной выборки поля. Если отчёт строят часто, один раз заполните готовые формы обработкой и дальше берите их из реквизита.

Заголовок отчёта в нужном падеже

Частая просьба: «Остатки склада Центральный» вместо «Остатки по складу: Центральный». Заголовок отчёта на СКД — это параметр вывода. Его можно собрать в коде перед компоновкой:

Склад = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(
    Новый ПараметрКомпоновкиДанных("Склад"));
Если Склад <> Неопределено И ЗначениеЗаполнено(Склад.Значение) Тогда
    Заголовок = "Остатки склада " + ВРодительномПадеже(Строка(Склад.Значение));
    КомпоновщикНастроек.Настройки.ПараметрыВывода.УстановитьЗначениеПараметра("Заголовок", Заголовок);
КонецЕсли;

Склоняется одна строка за прогон, поэтому на скорость отчёта это не влияет. Если пользователь выбрал несколько складов, заголовок лучше оставить общим, без склонения.

Составные типы: когда в поле то физлицо, то организация

Поле «Контрагент» или «Ответственный» может ссылаться на разные справочники. Для каждого типа правила склонения свои:

  • 👤 Физическое лицо — склоняются фамилия, имя и отчество с учётом пола.
  • 🏢 Организация или контрагент-юрлицо — склоняется только организационно-правовая форма, если она написана словами. «Общество с ограниченной ответственностью «Вектор»» → «Общества с ограниченной ответственностью «Вектор»». Сокращение «ООО «Вектор»» не меняется.
  • 🏬 Склад, подразделение — склоняется наименование, если это обычные слова.

Поэтому сначала определите тип значения, а потом выбирайте способ:

Функция ПредставлениеВРодительном(Значение) Экспорт
    
    Если Не ЗначениеЗаполнено(Значение) Тогда
        Возврат "";
    КонецЕсли;
    
    Представление = Строка(Значение);
    
    Если ТипЗнч(Значение) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
        // ФИО — через модуль БСП, он учтёт ручные правки
        Возврат СклонениеПредставленийОбъектов.ПросклонятьПредставление(Представление, 2, Значение);
        
    ИначеЕсли ТипЗнч(Значение) = Тип("СправочникСсылка.Контрагенты") Тогда
        // Название в кавычках не склоняем
        Возврат Представление;
        
    Иначе
        Возврат ВРодительномПадеже(Представление);
    КонецЕсли;
    
КонецФункции

Для юрлиц надёжнее хранить полное наименование в родительном падеже отдельно: «в лице» в договоре читают юристы. Проверка на пустое значение в начале функции нужна обязательно. Составное поле часто остаётся незаполненным, и без проверки в печатную форму уйдёт пустая строка или представление вида «<Объект не найден>».

Ещё один нюанс составного типа: значение может оказаться типом, которого вы не ждали. Например, в поле добавили новый справочник после обновления. Ветка Иначе в примере страхует от этого: строка склонится общим способом, а не потеряется.

Где ломается склонение и как это исправить

Диагностика: выберите симптом

Ещё одна частая ловушка — регистр букв. Наименование должности в справочнике обычно пишут с заглавной: «Главный бухгалтер». В середине фразы «в лице …» нужна строчная. Переведите первую букву в нижний регистр: НРег(Лев(Текст, 1)) + Сред(Текст, 2).

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

Можно ли склонять наименования без программиста?
Да. Добавьте дополнительный реквизит с готовой формой через Администрирование → Общие настройки и заполните его. Вывести поле в типовую печатную форму без доработки обычно нельзя, а в отчёт на СКД — можно через настройку полей.
Работает ли ПолучитьСклоненияСтроки в веб-клиенте?
Вызывайте её на сервере, тогда тип клиента не важен. Результат вернётся клиенту готовой строкой.
Как получить родительный падеж в сумме прописью?
Функция ЧислоПрописью склоняет предмет счёта по параметрам: «рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2». Формы для 1, 2 и 5 единиц задаёте сами, платформа подставит нужную.
Почему у сотрудника в приказе падеж верный, а в договоре ГПХ — нет?
Типовые кадровые формы берут сохранённое склонение физлица. Самописная форма договора может склонять строку заново. Передавайте в функцию ссылку на физлицо, чтобы учитывались ручные правки.
Нужно ли хранить все шесть падежей?
Нет. Храните только те, что реально выводятся. Обычно это родительный («в лице», «приказ о приёме») и дательный («выдана», «предоставить»).