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

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

Как вывести таблицу значений на печать в 1С

Как вывести таблицу значений (ТЗ) на печать в 1С: вывод в табличный документ через область, построитель отчёта и СКД. Примеры кода, типичные ошибки и проверка результата.

Таблица значений (ТЗ) в 1С — это объект в памяти, который сам по себе не имеет печатной формы. Чтобы вывести её на печать, данные нужно перенести в табличный документ: либо вручную построчным выводом областей макета, либо через встроенные механизмы вроде построителя отчёта и СКД. Выбор способа зависит от того, нужна ли простая «плоская» распечатка или форматированный отчёт с группировками и итогами.

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

Что нужно подготовить перед выводом ТЗ на печать

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

Для ручного вывода потребуется макет типа «Табличный документ». Его создают в конфигураторе: в общих макетах или в макетах конкретного объекта добавляют макет, рисуют в нём области — шапку, строку и подвал. В ячейках, куда подставляются данные, указывают параметры в фигурных скобках, например {Номенклатура}, либо задают свойство «Заполнение» — «Параметр» и имя параметра.

Способ 1: вывод ТЗ через макет и табличный документ

Это универсальный способ, дающий полный контроль над оформлением. Логика такая: получаем макет, выводим шапку один раз, затем в цикле по строкам ТЗ выводим область строки, подставляя значения в параметры, и в конце выводим подвал с итогами.

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

Макет = ПолучитьОбщийМакет("МакетТЗ");

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

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

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

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

ОбластьСтрока.Параметры.Номенклатура = СтрокаТЗ.Номенклатура;

ОбластьСтрока.Параметры.Количество = СтрокаТЗ.Количество;

ОбластьСтрока.Параметры.Сумма = СтрокаТЗ.Сумма;

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

КонецЦикла;

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

ОбластьПодвал.Параметры.ИтогоСумма = ТЗ.Итог("Сумма");

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

ТабДок.Показать("Печать таблицы значений");

Метод ТЗ.Итог("ИмяКолонки") считает сумму по числовой колонке — удобно для подвала. Если нужна нумерация строк, заведите счётчик внутри цикла и выводите его в отдельный параметр. После Показать() пользователь увидит документ и сможет отправить его на принтер стандартной кнопкой печати.

Порядок действий при ручном выводе
  1. 1
    Создайте макет табличного документа с областями Шапка, Строка, Подвал
  2. 2
    В ячейках задайте параметры заполнения с именами, совпадающими с кодом
  3. 3
    В коде получите макет и выведите шапку
  4. 4
    В цикле по строкам ТЗ заполняйте параметры области и выводите её
  5. 5
    Выведите подвал с итогами и вызовите Показать() или Напечатать()

Способ 2: быстрый вывод через построитель отчёта

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

Построитель = Новый ПостроительОтчета;

Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);

Построитель.ЗаполнитьНастройки();

Построитель.Вывести();

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

Способ 3: вывод ТЗ через СКД

Система компоновки данных подходит, когда из одной ТЗ нужны разные варианты печати: группировки, отборы, итоги по уровням. ТЗ подключается к СКД как внешний набор данных через объект КомпоновщикМакетаКомпоновкиДанных и ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент.

В схеме компоновки источником данных выбирают «Объект — таблица значений», описывают поля набора, а в коде при инициализации процессора компоновки передают саму таблицу через структуру внешних наборов:

ВнешниеНаборы = Новый Структура("ТЗ", ТЗ);

ПроцессорВывода.Инициализировать(МакетКомпоновки, ВнешниеНаборы);

ПроцессорВывода.Вывести(ПроцессорКомпоновки);

Этот путь требует больше кода и понимания СКД, поэтому для разовой простой распечатки он избыточен. Его оправдывают задачи, где пользователь должен сам менять настройки отчёта перед печатью.

Сравнение способов вывода ТЗ

Макет + табличный документ

Полный контроль оформления, подходит для официальных печатных форм; требует ручной разметки макета и кода цикла

Построитель отчёта

Минимум кода, быстрый результат; ограниченные возможности оформления

СКД

Гибкие настройки, группировки и итоги; сложнее в реализации, избыточен для простых задач

Печать и сохранение результата

Готовый табличный документ можно не только показать, но и сразу напечатать без предпросмотра: метод ТабДок.Напечатать() отправит его на принтер по умолчанию. Для выбора принтера пользователем предпочтительнее Показать() — там доступен стандартный диалог печати.

Табличный документ также сохраняется в файл методом Записать() с указанием типа файла: ТипФайлаТабличногоДокумента.XLSX, PDF, MXL и другие. Это удобно, когда «печать» на практике означает отправку файла по почте или выгрузку в архив.

Типичные ошибки и как их избежать

Чаще всего проблемы возникают не с выводом, а с данными и макетом. Ниже — ошибки, которые регулярно встречаются при печати ТЗ.

Типичные ошибки
01
Имя параметра в макете не совпадает с именем в коде — параметр остаётся пустым, ячейка выводится без значения
02
Обращение к несуществующей колонке ТЗ — ошибка выполнения; проверяйте состав колонок перед циклом
03
Вывод области Строка вне цикла — печатается только одна строка или пустая форма
04
Попытка напечатать саму ТЗ без табличного документа — у таблицы значений нет метода печати
05
Отсутствие Показать() или Напечатать() — документ сформирован в памяти, но пользователь его не видит

Проверка результата перед печатью

Прежде чем отправлять форму на принтер, убедитесь, что данные выведены корректно. Быстрее всего это сделать визуально по предпросмотру, но полезно и программно сверить количество выведенных строк с числом строк в ТЗ.

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

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

Количество строк в печатной форме
Норма

Совпадает с ТЗ.Количество()

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

Строк меньше — проверяйте цикл и условия вывода

Значения в ячейках
Норма

Данные соответствуют колонкам ТЗ

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

Пустые ячейки — несовпадение имён параметров

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

Сумма равна ТЗ.Итог() по колонке

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

Итог нулевой или не сходится — колонка не числовая или итог считается по другой колонке

Разбиение на страницы
Норма

Строки не обрезаны, шапка читается

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

Колонки уходят за край — настройте масштаб и ориентацию

FAQ

Можно ли напечатать таблицу значений без макета?

Да. Используйте построитель отчёта: он сам формирует табличный документ по составу колонок ТЗ. Оформление будет простым, но для служебной распечатки этого достаточно.

Как вывести на печать только часть строк таблицы значений?

Отфильтруйте ТЗ перед выводом: метод НайтиСтроки() с отбором вернёт массив нужных строк, по которому можно итерироваться, либо скопируйте отобранные строки в новую таблицу через Скопировать() с параметром отбора.

Почему в печатной форме пустые ячейки, хотя в ТЗ данные есть?

Почти всегда причина в несовпадении имён: параметр в макете называется иначе, чем переменная в коде, либо имя колонки ТЗ отличается от ожидаемого. Сверьте имена посимвольно, включая регистр букв.

Как сохранить результат в PDF вместо печати?

Вызовите ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF). Файл будет создан по указанному пути; убедитесь, что у пользователя сеанса есть права на запись в выбранный каталог.

Можно ли вывести ТЗ в уже открытый табличный документ на форме?

Да. Получите объект табличного документа из реквизита формы и выводите области в него тем же кодом. После вывода форма обновится автоматически, вызывать Показать() не нужно.

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

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

Итог

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

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