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

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

Как вывести табличный документ в 1С

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

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

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

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

Что такое табличный документ и где он отображается

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

На управляемой форме табличный документ отображается через элемент формы «Поле табличного документа», связанный с реквизитом. Если реквизита нет или он не выведен на форму, заполненный программно документ пользователь не увидит — это самая частая причина «пустого экрана» у начинающих разработчиков.

Также табличный документ можно сохранить в файл (Excel, PDF, MXL и другие форматы) методом Записать() без визуального вывода — это удобно для регламентных заданий и обмена данными.

Вывод табличного документа на управляемую форму

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

&НаСервере

Процедура СформироватьНаСервере()

Результат.Очистить();

Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("МакетОтчета");

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

ОбластьШапка.Параметры.Период = Период;

Результат.Вывести(ОбластьШапка);

КонецПроцедуры

Обратите внимание на контекст выполнения. На клиенте недоступны запросы к базе и макеты из объекта, поэтому формирование обычно выполняется в серверной процедуре, а клиентская процедура только вызывает её. Если отчёт формируется долго, имеет смысл использовать фоновое выполнение через ДлительныеОперации, чтобы форма не «зависала».

Признак корректной настройки: после выполнения процедуры данные появляются в поле табличного документа без перезапуска формы. Если поле остаётся пустым — проверьте, что реквизит действительно связан с элементом формы и что процедура выполняется без исключений.

Порядок вывода на форму
  1. 1
    Добавьте реквизит формы типа ТабличныйДокумент
  2. 2
    Выведите его на форму элементом Поле табличного документа
  3. 3
    В серверной процедуре очистите реквизит и заполните его областями из макета
  4. 4
    Вызовите серверную процедуру из клиентской команды
  5. 5
    Проверьте, что данные отобразились и документ доступен для прокрутки

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

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

  • Вывести(Область) — добавляет область ниже уже выведенных данных, формируя документ сверху вниз;
  • Присоединить(Область) — добавляет область справа от текущей, что используется для многоколоночных отчётов и перекрёстных таблиц;
  • ВставитьОбласть() — вставляет область в произвольное место, применяется реже, например для итогов в начале документа.
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

Пока Выборка.Следующий() Цикл

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

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

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

КонецЦикла;

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

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

Вывод через СКД: когда макет не нужен вручную

Если отчёт построен на системе компоновки данных, табличный документ формируется автоматически: схема компоновки, настройки и процессор вывода делают всю работу. Разработчику достаточно инициализировать процессор компоновки и вывести результат в реквизит формы.

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки);

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ДанныеРасшифровки);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

ПроцессорВывода.УстановитьДокумент(Результат);

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

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

Способы формирования табличного документа

Ручной вывод областей из макета

Подходит для печатных форм с фиксированным шаблоном. Полный контроль оформления, но любая правка структуры — через код.

СКД с выводом в табличный документ

Подходит для отчётов с пользовательскими настройками. Требует аккуратной работы с настройками и расшифровкой.

Стандартная команда печати БСП

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

Печать и предварительный просмотр

Для показа документа перед печатью без размещения на форме используется метод Показать() — он открывает табличный документ в отдельном окне. Метод Напечатать() отправляет документ на принтер; в режиме РежимИспользованияДиалогаПечати.Использовать пользователю показывается стандартный диалог печати.

ТабДок.Показать("Печатная форма заказа");

// или сразу на печать без диалога:

ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);

Перед печатью проверьте ключевые свойства документа: ОриентацияСтраницы, АвтоМасштаб, РазмерСтраницы и поля. Неверная ориентация или отключённый автомасштаб — типовая причина «обрезанной» при печати широкой таблицы, которая на экране выглядела нормально.

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

Типичные ошибки и как их проверить

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

Типичные ошибки
01
Документ заполнен, но на форме пусто: реквизит не выведен на форму элементом Поле табличного документа или процедура формирования не вызывается
02
Ошибка ПолучитьОбласть: имя области в коде не совпадает с именем в макете, включая регистр и лишние пробелы
03
В строках повторяются данные предыдущей строки: параметры области не очищаются между итерациями цикла
04
При печати таблица обрезана справа: не включён АвтоМасштаб или неверно выбрана ориентация страницы
05
Вызов ПолучитьМакет на клиенте: макеты объекта недоступны в клиентском контексте, формирование нужно перенести на сервер

Отдельно стоит упомянуть работу с объединёнными ячейками и группировками строк. Если в макете используются группировки, а код выводит области в неправильном порядке, структура сворачивания «ломается» — строки сворачиваются не в те группы. Проверяйте порядок вызовов НачатьГруппуСтрок() и ЗакончитьГруппуСтрок(): они должны быть строго парными.

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

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

Отображение на форме
Норма

Документ виден в поле сразу после формирования, доступна прокрутка

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

Поле пустое или показывает старые данные — проверьте очистку и вызов процедуры

Заполнение параметров
Норма

Все ячейки с параметрами содержат актуальные значения

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

Пустые ячейки или значения из предыдущей строки — параметры не заполнены

Печатная форма
Норма

В предпросмотре вся таблица умещается по ширине страницы

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

Колонки обрезаны — включите АвтоМасштаб или смените ориентацию

Имена областей
Норма

Каждая область из кода существует в макете с точным именем

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

Ошибка при ПолучитьОбласть — сверьте имена посимвольно

Сохранение в файл вместо вывода на экран

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

ТабДок.Записать("C:\Отчеты\Остатки.xlsx", ТипФайлаТабличногоДокумента.XLSX);

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

Итог

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

Табличный документ выводится методами Вывести и Присоединить из областей макета либо формируется через СКД, а отображается через реквизит формы, метод Показать или печать. Главные причины проблем: несвязанный реквизит формы, неверные имена областей и незаполненные параметры.

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

Как вывести табличный документ в новом окне без формы?

Используйте метод Показать() — он открывает документ в стандартном окне просмотра с возможностью печати и сохранения. Заголовок окна передаётся параметром метода.

Почему ПолучитьОбласть выдаёт ошибку, хотя область есть в макете?

Имя области в коде должно совпадать с именем в макете посимвольно, включая регистр букв. Также проверьте, что вы запрашиваете область у правильного макета и что область является именной (задана в свойствах строк макета), а не просто диапазоном.

Как вывести табличный документ горизонтально, в несколько колонок?

Используйте метод Присоединить() вместо Вывести(): каждая присоединённая область размещается справа от предыдущей. Так строят перекрёстные отчёты, где количество колонок определяется данными.

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

Заполнить документ простыми данными на клиенте можно, но макеты объектов, запросы и обращения к базе доступны только на сервере. Практически любой реальный отчёт требует серверной процедуры формирования, а клиент лишь инициирует её вызов.

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

Заполните свойство ПовторятьПриПечатиСтроки табличного документа, указав область с шапкой. Дополнительно используйте ПроверитьВывод() при формировании, чтобы контролировать разрывы страниц.

Чем табличный документ отличается от таблицы значений при выводе?

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