Как правильно склонять составные наименования должностей по падежам в 1С?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При формировании печатных форм кадровых приказов, договоров и доверенностей разработчики часто сталкиваются с задачей автоматического склонения должности сотрудника по падежам (чаще всего в родительный или дательный падеж). Попытка использовать стандартные библиотеки для склонения ФИО (например, NameDecl.dll) для названий должностей приводит к некорректным результатам — например, формулировка «Генеральный директор» может превратиться в «Генеральныя директора», а «Начальник отдела персонала» — в «Начальника отдела персоналу».

Разберем причины, почему специализированные библиотеки для имен собственных не подходят для названий должностей, и рассмотрим надежные варианты реализации склонения в 1С.

Почему библиотеки склонения ФИО ошибаются на должностях

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

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

Способ 1. Архитектурный подход: хранение падежей в справочнике

Рассмотрим подход, который является отраслевым стандартом в типовых конфигурациях (включая современные редакции ЗУП). Вместо того чтобы вычислять падежные формы динамически «на лету» в момент печати документа, падежные формы сохраняются непосредственно в справочнике должностей.

Разберем по шагам, как организовать такую схему:

  1. В справочнике Должности создаем дополнительные строковые реквизиты для нужных падежей (например, НаименованиеРодПадеж, НаименованиеДатПадеж, НаименованиеТворПадеж).
  2. На форму элемента справочника выносим соответствующие поля ввода.
  3. Для удобства пользователей на форму добавляем кнопку автоматического первоначального заполнения падежей по алгоритму или функции склонения.
  4. Кадровик или администратор при вводе новой должности визуально проверяет сгенерированные варианты и при наличии редких исключений корректирует форму вручную.
  5. В печатных формах код просто берет готовое значение реквизита без вызова внешних библиотек.

Посмотрим на пример извлечения готового значения в коде модуля:


// Получение наименования должности в родительном падеже
Если ПустаяСтрока(ДолжностьСотрудника.НаименованиеРодПадеж) = 0 Тогда
    СтрДолжность = ДолжностьСотрудника.НаименованиеРодПадеж;
Иначе
    // Если падеж не был заполнен вручную, используем стандартное наименование
    СтрДолжность = ДолжностьСотрудника.Наименование;
КонецЕсли;

Способ 2. Алгоритмическое расщепление словосочетания

Если требуется реализовать автоматическое склонение без ручного заполнения всех реквизитов, проанализируем алгоритм разделения строки на главное слово и неизменяемый зависимый «хвост».

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

Разберем логику обработки строки:

  1. Выделяем из строки первое слово (или согласованную группу, например «Главный специалист»).
  2. Определяем неизменяемую часть (все слова после главного слова).
  3. Передаем на склонение в морфологическую функцию (например, ПадежП() или специализированные алгоритмы) только выделенную основу.
  4. Склеиваем полученное просклоненное слово с неизменяемой частью.

Посмотрим на пример реализации алгоритма на встроенном языке:


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

Способ 3. Использование морфологических алгоритмов и таблиц исключений

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

  1. Если первое слово является прилагательным (окончания «-ый», «-ий», «-ая», «-ое»), алгоритм склоняет и первое, и второе слово.
  2. Если должность содержит дефис («инженер-программист»), склонению подвергаются обе части слова.
  3. Для нестандартных сокращений («и. о.», «зам.») предусматривается пропуск и сохранение без изменений.

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

← На главную