При разработке внешних печатных форм в среде 1С:Предприятие 8.3 программисты часто сталкиваются с необходимостью вывода данных не в стандартный табличный документ (.mxl), а в привычный пользователям формат Microsoft Word (.doc или .docx) — для этой задачи есть универсальная печать в Word из справочников 1С. Это особенно актуально для кадрового учета в 1С:Зарплата и управление персоналом (ЗУП), где требуется строгое соблюдение печатных форм договоров, справок и приказов. В работе с этой конфигурацией часто помогает справочник методов для ЗУП 3.1. Рассмотрим подробно, как устроены такие макеты, почему конфигуратор иногда кажется "пустым" и какой метод реализации выбрать.
Когда мы открываем макет типа ДвоичныеДанные в конфигураторе, перед нами появляется системное окно с кнопками «Загрузить из файла» и «Выгрузить в файл». Разберем причину такой ситуации. В отличие от табличного документа, который является родным для платформы 1С, формат Word является внешним. Платформа не содержит встроенного визуального редактора для файлов .docx.
Проанализируем алгоритм работы с таким макетом:
.docx.Выясним, какой способ хранения и вывода шаблонов лучше использовать в современных конфигурациях. Существует два основных подхода, и выбор между ними критичен для стабильности системы.
1. Active Document (OLE/COM)
Это устаревшая технология. Суть ее в том, что макет встраивается в 1С как объект, и для его работы на компьютере пользователя обязательно должен быть установлен Microsoft Word. Программа 1С через механизм COM-соединения "дирижирует" вордом: открывает его, ищет закладки и вставляет текст.
Основные минусы:
2. Двоичные данные (.docx)
Это современный стандарт. Файл .docx — это на самом деле ZIP-архив, содержащий XML-структуру. Рассмотрим преимущества этого метода:
Рассмотрим самый эффективный способ реализации печати, который используется в ЗУП 3.1 — для этого подойдёт создание дополнительных соглашений к трудовым договорам. Вместо того чтобы вручную писать код управления объектом Word, мы можем использовать штатные механизмы БСП. Чтобы быстро разобраться в теме, можно изучить алгоритм заполнения Word-макетов при помощи БСП за 3 шага. Проанализируем, как подготовить шаблон для БСП:
В тексте Word-файла мы расставляем специальные теги (параметры) в формате {v ИмяПоля}. Например:
{v ФИОСотрудника} — для простых полей.{v ДатаДокумента ДЛФ=DD} — с указанием формата даты.{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 позволяет найти в тексте заранее подготовленную метку (например, [НомерДок]) и заменить ее на реальное значение. Разработчикам для быстрого поиска подобных решений пригодится справочник по методам БСП с примерами кода.
Проанализируем несколько критических моментов, которые помогут избежать ошибок:
{v Параметр}. Если вы ошиблись и исправили букву внутри тега, Word может разорвать его скрытыми XML-тегами форматирования, и 1С перестанет его "видеть". В таких случаях рекомендуется удалить тег полностью и вписать его заново..docx, изменить логотип или текст договора и загрузить обратно. Если вы работаете с локализованными версиями, обратите внимание на внешние печатные формы для ЗУП Казахстана, которые построены на этих принципах — есть готовая печать кадровых документов по шаблонам Word.Подведем итог: для новых разработок всегда выбирайте двоичные данные и формат .docx. Это обеспечит кроссплатформенность, высокую скорость работы и удобство поддержки. Используйте механизмы БСП для работы с тегами — это сократит объем кода в разы и сделает вашу печатную форму гибкой в настройке.