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