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

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

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

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

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

Главная сложность в том, что временная таблица не является объектом встроенного языка — нельзя просто написать её имя в окне «Вычислить выражение». Нужно выполнить отдельный запрос вида ВЫБРАТЬ * ИЗ ИмяТаблицы, привязанный к тому же менеджеру временных таблиц. Ниже разобраны все практические варианты с готовым кодом.

Что такое временная таблица и где она хранится

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

Физически временные таблицы размещаются в СУБД (MS SQL, PostgreSQL и др.) в служебной области, а в файловой базе — во временном хранилище. Обращаться к ним напрямую через SQL не нужно: платформа управляет именами и жизненным циклом самостоятельно. Для разработчика точкой доступа всегда остаётся объект запроса с привязанным менеджером.

Просмотр в консоли запросов

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

Если консоль не поддерживает разбор пакета, добавьте в конец текста явный запрос выборки:

ВЫБРАТЬ *

ИЗ ВТ_Остатки КАК ВТ_Остатки

Замените ВТ_Остатки на фактическое имя вашей таблицы. Выполнив пакет целиком, вы получите результат последнего запроса — полное содержимое временной таблицы. При необходимости добавьте отбор ГДЕ или ПЕРВЫЕ 100, чтобы не выгружать лишние строки.

Порядок действий в консоли запросов
  1. 1
    Откройте консоль запросов и вставьте текст пакетного запроса
  2. 2
    Заполните все параметры запроса фактическими значениями
  3. 3
    Добавьте в конец пакета запрос ВЫБРАТЬ * ИЗ ИмяВременнойТаблицы
  4. 4
    Выполните пакет и изучите результат последнего запроса
  5. 5
    При большом объёме ограничьте выборку через ПЕРВЫЕ или ГДЕ

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

В конфигураторе поставьте точку останова сразу после строки Запрос.Выполнить(), где создаётся временная таблица. Убедитесь, что запросу назначен менеджер временных таблиц, иначе таблица исчезнет сразу после выполнения.

Далее в окне «Вычислить выражение» (Shift+F9) выполните код, который обращается к тому же менеджеру:

ЗапросВТ = Новый Запрос("ВЫБРАТЬ * ИЗ ВТ_Остатки");

ЗапросВТ.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;

РезультатВТ = ЗапросВТ.Выполнить().Выгрузить();

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

bsl
ЗапросВТ = Новый Запрос("ВЫБРАТЬ * ИЗ ВТ_Остатки");
ЗапросВТ.МенеджерВременныхТаблиц = МВТ;
ТЗ = ЗапросВТ.Выполнить().Выгрузить();

Как узнать, какие временные таблицы существуют в менеджере

Если вы не помните точные имена таблиц, полученных из чужого кода, воспользуйтесь консолью кода или отладкой: переберите содержимое менеджера через запросы-заглушки либо посмотрите текст исходного пакета — все имена перечислены после ключевого слова ПОМЕСТИТЬ. В консолях запросов список временных таблиц пакета обычно отображается автоматически в дереве запросов.

Просмотр временной таблицы из чужого запроса (СКД, типовые механизмы)

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

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

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

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

Вторая группа ошибок связана с ожиданиями от данных: разработчик помещает в таблицу результат с отбором, а потом удивляется нехватке строк. Всегда смотрите фактическое содержимое таблицы, а не предполагаемое, — именно для этого и нужен просмотр через ВЫБРАТЬ *.

Типичные ошибки
01
Чтение временной таблицы запросом без назначенного менеджера — ошибка «Таблица не найдена»
02
Использование другого экземпляра менеджера — таблица пуста или недоступна
03
Уничтожение временной таблицы командой УНИЧТОЖИТЬ до её просмотра
04
Попытка посмотреть таблицу в отладчике как обычную переменную — она не является объектом языка
05
Выгрузка миллионов строк через ВЫБРАТЬ * без ограничения ПЕРВЫЕ — зависание консоли

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

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

Консоль запросов

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

Отладчик + отдельный запрос

Работает на живых данных в момент выполнения кода. Ограничение: требуется точка останова и доступ к переменной менеджера

Отладочный код в модуле

Подходит для запросов внутри типовых механизмов. Ограничение: изменение кода, обязательная чистка после диагностики

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

Итог

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

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

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

Почему запрос «ВЫБРАТЬ * ИЗ ВТ» выдаёт ошибку «Таблица не найдена»?

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

Можно ли посмотреть временную таблицу прямо в окне «Вычислить выражение»?

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

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

Добавьте в выборку ограничение: ВЫБРАТЬ ПЕРВЫЕ 100 * ИЗ ИмяТаблицы либо условие ГДЕ по ключевому полю. Это ускорит диагностику и не будет грузить консоль лишними данными.

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

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

Можно ли посмотреть временную таблицу запроса, который выполняется в СКД?

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