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

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

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

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

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

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

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

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

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

Важно понимать разницу между формированием и показом. Формирование — это заполнение документа методами Вывести() и Присоединить(). Показ — отдельный шаг, который открывает документ пользователю. Пока метод Показать() не вызван, пользователь ничего не видит, даже если документ полностью готов.

Базовый способ: метод Показать()

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

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

Макет = ПолучитьМакет("МакетПечати");

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

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

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

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

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

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

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

&НаКлиенте

Процедура ПечатьНажатие(Команда)

ТабДок = СформироватьПечатнуюФормуНаСервере();

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

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

&НаСервере

Функция СформироватьПечатнуюФормуНаСервере()

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

// заполнение документа из макета

Возврат ТабДок;

КонецФункции

Объект ТабличныйДокумент сериализуется и корректно передаётся с сервера на клиент, поэтому такой код работает. Однако при больших документах передача занимает время и нагружает канал — для массовой печати лучше использовать механизм печати БСП, где эта логика уже оптимизирована.

Альтернатива: реквизит формы вместо Показать()

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

Порядок действий
  1. 1
    Создайте объект: ТабДок = Новый ТабличныйДокумент
  2. 2
    Заполните его областями из макета через Вывести() и Присоединить()
  3. 3
    Убедитесь, что код показа выполняется на клиенте
  4. 4
    Вызовите ТабДок.Показать("Заголовок окна")
  5. 5
    Проверьте, что окно открылось с нужным заголовком и содержимым

Вывод через механизм печати БСП

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

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

Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм,

ОбъектыПечати, ПараметрыВывода) Экспорт

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

// заполнение табличного документа

УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(

КоллекцияПечатныхФорм, "Акт", "Акт выполненных работ", ТабДок);

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

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

Сравнение вариантов

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

Подходит для простых форм и быстрых решений; требует ручной обработки клиентского контекста

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

Документ встроен в форму; не подходит, если нужно отдельное окно предпросмотра

Механизм печати БСП

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

Печать без предпросмотра

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

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

Перед печатью без предпросмотра убедитесь, что корректно настроены свойства документа: АвтоМасштаб, ОриентацияСтраницы, ПолеСлева и другие параметры страницы. Иначе документ может распечататься обрезанным или не влезть на лист. Метод Напечатать(), как и Показать(), вызывается только на клиенте.

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

После вызова Показать() проверьте: окно открылось с заданным заголовком, документ содержит все ожидаемые области, разрывы страниц расположены корректно (это видно в режиме разметки страниц). Если окно не появляется, чаще всего причина в контексте выполнения или в пустом документе.

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

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

Окно предпросмотра
Норма

Открылось с заданным заголовком и содержимым

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

Окно не появляется или появляется пустое

Содержимое документа
Норма

Все области макета выведены, параметры заполнены

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

Пропущены секции, видны незаменённые параметры

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

Разрывы логичны, таблицы не разорваны посередине строки

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

Строки разрезаны между страницами, поля обрезаны

FAQ

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

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

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

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

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

Установите свойство ТабДок.ТолькоПросмотр = Истина перед вызовом Показать(). Дополнительно можно задать ТабДок.Защита = Истина, чтобы ограничить изменение ячеек.

Почему Показать() не работает в тонком клиенте?

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

Как сохранить документ в файл вместо показа?

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

Итог

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

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