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

Разработка и Конфигурация · 10 мин

Как вывести таблицу в макете 1С

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

Вывод данных в макет — базовая задача при создании печатных форм и отчётов в 1С. Макет типа «Табличный документ» служит шаблоном: разработчик заранее размечает области, ячейки и параметры, а программный код заполняет их данными и формирует готовый документ для печати или просмотра.

Механизм одинаково работает в управляемых и обычных формах, вне зависимости от конфигурации — будь то «Управление торговлей», «Бухгалтерия» или самописное решение. Различия касаются только контекста вызова: на клиенте или на сервере.

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

Создание макета табличного документа

Макет создаётся в конфигураторе. Откройте нужный объект (документ, справочник, обработку или отчёт), перейдите на вкладку «Макеты» и нажмите «Добавить». В мастере выберите тип «Табличный документ» и задайте имя, например «МакетПечати». Общие макеты для нескольких объектов создаются в ветке «Общие — Макеты».

После создания откроется редактор, внешне похожий на электронную таблицу. В ячейках вводится текст, оформление (шрифт, границы, цвет) настраивается через свойства ячейки или панель форматирования. Этот шаблон останется неизменным — данные в него подставятся программно.

Для печатных форм документов удобно пользоваться конструктором печати: меню «Конструкторы — Конструктор печати» автоматически создаст макет с областями «Шапка», «Строка» и «Подвал» и сгенерирует процедуру вывода. Её затем можно доработать вручную.

Разметка областей и параметров

Выделите строки, которые должны образовать область, и задайте имя через меню «Таблица — Имена — Назначить имя» либо в поле имени слева от строки формул. Стандартный набор для таблицы: «Шапка» (заголовки колонок), «Строка» (повторяющаяся строка данных), «Подвал» (итоги).

Чтобы ячейка принимала данные из кода, её содержимое оформляется как параметр: в свойстве ячейки «Заполнение» выберите «Параметр», а в тексте укажите имя в квадратных скобках, например [Номенклатура]. Если нужно вывести и текст, и параметр вместе («Товар: [Номенклатура]»), используйте заполнение «Шаблон».

Имена параметров чувствительны к регистру букв при обращении из кода и не должны содержать пробелов. Опечатка в имени — самая частая причина пустых ячеек в готовом документе.

Программный вывод: ПолучитьМакет, ПолучитьОбласть, Вывести

Вывод строится по одной схеме: создаётся объект «ТабличныйДокумент», из макета последовательно берутся области, их параметры заполняются данными, и области выводятся в документ. Пример для печати табличной части документа:

ТабДок = Новый ТабличныйДокумент;

Макет = ЭтотОбъект.ПолучитьМакет("МакетПечати");

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");

ОбластьШапка.Параметры.НомерДокумента = Номер;

ОбластьШапка.Параметры.ДатаДокумента = Формат(Дата, "ДЛФ=D");

ТабДок.Вывести(ОбластьШапка);

ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

Для Каждого СтрокаТЧ Из Товары Цикл

ОбластьСтрока.Параметры.Заполнить(СтрокаТЧ);

ТабДок.Вывести(ОбластьСтрока);

КонецЦикла;

Метод Параметры.Заполнить() удобен тем, что автоматически сопоставляет параметры макета с одноимёнными полями источника данных — строки табличной части или выборки запроса. Это сокращает код и снижает риск рассинхронизации имён.

Если макет общий, его получают иначе: ПолучитьОбщийМакет("ИмяМакета"). В модуле менеджера объекта макет получают через Документы.РеализацияТоваровУслуг.ПолучитьМакет("МакетПечати").

Порядок вывода таблицы в макет
  1. 1
    Создайте макет типа «Табличный документ» у объекта или в общих макетах
  2. 2
    Разметьте области «Шапка», «Строка», «Подвал» и задайте параметры ячеек
  3. 3
    В коде создайте ТабличныйДокумент и получите макет через ПолучитьМакет()
  4. 4
    Получите области методом ПолучитьОбласть() и заполните параметры
  5. 5
    Выведите области методом Вывести(), строки — в цикле по данным
  6. 6
    Покажите результат методом Показать() или верните в печатную форму

Вывод колонок: метод Присоединить

Метод Вывести() добавляет область вниз. Когда таблица строится по горизонтали — например, колонки соответствуют датам или складам — используется Присоединить(): область добавляется справа от уже выведенного фрагмента.

ТабДок.Вывести(ОбластьШапкаСтрока);

Для Каждого Колонка Из Колонки Цикл

ОбластьЯчейка.Параметры.Значение = Колонка.Значение;

ТабДок.Присоединить(ОбластьЯчейка);

КонецЦикла;

Типовой сценарий: сначала выводится область с названием строки, затем в цикле присоединяются ячейки по каждой колонке. Важно, чтобы высота присоединяемой области совпадала с высотой уже выведенной, иначе строки «поедут».

Вывести или Присоединить

