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

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

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

Способы просмотра таблицы значений в отладчике 1С: Табло, Вычислить выражение, F2, вывод в сообщение. Разбор ошибок, ограничений и частых вопросов.

Таблица значений — один из самых частых типов данных в коде 1С: результаты запросов, промежуточные расчёты, загрузка данных из файлов. При этом в отладчике она не раскрывается «сама собой», как массив или структура, и начинающие разработчики часто теряются, видя в окне переменных только надпись «ТаблицаЗначений» без содержимого.

На самом деле платформа даёт несколько рабочих способов заглянуть внутрь таблицы: через команду «Вычислить выражение», через Табло, через показ коллекции и даже через временный вывод содержимого в сообщение. Каждый способ имеет свои ограничения — где-то не видны типы колонок, где-то неудобно смотреть большие таблицы, а где-то требуется остановка в нужной точке кода.

Ниже разобраны все практические приёмы просмотра таблицы значений в отладчике: от базового сценария «остановился на точке останова — открыл таблицу» до тонкостей с серверным контекстом, большими объёмами данных и типичными ошибками.

Где в отладчике вообще видна таблица значений

Когда выполнение кода остановлено на точке останова, локальные переменные отображаются в окне «Локальные переменные» (открывается через меню Отладка → Локальные переменные или автоматически при старте отладки). Таблица значений там видна как строка с именем переменной и типом «ТаблицаЗначений», но раскрытие плюсиком показывает только служебные свойства — коллекции колонок и индексов, а не сами данные.

Причина проста: таблица значений — это не простая коллекция, а объект с собственной структурой (колонки, типы, индексы), и платформа не разворачивает её содержимое в дереве переменных. Чтобы увидеть строки и значения ячеек, нужно явно запросить показ содержимого одним из способов ниже.

Основной способ: «Вычислить выражение» (Shift+F9)

Самый удобный и универсальный метод. Остановитесь на точке останова после того, как таблица уже заполнена (важно: до строки заполнения таблица может быть пустой или вообще не созданной). Затем выделите имя переменной в тексте модуля и нажмите Shift+F9 или выберите в меню Отладка → Вычислить выражение.

В открывшемся окне «Выражение» в поле «Выражение» будет имя переменной, а в поле «Значение» — строка вида «ТаблицаЗначений». Сделайте двойной клик по этому значению (или нажмите кнопку с лупой / F2 в поле значения) — откроется отдельное окно с таблицей в привычном виде: шапка с именами колонок и строки с данными.

Порядок действий
  1. 1
    Поставьте точку останова (F9) на строке после заполнения таблицы и запустите отладку (F5)
  2. 2
    Когда выполнение остановится, выделите имя переменной с таблицей в тексте модуля
  3. 3
    Нажмите Shift+F9 — откроется окно «Выражение»
  4. 4
    В поле «Значение» дважды кликните по надписи «ТаблицаЗначений»
  5. 5
    Изучите открывшуюся таблицу: колонки, строки, значения ячеек

В открывшемся окне таблицы можно прокручивать строки, смотреть значения любых ячеек, а двойной клик по ячейке со ссылочным значением (например, ссылкой на элемент справочника) позволит вычислить и его — откроется ещё одно окно «Выражение» уже для этого объекта.

Просмотр через Табло и окно «Локальные переменные»

Табло (Watches) — окно, в котором можно постоянно держать нужные выражения и следить за их значениями при пошаговом выполнении. Открывается через Отладка → Табло или комбинацией Ctrl+Alt+W. Добавьте туда переменную с таблицей (перетащите мышью из текста модуля или введите имя вручную), и при каждой остановке значение будет обновляться.

Двойной клик по значению в Табло работает так же, как в окне «Выражение»: открывается просмотр содержимого таблицы. Это удобно, когда таблица наполняется в цикле — вы шагаете по коду (F10/F11) и после каждой итерации заново открываете таблицу, наблюдая, как она растёт.

В окне «Локальные переменные» тоже можно добраться до содержимого: найдите переменную, встаньте на строку со значением и нажмите F2 (или кнопку «Показать значение в отдельном окне»). Поведение аналогично — откроется окно просмотра коллекции.

Как посмотреть структуру таблицы: колонки и их типы

Часто важны не только данные, но и структура: какие колонки есть, какие у них типы и в каком порядке они идут. Для этого в окне «Выражение» вычислите не саму таблицу, а её коллекцию колонок — введите выражение вида:

ТЗ.Колонки

Раскрыв результат, вы увидите список колонок, а у каждой — свойства: имя, тип значения, заголовок, ширину. Это особенно полезно, когда таблица формируется динамически (например, загружается из Excel или создаётся программно) и вы не уверены, какие колонки реально получились.

Дополнительно полезные выражения для быстрой диагностики в окне «Вычислить выражение»:

  • ТЗ.Количество() — число строк в таблице;
  • ТЗ.Колонки.Количество() — число колонок;
  • ТЗ[0] — первая строка таблицы, можно раскрыть и посмотреть значения по колонкам;
  • ТЗ.Итог("Сумма") — итог по числовой колонке без открытия всей таблицы.
Если таблица большая (тысячи строк), не открывайте её целиком ради одной проверки. Быстрее вычислить ТЗ.Количество() и пару конкретных строк через ТЗ[0], ТЗ[100] — это мгновенно и не грузит отладчик.
ПЗ
Практическое замечание

Особенности: серверный контекст, толстый и тонкий клиент

Большая часть прикладного кода в управляемых приложениях выполняется на сервере. Чтобы отладчик останавливался на серверных точках останова, в настройках конфигуратора (Сервис → Параметры → Отладка) должен быть выбран протокол отладки и включён режим «Искать объекты на сервере», а сам сервер 1С должен быть запущен в отладочном режиме (ключ -debug). Если точка «не срабатывает» в серверной процедуре — почти наверняка проблема именно в этом.

