Как работать с шаблонами Microsoft Word в 1С 8.3: от двоичных данных до использования БСП

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

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

Почему в конфигураторе не видно содержимое макета

Когда мы открываем макет типа ДвоичныеДанные в конфигураторе, перед нами появляется системное окно с кнопками «Загрузить из файла» и «Выгрузить в файл». Разберем причину такой ситуации. В отличие от табличного документа, который является родным для платформы 1С, формат Word является внешним. Платформа не содержит встроенного визуального редактора для файлов .docx.

Проанализируем алгоритм работы с таким макетом:

  1. Нажмем кнопку «Выгрузить в файл» и сохраним документ на жесткий диск с расширением .docx.
  2. Откроем этот файл в Microsoft Word. Именно здесь мы будем "рисовать" форму, настраивать шрифты, отступы и вставлять параметры.
  3. После завершения редактирования сохраним файл и в конфигураторе 1С нажмем «Загрузить из файла». Теперь обновленный шаблон хранится внутри базы в виде набора байтов.

Выбор технологии: Двоичные данные против Active Document

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

1. Active Document (OLE/COM)
Это устаревшая технология. Суть ее в том, что макет встраивается в 1С как объект, и для его работы на компьютере пользователя обязательно должен быть установлен Microsoft Word. Программа 1С через механизм COM-соединения "дирижирует" вордом: открывает его, ищет закладки и вставляет текст.

Основные минусы:

2. Двоичные данные (.docx)
Это современный стандарт. Файл .docx — это на самом деле ZIP-архив, содержащий XML-структуру. Рассмотрим преимущества этого метода:

Использование подсистемы Печать из состава БСП

Рассмотрим самый эффективный способ реализации печати, который используется в ЗУП 3.1 — для этого подойдёт создание дополнительных соглашений к трудовым договорам. Вместо того чтобы вручную писать код управления объектом Word, мы можем использовать штатные механизмы БСП. Чтобы быстро разобраться в теме, можно изучить алгоритм заполнения Word-макетов при помощи БСП за 3 шага. Проанализируем, как подготовить шаблон для БСП:

В тексте Word-файла мы расставляем специальные теги (параметры) в формате {v ИмяПоля}. Например:

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


// Пример формирования данных для шаблона БСП
ДанныеДляПечати = Новый Структура;
ДанныеДляПечати.Вставить("ФИОСотрудника", Объект.Сотрудник.Наименование);
ДанныеДляПечати.Вставить("НомерДоговора", Объект.Номер);

// Если в шаблоне есть таблица
ТаблицаТоваров = Новый СписокЗначений;
Для Каждого Строка Из Объект.Товары Цикл
    СтруктураСтроки = Новый Структура("Номер, Артикул, Цена");
    ЗаполнитьЗначенияСвойств(СтруктураСтроки, Строка);
    ТаблицаТоваров.Добавить(СтруктураСтроки);
КонецЦикла;
ДанныеДляПечати.Вставить("Список", ТаблицаТоваров);

Как реализовать печать программно (если не используется БСП)

Если нам необходимо программно управлять процессом через COM-объект (метод Active Document), алгоритм будет выглядеть иначе. Посмотрим на пример кода:


Попытка
    WordApp = Новый COMОбъект("Word.Application");
Исключение
    Сообщить("Microsoft Word не установлен!");
    Возврат;
КонецПопытки;

// Получаем макет из двоичных данных и сохраняем во временный файл
ИмяФайлаШаблона = ПолучитьИмяВременногоФайла("docx");
Макет = ПолучитьМакет("МойВордШаблон");
Макет.Записать(ИмяФайлаШаблона);

Документ = WordApp.Documents.Add(ИмяФайлаШаблона);
WordApp.Visible = Ложь;

// Поиск и замена текста в шаблоне
Замена = Документ.Content.Find;
Замена.Execute("[НомерДок]", , , , , , , , , "№123-АП", 2); 

Документ.SaveAs(ИмяФайлаРезультата);
WordApp.Quit();

В данном примере мы используем объект COMОбъект("Word.Application"). Метод Execute позволяет найти в тексте заранее подготовленную метку (например, [НомерДок]) и заменить ее на реальное значение. Разработчикам для быстрого поиска подобных решений пригодится справочник по методам БСП с примерами кода.

Важные нюансы для разработчика

Проанализируем несколько критических моментов, которые помогут избежать ошибок:

  1. Редактирование параметров: В Word будьте осторожны при наборе тегов {v Параметр}. Если вы ошиблись и исправили букву внутри тега, Word может разорвать его скрытыми XML-тегами форматирования, и 1С перестанет его "видеть". В таких случаях рекомендуется удалить тег полностью и вписать его заново.
  2. PDF без лишних сложностей: Если вы используете макеты как двоичные данные, 1С позволяет программно конвертировать результат в PDF. Это гораздо надежнее, чем пытаться отправить документ на виртуальный принтер через COM-объект.
  3. Пользовательские макеты: В типовых конфигурациях (ЗУП, ERP, БП) пользователям доступен интерфейс «Макеты печатных форм». Там они могут скачать ваш .docx, изменить логотип или текст договора и загрузить обратно. Если вы работаете с локализованными версиями, обратите внимание на внешние печатные формы для ЗУП Казахстана, которые построены на этих принципах — есть готовая печать кадровых документов по шаблонам Word.

Подведем итог: для новых разработок всегда выбирайте двоичные данные и формат .docx. Это обеспечит кроссплатформенность, высокую скорость работы и удобство поддержки. Используйте механизмы БСП для работы с тегами — это сократит объем кода в разы и сделает вашу печатную форму гибкой в настройке.

← На главную