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

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

Как просмотреть временную таблицу в менеджере временных таблиц 1С

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

Временные таблицы в запросах 1С — удобный инструмент для промежуточных расчётов, но у них есть неприятная особенность: их содержимое невидимо напрямую. Если запрос возвращает неожиданный результат или пустую выборку, первое, что нужно сделать, — заглянуть внутрь временной таблицы и проверить, какие данные туда попали. Для этого используется объект МенеджерВременныхТаблиц, который хранит все временные таблицы запроса и позволяет получить их содержимое программно.

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

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

Что такое менеджер временных таблиц и когда он нужен

Менеджер временных таблиц — это объект платформы, который хранит временные таблицы, созданные запросами. Каждый запрос с конструкцией ПОМЕСТИТЬ ИмяТаблицы записывает результат не в базу данных, а в оперативную память сервера, и менеджер управляет этим хранилищем. Пока менеджер существует, таблицы живут; как только менеджер уничтожается или вызывается метод Закрыть(), все таблицы удаляются.

Ключевой момент: временная таблица привязана к конкретному экземпляру менеджера. Если вы создали таблицу в одном запросе, а пытаетесь прочитать её в другом запросе без передачи менеджера — таблица будет недоступна. Это самая частая причина ошибки «Таблица не найдена» при отладке.

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

Самый быстрый способ — остановиться точкой останова сразу после выполнения запроса и вычислить выражение в окне «Вычислить выражение» (Shift+F9 в конфигураторе). Выражение выглядит так:

Запрос.МенеджерВременныхТаблиц.ПолучитьТаблицу("ВТ_Товары")

Метод вернёт объект РезультатЗапроса, а уже из него можно получить таблицу значений и посмотреть её построчно:

ТЗ = Запрос.МенеджерВременныхТаблиц.ПолучитьТаблицу("ВТ_Товары").Выгрузить();

В окне вычисления выражения результат можно раскрыть как коллекцию и пролистать строки. Если таблица большая, удобнее сначала проверить количество строк через ТЗ.Количество(), а затем смотреть отдельные элементы по индексу.

Порядок действий в отладчике
  1. 1
    Поставьте точку останова на строке после Запрос.Выполнить()
  2. 2
    Запустите отладку и дойдите до точки
  3. 3
    Откройте «Вычислить выражение» (Shift+F9)
  4. 4
    Введите Запрос.МенеджерВременныхТаблиц.ПолучитьТаблицу("ИмяТаблицы").Выгрузить()
  5. 5
    Раскройте результат как коллекцию и проверьте строки и колонки

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

Когда нужно увидеть таблицу целиком, а не листать коллекцию в отладчике, удобно вывести её в табличный документ. Для этого пишется небольшая служебная процедура, которую можно держать в общем модуле или во внешней обработке:

ТЗ = Запрос.МенеджерВременныхТаблиц.ПолучитьТаблицу("ВТ_Товары").Выгрузить();

ТабДок = Новый ТабличныйДокумент;

// Заголовки колонок

Для Каждого Колонка Из ТЗ.Колонки Цикл

ТабДок.Область(1, ТЗ.Колонки.Индекс(Колонка) + 1).Текст = Колонка.Имя;

КонецЦикла;

// Данные

Для Н = 0 По ТЗ.Количество() - 1 Цикл

Для К = 0 По ТЗ.Колонки.Количество() - 1 Цикл

ТабДок.Область(Н + 2, К + 1).Текст = Строка(ТЗ[Н][К]);

КонецЦикла;

КонецЦикла;

ТабДок.Показать("ВТ_Товары");

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

Просмотр через консоль запросов

Если запрос ещё разрабатывается, удобнее всего использовать консоль запросов с поддержкой временных таблиц — например, популярные открытые инструменты вроде «Консоли запросов» с ИТС или аналоги с GitHub. В таких консолях после выполнения пакетного запроса доступен список временных таблиц, и любую из них можно открыть как обычный результат запроса одним кликом.

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

Если под рукой только стандартная консоль кода или отладчик, можно выполнить пакетный запрос по частям: сначала запрос с ПОМЕСТИТЬ, затем отдельным запросом ВЫБРАТЬ * ИЗ ВТ_Товары с тем же менеджером временных таблиц. Главное — передать в новый запрос тот же объект менеджера через свойство Запрос.МенеджерВременныхТаблиц.

Способы просмотра временной таблицы

Отладчик + Вычислить выражение

Подходит для готового кода; не требует доработок, но неудобен для больших таблиц

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

Наглядно для больших выборок; требует служебной процедуры и работает не во всех контекстах

Консоль запросов с поддержкой ВТ

Лучший вариант при разработке запроса; требует установки внешнего инструмента

Отдельный запрос ВЫБРАТЬ * ИЗ ВТ

Универсально и просто; нужно передавать тот же менеджер временных таблиц

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

