← Назад к вопросам

В чем разница между виртуальной и временной таблицей?

1.8 Middle🔥 171 комментариев
#Запросы и оптимизация#Объекты метаданных

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Виртуальные таблицы и временные таблицы в 1С

Основные понятия

Виртуальная таблица (Virtual Table) и временная таблица (Temporary Table) — это два разных механизма работы с данными в 1С:Предприятие, которые используются для различных целей и имеют разное устройство.

Виртуальная таблица

Виртуальная таблица — это таблица, которая существует только в оперативной памяти (в памяти сеанса) и не сохраняется на диск. Она создаётся на основе запроса или явно через код.

Характеристики виртуальной таблицы:

  • Место хранения: оперативная память
  • Время жизни: только в текущем сеансе
  • Скорость доступа: очень высокая (из памяти)
  • Размер: ограничен объёмом оперативной памяти сеанса
  • Автоматическое удаление: при завершении сеанса или явном удалении
// Пример создания виртуальной таблицы
ВиртуальнаяТаблица = Новая ТаблицаЗначений();
ВиртуальнаяТаблица.Колонки.Добавить("Артикул", Новый ОписаниеТипов("Строка"));
ВиртуальнаяТаблица.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
ВиртуальнаяТаблица.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));

СтрокаТабл = ВиртуальнаяТаблица.Добавить();
СтрокаТабл.Артикул = "АРТ-001";
СтрокаТабл.Количество = 10;
СтрокаТабл.Сумма = 1000;

// Для работы с большим объёмом данных используется ValueTable
Для Каждого Строка Из ВиртуальнаяТаблица Цикл
    Сообщение(Строка.Артикул + " - " + Строка.Количество);
КонецЦикла;

Применение виртуальных таблиц:

  • Обработка данных в памяти — быстро, для средних объёмов
  • Промежуточные расчёты — буферизация данных между запросами
  • Формирование отчётов — создание источника данных для вывода
  • Передача данных между процедурами — универсальный контейнер
  • Работа с результатами запросов — преобразование и трансформация

Временная таблица

Временная таблица — это таблица в БД, которая создаётся на время выполнения сложных операций и удаляется после завершения задачи. Часто используется в SQL запросах.

Характеристики временной таблицы:

  • Место хранения: база данных (временное хранилище)
  • Время жизни: на период выполнения запроса или явно удаляется
  • Скорость доступа: зависит от СУБД, может быть медленнее, чем виртуальная
  • Размер: ограничен объёмом БД, может быть больше чем оперативная память
  • Индексирование: поддерживает индексы для оптимизации запросов
// Пример создания временной таблицы в SQL запросе
Запрос = Новый Запрос();
Запрос.Текст = "
|ВЫБРАТЬ РАЗЛИЧНЫЕ
|    Документ.Ссылка КАК Документ,
|    Документ.Дата КАК Дата,
|    Документ.Номер КАК Номер
|ПОМЕСТИТЬ ВременнаяТабл
|ИЗ Документ.ПриходнаяНакладная КАК Документ
|ГДЕ Документ.Дата >= &ДатаНачало
|    И Документ.Дата <= &ДатаКончо
|;
|
|ВЫБРАТЬ
|    Табл.Документ,
|    Табл.Дата,
|    Табл.Номер
|ИЗ ВременнаяТабл КАК Табл
|УПОРЯДОЧИТЬ ПО Табл.Дата
";

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

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

Сравнительная таблица

ХарактеристикаВиртуальная таблицаВременная таблица
Место храненияОперативная памятьБаза данных
Время жизниСеансЗапрос или явное удаление
Скорость доступаОчень высокаяЗависит от БД
Максимальный размерОграничен RAMОграничен диском БД
ИндексированиеНет встроенногоДа, поддерживает индексы
Для больших объёмовНеподходящаяПодходящая
Примеры использованияБуферизация, отчётыСложные SQL запросы
СинтаксисТаблицаЗначенийПОМЕСТИТЬ в SQL

Практические рекомендации

Используй виртуальную таблицу если:

  • Нужна быстрая работа с малым объёмом данных (тысячи строк)
  • Требуется обработка в памяти без обращения к БД
  • Передача данных между процедурами
  • Формирование отчётов в памяти

Используй временную таблицу если:

  • Работаешь с большим объёмом данных (миллионы строк)
  • Нужны сложные SQL запросы с объединениями
  • Требуется индексирование для оптимизации
  • Нужны многоуровневые вычисления в БД

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

// Комбинированный пример
Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ ... ПОМЕСТИТЬ ВремТабл ...";
РезультатЗапроса = Запрос.Выполнить();

ВиртуальнаяТабл = РезультатЗапроса.Выгрузить();
// Теперь работаем с данными в памяти

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

В чем разница между виртуальной и временной таблицей? | PrepBro