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

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

Каждый разработчик 1С рано или поздно сталкивается с задачей создания печатной формы на основе готового сложного документа в формате Microsoft Word (.doc или .docx). Это может быть трудовой договор, приказ на оплату праздничных дней, соглашение о неразглашении или акт сложной формы. Первая реакция разработчика — тоска от необходимости вручную перерисовывать всю сетку, подгонять пиксели и настраивать шрифты в табличном документе 1С (макете .mxl).

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

Почему прямой перенос «копировать-вставить» не работает?

Попытка просто скопировать содержимое документа Word через буфер обмена (CTRL+C / CTRL+V) и вставить его в поле табличного документа 1С приводит к плачевным результатам. Разметка сбивается, границы таблиц ломаются, шрифты искажаются, а ячейки объединяются хаотичным образом.

Выясним причину этого поведения. Документ Microsoft Word представляет собой flow-текст (гипертекстовую структуру, близкую к HTML), в то время как макет 1С (.mxl) — это жесткая табличная сетка (аналог Microsoft Excel). Прямая конвертация «текст -> таблица» без потерь структуры невозможна технологически. Однако существуют обходные пути и альтернативные технологии.

Способ 1. Современный стандарт БСП — прямая печать в формат Word (DOCX)

Если перед вами стоит задача реализовать печатную форму по готовому шаблону Word, то наиболее правильным решением будет вообще не переносить его в MXL. Современные версии платформы 1С:Предприятие и Библиотеки стандартных подсистем (БСП) позволяют использовать файлы .docx напрямую в качестве макетов печатных форм.

При этом формирование документа происходит на стороне сервера 1С без создания COM-объекта (без вызова Word.Application). Это критически важно, так как позволяет без проблем формировать документы на серверах под управлением операционной системы Linux и исключает зависание процессов MS Word в памяти сервера.

Рассмотрим по шагам, как реализовать этот механизм:

Шаг 1. Подготовка шаблона в MS Word

Откроем наш исходный документ Word и разметим в нем области и параметры, которые будут заполняться из 1С. Для этого используются специальные маркеры:

  1. Параметры: записываются в фигурных скобках с префиксом v8. Например: {v8 ФиоСотрудника}, {v8 ДатаДокумента}, {v8 СуммаПрописью}.
  2. Области (секции): если в документе есть повторяющиеся строки (например, табличная часть с днями работы в праздники), мы оборачиваем их в маркеры областей: {v8 Область.СтрокаТаблицы} в начале и {v8 Область.СтрокаТаблицы} в конце строки.

Шаг 2. Загрузка шаблона в конфигурацию

Добавим в наш объект метаданных (например, в документ или справочник) новый макет с типом Двоичные данные и загрузим туда наш подготовленный файл .docx.

Шаг 3. Программный код формирования печатной формы

Проанализируем пример кода, выполняющего заполнение макета Word средствами БСП. Этот код пишется в модуле менеджера объекта или в специализированном общем модуле печати:


Функция СформироватьПечатнуюФормуВФорматеWord(СсылкаНаОбъект, АдресХранилища) Экспорт

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

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

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

Способ 2. Лайфхак для ручного переноса: конвертация через HTML

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

Прямой экспорт из Word в Excel часто ломает структуру таблиц. Но мы можем использовать язык разметки HTML в качестве надежного посредника. Разберем этот процесс по шагам:

  1. Откройте исходный документ в Microsoft Word.
  2. Выберите меню Файл -> Сохранить как.
  3. В выпадающем списке типов файлов выберите Веб-страница (вэб-документ) (*.htm; *.html). Очень важно выбрать именно этот пункт, а не «Веб-страница в одном файле».
  4. Закройте Word и запустите Microsoft Excel.
  5. Откройте сохраненный файл .html в Excel. Вы увидите, что Excel отлично распознал структуру документа, преобразовав текстовые абзацы и таблицы Word в строки и столбцы таблицы Excel, при этом сохранив объединение ячеек и начертание шрифтов гораздо точнее, чем при обычном копировании.
  6. Сохраните файл из Excel в формате книги .xls или .xlsx.
  7. Откройте конфигуратор 1С, создайте новый макет табличного документа (.mxl), выберите в меню Таблица -> Импорт... и укажите сохраненный Excel-файл.

После импорта вам останется лишь слегка подкорректировать ширину колонок, установить границы областей для печати и заменить статический текст на параметры 1С (например, заменить текст «Иванов Иван Иванович» на [ФИО] с типом заполнения «Параметр»). Этот способ экономит до 90% времени по сравнению с рисованием сетки «с нуля».

Способ 3. Пользовательские шаблоны в режиме «1С:Предприятие»

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

Проанализируем, как задействовать этот механизм:

  1. Перейдите в раздел Администрирование -> Печатные формы, отчеты и обработки -> Шаблоны документов (или «Макеты печатных форм»).
  2. Нажмите кнопку Создать и выберите тип макета: Документ Word (Open XML).
  3. Загрузите ваш файл шаблона.
  4. В открывшемся окне конструктора система покажет доступные реквизиты документа 1С (например, Организация, Сотрудник, СуммаДокумента).
  5. Вы можете просто перетаскивать эти реквизиты мышкой в нужные места вашего Word-документа. Система сама вставит необходимые маркеры автозаполнения.
  6. Сохраните шаблон. Теперь при нажатии на кнопку печати в соответствующем документе система сама сформирует и заполнит файл Word.

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

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

← На главную