Работа с временными таблицами в запросах 1С — одна из самых востребованных операций при разработке и отладке конфигураций. Эти таблицы создаются на лету, существуют только в рамках текущего сеанса и часто содержат критически важные промежуточные данные. Однако многие разработчики сталкиваются с проблемой: как же физически увидеть, что хранится внутри такой таблицы, если она не сохраняется в базе? Без этого отладка сложных запросов превращается в угадывание на кофейной гуще.

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

Если вы когда-нибудь ловили себя на мысли: "Почему мой запрос возвращает не то, что я ожидал?" или "Где же пропадают данные при объединении таблиц?" — эта инструкция для вас. Мы не будем ограничиваться теорией: каждый метод проиллюстрирован скриншотами (описаниями интерфейса) и готовыми к использованию примерами кода.

1. Метод 1: Использование консоли запросов 1С

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

Чтобы открыть консоль, перейдите в меню Все функции → Стандартные → Консоль запросов (для обычных форм) или нажмите Ctrl+Shift+Q в управляемом приложении. Далее следуйте алгоритму:

  • 🔹 Создайте временную таблицу в своём запросе с помощью конструкции ВЫБРАТЬ ... ПОМЕСТИТЬ ВТ_ИмяТаблицы. Например:
    ВЫБРАТЬ
    

    Товар,

    СУММА(Количество) КАК ИтогоКоличество

    ИЗ

    Документ.РеализацияТоваров.Товары

    ГДЕ

    Дата МЕЖДУ &НачалоПериода И &КонецПериода

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

    Товар

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

  • 🔹 Выполните запрос с созданием временной таблицы (нажмите F5 или кнопку "Выполнить").
  • 🔹 Просмотрите данные: в той же консоли введите запрос ВЫБРАТЬ * ИЗ ВТ_ИмяТаблицы и выполните его.

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

💡

Если временная таблица пустая, проверьте синтаксис её создания: часто ошибки кроются в неверных условиях отбора или группировки. Используйте конструкцию СООБЩИТЬ(Строка(ВЫБОРКА.Количество())) после создания таблицы, чтобы убедиться, что данные в неё попали.

2. Метод 2: Отладчик 1С и точки останова

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

Алгоритм действий:

  1. Установите точку останова на строке после выполнения запроса, который создаёт временную таблицу. Например, если ваш код выглядит так:
    Запрос = Новый Запрос;
    

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

    "ВЫБРАТЬ ...

    ПОМЕСТИТЬ ВТ_Данные";

    Результат = Запрос.Выполнить(); // <-- Здесь ставим точку останова

  2. Запустите отладку (F5 или кнопка "Отладка").
  3. Когда выполнение остановится, откройте Локальные переменные в панели отладчика и найдите объект Запрос.
  4. Разверните свойство ВременныеТаблицы — там будут доступны все созданные таблицы с возможностью просмотра данных.

Преимущество этого метода в том, что вы можете не только увидеть данные, но и изменить их на лету (например, для тестирования различных сценариев). Однако есть нюанс:

Ограничения отладчика при работе с большими таблицами

Если временная таблица содержит более 10 000 строк, отладчик 1С может "подвисать" при попытке её развернуть. В таких случаях лучше использовать метод выгрузки данных в табличный документ (см. следующий раздел) или внешние инструменты вроде SQL Profiler.

3. Метод 3: Выгрузка данных в табличный документ

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

Пример кода для выгрузки:

// 1. Создаём запрос с временной таблицей

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

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

"ВЫБРАТЬ

| Номенклатура КАК Товар,

| СУММА(Количество) КАК Количество

|ИЗ

| Документ.ПоступлениеТоваров.Товары

|ГДЕ

| Дата = &ДатаПоступления

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

| Номенклатура

|ПОМЕСТИТЬ ВТ_Поступления";

// 2. Выполняем запрос

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

// 3. Получаем данные временной таблицы

Выборка = Результат.Выбрать();

ТаблицаДокумент = Новый ТабличныйДокумент;

// 4. Формируем колонки

ТаблицаДокумент.Колонки.Добавить("Товар");

ТаблицаДокумент.Колонки.Добавить("Количество");

// 5. Заполняем данными

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

НоваяСтрока = ТаблицаДокумент.Область().Строки.Добавить();

НоваяСтрока.Ячейки.Товар.Значение = Выборка.Товар;

НоваяСтрока.Ячейки.Количество.Значение = Выборка.Количество;

КонецЦикла;

// 6. Отображаем результат

ТаблицаДокумент.Показать("Данные временной таблицы ВТ_Поступления");

Этот метод особенно полезен, когда нужно:

  • 📊 Сравнить данные из нескольких временных таблиц.
  • 📤 Экспортировать данные в Excel через ТаблицаДокумент.Записать().
  • 🔍 Проанализировать большие объёмы (до 100 000 строк без зависаний).
📊 Какой метод просмотра временных таблиц вы используете чаще?
Консоль запросов
Отладчик 1С
Выгрузка в табличный документ
Внешние инструменты (SQL Profiler и др.)

4. Распространённые ошибки и как их избежать

Даже опытные разработчики 1С иногда сталкиваются с проблемами при работе с временными таблицами. Вот TOP-5 ошибок и способы их решения:

Ошибка Причина Решение
Таблица не создаётся (ошибка "Неизвестное имя временной таблицы") Опечатка в имени таблицы или запрос не выполнен Проверьте регистр символов в имени (ВТ_Таблица ≠ вт_таблица). Используйте СООБЩИТЬ(Запрос.Текст) для вывода текста запроса перед выполнением.
Данные в таблице не соответствуют ожидаемым Неверные условия отбора или объединения Разбейте сложный запрос на части и проверяйте каждую временную таблицу отдельно. Используйте ПОКАЗАТЬ ЗНАЧЕНИЯ ПАРАМЕТРОВ в консоли.
Таблица пустая, хотя данные должны быть Проблемы с правами доступа или транзакциями Проверьте, не обёрнут ли запрос в транзакцию с ОтменаТранзакции(). Попробуйте выполнить запрос от имени администратора.

