Документы и Печать · 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.
Как выбрать действие
Заполнение таблицы через макет табличного документа
Базовый сценарий: в конфигурации создаётся макет типа «Табличный документ», в котором рисуются области — шапка, строка таблицы, подвал. Ячейки, куда подставляются данные, оформляются как параметры (в свойствах ячейки «Заполнение» — «Параметр»). Затем код обходит выборку данных и для каждой строки выводит область «Строка», заполняя параметры значениями.
Типовой фрагмент кода выглядит так: получаем макет, получаем области, в цикле по выборке заполняем параметры строки и выводим область в результирующий табличный документ. После цикла выводится подвал с итогами. Готовый табличный документ можно показать пользователю или сразу сохранить.
Макет = ПолучитьМакет("МакетСпецификации");
ТабДок = Новый ТабличныйДокумент;
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ТабДок.Вывести(ОбластьШапка);
Для Каждого СтрокаТовары Из Товары Цикл
ОбластьСтрока.Параметры.Номенклатура = СтрокаТовары.Номенклатура;
ОбластьСтрока.Параметры.Количество = СтрокаТовары.Количество;
ОбластьСтрока.Параметры.Цена = СтрокаТовары.Цена;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
ТабДок.Записать("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С, поэтому форматируйте значения функцией Формат до подстановки), не «разъехалась» ли таблица по ширине страницы. Для ширины таблицы в макете табличного документа задавайте фиксированную ширину колонок.
Частая причина сбоев — различие имён параметров в макете и в коде: платформа не всегда сообщает об этом явно, параметр просто остаётся пустым. Вторая типичная проблема — передача ссылочных значений (номенклатура, контрагент) напрямую: в документ попадёт представление ссылки, что не всегда совпадает с нужным текстом. Явно приводите значения к строке или выбирайте нужные реквизиты.
Контрольные точки результата
Как проверить результат
Документ открывается без предупреждений о повреждении
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-вызова.