Как вытянуть ФИО подписанта контрагента в шаблон Word и настроить склонение по падежам в 1С:Документооборот?

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

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

Шаг 1. Получение подписанта или контактного лица контрагента

В зависимости от структуры хранения данных в системе 1С:Документооборот, подписанта со стороны контрагента можно получить двумя основными способами:

  1. Через запрос к справочнику «Контактные лица»: Если ответственное лицо зафиксировано в карточке контрагента, мы можем обратиться к первому элементу выборки с помощью языка запросов 1С.
  2. Через табличную часть «Стороны» документа: Если подписант явно указан в реквизитах самого документа (в табличной части сторон), обратиться к его представлению можно напрямую через объект файла.

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
    |	КонтактныеЛица.Ссылка КАК КонтактноеЛицо
    |ИЗ
    |	Справочник.КонтактныеЛица КАК КонтактныеЛица
    |ГДЕ
    |	КонтактныеЛица.Владелец = &Владелец";

Запрос.УстановитьПараметр("Владелец", Контрагент);
РезультатЗапроса = Запрос.Выполнить();

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


// Извлечение наименования подписанта второй стороны (индекс 1)
ФИОПодписанта = Файл.ВладелецФайла.Стороны[1].Подписал.Наименование;

Шаг 2. Программное склонение ФИО по падежам

Для подстановки ФИО в преамбулу договора требуется родительный падеж (кого? / чего?). В Библиотеке Стандартных Подсистем (БСП) предусмотрен специальный общий модуль СклонениеПредставленийОбъектов.

Разберем базовый вызов функции склонения конкретной текстовой строки в родительный падеж (число 2 соответствует родительному падежу):


РезультатОбработки = СклонениеПредставленийОбъектов.ПросклонятьПредставление(ФИОПодписанта, 2);

Если требуется получить полный набор падежей или гарантировать обработку всей структуры ФИО, используем функцию ПросклонятьПредставлениеПоВсемПадежам:


ФИО = Файл.ВладелецФайла.Стороны[1].Подписал.Наименование;
СтруктураПадежей = СклонениеПредставленийОбъектов.ПросклонятьПредставлениеПоВсемПадежам(ФИО, Истина);

Если СтруктураПадежей <> Неопределено Тогда
    РезультатОбработки = СтруктураПадежей.РодительныйПадеж;
КонецЕсли;

Шаг 3. Выясним причины, почему ФИО не склоняется

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

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

Для поиска точной причины сбоя проанализируем выполнение алгоритма в режиме отладки. В Конфигураторе выберите пункт меню «Отладка» -> «Остановка по ошибке» и установите флаг «Останавливаться по ошибке». Также можно установить точку останова в функции ПросклонятьПредставление общего модуля СклонениеПредставленийОбъектов и пройти по шагам с помощью клавиши F11.

Шаг 4. Автозаполнение защищенных шаблонов Word (.dotx / .docx)

Отдельный практический вопрос — использование шаблонов Word в формате .dotx или .docx, на которые установлена защита от редактирования с паролем.

Важное ограничение: Стандартный механизм 1С (парсинг OpenXML/ZIP-архива) и штатное обращение через COM-объект Word.Application не могут изменить защищенный документ, если на него наложен пароль. Попытка подстановки значений в защищенный файл приведет либо к ошибке выполнения, либо к повреждению структуры документа.

Для работы с такими шаблонами применяются следующие подходы:

  1. Снятие и повторная установка защиты через COM-объект: В пользовательской обработке перед заполнением полей документ программно снимается с защиты, заполняется данными, после чего защита накладывается повторно.
    
    // Пример работы с защищенным документом через COM-соединение
    ДокументWord = COMОбъект.Documents.Open(ПутьКФайлу);
    
    // Снимаем защиту паролем
    ДокументWord.Unprotect("ВашПароль");
    
    // Выполняем подстановку значений в теги или закладки
    // ...
    
    // Возвращаем защиту (2 - разрешено только заполнение форм, 3 - только чтение)
    ДокументWord.Protect(2, Ложь, "ВашПароль");
    ДокументWord.Save();
    
  2. Заполнение шаблона до защиты: Шаблон хранится в базе 1С без пароля. Программа заполняет все необходимые поля, и только на этапе сохранения итогового файла для пользователя на документ программно накладывается ограничение редактирования.
  3. Настройка исключений в Microsoft Word: В самом шаблоне при включении защиты «Ограничить редактирование» можно выделить конкретные поля автозаполнения (Content Controls) и разрешить их редактирование всем пользователям. В этом случае механизм 1С сможет обновлять эти области без необходимости снимать пароль со всего документа.
← На главную