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

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

При разработке внешних печатных форм (ВПФ) в формате Microsoft Word часто возникает задача адаптации текста под пол конкретного сотрудника. Например, в тексте трудового договора или соглашения фраза "именуемый в дальнейшем" должна автоматически меняться на "именуемая в дальнейшем", если документ печатается для женщины. В этой статье мы подробно разберем, как правильно реализовать эту логику в коде 1С, избежав типичных ошибок начинающих разработчиков.

Анализ структуры данных: Сотрудник и Физическое лицо

Прежде чем приступать к написанию кода, проанализируем, где именно хранятся данные о поле. В конфигурациях на базе БСП (например, ЗУП 3.1, ERP, КА) информация о поле содержится в справочнике ФизическиеЛица. Справочник Сотрудники является лишь оболочкой, которая содержит ссылку на конкретное физическое лицо.

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

Вариант 1: Программное определение окончания в модуле 1С

Самый распространенный способ — подготовить значение параметра в коде 1С и передать его в шаблон Word. Разберем по шагам, как это сделать правильно.

Во-первых, мы должны убедиться, что сравниваем значение пола не со строкой "Мужской" или "Женский", а со значением системного перечисления. Это гарантирует корректную работу программы при любом языке интерфейса.

Посмотрим на пример правильной реализации логики в модуле обработки:


// Предположим, у нас есть структура ДанныеПечати, куда мы собрали сведения о сотруднике
Если ДанныеПечати.Пол = Перечисления.ПолФизическогоЛица.Женский Тогда
    Окончание = "ая";
    СловоЦеликом = "именуемая";
Иначе
    // Если пол мужской или не указан, по правилам делопроизводства используем мужской род
    Окончание = "ый";
    СловоЦеликом = "именуемый";
КонецЕсли;

// Заполняем параметры для передачи в Word
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("ыйая", Окончание);
СтруктураПараметров.Вставить("ИменуемыйИменуемая", СловоЦеликом);

В данном примере мы подготовили два варианта: подстановку только окончания (если в шаблоне написано именуем{ыйая}) и подстановку слова целиком (если в шаблоне стоит параметр {ИменуемыйИменуемая}). Рекомендуем использовать второй вариант, так как он делает шаблон более читаемым.

Вариант 2: Использование функций БСП для получения данных

Чтобы избежать ошибки "Поле объекта не обнаружено", которая часто возникает при попытке прямого обращения к реквизитам через точку (особенно если переменная может оказаться пустой), следует использовать функции библиотеки стандартных подсистем (БСП). Рассмотрим, как это упрощает код:


// Получаем пол через общие модули БСП, это безопаснее
ПолСотрудника = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаСотрудника, "ФизическоеЛицо.Пол");

Если ПолСотрудника = Перечисления.ПолФизическогоЛица.Женский Тогда
    ПараметрыМакета.Вставить("ТекстИменуемый", "именуемая");
Иначе
    ПараметрыМакета.Вставить("ТекстИменуемый", "именуемый");
КонецЕсли;

Использование ОбщегоНазначения.ЗначениеРеквизитаОбъекта позволяет в одну строку "пробросить" путь через несколько реквизитов (от сотрудника к полу физлица) и корректно обработать ситуацию, если ссылка пустая.

Вариант 3: Использование логики внутри шаблона Word

Существует еще один продвинутый способ, который позволяет не загромождать код 1С условиями. Мы можем передать в Word только значение пола, а логику выбора слова прописать в самом файле .docx с помощью полей условий (IF). Рассмотрим, как это настроить:

  1. В шаблоне Word нажмите Ctrl+F9. Появятся фигурные скобки.
  2. Внутри скобок введите конструкцию: { IF { MERGEFIELD Пол } = "Женский" "именуемая" "именуемый" }.
  3. В коде 1С вам останется только передать строковое представление пола:

// В 1С передаем просто пол
ДанныеДляПечати.Вставить("Пол", Строка(СсылкаНаФизЛицо.Пол));

Этот метод удобен тем, что кадровик или юрист может самостоятельно изменить текст "именуемый" на "принятый/принятая" прямо в ворде, не обращаясь к программисту для правки кода Если ... Тогда.

Разбор типичных ошибок при работе с ВПФ Word

Проанализируем ситуацию, упомянутую в сообщении №26: ошибка "Значение не является значением объектного типа (ПоследняяВыведеннаяОбласть)". Эта проблема специфична для механизмов печати 1С через COM-соединение или подсистему УправлениеПечатью.

Она возникает в следующих случаях:

Рекомендации по склонению через внешние сервисы

Если ваша задача сложнее, чем просто замена окончания (например, нужно просклонять должность "Главный бухгалтер" в родительном падеже с учетом пола), рассмотрим использование сервиса Морфер или встроенных функций 1С. В ЗУП 3.1 есть полезная функция, которую мы можем вызвать для формирования представлений:


// Пример использования встроенного склонения для ФИО и связанных слов
РезультатСклонения = ФизическиеЛица.СклонитьФИО(ФизЛицо.ФИО, 2, ФизЛицо.Пол); 
// Где 2 - это родительный падеж

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

Подводя итог, выясним самый эффективный путь: для простых замен "ый/ая" лучше всего использовать программную проверку через Перечисления.ПолФизическогоЛица в модуле обработки и передавать готовое слово в параметр макета. Это наиболее надежный и понятный для поддержки способ.

← На главную