Разработка и Конфигурация · 10 мин
Как просмотреть временную таблицу в менеджере временных таблиц 1С
Как посмотреть содержимое временной таблицы в 1С через менеджер временных таблиц: отладчик, консоль запросов, типовые приёмы и частые ошибки разработчика.
Временные таблицы в запросах 1С — удобный инструмент для промежуточных расчётов, но у них есть неприятная особенность: их содержимое невидимо напрямую. Если запрос возвращает неожиданный результат или пустую выборку, первое, что нужно сделать, — заглянуть внутрь временной таблицы и проверить, какие данные туда попали. Для этого используется объект МенеджерВременныхТаблиц, который хранит все временные таблицы запроса и позволяет получить их содержимое программно.
На практике существует три рабочих способа посмотреть временную таблицу: через отладчик с выводом в табличный документ, через консоль запросов с поддержкой временных таблиц и через метод ПолучитьТаблицу() менеджера. Каждый подходит для своей ситуации: отладчик — когда код уже написан и выполняется, консоль — когда запрос ещё разрабатывается и отлаживается отдельно.
Ниже разобраны конкретные приёмы с кодом, ограничения платформы и типичные ошибки, из-за которых временная таблица «не видна» или оказывается пустой.
Что такое менеджер временных таблиц и когда он нужен
Менеджер временных таблиц — это объект платформы, который хранит временные таблицы, созданные запросами. Каждый запрос с конструкцией ПОМЕСТИТЬ ИмяТаблицы записывает результат не в базу данных, а в оперативную память сервера, и менеджер управляет этим хранилищем. Пока менеджер существует, таблицы живут; как только менеджер уничтожается или вызывается метод Закрыть(), все таблицы удаляются.
Ключевой момент: временная таблица привязана к конкретному экземпляру менеджера. Если вы создали таблицу в одном запросе, а пытаетесь прочитать её в другом запросе без передачи менеджера — таблица будет недоступна. Это самая частая причина ошибки «Таблица не найдена» при отладке.
Просмотр временной таблицы через отладчик
Самый быстрый способ — остановиться точкой останова сразу после выполнения запроса и вычислить выражение в окне «Вычислить выражение» (Shift+F9 в конфигураторе). Выражение выглядит так:
Запрос.МенеджерВременныхТаблиц.ПолучитьТаблицу("ВТ_Товары")
Метод вернёт объект РезультатЗапроса, а уже из него можно получить таблицу значений и посмотреть её построчно:
ТЗ = Запрос.МенеджерВременныхТаблиц.ПолучитьТаблицу("ВТ_Товары").Выгрузить();
В окне вычисления выражения результат можно раскрыть как коллекцию и пролистать строки. Если таблица большая, удобнее сначала проверить количество строк через ТЗ.Количество(), а затем смотреть отдельные элементы по индексу.
- 1Поставьте точку останова на строке после Запрос.Выполнить()
- 2Запустите отладку и дойдите до точки
- 3Откройте «Вычислить выражение» (Shift+F9)
- 4Введите Запрос.МенеджерВременныхТаблиц.ПолучитьТаблицу("ИмяТаблицы").Выгрузить()
- 5Раскройте результат как коллекцию и проверьте строки и колонки
Вывод временной таблицы в табличный документ
Когда нужно увидеть таблицу целиком, а не листать коллекцию в отладчике, удобно вывести её в табличный документ. Для этого пишется небольшая служебная процедура, которую можно держать в общем модуле или во внешней обработке:
ТЗ = Запрос.МенеджерВременныхТаблиц.ПолучитьТаблицу("ВТ_Товары").Выгрузить();
ТабДок = Новый ТабличныйДокумент;
// Заголовки колонок
Для Каждого Колонка Из ТЗ.Колонки Цикл
ТабДок.Область(1, ТЗ.Колонки.Индекс(Колонка) + 1).Текст = Колонка.Имя;
КонецЦикла;
// Данные
Для Н = 0 По ТЗ.Количество() - 1 Цикл
Для К = 0 По ТЗ.Колонки.Количество() - 1 Цикл
ТабДок.Область(Н + 2, К + 1).Текст = Строка(ТЗ[Н][К]);
КонецЦикла;
КонецЦикла;
ТабДок.Показать("ВТ_Товары");
Такой приём особенно полезен на толстом клиенте или при отладке через файловую базу, где табличный документ можно открыть напрямую. Для серверного контекста в управляемом приложении табличный документ можно сохранить в файл и открыть отдельно, либо передать таблицу значений на клиент через временное хранилище.
Просмотр через консоль запросов
Если запрос ещё разрабатывается, удобнее всего использовать консоль запросов с поддержкой временных таблиц — например, популярные открытые инструменты вроде «Консоли запросов» с ИТС или аналоги с GitHub. В таких консолях после выполнения пакетного запроса доступен список временных таблиц, и любую из них можно открыть как обычный результат запроса одним кликом.
Порядок работы простой: вставляете текст пакетного запроса, заполняете параметры, выполняете — и в отдельной вкладке видите перечень созданных временных таблиц с количеством строк. Это избавляет от необходимости писать служебный код и позволяет быстро проверять промежуточные результаты на каждом этапе пакета.
Если под рукой только стандартная консоль кода или отладчик, можно выполнить пакетный запрос по частям: сначала запрос с ПОМЕСТИТЬ, затем отдельным запросом ВЫБРАТЬ * ИЗ ВТ_Товары с тем же менеджером временных таблиц. Главное — передать в новый запрос тот же объект менеджера через свойство Запрос.МенеджерВременныхТаблиц.
Способы просмотра временной таблицы
Подходит для готового кода; не требует доработок, но неудобен для больших таблиц
Наглядно для больших выборок; требует служебной процедуры и работает не во всех контекстах
Лучший вариант при разработке запроса; требует установки внешнего инструмента
Универсально и просто; нужно передавать тот же менеджер временных таблиц
Типичные ошибки при работе с менеджером временных таблиц
Первая и самая распространённая ошибка — попытка прочитать таблицу из «чужого» менеджера. Если запрос создавался без явного менеджера, платформа создаёт его неявно, и после выполнения запроса добраться до таблиц можно только через свойство самого запроса, пока он жив. Рекомендуется всегда создавать менеджер явно: Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; — тогда доступ к таблицам гарантирован.
Вторая ошибка — обращение к таблице после уничтожения. Временные таблицы удаляются при вызове МенеджерВременныхТаблиц.Закрыть(), при уничтожении менеджера сборщиком мусора, а также после выполнения запроса с конструкцией УНИЧТОЖИТЬ ИмяТаблицы. Перед просмотром убедитесь, что ни одно из этих событий не произошло.
Третья группа проблем связана с пакетными запросами. Если пакет содержит несколько операторов ПОМЕСТИТЬ, а вы проверяете таблицу до выполнения всего пакета — её может ещё не существовать. Точку останова нужно ставить строго после Запрос.Выполнить() или ВыполнитьПакет().
Ограничения и нюансы платформы
Временные таблицы хранятся в памяти сервера 1С (или в памяти клиентского процесса для файловой базы), поэтому просмотр очень больших таблиц может быть ресурсоёмким. Выгрузка таблицы с сотнями тысяч строк в таблицу значений для просмотра способна заметно нагрузить сеанс. В таких случаях лучше ограничить выборку: выполнить отдельный запрос ВЫБРАТЬ ПЕРВЫЕ 100 * ИЗ ВТ_Товары с тем же менеджером.
Ещё один нюанс — имена временных таблиц регистронезависимы, но должны точно совпадать по написанию с именем в ПОМЕСТИТЬ. Опечатка в имени при вызове ПолучитьТаблицу() даст ту же ошибку «таблица не найдена», что и реальное отсутствие таблицы, поэтому имя удобно копировать прямо из текста запроса.
Наконец, стоит помнить, что в мобильной платформе и в некоторых ограниченных контекстах исполнения возможности отладки сужены, и просмотр временных таблиц там практичнее организовывать через журнал регистрации или запись в файл.
Как проверить результат
ПолучитьТаблицу() возвращает РезультатЗапроса без исключения
Ошибка «Таблица не найдена» — неверное имя или другой менеджер
Выгрузить().Количество() больше нуля
Ноль строк — проверяйте отборы и соединения в исходном запросе
Набор колонок совпадает с полями в ПОМЕСТИТЬ
Лишние или отсутствующие колонки — смотрите список полей выборки
FAQ: частые вопросы о просмотре временных таблиц
Можно ли посмотреть временную таблицу без отладчика и консоли запросов?
Да. Добавьте в код временный фрагмент, который выгружает таблицу через ПолучитьТаблицу().Выгрузить() и записывает её, например, в файл формата XML или CSV через ЗаписьXML, либо выводит количество строк и первые записи в журнал регистрации. После отладки такой код нужно удалить или отключить.
Почему ПолучитьТаблицу() выдаёт ошибку, хотя запрос выполнился без ошибок?
Чаще всего таблица создана в другом менеджере: либо запросу не назначен явный менеджер временных таблиц, либо вы обращаетесь к новому экземпляру менеджера. Также проверьте, что таблица не удалена оператором УНИЧТОЖИТЬ в пакетном запросе и что имя указано без опечаток.
Как посмотреть несколько временных таблиц из одного пакетного запроса?
Вызовите ПолучитьТаблицу() последовательно для каждой таблицы по имени — менеджер хранит их все одновременно после выполнения пакета. В консолях запросов с поддержкой временных таблиц список всех созданных таблиц показывается автоматически, и любую можно открыть отдельной вкладкой.
Сколько времени живёт временная таблица?
Таблица существует, пока жив её менеджер временных таблиц, пока не вызван метод Закрыть() и пока таблица не удалена оператором УНИЧТОЖИТЬ. После завершения процедуры, в которой создан локальный менеджер, таблицы удаляются вместе с ним.
Что делать, если временная таблица слишком большая для просмотра?
Не выгружайте её целиком. Выполните дополнительный запрос с тем же менеджером: ВЫБРАТЬ ПЕРВЫЕ 100 с нужными полями из временной таблицы. Для анализа распределения данных используйте агрегатные запросы — количество строк, группировки по ключевым полям.
Видны ли временные таблицы из других запросов внутри одной процедуры?
Только если всем запросам назначен один и тот же объект МенеджерВременныхТаблиц. Тогда таблица, созданная первым запросом, доступна второму запросу и для просмотра. Если менеджеры разные, каждый видит только свои таблицы.
Что важно запомнить
Временная таблица просматривается через Запрос.МенеджерВременныхТаблиц.ПолучитьТаблицу("Имя").Выгрузить() — в отладчике, в консоли запросов или служебным кодом. Создавайте менеджер явно, ставьте точку останова после выполнения запроса и ограничивайте выборку для больших таблиц.