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