Разработка и Конфигурация · 10 мин
Как отобразить табличный документ в 1С
Как вывести табличный документ в 1С: методы Показать(), Вывести(), область, ТабличноеПоле, примеры кода, типичные ошибки и ответы на частые вопросы.
Табличный документ в 1С — универсальный объект для печатных форм, отчётов и предварительного просмотра. Разработчики регулярно сталкиваются с задачей вывести его пользователю: показать в отдельном окне, встроить в форму, открыть для печати или сформировать интерактивный отчёт. Способ вывода зависит от того, где именно должен появиться документ и кто его формирует — код или сам пользователь.
В платформе существует несколько принципиально разных механизмов: метод Показать() объекта ТабличныйДокумент, реквизит формы типа «Табличный документ» с полем отображения, а также стандартная команда печати. Каждый вариант имеет свои условия применения, ограничения и подводные камни, особенно в управляемых формах и при работе в веб-клиенте.
Ниже разобраны рабочие способы отображения табличного документа с примерами кода, критерии выбора между ними, проверка результата и типичные ошибки, из-за которых документ не появляется на экране или выглядит не так, как ожидалось.
Что такое табличный документ и где он отображается
Табличный документ (объект ТабличныйДокумент) — это двумерная таблица с ячейками, в которых могут быть текст, параметры, шаблоны и картинки. Он создаётся программно, заполняется из макета или напрямую, а затем либо выводится пользователю, либо сохраняется в файл, либо отправляется на печать.
Отобразить табличный документ можно тремя основными способами: в отдельном окне просмотра через Показать(), внутри управляемой или обычной формы через специальное поле, а также через стандартный механизм печати, который сам открывает окно предварительного просмотра. Выбор зависит от сценария: разовый просмотр, интерактивная работа с данными или печать.
Как показать табличный документ в отдельном окне
Самый простой способ — метод Показать(). Он открывает документ в стандартном окне просмотра табличного документа, где пользователь может масштабировать, редактировать (если не запрещено), сохранять и печатать содержимое.
Типовая последовательность: создать объект, получить макет, заполнить области и вызвать Показать(). Метод принимает заголовок окна и имя файла для сохранения по умолчанию.
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетОтчета");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = "А-101";
ТабДок.Вывести(ОбластьШапка);
ТабДок.Показать("Печатная форма", "ПечатнаяФорма.mxl");Важный нюанс: в управляемом приложении вызов Показать() из серверной процедуры не сработает — документ нужно сформировать на сервере, вернуть его (например, через временное хранилище или как возвращаемое значение) и показать уже на клиенте. Иначе вы получите либо ошибку, либо «тихое» отсутствие результата.
Если документ не должен редактироваться пользователем, установите свойство ТабДок.ТолькоПросмотр = Истина перед показом. Это защищает печатную форму от случайных изменений.
Как вывести табличный документ в форму
Когда документ должен быть частью интерфейса — например, предпросмотр печатной формы прямо в форме документа или интерактивный отчёт — используется реквизит формы типа «Табличный документ» и элемент формы, связанный с ним.
- 1В конфигураторе откройте форму и добавьте реквизит формы с типом «ТабличныйДокумент», например «Результат».
- 2Перетащите реквизит в дерево элементов формы — платформа создаст поле табличного документа.
- 3В коде формируйте документ в реквизит: Результат.Очистить(), затем Результат.Вывести(Область).
- 4Для управляемой формы формирование выполняйте в серверной процедуре с директивой &НаСервере.
- 5Проверьте отображение: откройте форму и убедитесь, что документ виден и обновляется.
Пример заполнения в управляемой форме:
&НаСервере
Процедура СформироватьНаСервере()
Результат.Очистить();
Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
Область = Макет.ПолучитьОбласть("Строка");
Область.Параметры.Наименование = "Пример";
Результат.Вывести(Область);
КонецПроцедурыДля отчётов на СКД этот механизм работает автоматически: платформа сама создаёт реквизит «Результат» и поле отображения. Для произвольной формы реквизит и поле добавляются вручную.
Отображение без сохранения в реквизит
Если документ большой, а форма открывается часто, хранение его в реквизите формы увеличивает объём передаваемых данных между клиентом и сервером. В таких случаях документ формируют по кнопке «Сформировать», а не при каждом открытии формы.
Как вывести документ из макета: области и параметры
Почти всегда табличный документ строится из макета — заранее подготовленного шаблона с именованными областями. Основные методы: ПолучитьОбласть() — получить область макета, Вывести() — добавить её вниз документа, Присоединить() — добавить справа (например, для вывода в несколько колонок).
Параметры области заполняются через свойство Параметры по имени параметра, заданному в макете. Если параметр в макете объявлен, но не заполнен, в ячейке останется пустое значение; если вы обращаетесь к несуществующему параметру — получите ошибку выполнения.
Для повторяющихся строк (табличная часть, список товаров) область строки получают один раз и выводят в цикле, каждый раз заполняя параметры новыми значениями. Это стандартный приём для всех печатных форм.
Отображение через команду печати
В типовых конфигурациях печатные формы выводятся через подсистему печати: пользователь нажимает кнопку «Печать», выбирает форму, и платформа открывает окно предварительного просмотра. Разработчику достаточно описать процедуру Печать() в модуле менеджера объекта и зарегистрировать команду печати.
Этот способ предпочтителен, когда документ печатается регулярно и нужны стандартные возможности: выбор принтера, количества копий, сохранение в файл, отправка по почте. Самостоятельно вызывать Показать() в этом случае не требуется — окно открывает подсистема.
Сравнение способов отображения
Подходит для разового просмотра и отладки. Ограничение: вызывается только на клиенте, в управляемом приложении требует передачи документа с сервера.
Подходит для встраивания в интерфейс и интерактивной работы. Ограничение: документ хранится в данных формы, что увеличивает трафик клиент-сервер.
Подходит для штатных печатных форм документов и справочников. Ограничение: требует внедрения БСП или аналогичной подсистемы.
Проверка результата и типичные ошибки
После вывода документа проверьте не только сам факт появления окна, но и содержимое: заполнены ли параметры, не обрезан ли текст, корректно ли отображаются границы и шрифты. Часто документ формируется, но выглядит пустым из-за незаполненных параметров или нулевой высоты строк в макете.
Как проверить результат
Документ виден в поле формы, прокручивается, обновляется по кнопке
Поле пустое или показывает старые данные после повторного формирования
Все значения из данных выведены в ячейки
Пустые ячейки или текст вида <ИмяПараметра> вместо значений
Предпросмотр печати совпадает с экранным видом, файл сохраняется
Обрезанные колонки, разрывы строк в неожиданных местах
Ограничения и особенности клиентов
В веб-клиенте и тонком клиенте работа с табличным документом имеет ограничения: не все методы доступны вне сервера, а формирование больших документов лучше выполнять на сервере, чтобы не перегружать клиентское соединение. Методы Вывести() и Присоединить() работают там, где доступен сам объект ТабличныйДокумент, но показ пользователю всегда происходит на клиенте.
Для фонового формирования (например, тяжёлый отчёт) используют длительные операции: документ строится в фоновом задании, помещается во временное хранилище, а по завершении извлекается и отображается. Прямой вызов Показать() из фонового задания невозможен — у него нет пользовательского интерфейса.
Перед выводом большого документа полезно установить ТабДок.АвтоМасштаб = Истина и заполнить параметры страницы (ориентацию, поля) — это избавит пользователя от ручной настройки при печати и снизит число обращений по «обрезанным» формам.
Что важно запомнить
Для быстрого просмотра используйте Показать() на клиенте, для встраивания в форму — реквизит типа «Табличный документ» с полем отображения, для штатных печатных форм — подсистему печати. Формируйте документ на сервере, очищайте перед повторным выводом и проверяйте заполнение параметров.
Частые вопросы
Почему Показать() не открывает окно в управляемой форме?
Скорее всего, вызов выполняется в серверной процедуре. Сформируйте документ на сервере, верните его в клиентскую процедуру (через возвращаемое значение или временное хранилище) и вызовите Показать() уже там.
Как вывести табличный документ в отчёте на СКД?
В отчёте на СКД ничего делать не нужно: платформа автоматически создаёт реквизит «Результат» и поле табличного документа. Достаточно настроить схему компоновки и вариант отчёта — результат выведется сам.
Как запретить редактирование отображённого документа?
Установите свойство ТолькоПросмотр = Истина у объекта ТабличныйДокумент перед показом. Для поля формы аналогичный эффект даёт свойство «Только просмотр» элемента формы.
Можно ли вывести документ в несколько колонок?
Да, методом Присоединить() — он добавляет область справа от уже выведенного содержимого. Так строят, например, этикетки в несколько колонок на листе.
Как сохранить отображённый документ в файл программно?
Используйте метод Записать() с указанием типа файла: ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF). Поддерживаются MXL, Excel, PDF, HTML и другие форматы.
Почему в документе виден текст вида <ИмяПараметра> вместо значения?
Ячейка макета содержит шаблон с параметром, который не был заполнен через Область.Параметры. Проверьте, что имя параметра в коде в точности совпадает с именем в макете, включая регистр букв.