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

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

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

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

Таблица значений — один из самых часто используемых объектов во встроенном языке 1С. В ней хранятся результаты запросов, промежуточные расчёты, данные для обмена и загрузки. Когда алгоритм работает не так, как ожидалось, первое, что нужно сделать разработчику, — посмотреть, что реально лежит в таблице значений на конкретном шаге выполнения кода.

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

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

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

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

Просмотр содержимого нужен в нескольких ситуациях: запрос вернул не те строки, которые ожидались; свёртка или группировка дала неверный итог; после обработки таблицы данные «потерялись» или задвоились. Во всех этих случаях быстрее посмотреть фактическое содержимое, чем гадать по коду.

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

Просмотр в отладчике через точку останова

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

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

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

Порядок действий в отладчике
  1. 1
    Откройте модуль и поставьте точку останова (F9) после заполнения таблицы
  2. 2
    Запустите отладку (F5) и дождитесь остановки
  3. 3
    Откройте «Локальные переменные» или «Табло» и найдите переменную
  4. 4
    Нажмите F2 — «Показать значение в отдельном окне»
  5. 5
    Пролистайте строки и колонки, проверьте интересующие значения

Просмотр через «Вычислить выражение»

Если переменная не видна в локальных (например, это свойство объекта или результат вложенного вызова), используйте диалог «Вычислить выражение» — Shift+F9. В поле ввода напишите имя переменной или произвольное выражение, например ТЗ.Количество(), и нажмите «Вычислить».

Результат появится в списке выражений. Для таблицы значений снова доступна кнопка просмотра в отдельном окне (F2). Этот же приём работает для выражений вида Объект.Товары.Выгрузить() — платформа вычислит выражение и покажет получившуюся таблицу.

Учтите: вычисление выражения выполняет код. Если в выражении есть метод, меняющий данные (запись в базу, проведение), он реально выполнится. Используйте в «Вычислить выражение» только безопасные операции чтения.

Просмотр больших таблиц и вложенных значений

Для таблиц с тысячами строк окно просмотра работает медленнее, и найти нужную строку вручную сложно. В этом случае удобнее сузить данные прямо в «Вычислить выражение»: например, ТЗ.Найти("00000000123", "НоменклатураКод") покажет конкретную строку, а ТЗ.Скопировать(ТЗ.НайтиСтроки(Новый Структура("Склад", Склад))) — отфильтрованный фрагмент.

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

Для оценки общего объёма полезны быстрые проверки: ТЗ.Количество() — число строк, ТЗ.Колонки.Количество() — число колонок, ТЗ.Итог("Сумма") — итог по числовой колонке. Это позволяет сверить таблицу с ожиданиями, не листая все строки.

Контрольные точки

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

Количество строк
Норма

Совпадает с ожидаемым числом записей из источника

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

Строк меньше (потеря при выгрузке) или больше (дубли после соединения)

Значения в колонках
Норма

Типы и значения соответствуют источнику данных

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

Пустые значения, Неопределено или строки вместо чисел

Итог по суммовой колонке
Норма

ТЗ.Итог("Сумма") сходится с контрольной цифрой

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

Расхождение — ошибка в группировке или фильтрации

Просмотр без отладчика: программный вывод

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

Самый простой вариант — цикл с выводом в сообщения или журнал регистрации:

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

Сообщить(Строка(Строка.Номенклатура) + " | " + Строка.Количество + " | " + Строка.Сумма);

КонецЦикла;

Для фоновых заданий вместо Сообщить() используйте ЗаписьЖурналаРегистрации() — сообщения фонового задания видны в его свойствах, но журнал надёжнее. Ограничьте вывод, например, первыми 50 строками, чтобы не переполнить журнал.

Более наглядный способ для управляемых форм — временный реквизит: добавьте на форму реквизит типа «ТаблицаЗначений» с нужными колонками, программно загрузите в него данные (ЗначениеВРеквизитФормы или прямое присвоение для динамических списков не подойдёт — нужен именно реквизит-таблица) и выведите элементом «Таблица формы». Так данные видны прямо на экране в привычном виде.

Альтернативные инструменты и внешние средства

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

Ещё один приём — выгрузка таблицы в файл: метод ТЗ.ВыбратьСтроку() для интерактивного просмотра в толстом клиенте либо сохранение через табличный документ. Например, заполнить табличный документ построчно и сохранить его в Excel — удобно, когда результат нужно передать аналитику или сравнить с эталоном.

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

Сравнение способов просмотра

Отладчик (F2)

Быстро и интерактивно, но требует доступа к отладке и остановки выполнения

Сообщить() / журнал регистрации

Работает везде, включая фоновые задания; неудобен для больших таблиц

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

Наглядный просмотр на экране; требует доработки формы

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

Подходит для анализа и передачи данных; требует написания кода выгрузки

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

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

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

Третья типичная ситуация — отладка на сервере не включена, и точка останова в серверном коде не срабатывает. Нужно включить отладку на сервере 1С (параметр -debug в командной строке службы агента) и перезапустить службу. Делайте это только на тестовом контуре: режим отладки влияет на производительность сервера.

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

FAQ

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

Отладчик к фоновому заданию подключить сложно. Надёжнее вывести данные программно: циклом через ЗаписьЖурналаРегистрации() с ограничением числа строк, а затем открыть журнал регистрации и отфильтровать по событию. Либо временно сохранить таблицу в хранилище значения константы или регистра сведений и посмотреть оттуда.

Почему в окне просмотра видны не все колонки таблицы?

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

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

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

Как быстро найти нужную строку в большой таблице при отладке?

Используйте окно «Вычислить выражение» (Shift+F9) с методами поиска: ТЗ.Найти(Значение, "ИмяКолонки") для первой строки или ТЗ.НайтиСтроки(Новый Структура("Колонка", Значение)) для всех совпадений. Результат раскрывается через F2 так же, как обычная переменная.

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

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

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

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

Итог

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

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