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

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

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

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

Временная таблица в 1С существует только внутри пакетного запроса и недоступна напрямую из отладчика, поэтому новички часто теряются, когда нужно проверить её содержимое. На практике есть несколько рабочих способов: дописать в конец пакета запрос ВЫБРАТЬ ... ИЗ ВТ, использовать консоль запросов с поддержкой временных таблиц или выгрузить результат в таблицу значений и посмотреть её в отладчике.

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

Что такое временная таблица и почему её не видно напрямую

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

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

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

Способ 1: выборка из временной таблицы в том же пакете

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

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Продажи.Номенклатура,

| СУММА(Продажи.Количество) КАК Количество

|ПОМЕСТИТЬ ВТ_Продажи

|ИЗ

| РегистрНакопления.Продажи КАК Продажи

|СГРУППИРОВАТЬ ПО

| Продажи.Номенклатура

|;

|

|ВЫБРАТЬ

| ВТ_Продажи.Номенклатура,

| ВТ_Продажи.Количество

|ИЗ

| ВТ_Продажи КАК ВТ_Продажи";

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

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

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

Порядок действий
  1. 1
    Откройте текст запроса в модуле или консоли запросов
  2. 2
    Найдите имя нужной временной таблицы после слова ПОМЕСТИТЬ
  3. 3
    Добавьте в конец пакета: ВЫБРАТЬ * ИЗ ИмяТаблицы КАК ИмяТаблицы
  4. 4
    Выполните запрос и выгрузите результат в таблицу значений
  5. 5
    Проверьте количество строк и значения ключевых колонок

Способ 2: просмотр через менеджер временных таблиц в отладчике

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

// В отладчике, в окне "Вычислить выражение" (Shift+F9):

ЗапросВТ = Новый Запрос;

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

ЗапросВТ.Текст = "ВЫБРАТЬ * ИЗ ВТ_Продажи КАК ВТ_Продажи";

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

После этого переменную ТЗ можно раскрыть в табло и визуально просмотреть все строки и колонки. Этот приём не меняет код конфигурации и безопасен: чтение временной таблицы не влияет на данные.

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

Способ 3: консоль запросов и консоль кода

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

Дополнительно консоль кода (или обработка «Консоль заданий»/аналоги) позволяет выполнить произвольный фрагмент в контексте сеанса: создать запрос, назначить менеджер и выгрузить таблицу. Это удобно, когда нужно быстро проверить гипотезу на реальных данных без запуска конфигуратора.

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

Временные таблицы в СКД и типовых отчётах

В схеме компоновки данных временные таблицы создаются в наборе данных «Запрос» тем же словом ПОМЕСТИТЬ. Посмотреть их сложнее, потому что СКД сама управляет выполнением пакета и менеджером временных таблиц — перехватить их снаружи нельзя.

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

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

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

Выборка ИЗ ВТ в конце пакета

Универсально и быстро, но требует права менять текст запроса; для готового пакета используйте ВыполнитьПакет()

Отдельный запрос к менеджеру ВТ

Не требует правки кода, но работает только при явно созданном менеджере, доступном в переменной

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

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

Правка схемы СКД

Единственный способ для отчётов на СКД, но рискованно на продуктиве — делайте на копии

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

Самая частая ошибка — обращение к временной таблице после уничтожения менеджера. Симптом: ошибка «Таблица не найдена: ВТ_...». Проверьте, что переменная с менеджером временных таблиц жива в момент обращения и назначена запросу.

Вторая распространённая проблема — неоднозначное имя поля при выборке ВЫБРАТЬ * из таблицы с большим числом колонок или повторное использование имени ВТ в одном менеджере без УНИЧТОЖИТЬ. Платформа выдаст ошибку о повторном создании таблицы, если предыдущая с тем же именем не удалена.

Третья группа ошибок связана с производительностью: разработчик помещает в ВТ миллионы записей без индексации, а потом соединяет её с другой таблицей. Если отладочная выборка «висит», проверьте, есть ли в запросе конструкция ИНДЕКСИРОВАТЬ ПО для полей соединения — её отсутствие заметно замедляет пакет на больших объёмах.

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

Как проверить результат и когда обращаться к специалисту

Контрольные точки после просмотра временной таблицы: число строк соответствует ожиданиям (например, совпадает с количеством записей в исходном регистре после отборов), ключевые поля не содержат неожиданных NULL, а суммы сходятся с данными исходных документов. Расхождение на этом этапе почти всегда означает ошибку в условиях соединения или группировки.

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

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

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

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

Совпадает с ожидаемым по отборам исходного запроса

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

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

Значения ключевых полей
Норма

Заполнены, без неожиданных NULL

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

NULL в полях соединения — вероятно, левое соединение не нашло пару

Итоговые суммы
Норма

Сходятся с контрольным отчётом по исходным данным

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

Задвоение сумм — признак дублирования строк при соединении

Итог

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

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

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

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

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

Почему возникает ошибка «Таблица не найдена» при обращении к ВТ?

Чаще всего менеджер временных таблиц уже уничтожен: он был создан неявно и удалён после выполнения пакета, либо переменная с явным менеджером вышла из области видимости. Также проверьте точное имя таблицы — оно регистронезависимо, но опечатки недопустимы.

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

Удобнее всего скопировать текст запроса в консоль запросов, подставить фактические значения параметров и выполнить пакет там. Альтернатива — временная правка в расширении конфигурации с добавлением выборки из ВТ и выводом результата в файл или сообщение.

Можно ли увидеть временные таблицы отчёта на СКД?

Напрямую — нет, СКД управляет менеджером сама. Практические варианты: выполнить текст запроса из схемы в консоли с теми же параметрами или временно заменить в схеме финальную выборку на выборку из нужной ВТ, работая на копии базы или в расширении.

Чем УНИЧТОЖИТЬ отличается от автоматического удаления таблицы?

Команда УНИЧТОЖИТЬ удаляет таблицу из менеджера немедленно, освобождая ресурсы и позволяя создать таблицу с тем же именем повторно. Без неё таблица живёт до конца существования менеджера, что при больших объёмах расходует память сервера.