Как реализовать склонение по падежам в шаблонах договоров Word в 1С:Управление торговлей 11.5?

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

При работе с типовыми конфигурациями, такими как 1С:Управление торговлей 11.5, часто возникает задача автоматизации подготовки печатных форм договоров. Одной из самых трудоемких частей этой задачи является корректное склонение ФИО руководителей, названий контрагентов и должностей. В этой статье мы разберем, можно ли использовать платформенные механизмы склонения напрямую в редакторе шаблонов Word и как правильно организовать процесс подготовки данных.

Почему функции склонения не работают напрямую в шаблоне Word?

Рассмотрим ситуацию: у нас есть шаблон договора в формате .docx, где в тексте встречаются теги вида [Номер] или [Дата]. Мы хотим добавить тег, который автоматически просклоняет имя партнера, например: [ПолучитьСклонениеСтроки(Партнер, "ПД=Дательный")]. К сожалению, парсер шаблонов Word, встроенный в 1С, работает по принципу простой подстановки значений из структуры данных. Он ищет точное совпадение имени параметра (ключа) внутри квадратных скобок и заменяет его на готовое строковое значение.

Проанализируем техническое ограничение: движок печати не является интерпретатором программного кода 1С. Он не умеет выполнять выражения внутри документа. Поэтому любая попытка прописать функцию в самом вордовском файле приведет к тому, что система просто не найдет параметр с таким длинным именем и оставит текст как есть или выведет пустоту. Таким образом, единственно верный путь — подготовить просклоненную строку заранее в коде конфигурации и передать её в шаблон как готовый параметр.

Использование платформенной функции ПолучитьСклонениеСтроки

Начиная с версии платформы 8.3.13, в 1С появился встроенный лингвистический модуль. Это значительно упростило жизнь разработчикам, так как больше не нужно подключать внешние компоненты вроде NameDecl.dll или использовать платные веб-сервисы. Выясним, как работает эта функция.

Синтаксис функции выглядит следующим образом:


Результат = ПолучитьСклонениеСтроки(ИсходнаяСтрока, ПараметрыСклонения, ФорматнаяСтрока);

Разберем основные параметры, которые мы можем использовать для формирования данных договора:

Посмотрим на практический пример использования функции на стороне сервера:


// Получаем ФИО руководителя в дательном падеже
ФИОДательный = ПолучитьСклонениеСтроки("Петров Петр Петрович", "ПД=Дательный");
// Результат: "Петрову Петру Петровичу"

Интеграция склонения в механизм печати УТ 11.5

В конфигурации 1С:Управление торговлей 11.5 печать договоров обычно реализована через подсистему «Печать» БСП. Чтобы добавить новое склоняемое поле в шаблон, нам необходимо вмешаться в процесс формирования структуры данных. Рассмотрим пошагово, как это сделать с помощью расширения конфигурации, чтобы не снимать основную конфигурацию с поддержки.

Шаг 1. Поиск модуля менеджера. Нам нужно найти объект, который отвечает за печать договора. Чаще всего это справочник ДоговорыКонтрагентов. Перейдем в его модуль менеджера.

Шаг 2. Перехват процедуры формирования данных. Нам необходимо найти процедуру, которая собирает данные для шаблона Word (обычно это процедуры, связанные с обработкой печатных форм). В расширении мы создадим обработчик &После или &Вместо для метода, заполняющего структуру параметров.

Шаг 3. Добавление своих параметров. Допустим, типовой код собирает данные в структуру ДанныеПечати. Мы дополним её своими полями:


&После("СформироватьДанныеДляПечатиДоговора")
Процедура Расш1_СформироватьДанныеДляПечатиДоговора(Параметры, ДанныеПечати)
    
    // Предположим, в ДанныеПечати уже есть ФИО руководителя
    ФИОИменительный = ДанныеПечати.ФИОРуководителя;
    
    // Выполняем склонение
    ДанныеПечати.Вставить("ФИОРуководителяДательный", ПолучитьСклонениеСтроки(ФИОИменительный, "ПД=Дательный"));
    ДанныеПечати.Вставить("ФИОРуководителяРодительный", ПолучитьСклонениеСтроки(ФИОИменительный, "ПД=Родительный"));
    
    // Также можно просклонять должность
    ДолжностьИм = ДанныеПечати.ДолжностьРуководителя;
    ДанныеПечати.Вставить("ДолжностьРодительный", ПолучитьСклонениеСтроки(ДолжностьИм, "ПД=Родительный"));
    
КонецПроцедуры

После внесения этих изменений в код, в редакторе шаблона Word (в интерфейсе 1С) станут доступны новые параметры: [ФИОРуководителяДательный] и [ДолжностьРодительный]. Мы просто вставляем их в нужные места текста договора.

Использование механизмов БСП (Библиотека стандартных подсистем)

Важно отметить, что в УТ 11.5 активно используется БСП. В составе этой библиотеки есть общий модуль СклонениеИменСуществительных. Проанализируем, в чем его преимущество перед прямой платформенной функцией.

Модуль СклонениеИменСуществительных является более высокоуровневой оберткой. Он может автоматически определять пол, корректно обрабатывать сложные названия организаций и учитывать специфические правила русского языка, которые могут быть не до конца реализованы в базовом платформенном методе. Рассмотрим пример использования БСП:


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

Параметр падежа в БСП часто передается числом:

  1. Именительный
  2. Родительный
  3. Дательный
  4. Винительный
  5. Творительный
  6. Предложный

Тонкости форматирования при склонении

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

Рассмотрим код, который подготавливает инициалы для договора:


ПараметрыФизЛица = "Л=Фам И. О.; ПД=Дательный";
ИнициалыДательный = ПолучитьСклонениеСтроки("Иванов Иван Иванович", , ПараметрыФизЛица);
// Результат: "Иванову И. И."

Подведение итогов

Выясним основные выводы нашего исследования. Прямое использование логических выражений и функций внутри вордовских шаблонов 1С:УТ 11.5 невозможно из-за архитектуры подсистемы печати. Однако это не является препятствием для автоматизации. Правильный алгоритм действий выглядит так: проанализировать необходимые падежные формы в тексте договора, добавить соответствующие вычисляемые поля в программный код формирования данных печати (используя ПолучитьСклонениеСтроки или модули БСП) и разместить готовые параметры в шаблоне Word.

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

← На главную