Разработка и Конфигурация · 13 мин
Как посмотреть табличный документ в отладке 1С
Как посмотреть содержимое табличного документа в отладчике 1С: вывод в файл, внешние обработки, табло, точки останова. Практические приёмы и типичные ошибки.
Табличный документ в 1С — это объект типа «ТабличныйДокумент», который используется для формирования печатных форм, отчётов и макетов. Проблема в том, что при отладке его содержимое нельзя увидеть напрямую в окне «Вычислить выражение»: там отображается только тип объекта и служебные свойства, а не сама таблица с ячейками. Поэтому разработчику нужны обходные приёмы, чтобы понять, что именно сформировалось в документе до его вывода пользователю.
Задача возникает регулярно: печатная форма выводится с ошибкой, область не заполняется, параметры подставляются не те, а код формирования проходит без исключений. Без просмотра промежуточного состояния табличного документа найти причину сложно — приходится гадать, на каком шаге данные «потерялись».
Существует несколько рабочих способов: сохранение документа во временный файл прямо из отладчика, вывод в уже открытую форму, использование внешних инструментов и анализ отдельных областей через коллекцию ячеек. Ниже разобраны все варианты с конкретным кодом и условиями, при которых каждый из них уместен.
Почему табличный документ не виден в отладчике напрямую
Окно «Вычислить выражение» (Shift+F9) и табло показывают значения примитивных типов и свойства объектов, но не умеют визуализировать сложные структуры вроде табличного документа. При попытке вычислить переменную типа «ТабличныйДокумент» вы увидите только строку с названием типа — это нормальное поведение платформы, а не ошибка.
Табличный документ — это по сути структура из областей, ячеек, параметров и оформления. У него нет текстового представления, которое отладчик мог бы показать одной строкой. Поэтому платформа предлагает обходные пути: сериализацию в файл, вывод в элемент формы или построчный доступ к ячейкам через коллекцию областей.
Важно понимать, что ограничение касается только визуализации. Сам объект полностью доступен в отладке: можно смотреть свойства (ВысотаТаблицы, ШиринаТаблицы), обращаться к областям, проверять значения параметров — просто для этого нужны специальные выражения, а не просто имя переменной.
Способ 1. Сохранение документа в файл из окна «Вычислить выражение»
Самый универсальный приём — записать табличный документ во временный файл прямо в момент остановки на точке останова, а затем открыть его в толстом или тонком клиенте 1С. Метод Записать() доступен у объекта «ТабличныйДокумент» и работает в отладчике без ограничений.
Откройте окно «Вычислить выражение» (Shift+F9) и выполните команду, подставив имя своей переменной:
ТабДок.Записать("C:\Temp\otladka.mxl", ТипФайлаТабличногоДокумента.MXL);
После выполнения откройте полученный файл через меню «Файл — Открыть» в любом клиенте 1С — вы увидите документ ровно в том состоянии, в котором он был на момент останова. Формат MXL сохраняет оформление, объединённые ячейки и параметры, поэтому картина будет полной.
- 1Поставьте точку останова после формирования табличного документа
- 2Запустите отладку и дождитесь остановки
- 3Нажмите Shift+F9 и выполните ТабДок.Записать("C:\\Temp\\tab.mxl")
- 4Откройте файл через «Файл — Открыть» в клиенте 1С
- 5Проверьте содержимое областей и параметров
Если каталог C:\Temp недоступен (например, отладка идёт на сервере, где у служебного пользователя нет прав), укажите любой существующий путь с правами записи. При серверной отладке файл создаётся на сервере, а не на вашей машине — это частая причина «пропавших» файлов.
Способ 2. Вывод документа в форму через метод Показать()
Если отладка идёт в клиентском контексте, табличный документ можно открыть визуально прямо из отладчика. Метод Показать() выводит документ в новом окне, и вы сразу видите результат, как его увидел бы пользователь.
ТабДок.Показать("Отладка табличного документа");
Команда работает только в толстом клиенте обычного приложения и в управляемом приложении при наличии клиентского контекста. В серверной процедуре или в фоновом задании Показать() вызовет ошибку — там нет пользовательского интерфейса. Если точка останова стоит в серверном коде, сначала перенесите документ на клиент или используйте запись в файл.
Альтернатива — вывести документ в реквизит формы типа «ТабличныйДокумент», если такой есть в отлаживаемой форме. Например, в типовых отчётах часто есть реквизит «Результат»: присвоив ему значение в отладчике и обновив форму, вы увидите содержимое без дополнительных окон.
Сравнение вариантов
Работает в любом контексте, включая сервер и фоновые задания. Требует доступа к файловой системе и ручного открытия файла.
Мгновенный визуальный результат, но только в клиентском контексте с интерфейсом.
Удобно, когда форма уже открыта; не подходит для модулей объектов и серверных процедур без формы.
Способ 3. Просмотр отдельных ячеек и областей
Когда нужен не весь документ, а конкретное значение, быстрее обратиться к ячейкам напрямую. Табличный документ поддерживает адресацию в стиле R1C1, и любую ячейку можно вычислить в отладчике как выражение.
ТабДок.Область("R3C5").Текст
ТабДок.Область("R1C1:R10C8").Текст
ТабДок.ВысотаТаблицы
ТабДок.ШиринаТаблицы
Такой подход незаменим, когда документ большой, а подозрение падает на одну строку: не нужно сохранять файл и листать его глазами. Свойства ВысотаТаблицы и ШиринаТаблицы помогают быстро понять, сформировался ли документ вообще — пустой документ имеет нулевые или минимальные размеры.
Для анализа параметров макета полезно помнить: если ячейка содержит параметр, который не был заполнен, в тексте ячейки останется шаблон вида [ИмяПараметра] или пустая строка в зависимости от настроек макета. Проверка текста ячейки в отладчике — прямой способ убедиться, что Параметры.Установить() отработал.
Как проверить результат
Больше нуля и соответствует ожидаемому числу строк
Равна 0 или 1 — документ фактически пустой
Содержит реальное значение из данных
Виден шаблон [Параметр] или пусто
Открывается и показывает сформированные области
Файл не создался — нет прав или неверный путь
Способ 4. Отладка через внешние инструменты и обработки
В сообществе 1С распространены внешние обработки-«просмотрщики», которые принимают табличный документ и показывают его в удобном виде. Принцип тот же, что у записи в файл, но без ручных операций: обработка подключается к сеансу отладки и отображает переданный объект.
Если вы работаете с расширенными инструментами разработчика (например, с функцией просмотра значений), проверьте, поддерживает ли ваш инструмент тип «ТабличныйДокумент» — многие консоли кода и инструменты разработчика умеют открывать его одной командой из отладчика. Это ускоряет работу, когда документов много и каждый надо проверить на разных итерациях цикла.
Для конфигураций на управляемых формах удобен приём с временной формой: создаётся простая внешняя обработка с реквизитом «ТабличныйДокумент» на форме, и из отладчика вызывается её открытие с передачей значения. Это требует подготовки, но окупается при регулярной отладке печатных форм.
Если печатная форма формируется в цикле для нескольких документов, поставьте точку останова с условием (например, по номеру документа) — иначе придётся вручную проходить все итерации. Условие задаётся в свойствах точки останова по правому клику.
Отладка на сервере и в фоновых заданиях
Большинство печатных форм в современных конфигурациях формируется в серверных процедурах. Чтобы отладчик останавливался в таком коде, в конфигураторе должна быть включена отладка по протоколу HTTP или TCP и разрешена отладка на сервере (параметр сервера 1С либо флаг в свойствах информационной базы при файловом режиме).
При серверной отладке метод Показать() недоступен, а Записать() создаёт файл на сервере. Если доступа к файловой системе сервера нет, остаётся третий путь: анализ ячеек через выражения или передача документа на клиент. Для передачи на клиент табличный документ можно поместить во временное хранилище, а на клиенте — достать и показать.
Фоновые задания отлаживаются отдельно: в конфигураторе нужно включить автоматическое подключение к фоновым заданиям («Отладка — Подключение»). Без этого точки останова внутри фонового задания просто не сработают, и создастся впечатление, что код не выполняется.
Типичные сценарии и их разбор
Печатная форма пустая у пользователя
Поставьте точку останова сразу после последнего Вывести() или Присоединить(). Проверьте ТабДок.ВысотаТаблицы: если значение больше нуля, документ сформирован, и проблема дальше — в передаче в форму или в настройках печати. Если высота нулевая, смотрите выше по коду: вероятно, выборка данных пуста или условие вывода областей не сработало.
Параметры не подставляются
Вычислите текст конкретной ячейки через Область("R5C2").Текст. Если видите шаблон параметра — метод Параметры.Установить() либо не вызывался, либо имя параметра в коде не совпадает с именем в макете. Имена параметров чувствительны к регистру только в части точного написания, поэтому сверяйте посимвольно.
Документ формируется частично
Сохраняйте документ в файл на разных точках останова: после вывода шапки, после цикла по строкам, после подвала. Сравнение файлов покажет, на каком этапе теряется содержимое. Частая причина — вызов Очистить() внутри общего модуля или повторное создание объекта Новый ТабличныйДокумент в середине кода.
Как выбрать действие
Ограничения и меры предосторожности
Отладка на рабочей базе требует аккуратности. Выполнение произвольных выражений в окне «Вычислить выражение» реально изменяет данные: если случайно выполнить метод Записать() у объекта документа или справочника, изменения попадут в базу. Для просмотра табличного документа это не критично (он обычно не записывается в базу), но привычка выполнять выражения бездумно опасна в целом.
Монопольный режим и зависшие сеансы отладки могут блокировать работу пользователей файловой базы. Завершайте сеанс отладки корректно, не оставляйте остановленный на точке останова сеанс надолго — транзакция, открытая в момент останова, может держать блокировки.
Наконец, помните, что временные MXL-файлы могут содержать персональные данные и коммерческую информацию из печатных форм. Удаляйте их после анализа, особенно если отладка велась на копии рабочей базы с реальными данными.
Что важно запомнить
Содержимое табличного документа в отладчике смотрят тремя путями: запись в MXL-файл через Записать(), вывод в окно через Показать() в клиентском контексте и чтение отдельных ячеек через Область("R1C1").Текст. При серверной отладке файл создаётся на сервере, а Показать() недоступен. Контролируйте ВысотаТаблицы и текст ячеек с параметрами — это быстрый способ найти место сбоя.
Частые вопросы
Почему в «Вычислить выражение» видно только «ТабличныйДокумент» без содержимого?
Отладчик не умеет визуализировать сложные объекты — он показывает только имя типа. Это не означает, что документ пуст. Проверьте свойство ВысотаТаблицы или вычислите текст конкретной ячейки, чтобы убедиться, что содержимое есть.
Как посмотреть табличный документ, если код выполняется на сервере?
Используйте ТабДок.Записать() с путём, доступным на сервере, затем заберите файл. Либо анализируйте ячейки выражениями. Метод Показать() на сервере не работает — там нет пользовательского интерфейса.
Можно ли посмотреть макет, а не сформированный документ?
Да. Макет табличного документа — это тот же объект, его можно сохранить в файл или просмотреть по ячейкам. Кроме того, макет всегда доступен в конфигураторе визуально: откройте нужный макет в дереве конфигурации двойным кликом.
Что делать, если Записать() выдаёт ошибку доступа к файлу?
Проверьте, существует ли каталог и есть ли у пользователя, под которым работает сеанс (или сервер 1С), права на запись. Укажите простой путь вроде C:\Temp на клиенте или каталога временных файлов на сервере. Не используйте сетевые пути без уверенности в правах.
Как отладить формирование печатной формы в фоновом задании?
В конфигураторе откройте «Отладка — Подключение» и включите автоматическое подключение к фоновым заданиям. После этого точки останова внутри фонового задания начнут срабатывать. Учтите, что в фоновом задании недоступны интерактивные методы — только запись в файл или анализ ячеек.
Почему ячейка показывает [ИмяПараметра] вместо значения?
Параметр не был заполнен перед выводом области: либо не вызван Параметры.Установить(), либо имя параметра в коде не совпадает с именем в макете. Сверьте написание посимвольно и убедитесь, что заполнение происходит до метода Вывести() или Присоединить().