Как добавить печатную форму Word во внешнюю обработку 1С?

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

Разработка внешних печатных форм — одна из самых частых задач при адаптации типовых конфигураций под нужды бизнеса. Использование Microsoft Word в качестве шаблона позволяет создавать документы со сложным форматированием, которые трудно реализовать в стандартном табличном документе 1С. В данной статье мы подробно разберем, как интегрировать Word-макет во внешнюю обработку, используя механизмы Библиотеки стандартных подсистем (БСП).

Шаг 1. Подготовка макета в формате Word

Для начала нам необходимо создать файл шаблона. В современных версиях 1С (платформа 8.3 и выше) работа с Word строится на использовании файлов с расширением .docx. Разберем основные правила оформления такого макета:

  1. Параметры: Чтобы программа поняла, куда вставлять данные (например, номер договора или дату), используйте конструкцию {v8 ИмяПараметра}. Например, текст в Word может выглядеть так: "Договор № {v8 Номер} от {v8 Дата}".
  2. Области: Если в документе есть повторяющиеся части (например, строки в таблице товаров), их нужно выделить тегами областей. Начало области обозначается как {v8 Область.ИмяОбласти}, а конец — {v8 /Область.ИмяОбласти}.
  3. Таблицы: Теги областей можно размещать прямо внутри ячеек таблицы. 1С автоматически размножит строки таблицы в соответствии с переданными данными.

После подготовки файла сохраните его. В конфигураторе 1С во внешней обработке создайте новый макет, выберите тип Двоичные данные и загрузите ваш файл .docx. Назовите макет, например, ПФ_WORD_Договор.

Шаг 2. Регистрация внешней обработки в системе

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


Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
    ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг"); // Укажите свой документ
    ПараметрыРегистрации.Наименование = "Печать договора в Word";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    ПараметрыРегистрации.Версия = "1.0";
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Договор (Word)";
    НоваяКоманда.Идентификатор = "ДоговорWord";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипВызоваКомандыВызовСерверногоМетода();
    НоваяКоманда.Модификатор = "ПечатьMXL";
    
    Возврат ПараметрыРегистрации;
    
КонецФункции

Обратите внимание на Идентификатор — он понадобится нам позже для определения того, какую именно форму выбрал пользователь.

Шаг 3. Реализация процедуры печати

Согласно стандартам БСП, при вызове команды печати система обращается к экспортной процедуре Печать() в модуле объекта. Выясним, как должна выглядеть структура этой процедуры для работы с Word.


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    ПараметрыПечати = Новый Структура;
    
    // Проверяем, выбрана ли наша команда
    ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ДоговорWord");
    Если ПечатнаяФорма <> Неопределено Тогда
        
        ПечатнаяФорма.ТабличныйДокумент = СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати);
        ПечатнаяФорма.СинонимМакета = "Договор в формате Word";
        
    КонецЕсли;
    
КонецПроцедуры

Важный нюанс: несмотря на то, что мы выводим Word, БСП часто оперирует объектом ПечатнаяФорма.ТабличныйДокумент или специфическими методами для офисных документов. Разберем подробнее формирование самих данных.

Шаг 4. Формирование данных для макета Word

Теперь рассмотрим самый ответственный этап — заполнение макета данными из информационной базы. Мы будем использовать механизм УправлениеПечатью. Основная идея заключается в создании структуры данных, где ключи соответствуют параметрам {v8 ...} в Word.


Функция СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати)
    
    // Получаем макет из двоичных данных
    Макет = ПолучитьМакет("ПФ_WORD_Договор");
    
    // Создаем временное хранилище для печати через БСП
    ДанныеОбъектов = Новый Соответствие;
    
    Для Каждого СсылкаИзМассива Из МассивОбъектов Цикл
        
        // Здесь мы подготавливаем структуру данных для одного документа
        ДанныеДокумента = Новый Структура;
        ДанныеДокумента.Вставить("Номер", СсылкаИзМассива.Номер);
        ДанныеДокумента.Вставить("Дата", Формат(СсылкаИзМассива.Дата, "ДЛФ=DD"));
        ДанныеДокумента.Вставить("Контрагент", СокрЛП(СсылкаИзМассива.Контрагент));
        
        // Пример заполнения таблицы внутри Word
        ТаблицаТовары = Новый Массив;
        Для Каждого СтрокаТЧ Из СсылкаИзМассива.Товары Цикл
            СтрокаДанных = Новый Структура;
            СтрокаДанных.Вставить("Номенклатура", СокрЛП(СтрокаТЧ.Номенклатура));
            СтрокаДанных.Вставить("Количество", СтрокаТЧ.Количество);
            СтрокаДанных.Вставить("Цена", СтрокаТЧ.Цена);
            ТаблицаТовары.Добавить(СтрокаДанных);
        КонецЦикла;
        
        // Описание областей для Word
        ОписаниеОбластей = Новый Структура;
        ОписаниеОбластей.Вставить("СтрокаТаблицы", "СтрокаТаблицы"); // Имя области в Word
        
        // Формируем финальные данные для этого объекта
        ДанныеОбъекта = Новый Структура;
        ДанныеОбъекта.Вставить("ДанныеЗаполнения", ДанныеДокумента);
        ДанныеОбъекта.Вставить("Таблицы", Новый Структура("Товары", ТаблицаТовары));
        
        ДанныеОбъектов.Вставить(СсылкаИзМассива, ДанныеОбъекта);
        
    КонецЦикла;
    
    // Вызываем механизм БСП для генерации печатных форм Word
    // В зависимости от версии БСП метод может отличаться
    // Обычно используется УправлениеПечатью.СформироватьДокументыMicrosoftWord
    
    Возврат УправлениеПечатью.СформироватьДокументыMicrosoftWord(Макет, ДанныеОбъектов);

КонецФункции

Особенности и советы при работе с Word-формами

Работа с областями: Проанализируем ситуацию, когда вам нужно скрыть целый блок текста. В Word это делается через механизм описания областей. Вы можете определить область {v8 Область.УсловиеДоставки} и программно решить, выводить её или нет, добавляя её в структуру описания только при выполнении определенных условий.

Склонение имен: В юридических документах часто требуется склонять ФИО. Рекомендуем использовать встроенный механизм БСП: ФизическиеЛица.Просклонять. Результат склонения передавайте в структуру ДанныеДокумента как готовый параметр.

Отладка: Основная сложность внешних обработок — трудность отладки кода в модуле объекта. Мы рекомендуем сначала протестировать запрос и логику формирования структуры ДанныеДокумента в обычной консоли запросов или создать временную форму внутри обработки для вызова процедур печати кнопкой. Для упрощения этого процесса подойдёт шаблон внешней печатной формы с формой для отладки и авторегистрацией.

Зависимость от ПО: Помните, что классический метод формирования документов через COM-объект требует установленного Microsoft Word на компьютере пользователя. Если ваша база работает в облаке или через веб-клиент на Linux, следует рассмотреть современные методы генерации через шаблоны Office Open XML, которые не требуют наличия Word на сервере или клиенте.

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

← На главную