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

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

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

Как посмотреть содержимое временной таблицы в 1С: отладчик, метод ПолучитьМенеджерВременныхТаблиц, консоль запросов, выгрузка в таблицу значений. Примеры кода и типичные ошибки.

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

Есть несколько рабочих способов увидеть содержимое временной таблицы: чтение через менеджер временных таблиц в отладчике, выгрузка в таблицу значений с выводом в сообщение или табличный документ, использование консоли запросов с поддержкой временных таблиц, а также временная замена «ПОМЕСТИТЬ» на «ВЫБРАТЬ». Каждый способ подходит для своей ситуации — от быстрой проверки на этапе разработки до диагностики запроса внутри сложного проведения документа.

Ниже разобраны все основные приёмы с примерами кода, ограничения каждого подхода, типичные ошибки и способы проверить результат. Материал ориентирован на встроенный язык 1С:Предприятие 8.3 и управляемые формы, но большинство приёмов работает и в обычном приложении.

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

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

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

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

Просмотр через отладчик: самый быстрый способ

Если запрос выполняется в вашем коде, удобнее всего поставить точку останова сразу после строки Запрос.Выполнить() и воспользоваться командой «Вычислить выражение» (Shift+F9). В окне выражения формируется небольшой фрагмент кода, который обращается к тому же менеджеру временных таблиц и выгружает данные.

Пример выражения для вычисления в отладчике:

ЗапросОтладки = Новый Запрос;

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

ЗапросОтладки.Текст = "ВЫБРАТЬ * ИЗ ВТ_Данные";

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

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

Порядок действий в отладчике
  1. 1
    Поставьте точку останова после выполнения пакетного запроса
  2. 2
    Запустите отладку и дождитесь остановки
  3. 3
    Откройте «Вычислить выражение» (Shift+F9)
  4. 4
    Введите код создания нового запроса с тем же МенеджерВременныхТаблиц и текстом ВЫБРАТЬ * ИЗ имя таблицы
  5. 5
    Выполните выражение и разверните полученную таблицу значений
  6. 6
    Проверьте количество строк и значения ключевых полей

Если менеджер не был создан явно

Когда в коде менеджер временных таблиц не объявлен, обратиться к таблицам после выполнения запроса невозможно — они уже уничтожены. В этом случае временно добавьте в код строку Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; перед выполнением, перезапустите отладку, и способ выше заработает.

Выгрузка временной таблицы в сообщение или табличный документ

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

ЗапросЧтения = Новый Запрос;

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

ЗапросЧтения.Текст = "ВЫБРАТЬ * ИЗ ВТ_Остатки";

Выборка = ЗапросЧтения.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Сообщить("Номенклатура: " + Выборка.Номенклатура

+ ", Количество: " + Выборка.Количество);

КонецЦикла;

Для больших таблиц перебор в цикле неудобен — лучше выгрузить результат в таблицу значений и показать её на форме или сохранить в файл. Выгрузка методом Выгрузить() даёт объект ТаблицаЗначений, который можно передать в табличный документ через построитель или вывести в mxl-файл для анализа.

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

Консоль запросов с поддержкой временных таблиц

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

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

Учтите, что консоль запросов — это не штатный инструмент платформы: её нужно взять из состава инструментов разработчика (ИР), с диска ИТС или использовать аналогичную обработку, принятую в вашей команде. Возможности конкретных консолей отличаются, поэтому проверьте, поддерживает ли ваша версия просмотр временных таблиц.

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

Отладчик + Вычислить выражение

Подходит для кода, который можно запустить под отладкой. Не требует изменения программы, но нужен доступ к сеансу отладки.

Выгрузка в сообщение или файл

Работает без отладчика, включая фоновые задания. Требует временного изменения кода и последующей чистки.

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

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

Замена ПОМЕСТИТЬ на ВЫБРАТЬ

Быстрый трюк для одиночного шага. Не работает, если от временной таблицы зависят последующие части пакета.

Трюк с заменой «ПОМЕСТИТЬ» на «ВЫБРАТЬ»

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

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

Типичные ошибки при просмотре временных таблиц
01
Обращение к временной таблице через новый менеджер — таблица не найдена, потому что она живёт в другом экземпляре МенеджерВременныхТаблиц
02
Попытка прочитать таблицу после уничтожения запроса без явного менеджера — данные уже удалены платформой
03
Забытый отладочный вывод в рабочем коде — замедление проведения и лишние сообщения у пользователей
04
Замена ПОМЕСТИТЬ на ВЫБРАТЬ без отключения зависимых шагов — ошибка «Таблица не найдена» при выполнении пакета
05
Чтение таблицы после вызова МенеджерВременныхТаблиц.Закрыть() — все временные таблицы уже удалены

Проверка результата и границы безопасной работы

Чтобы убедиться, что вы смотрите именно те данные, которые видит основной запрос, сверьте количество строк в выгруженной таблице с ожиданиями по логике запроса. Если временная таблица строится с фильтрами по параметрам, проверьте, что в отладочном чтении используется тот же менеджер и таблица не была перезаписана повторным «ПОМЕСТИТЬ» с тем же именем.

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

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

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

Количество строк в выгруженной таблице
Норма

Совпадает с ожиданием по логике фильтров запроса

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

Строк ноль или заметно больше ожидаемого — проверяйте условия и соединения в шаге ПОМЕСТИТЬ

Менеджер временных таблиц в отладочном запросе
Норма

Указан тот же объект, что и у основного запроса

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

Создан новый менеджер — таблица не будет найдена

Состояние кода после отладки
Норма

Весь диагностический код удалён или закомментирован

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

Остались Сообщить() и вспомогательные запросы в рабочем модуле

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

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

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

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

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

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

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

Можно ли выгрузить временную таблицу в файл?

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

Влияет ли просмотр временной таблицы на производительность запроса?

Само чтение уже созданной таблицы выполняется быстро, так как данные находятся в памяти. Однако добавленный в рабочий код вывод большого объёма в сообщения или файл заметно замедлит выполнение, поэтому диагностику следует убирать после анализа.

Видны ли временные таблицы другим запросам в том же модуле?

Только если у этих запросов свойство МенеджерВременныхТаблиц указывает на один и тот же объект. Запросы без явного менеджера или с разными менеджерами не видят временные таблицы друг друга.

Итог

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

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