Первая и самая распространённая ошибка — попытка прочитать таблицу из «чужого» менеджера. Если запрос создавался без явного менеджера, платформа создаёт его неявно, и после выполнения запроса добраться до таблиц можно только через свойство самого запроса, пока он жив. Рекомендуется всегда создавать менеджер явно: Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; — тогда доступ к таблицам гарантирован.

Вторая ошибка — обращение к таблице после уничтожения. Временные таблицы удаляются при вызове МенеджерВременныхТаблиц.Закрыть(), при уничтожении менеджера сборщиком мусора, а также после выполнения запроса с конструкцией УНИЧТОЖИТЬ ИмяТаблицы. Перед просмотром убедитесь, что ни одно из этих событий не произошло.

Третья группа проблем связана с пакетными запросами. Если пакет содержит несколько операторов ПОМЕСТИТЬ, а вы проверяете таблицу до выполнения всего пакета — её может ещё не существовать. Точку останова нужно ставить строго после Запрос.Выполнить() или ВыполнитьПакет().

Типичные ошибки
01
Чтение таблицы из другого менеджера — ошибка «Таблица не найдена», хотя запрос выполнился успешно
02
Точка останова до выполнения запроса — таблица ещё не создана, ПолучитьТаблицу падает с ошибкой
03
Попытка посмотреть таблицу после УНИЧТОЖИТЬ в пакете — таблица уже удалена платформой
04
Просмотр большой таблицы через Вычислить выражение — отладчик подвисает на десятках тысяч строк, лучше сначала проверить Количество()

Ограничения и нюансы платформы

Временные таблицы хранятся в памяти сервера 1С (или в памяти клиентского процесса для файловой базы), поэтому просмотр очень больших таблиц может быть ресурсоёмким. Выгрузка таблицы с сотнями тысяч строк в таблицу значений для просмотра способна заметно нагрузить сеанс. В таких случаях лучше ограничить выборку: выполнить отдельный запрос ВЫБРАТЬ ПЕРВЫЕ 100 * ИЗ ВТ_Товары с тем же менеджером.

Ещё один нюанс — имена временных таблиц регистронезависимы, но должны точно совпадать по написанию с именем в ПОМЕСТИТЬ. Опечатка в имени при вызове ПолучитьТаблицу() даст ту же ошибку «таблица не найдена», что и реальное отсутствие таблицы, поэтому имя удобно копировать прямо из текста запроса.

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

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

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

Таблица существует в менеджере
Норма

ПолучитьТаблицу() возвращает РезультатЗапроса без исключения

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

Ошибка «Таблица не найдена» — неверное имя или другой менеджер

В таблице есть данные
Норма

Выгрузить().Количество() больше нуля

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

Ноль строк — проверяйте отборы и соединения в исходном запросе

Структура колонок
Норма

Набор колонок совпадает с полями в ПОМЕСТИТЬ

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

Лишние или отсутствующие колонки — смотрите список полей выборки

FAQ: частые вопросы о просмотре временных таблиц

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

Да. Добавьте в код временный фрагмент, который выгружает таблицу через ПолучитьТаблицу().Выгрузить() и записывает её, например, в файл формата XML или CSV через ЗаписьXML, либо выводит количество строк и первые записи в журнал регистрации. После отладки такой код нужно удалить или отключить.

Почему ПолучитьТаблицу() выдаёт ошибку, хотя запрос выполнился без ошибок?

Чаще всего таблица создана в другом менеджере: либо запросу не назначен явный менеджер временных таблиц, либо вы обращаетесь к новому экземпляру менеджера. Также проверьте, что таблица не удалена оператором УНИЧТОЖИТЬ в пакетном запросе и что имя указано без опечаток.

Как посмотреть несколько временных таблиц из одного пакетного запроса?

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

Сколько времени живёт временная таблица?

Таблица существует, пока жив её менеджер временных таблиц, пока не вызван метод Закрыть() и пока таблица не удалена оператором УНИЧТОЖИТЬ. После завершения процедуры, в которой создан локальный менеджер, таблицы удаляются вместе с ним.

Что делать, если временная таблица слишком большая для просмотра?

Не выгружайте её целиком. Выполните дополнительный запрос с тем же менеджером: ВЫБРАТЬ ПЕРВЫЕ 100 с нужными полями из временной таблицы. Для анализа распределения данных используйте агрегатные запросы — количество строк, группировки по ключевым полям.

Видны ли временные таблицы из других запросов внутри одной процедуры?

Только если всем запросам назначен один и тот же объект МенеджерВременныхТаблиц. Тогда таблица, созданная первым запросом, доступна второму запросу и для просмотра. Если менеджеры разные, каждый видит только свои таблицы.

Итог

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

Временная таблица просматривается через Запрос.МенеджерВременныхТаблиц.ПолучитьТаблицу("Имя").Выгрузить() — в отладчике, в консоли запросов или служебным кодом. Создавайте менеджер явно, ставьте точку останова после выполнения запроса и ограничивайте выборку для больших таблиц.