В процессе разработки отчетов и печатных форм (договоров, приказов, справок) часто возникает необходимость вывести наименование должности сотрудника в родительном падеже (например, «в лице генерального директора»). В системе 1С существует несколько подходов к решению этой задачи: от использования старых внешних компонент до современных облачных сервисов. Проанализируем каждый из них, разберем их плюсы и минусы, а также посмотрим на конкретные примеры кода.
В конфигурациях прошлых поколений, таких как «Зарплата и управление персоналом 2.5», разработчики часто использовали универсальные механизмы, заложенные в саму систему. Одной из самых популярных функций была Просклонять. Рассмотрим, как она работает.
Функция обычно располагается в общем модуле УниверсальныеМеханизмы. Ее вызов выглядит следующим образом:
Результат = УниверсальныеМеханизмы.Просклонять(Компонента, "Генеральный директор", 2, , );
Здесь второй параметр — это текст, который нужно просклонять, а третий параметр (цифра 2) указывает на номер падежа (2 — родительный, 3 — дательный и так далее). Однако стоит учитывать, что этот механизм сильно зависит от внешней компоненты NameDecl.dll, которая изначально проектировалась для работы с ФИО, а не с должностями.
Компонента NameDecl.dll является классическим инструментом 1С. Мы можем встретить ее во многих типовых решениях. Однако, как отмечают опытные разработчики, при склонении должностей она может вести себя непредсказуемо. Проанализируем ситуацию: если должность состоит из одного слова, результат обычно корректен. Но если мы имеем дело со сложными конструкциями (например, «генеральный директор»), компонента может выдать ошибочное окончание, превратив фразу в «генеральныя директора».
Важный нюанс: Данная компонента является COM-объектом и работает только под операционной системой Windows. Если ваш сервер 1С работает на Linux, этот метод не будет функционировать без дополнительных «костылей».
В современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), реализован гораздо более мощный механизм. Он автоматически выбирает лучший способ склонения: использует локальный кэш, обращается к внутренним алгоритмам или запрашивает данные у специализированного веб-сервиса 1С.
Рассмотрим пример кода для Бухгалтерии предприятия 3.0, который позволяет получить должность руководителя в нужном падеже:
Падеж = 2; // Родительный падеж
ПустойДоговор = Справочники.ДоговорыКонтрагентов.ПустаяСсылка();
// Вызываем метод из общего модуля БСП
Результат = СклонениеПредставленийОбъектов.ПросклонятьПредставление(Выборка.ДолжностьРуководителя, Падеж, ПустойДоговор);
Преимущество этого метода заключается в том, что система умеет обращаться к Регистру сведений «Склонения объектов». Если пользователь один раз вручную исправит неверное склонение в печатной форме, система запомнит этот вариант и в следующий раз выдаст корректный результат без правки кода. Для быстрой корректировки отображения должностей и других реквизитов в готовых макетах можно использовать инструмент для постобработки печатных форм на базе БСП.
Если по каким-то причинам использование внешних компонент или облачных сервисов невозможно (например, нет доступа в интернет или работа идет в сильно кастомизированной самописной базе), можно внедрить функцию склонения непосредственно в программный код. Ниже представлен фрагмент алгоритма, который позволяет склонять слова, анализируя их окончания.
Функция ПадежС(Знач z1, Знач z2 = 2, Знач z3 = "*", z4 = 0) Экспорт
// Алгоритм анализа окончаний и замены на соответствующие падежу
z5 = Найти(z1, "-");
z6 = ?(z5 = 0, "", "-" + ПадежС(Сред(z1, z5 + 1, СтрДлина(z1) - z5 + 1), z2, z3, z4));
z1 = ?(z5 = 0, z1, Лев(z1, z5 - 1));
z7 = Прав(z1, 3);
z8 = Прав(z7, 2);
z9 = Прав(z8, 1);
// Определение исключений и правил для различных окончаний
z10 = Найти("ая ия ел ок яц ий па да ца ша ба та га ка", z8);
// ... (далее следует логика замены окончаний)
// Возврат результата
Возврат z1 + z6;
КонецФункции
Этот метод хорош тем, что он полностью автономен и работает на любой платформе (Windows/Linux) и любой версии 1С. Однако он требует тщательного тестирования на специфических названиях профессий.
Разберем важный юридический и лингвистический аспект. Согласно Общероссийскому классификатору должностей (ОКПДТР), большинство профессий не имеют женского рода в официальном наименовании. Например, правильно писать «Заведующий складом Иванова», а не «Заведующая складом».
Однако в кадровом учете часто требуется согласование по полу. В современных версиях ЗУП 3.1 в справочнике Должности предусмотрено поле для ввода специального наименования для использования в приказах. Мы рекомендуем использовать именно этот функционал вместо попыток программно превратить «Уборщик» в «Уборщица».
Подводя итог нашему анализу, выделим основные шаги для эффективного решения задачи:
СклонениеПредставленийОбъектов.ПросклонятьПредставление(). Это самый надежный и поддерживаемый метод.Сервер, чтобы исключить зависимость от COM-компонент и ОС Windows.Выяснив все технические детали, мы видим, что склонение в 1С — это задача, требующая учета множества факторов: от версии платформы до лингвистических особенностей русского языка. Выбирайте метод, исходя из архитектуры вашей системы.