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