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