Как изменить формат сохранения внешней печатной формы из Word в стандартный табличный документ 1С?

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

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

Анализ текущей структуры печатной формы

Прежде всего, проанализируем, как работает типичная печатная форма на базе Word. В таких решениях используется макет типа Active document или Двоичные данные. Программный код в этом случае обычно инициализирует COM-соединение с приложением Word, открывает файл-шаблон и производит поиск текстовых меток (например, {НомерДокумента}) для их замены на реальные данные из информационной базы.

Рассмотрим, почему нельзя просто «поменять пару строк». Формат Word и формат Табличного документа 1С — это принципиально разные сущности. В Word мы работаем с потоком текста и объектами, а в 1С — с ячейками, областями и параметрами. Поэтому нам придется выполнить комплексную трансформацию обработки.

Шаг 1: Создание нового макета типа Табличный документ

Первым делом нам необходимо создать новый макет. Разберем этот процесс по шагам:

  1. Откроем нашу внешнюю обработку в конфигураторе.
  2. Перейдем на закладку Макеты и добавим новый макет.
  3. Выберем тип макета Табличный документ.
  4. Назовем его, например, ПФ_MXL_ДопСоглашение.

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

Шаг 2: Трансформация программного кода вывода данных

Теперь проанализируем ситуацию с кодом. Если раньше в процедуре Печать() использовались методы Word.Application, то теперь мы переходим на стандартные методы работы с объектом ТабличныйДокумент.

Давайте сравним подходы. Раньше код мог выглядеть примерно так (упрощенно):


// Старый подход (Word)
ОбъектВорд = ПолучитьМакет("МакетВорд").Получить();
Документ = ОбъектВорд.Application.Documents.Add();
Замена = Документ.Content.Find;
Замена.Execute("{НомерДокумента}", , , , , , , , , Номер);

Нам же необходимо переписать логику, используя объектный подход 1С. Рассмотрим правильную структуру формирования документа:


Функция СформироватьПечатнуюФорму(СсылкаНаОбъект, ОбъектыПечати)
    
    ТабДок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("ПФ_MXL_ДопСоглашение");
    
    // Получаем область шапки
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    
    // Заполняем параметры из данных объекта
    ОбластьШапка.Параметры.НомерДокумента = СсылкаНаОбъект.Номер;
    ОбластьШапка.Параметры.ДатаДокумента = Формат(СсылкаНаОбъект.Дата, "ДЛФ=DD");
    
    // Выводим область в итоговый документ
    ТабДок.Вывести(ОбластьШапка);
    
    Возврат ТабДок;
    
КонецФункции

Шаг 3: Настройка интеграции с БСП

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

Проверим таблицу команд. При использовании Word тип вызова часто настраивается как клиентский метод, так как COM-объект Word удобнее создавать на стороне клиента. Для Табличного документа рекомендуется использовать ВызовСерверногоМетода. Это позволит формировать документ на сервере, что значительно быстрее. В колонке «Использование» для команды печати должно стоять ДополнительныеОтчетыИОбработкиКлиентСервер.ТипВызоваКомандыВызовСерверногоМетода().

Шаг 4: Реализация сохранения файла

Если в исходном вопросе под «сохранением» подразумевалось автоматическое формирование файла в определенную папку, нам нужно изменить метод записи. Вместо методов Word используем встроенный метод 1С Записать().

Разберем пример сохранения сформированного документа в формате PDF или MXL:


ПутьКФайлу = "C:\Temp\Document.mxl";
// Сохранение в родном формате 1С
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.MXL);

// Или сохранение в PDF для универсальности
ПутьКPDF = "C:\Temp\Document.pdf";
ТабДок.Записать(ПутьКPDF, ТипФайлаТабличногоДокумента.PDF);

Если же пользователю просто нужно иметь возможность сохранять файл вручную, то переход на Табличный документ дает огромное преимущество: стандартное окно предпросмотра 1С уже содержит кнопку «Сохранить как», позволяющую выбрать любой из десятка форматов (Excel, PDF, Word, HTML, MXL) без написания дополнительного кода.

Преимущества и итоги перехода

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

Таким образом, для решения задачи необходимо отрисовать новый макет ТабличныйДокумент, перенести в него логику заполнения параметров из старого кода и обновить регистрационные данные обработки в справочнике «Дополнительные отчеты и обработки».

← На главную