Вывести()

Добавляет область ниже. Подходит для строк таблицы, шапки, подвала — стандартный вертикальный вывод.

Присоединить()

Добавляет область справа от последней выведенной. Нужен для динамического числа колонок: периоды, склады, точки.

ВставитьОбласть()

Вставляет область внутрь существующего документа со сдвигом. Используется редко, для сложной перекрёстной компоновки.

Проверка результата и вывод на экран

После формирования документ показывают пользователю методом ТабДок.Показать("Печать документа") либо возвращают из функции печати в типовой подсистеме «Печать» (БСП), где вывод и предпросмотр выполняются автоматически.

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

Для отладки удобно выводить промежуточный ТабДок после каждого этапа: сначала только шапку, потом добавить строки. Так проще локализовать, на каком шаге теряются данные.

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

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

Ячейки с параметрами
Норма

Все значения подставлены, пустых параметров нет

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

Пустые ячейки или текст [ИмяПараметра] в готовом документе

Число строк
Норма

Строк в документе столько же, сколько в источнике данных

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

Строки дублируются или пропущены

Итоги в подвале
Норма

Сумма по колонке равна итогу источника

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

Итог не сходится или равен нулю

Типичные ошибки и ограничения

Ошибка «Область не найдена» возникает, когда имя в ПолучитьОбласть() не совпадает с именованной областью макета — проверьте, что область назначена именно на строки, а не на отдельные ячейки. Пустые значения при корректном коде чаще всего означают, что ячейке задано заполнение «Текст» вместо «Параметр» или «Шаблон».

При работе в управляемом приложении формирование табличного документа выполняйте на сервере: объект «ТабличныйДокумент» и макеты недоступны в тонком клиентском контексте формы. Передавайте готовый документ на клиент для показа.

Учтите и ограничение производительности: при выводе тысяч строк табличный документ формируется заметно дольше и потребляет память. Для больших выгрузок рассмотрите построчную запись через объект «ЗаписьТабличногоДокумента» или выгрузку в Excel.

Типичные ошибки
01
Заполнение ячейки оставлено «Текст» — параметр не подставляется, в документе виден литерал [Имя]
02
Имя области в коде не совпадает с именем в макете — ошибка «Область не найдена»
03
Параметры заполняются после Вывести() — область уже выведена с пустыми значениями
04
Формирование выполняется на клиенте в управляемом приложении — недоступность ТабличныйДокумент
05
При Присоединить() высота областей различается — строки таблицы съезжают

Альтернативы: СКД и внешние печатные формы

Если задача — отчёт, а не строго регламентированная печатная форма, макет табличного документа часто избыточен. Система компоновки данных (СКД) строит таблицу по запросу без ручного вывода областей и даёт пользователю настройки группировок и отборов.

Для печатных форм, которые нужно менять без доработки конфигурации, подходят внешние печатные формы (для конфигураций на БСП) — обработка с экспортной функцией Печать(), возвращающей табличный документ. Шаблоны Word и Excel также поддерживаются как тип макета, если документ должен открываться в офисном пакете для ручной правки.

Итог

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

Вывод таблицы в макет — это цикл «макет → область → параметры → Вывести()». Корректные имена областей и параметров, заполнение «Параметр»/«Шаблон» у ячеек и серверный контекст выполнения решают 90% проблем с пустым или ошибочным результатом.

Частые вопросы

Как вывести номер строки в макете?

Добавьте в область «Строка» параметр [НомерСтроки] и в цикле присваивайте его вручную через переменную-счётчик либо используйте свойство СтрокаТЧ.НомерСтроки табличной части — метод Параметры.Заполнить() подхватит его автоматически.

Почему в готовом документе виден текст [ИмяПараметра]?

Ячейке задано заполнение «Текст», и платформа воспринимает скобки как обычную надпись. Откройте свойства ячейки в макете и смените «Заполнение» на «Параметр» или «Шаблон».

Как повторять шапку таблицы на каждой странице?

Выделите строки шапки в готовом табличном документе или задайте в макете свойство области: «Таблица — Настройка печати — Повторять при печати». Программно это свойство ПовторятьПриПечатиСтроки у объекта ТабличныйДокумент.

Можно ли вывести макет в управляемой форме?

Да, но формирование выполняется в серверной процедуре, а готовый ТабличныйДокумент передаётся на клиент и показывается через Показать() или помещается в реквизит формы типа «ТабличныйДокумент».

Чем макет табличного документа отличается от макета СКД?

Макет табличного документа — статичный шаблон с областями, который заполняется кодом вручную. Макет СКД описывает структуру отчёта для компоновщика: платформа сама выводит группировки и ресурсы по настройкам пользователя.

Как вывести таблицу без изменения конфигурации?

Используйте внешнюю печатную форму (внешнюю обработку с функцией Печать) или расширение конфигурации. Оба способа добавляют свой макет и код, не затрагивая типовую поставку и не мешая обновлениям.