К статье
Практический материал

Документы и Печать · 9 мин

Как заполнить таблицу в Word из 1С

Как заполнить таблицу в Word из 1С: макеты, табличные документы, COM-соединение, готовый код и типичные ошибки при выводе данных в документ Word.

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

Самый надёжный путь для типовых конфигураций — использовать штатный механизм печати: 1С формирует табличный документ, который затем сохраняется в формате .docx одной командой. Если требуется заполнить именно готовый файл Word с фирменным бланком, закладками и сложной вёрсткой, применяют COM-соединение с объектной моделью Word. Оба подхода рабочие, но у них разные требования к окружению и разные ограничения.

Как выбрать способ вывода таблицы в Word

Прежде чем писать код, определите, что именно требуется на выходе. Если достаточно документа, который выглядит как печатная форма 1С и открывается в Word, подойдёт сохранение табличного документа в формат .docx — это работает без установленного Word на сервере и без дополнительных прав. Если нужен строго определённый шаблон с логотипом, колонтитулами и согласованной вёрсткой, потребуется макет типа ActiveDocument или COM-автоматизация.

Второй критерий — где выполняется код. В клиент-серверном варианте COM-объект Word создаётся на том компьютере, где выполняется код: если вызов идёт на сервере, Word должен быть установлен на сервере, что на практике нежелательно и часто запрещено политиками. Поэтому COM-автоматизацию обычно выполняют на клиенте или заменяют на макеты ActiveDocument, которые обрабатываются платформой без установленного Word.

Маршрут решения

Как выбрать действие

Нужна простая печатная форма, открываемая в WordСформируйте табличный документ и сохраните его в формате .docx
Нужен строгий корпоративный шаблон WordИспользуйте макет типа ActiveDocument с областями и параметрами
Требуется сложная логика заполнения закладок на клиентеПрименяйте COM-объект Word.Application только на клиентском компьютере
Код должен работать на сервере без установленного WordОткажитесь от COM и используйте табличный документ или ActiveDocument

Заполнение таблицы через макет табличного документа

Базовый сценарий: в конфигурации создаётся макет типа «Табличный документ», в котором рисуются области — шапка, строка таблицы, подвал. Ячейки, куда подставляются данные, оформляются как параметры (в свойствах ячейки «Заполнение» — «Параметр»). Затем код обходит выборку данных и для каждой строки выводит область «Строка», заполняя параметры значениями.

Типовой фрагмент кода выглядит так: получаем макет, получаем области, в цикле по выборке заполняем параметры строки и выводим область в результирующий табличный документ. После цикла выводится подвал с итогами. Готовый табличный документ можно показать пользователю или сразу сохранить.

bsl
Макет = ПолучитьМакет("МакетСпецификации");
ТабДок = Новый ТабличныйДокумент;
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ТабДок.Вывести(ОбластьШапка);
Для Каждого СтрокаТовары Из Товары Цикл
    ОбластьСтрока.Параметры.Номенклатура = СтрокаТовары.Номенклатура;
    ОбластьСтрока.Параметры.Количество = СтрокаТовары.Количество;
    ОбластьСтрока.Параметры.Цена = СтрокаТовары.Цена;
    ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
ТабДок.Записать("C:\Temp\Спецификация.docx", ТипФайлаТабличногоДокумента.DOCX);

Метод Записать с типом файла DOCX сохраняет табличный документ как файл Word. Таблица в результате сохраняет границы, ширину колонок и форматирование ячеек, заданные в макете. Учтите, что сложные элементы (например, объединённые ячейки нестандартной формы) при конвертации могут выглядеть иначе — проверяйте результат на реальном шаблоне.

Использование макета ActiveDocument

Макет типа ActiveDocument позволяет взять готовый файл Word как основу и подставлять данные прямо в него. Макет загружается в конфигурацию, в коде создаётся объект, который работает с этим шаблоном: области и параметры определяются по структуре документа Word. Это удобно для договоров, где юристы согласовали точный текст и вёрстку.

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

Заполнение шаблона Word через COM-объект

