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

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

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

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

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

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

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

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

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

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

Как показать табличный документ в отдельном окне

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

Типовая последовательность: создать объект, получить макет, заполнить области и вызвать Показать(). Метод принимает заголовок окна и имя файла для сохранения по умолчанию.

bsl
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетОтчета");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = "А-101";
ТабДок.Вывести(ОбластьШапка);
ТабДок.Показать("Печатная форма", "ПечатнаяФорма.mxl");

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

Если документ не должен редактироваться пользователем, установите свойство ТабДок.ТолькоПросмотр = Истина перед показом. Это защищает печатную форму от случайных изменений.

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

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

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

Пример заполнения в управляемой форме:

bsl
&НаСервере
Процедура СформироватьНаСервере()
    Результат.Очистить();
    Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
    Область = Макет.ПолучитьОбласть("Строка");
    Область.Параметры.Наименование = "Пример";
    Результат.Вывести(Область);
КонецПроцедуры

Для отчётов на СКД этот механизм работает автоматически: платформа сама создаёт реквизит «Результат» и поле отображения. Для произвольной формы реквизит и поле добавляются вручную.

Отображение без сохранения в реквизит

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

Как вывести документ из макета: области и параметры

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

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

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

Отображение через команду печати

В типовых конфигурациях печатные формы выводятся через подсистему печати: пользователь нажимает кнопку «Печать», выбирает форму, и платформа открывает окно предварительного просмотра. Разработчику достаточно описать процедуру Печать() в модуле менеджера объекта и зарегистрировать команду печати.

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

Сравнение способов отображения

Метод Показать()

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

Реквизит формы + поле

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

Подсистема печати

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

Проверка результата и типичные ошибки

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

Типичные ошибки
01
Вызов Показать() в серверной процедуре управляемой формы — окно не откроется, документ нужно вернуть на клиент.
02
Реквизит формы создан, но не связан с элементом формы — документ заполняется, однако на экране его не видно.
03
Имя области в ПолучитьОбласть() не совпадает с именем в макете — возникает ошибка, формирование прерывается.
04
Документ не очищен перед повторным формированием — новые данные добавляются к старым, таблица дублируется.
05
Автомасштаб отключён, а ширина колонок макета не влезает в страницу — при печати документ обрезается.
Контрольные точки

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

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

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

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

Поле пустое или показывает старые данные после повторного формирования

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

Все значения из данных выведены в ячейки

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

Пустые ячейки или текст вида <ИмяПараметра> вместо значений

Печать и сохранение
Норма

Предпросмотр печати совпадает с экранным видом, файл сохраняется

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

Обрезанные колонки, разрывы строк в неожиданных местах

Ограничения и особенности клиентов

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

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

Перед выводом большого документа полезно установить ТабДок.АвтоМасштаб = Истина и заполнить параметры страницы (ориентацию, поля) — это избавит пользователя от ручной настройки при печати и снизит число обращений по «обрезанным» формам.
ПЗ
Практическое замечание
Итог

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

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

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

Почему Показать() не открывает окно в управляемой форме?

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

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

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

Как запретить редактирование отображённого документа?

Установите свойство ТолькоПросмотр = Истина у объекта ТабличныйДокумент перед показом. Для поля формы аналогичный эффект даёт свойство «Только просмотр» элемента формы.

Можно ли вывести документ в несколько колонок?

Да, методом Присоединить() — он добавляет область справа от уже выведенного содержимого. Так строят, например, этикетки в несколько колонок на листе.

Как сохранить отображённый документ в файл программно?

Используйте метод Записать() с указанием типа файла: ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF). Поддерживаются MXL, Excel, PDF, HTML и другие форматы.

Почему в документе виден текст вида <ИмяПараметра> вместо значения?

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