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