Сам просмотр таблицы на сервере ничем не отличается: те же Shift+F9 и двойной клик. Но есть нюанс с производительностью — при отладке через сеть открытие большой таблицы может ощутимо подтормаживать, так как данные передаются с сервера на клиент отладки.

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

Альтернатива: вывод таблицы без отладчика

Иногда отладчик недоступен (нет прав, нельзя перезапустить сервер в отладочном режиме, код выполняется в фоновом задании). Тогда содержимое таблицы выводят программно — например, в сообщения или в табличный документ:

Для Каждого СтрокаТЗ Из ТЗ Цикл

Сообщить(СтрШаблон("%1 | %2 | %3",

СтрокаТЗ.Номенклатура,

СтрокаТЗ.Количество,

СтрокаТЗ.Сумма));

КонецЦикла;

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

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

Вычислить выражение (Shift+F9)

Быстрый разовый просмотр на точке останова. Не подходит для наблюдения за изменениями в цикле без повторного открытия.

Табло (Ctrl+Alt+W)

Постоянное слежение за таблицей при пошаговом выполнении. Требует ручного обновления окна просмотра.

Вывод через Сообщить()

Работает без отладчика и в фоновых заданиях. Засоряет код и требует последующей чистки.

Выгрузка в табличный документ

Наглядно для больших таблиц и для передачи результата коллегам. Самый трудоёмкий способ.

Типичные ошибки при просмотре таблицы в отладчике

Первая и самая частая: попытка посмотреть таблицу до её заполнения. Если точка останова стоит до строки ТЗ = Запрос.Выполнить().Выгрузить(), переменная либо пуста, либо вообще не существует — в окне выражения будет «Не удалось вычислить» или пустая таблица. Ставьте точку на следующую строку после заполнения.

Вторая ошибка — путать таблицу значений с результатом запроса. Запрос.Выполнить() возвращает РезультатЗапроса, который в просмотре коллекции выглядит иначе и не даёт привычной таблицы. Выгрузите его: .Выгрузить() — и смотрите уже таблицу значений.

Третья — ожидать автообновления окна просмотра. Окно со строками таблицы статично; после продолжения выполнения его нужно переоткрывать. И четвёртая — забыть убрать отладочный вывод через Сообщить() перед переносом кода в рабочую базу, из-за чего пользователи получают поток служебных сообщений.

Типичные ошибки
01
Точка останова до заполнения таблицы — в просмотре пусто или ошибка вычисления
02
Просмотр РезультатаЗапроса вместо ТаблицыЗначений — нет привычного табличного окна, нужна Выгрузить()
03
Ожидание автообновления окна просмотра — данные устарели, выводы делаются по старому снимку
04
Отладка серверного кода без включённой отладки на сервере — точки останова не срабатывают
05
Забытый вывод через Сообщить() в рабочем коде — пользователи видят служебные сообщения
Контрольные точки

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

Открылось ли окно с таблицей после двойного клика по значению
Норма

Видны колонки и строки с данными

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

Ошибка вычисления или пустое окно — проверьте точку останова и имя переменной

Совпадает ли число строк с ожидаемым
Норма

ТЗ.Количество() равно ожидаемому числу записей

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

Строк меньше — проверяйте отбор в запросе или условия заполнения

Типы колонок соответствуют логике кода
Норма

В ТЗ.Колонки у числовых полей числовой тип

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

Тип «Строка» у сумм — вероятна ошибка при формировании таблицы

Частые вопросы

Почему в окне «Выражение» пишется «Не удалось вычислить выражение»?

Чаще всего переменная недоступна в текущем контексте: выполнение остановлено в другой процедуре, либо переменная ещё не объявлена на этой строке. Проверьте, что вы смотрите именно ту процедуру, где таблица создаётся, и что точка останова стоит после строки её заполнения.

Можно ли посмотреть таблицу значений на тонком клиенте?

Напрямую — только если код выполняется на клиенте, а в управляемом режиме таблица значений на клиенте практически не используется. Останавливайтесь в серверной процедуре (с включённой серверной отладкой) и смотрите таблицу там — механизм просмотра тот же.

Как посмотреть только часть строк большой таблицы?

Открытие таблицы с сотнями тысяч строк может подвесить отладчик. Вместо этого вычисляйте отдельные строки: ТЗ[0], ТЗ[999], либо используйте ТЗ.Найти(Значение, "ИмяКолонки") для поиска конкретной строки и ТЗ.Количество() для контроля объёма.

Чем отличается просмотр таблицы значений от просмотра результата запроса?

Результат запроса — это объект-выборка, он не показывается в виде таблицы напрямую. Чтобы получить привычное табличное окно, выгрузите результат: Запрос.Выполнить().Выгрузить() — и смотрите уже полученную таблицу значений.

Как посмотреть таблицу, если код выполняется в фоновом задании?

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

Можно ли изменить значение ячейки таблицы прямо в отладчике?

Да, через окно «Вычислить выражение»: введите выражение присваивания, например ТЗ[0].Сумма = 100, и оно выполнится в контексте остановленного кода. Это удобно для проверки гипотез, но помните: изменение реально влияет на дальнейшее выполнение кода.

Итог

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

Таблица значений в отладчике 1С открывается через «Вычислить выражение» (Shift+F9) и двойной клик по значению либо через Табло. Ставьте точку останова после заполнения таблицы, для серверного кода включайте отладку на сервере, а для больших таблиц смотрите отдельные строки выражениями вместо полного открытия.