COM-автоматизация даёт максимальный контроль: открывается реальный Word, в шаблоне расставлены закладки (Bookmarks), код находит каждую закладку и вставляет текст или строки таблицы. Шаблон готовится заранее: в Word через «Вставка → Закладка» размечаются места подстановки, а таблица для заполнения создаётся с одной строкой-образцом.

Типовая последовательность: создать объект Word.Application, открыть копию шаблона, перебрать закладки и заполнить их, затем для таблицы добавлять строки методом Rows.Add и писать значения в ячейки Cell(строка, колонка). В конце документ сохраняется под новым именем, а Word закрывается. Обязательно завершайте процесс Word в коде, иначе на компьютере накапливаются «висшие» процессы WINWORD.EXE.

Проверка результата и типичные ошибки

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

Частая причина сбоев — различие имён параметров в макете и в коде: платформа не всегда сообщает об этом явно, параметр просто остаётся пустым. Вторая типичная проблема — передача ссылочных значений (номенклатура, контрагент) напрямую: в документ попадёт представление ссылки, что не всегда совпадает с нужным текстом. Явно приводите значения к строке или выбирайте нужные реквизиты.

Типичные ошибки
01
Опечатка в имени параметра макета — ячейка в Word остаётся пустой без сообщения об ошибке
02
Передача неформатированных чисел и дат — в документе появляются значения вида 100000 или дата с временем
03
COM-вызов на сервере без установленного Word — код падает с ошибкой создания объекта
04
Незакрытый Word.Application — накапливаются процессы WINWORD.EXE и блокируются файлы
05
Изменение шаблона без обновления макета — параметры перестают находиться

Контрольные точки результата

Контрольные точки

Как проверить результат

Открытие файла в Word
Норма

Документ открывается без предупреждений о повреждении

Тревожный признак

Word сообщает о нечитаемом содержимом — файл формировался с ошибкой записи

Заполнение таблицы
Норма

Число строк совпадает с числом строк данных в 1С

Тревожный признак

Строк меньше или больше — ошибка в цикле вывода

Формат чисел и дат
Норма

Разделители разрядов и даты в привычном виде

Тревожный признак

Числа без форматирования, даты со временем

Вёрстка таблицы
Норма

Таблица помещается в поля страницы

Тревожный признак

Таблица выходит за поля или колонки сжаты

FAQ

Можно ли заполнить таблицу Word без программирования?

Частично да. Сформируйте нужные данные в табличном документе 1С (например, через отчёт или печатную форму), сохраните его в формате .docx через «Файл → Сохранить как» и при необходимости перенесите таблицу в свой шаблон копированием. Для разовых задач этого достаточно.

Почему после сохранения в .docx таблица выглядит иначе, чем в 1С?

Конвертация табличного документа в формат Word не гарантирует стопроцентного совпадения вёрстки: по-разному интерпретируются объединённые ячейки, отступы и шрифты. Задавайте в макете фиксированную ширину колонок и проверяйте результат на реальных данных, упрощая проблемные элементы макета.

Как вывести в Word таблицу с заранее неизвестным числом строк?

В макете табличного документа создайте область «Строка» и выводите её в цикле по выборке — число строк определится автоматически. При COM-подходе добавляйте строки методом Rows.Add внутри цикла. В макете ActiveDocument динамические таблицы требуют отдельной области строки и аккуратной настройки.

Работает ли COM-заполнение Word в веб-клиенте 1С?

Нет, создание COM-объектов в веб-клиенте недоступно. Для веб-клиента используйте серверное формирование табличного документа с сохранением в .docx либо макет ActiveDocument, а готовый файл передавайте пользователю для скачивания.

Что делать, если параметр в макете не заполняется?

Проверьте, что у ячейки в свойствах установлено «Заполнение — Параметр», имя параметра в макете и в коде совпадает посимвольно, а выводимая область — именно та, где объявлен параметр. Также убедитесь, что параметру присваивается значение до вывода области, а не после.

Итог

Что важно запомнить

Для простых форм достаточно табличного документа с сохранением в .docx, для строгих шаблонов — макет ActiveDocument, для сложной логики на клиенте — COM-объект Word. Форматируйте значения до подстановки, проверяйте имена параметров и всегда закрывайте процесс Word после COM-вызова.