⚠️ Внимание: Временные таблицы в 1С не поддерживают индексы. Если вы выполняете объединение (СОЕДИНИТЬ) больших временных таблиц, это может значительно замедлить запрос. В таких случаях рассмотрите возможность использования реальных таблиц базы данных или оптимизируйте запрос через подзапросы.

☑️ Проверка перед работой с временными таблицами

Выполнено: 0 / 4

5. Продвинутые техники: SQL Profiler и внешние инструменты

Для сложных случаев, когда встроенные средства 1С не дают полной картины, можно использовать внешние инструменты. Например, Microsoft SQL Server Profiler (для SQL-версий 1С) или PostgreSQL Log (для PostgreSQL-версий). Эти утилиты позволяют увидеть, какие именно SQL-запросы генерирует платформа 1С при работе с временными таблицами.

Как это работает:

  1. Запустите SQL Profiler и подключитесь к базе данных 1С.
  2. Настройте фильтр для отображения только запросов от вашего пользователя (по имени сеанса).
  3. Выполните в 1С запрос с созданием временной таблицы.
  4. В логе Profiler найдите запись с текстом CREATE TABLE #t... — это и есть ваша временная таблица.

Преимущества метода:

  • 🔍 Видите реальный SQL-код, который выполняет 1С.
  • 📈 Можно анализировать производительность запросов (время выполнения, используемые индексы).
  • 🛠️ Полезно для отладки межбазовых запросов или интеграций.

⚠️ Внимание: Использование SQL Profiler может нагружать сервер базы данных. Не оставляйте его включённым в рабочих системах дольше, чем необходимо для диагностики.

💡

Временные таблицы в 1С на уровне SQL создаются с префиксом #t (например, #t12345). Это позволяет отличить их от постоянных таблиц базы данных.

6. Оптимизация работы с временными таблицами

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

1. Минимизируйте объём данных:

  • 🗃️ Используйте ВЫБРАТЬ РАЗЛИЧНЫЕ или ГДЕ для сокращения количества строк.
  • 🧹 Удаляйте ненужные временные таблицы после использования: УНИЧТОЖИТЬ ВТ_ИмяТаблицы.

2. Избегайте вложенных временных таблиц:

Сложные запросы с несколькими уровнями ПОМЕСТИТЬ могут приводить к ошибкам компиляции. Вместо этого:

// Плохо (вложенные временные таблицы)

ВЫБРАТЬ ...

ПОМЕСТИТЬ ВТ_Уровень1

;

ВЫБРАТЬ ...

ИЗ ВТ_Уровень1

ПОМЕСТИТЬ ВТ_Уровень2

// Хорошо (один уровень)

ВЫБРАТЬ ...

ПОМЕСТИТЬ ВТ_Результат

3. Используйте параметры вместо жёстких условий:

Это сделает ваши запросы более гибкими и удобными для отладки:

Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ТекущаяДата()));

Запрос.Текст = "ВЫБРАТЬ ... ГДЕ Дата >= &ДатаНачала";

Как ускорить работу с большими временными таблицами

Если временная таблица содержит более 50 000 строк, рассмотрите возможность её разбиения на части с помощью конструкции ПАКЕТНЫЙ или переноса логики в внешнюю обработку с использованием ADODB или SQL-запросов напрямую.

7. Частые вопросы (FAQ)

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

Нет, временные таблицы существуют только в рамках одного сеанса. Однако вы можете:

  • Выгрузить данные в табличный документ и сохранить его в файл.
  • Использовать общие временные таблицы (доступны в 1С:Предприятие 8.3.14+ с флагом ВНЕШНЕЕ СОЕДИНЕНИЕ).
Почему после обновления 1С временные таблицы перестали отображаться в консоли?

В версиях 8.3.20+ изменился механизм работы с временными таблицами в консоли. Теперь для их просмотра нужно:

  1. Выполнить запрос с созданием таблицы.
  2. В той же консоли ввести ВЫБРАТЬ * ИЗ ВТ_ИмяТаблицы без предварительного очищения текста запроса.

Если это не помогает, проверьте настройки прав пользователя на работу с временными таблицами.

Как экспортировать данные временной таблицы в Excel?

Самый простой способ — использовать табличный документ:

ТаблицаДокумент.Записать("C:\Temp\Данные.xlsx", ТипФайлаТабличногоДокумента.XLSX);

Для автоматизации экспорта можно создать внешнюю обработку с кнопкой "Экспорт в Excel", которая будет выполнять этот код.

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

Да, но с оговорками:

  • В консоли запросов вы можете обновить данные через запрос ОБНОВИТЬ ВТ_ИмяТаблицы УСТАНОВИТЬ Поле = Значение.
  • В отладчике можно редактировать данные через окно Локальные переменные (но изменения не сохранятся после завершения отладки).
  • Для постоянных изменений лучше создать новую временную таблицу с нужными данными.
Как узнать, какие временные таблицы существуют в текущем сеансе?

В консоли запросов выполните:

ВЫБРАТЬ

ИмяКолонки("ИмяТаблицы") КАК Таблица,

ТипЗначения(Значение) КАК ТипДанных

ИЗ

ВТ_СистемныеТаблицы() КАК Значение

Этот запрос вернёт список всех временных таблиц, созданных в текущем сеансе, с указанием их структуры.