Документы и Печать · 9 мин
Как вывести таблицу значений на печать в 1С
Как вывести таблицу значений (ТЗ) на печать в 1С: вывод в табличный документ через область, построитель отчёта и СКД. Примеры кода, типичные ошибки и проверка результата.
Таблица значений (ТЗ) в 1С — это объект в памяти, который сам по себе не имеет печатной формы. Чтобы вывести её на печать, данные нужно перенести в табличный документ: либо вручную построчным выводом областей макета, либо через встроенные механизмы вроде построителя отчёта и СКД. Выбор способа зависит от того, нужна ли простая «плоская» распечатка или форматированный отчёт с группировками и итогами.
Ниже разобраны три рабочих подхода с примерами кода: вывод через макет и табличный документ, быстрый вывод через построитель отчёта и вариант с системой компоновки данных. Отдельно описаны проверка результата, типичные ошибки и ограничения каждого метода.
Что нужно подготовить перед выводом ТЗ на печать
Перед написанием кода убедитесь, что таблица значений заполнена и содержит нужные колонки. Проверить состав колонок можно в отладчике или программно через коллекцию ТЗ.Колонки — у каждой колонки есть имя и тип, которые понадобятся при обращении к значениям строк.
Для ручного вывода потребуется макет типа «Табличный документ». Его создают в конфигураторе: в общих макетах или в макетах конкретного объекта добавляют макет, рисуют в нём области — шапку, строку и подвал. В ячейках, куда подставляются данные, указывают параметры в фигурных скобках, например {Номенклатура}, либо задают свойство «Заполнение» — «Параметр» и имя параметра.
Способ 1: вывод ТЗ через макет и табличный документ
Это универсальный способ, дающий полный контроль над оформлением. Логика такая: получаем макет, выводим шапку один раз, затем в цикле по строкам ТЗ выводим область строки, подставляя значения в параметры, и в конце выводим подвал с итогами.
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьОбщийМакет("МакетТЗ");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(ОбластьШапка);
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Для Каждого СтрокаТЗ Из ТЗ Цикл
ОбластьСтрока.Параметры.Номенклатура = СтрокаТЗ.Номенклатура;
ОбластьСтрока.Параметры.Количество = СтрокаТЗ.Количество;
ОбластьСтрока.Параметры.Сумма = СтрокаТЗ.Сумма;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьПодвал.Параметры.ИтогоСумма = ТЗ.Итог("Сумма");
ТабДок.Вывести(ОбластьПодвал);
ТабДок.Показать("Печать таблицы значений");
Метод ТЗ.Итог("ИмяКолонки") считает сумму по числовой колонке — удобно для подвала. Если нужна нумерация строк, заведите счётчик внутри цикла и выводите его в отдельный параметр. После Показать() пользователь увидит документ и сможет отправить его на принтер стандартной кнопкой печати.
- 1Создайте макет табличного документа с областями Шапка, Строка, Подвал
- 2В ячейках задайте параметры заполнения с именами, совпадающими с кодом
- 3В коде получите макет и выведите шапку
- 4В цикле по строкам ТЗ заполняйте параметры области и выводите её
- 5Выведите подвал с итогами и вызовите Показать() или Напечатать()
Способ 2: быстрый вывод через построитель отчёта
Если оформление не критично и нужно быстро распечатать содержимое ТЗ «как есть», подойдёт построитель отчёта. Он сам сформирует табличный документ с колонками по составу ТЗ, без создания макета вручную.
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);
Построитель.ЗаполнитьНастройки();
Построитель.Вывести();
Метод Вывести() без параметров покажет результат в новом окне. Если нужно вывести в уже существующий табличный документ, передайте его первым аргументом: Построитель.Вывести(ТабДок). Ограничение способа — простое оформление: заголовки колонок берутся из имён или представлений колонок ТЗ, а тонкая настройка ширины и шрифтов требует дополнительной работы с настройками построителя.
Способ 3: вывод ТЗ через СКД
Система компоновки данных подходит, когда из одной ТЗ нужны разные варианты печати: группировки, отборы, итоги по уровням. ТЗ подключается к СКД как внешний набор данных через объект КомпоновщикМакетаКомпоновкиДанных и ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент.
В схеме компоновки источником данных выбирают «Объект — таблица значений», описывают поля набора, а в коде при инициализации процессора компоновки передают саму таблицу через структуру внешних наборов:
ВнешниеНаборы = Новый Структура("ТЗ", ТЗ);
ПроцессорВывода.Инициализировать(МакетКомпоновки, ВнешниеНаборы);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Этот путь требует больше кода и понимания СКД, поэтому для разовой простой распечатки он избыточен. Его оправдывают задачи, где пользователь должен сам менять настройки отчёта перед печатью.
Сравнение способов вывода ТЗ
Полный контроль оформления, подходит для официальных печатных форм; требует ручной разметки макета и кода цикла
Минимум кода, быстрый результат; ограниченные возможности оформления
Гибкие настройки, группировки и итоги; сложнее в реализации, избыточен для простых задач
Печать и сохранение результата
Готовый табличный документ можно не только показать, но и сразу напечатать без предпросмотра: метод ТабДок.Напечатать() отправит его на принтер по умолчанию. Для выбора принтера пользователем предпочтительнее Показать() — там доступен стандартный диалог печати.
Табличный документ также сохраняется в файл методом Записать() с указанием типа файла: ТипФайлаТабличногоДокумента.XLSX, PDF, MXL и другие. Это удобно, когда «печать» на практике означает отправку файла по почте или выгрузку в архив.
Типичные ошибки и как их избежать
Чаще всего проблемы возникают не с выводом, а с данными и макетом. Ниже — ошибки, которые регулярно встречаются при печати ТЗ.
Проверка результата перед печатью
Прежде чем отправлять форму на принтер, убедитесь, что данные выведены корректно. Быстрее всего это сделать визуально по предпросмотру, но полезно и программно сверить количество выведенных строк с числом строк в ТЗ.
Как проверить результат
Совпадает с ТЗ.Количество()
Строк меньше — проверяйте цикл и условия вывода
Данные соответствуют колонкам ТЗ
Пустые ячейки — несовпадение имён параметров
Сумма равна ТЗ.Итог() по колонке
Итог нулевой или не сходится — колонка не числовая или итог считается по другой колонке
Строки не обрезаны, шапка читается
Колонки уходят за край — настройте масштаб и ориентацию
FAQ
Можно ли напечатать таблицу значений без макета?
Да. Используйте построитель отчёта: он сам формирует табличный документ по составу колонок ТЗ. Оформление будет простым, но для служебной распечатки этого достаточно.
Как вывести на печать только часть строк таблицы значений?
Отфильтруйте ТЗ перед выводом: метод НайтиСтроки() с отбором вернёт массив нужных строк, по которому можно итерироваться, либо скопируйте отобранные строки в новую таблицу через Скопировать() с параметром отбора.
Почему в печатной форме пустые ячейки, хотя в ТЗ данные есть?
Почти всегда причина в несовпадении имён: параметр в макете называется иначе, чем переменная в коде, либо имя колонки ТЗ отличается от ожидаемого. Сверьте имена посимвольно, включая регистр букв.
Как сохранить результат в PDF вместо печати?
Вызовите ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF). Файл будет создан по указанному пути; убедитесь, что у пользователя сеанса есть права на запись в выбранный каталог.
Можно ли вывести ТЗ в уже открытый табличный документ на форме?
Да. Получите объект табличного документа из реквизита формы и выводите области в него тем же кодом. После вывода форма обновится автоматически, вызывать Показать() не нужно.
Что делать, если строк много и формирование тормозит?
Выводите результат порциями и отключайте перерисовку, если вывод идёт в элемент формы. Для очень больших объёмов рассмотрите СКД или выгрузку в файл вместо интерактивного показа — построчный вывод десятков тысяч областей заметно нагружает клиент.
Что важно запомнить
Таблица значений печатается только через табличный документ: вручную областями макета для точного оформления, построителем отчёта для быстрой распечатки или СКД для отчётов с настройками. Проверяйте совпадение имён параметров и колонок, настройки страницы и наличие вызова Показать() или Напечатать().