1. Как работают виртуальные таблицы? (Кратко)
-
Платформа 1С преобразует ваш короткий запрос к виртуальной таблице в сложный SQL-запрос к нескольким физическим таблицам регистра.
-
Например,
РегистрНакопления.Остатки— это не готовая таблица, а запрос, который выполняется каждый раз.
2. Ключевые принципы оптимизации
Принцип 1: Максимально конкретизируйте отборы.
-
Плохо:
bsl
ВЫБРАТЬ FROM РегистрНакопления.Остатки КАК Остатки // Запрос посчитает остатки по ВСЕМ регистрам на ВСЕ даты
-
Хорошо:
bsl
ВЫБРАТЬ FROM РегистрНакопления.Остатки КАК Остатки ГДЕ Остатки.Регистратор = &Док // Или отбор по периоду, по складу, по номенклатуре...
-
Всегда используйте отбор по Измерениям. Это позволяет СУБД использовать индексы.
-
Указывайте Период для остатков и Конкретную дату для итогов.
-
Принцип 2: Избегайте "тяжелых" вычислений в ядре запроса.
-
Плохо: Вычислять нестандартные поля прямо в
ВЫБРАТЬиз виртуальной таблицы. -
Хорошо: Сначала отфильтруйте и получите минимальный набор данных в ВТ, а потом делайте вычисления.
bsl
// Шаг 1: Помещаем сырые остатки во ВТ ВЫБРАТЬ Номенклатура, Количество, Сумма ПОМЕСТИТЬ ВТ_Остатки FROM РегистрНакопления.Остатки КАК Остатки ГДЕ Остатки.Склад = &СкладИ Остатки.Период = &Дата // Шаг 2: Делаем сложные вычисления ВЫБРАТЬ ВТ_Остатки.Номенклатура, ВТ_Остатки.Количество, ВТ_Остатки.Сумма, ВТ_Остатки.Сумма / ВТ_Остатки.Количество КАК Цена // Вычисление на уже отфильтрованных данных ИЗ ВТ_Остатки КАК ВТ_Остатки
Принцип 3: Используйте правильную виртуальную таблицу.
-
РегистрСведений.Последние— для быстрого получения последней записи по измерению. -
РегистрНакопления.Остатки— для остатков на конкретный момент. -
РегистрНакопления.Обороты— для оборотов за период. Не используйтеОстаткиИОбороты, если нужны только обороты — это избыточно.
3. Анализ плана запроса для виртуальных таблиц
-
Что смотреть: не пугайтесь сложного плана. Ищите те же
Table Scanпо основным таблицам регистра (RegRg,RegRgPPи т.д.). -
Если видите
Scanпо основной таблице регистра — значит, отборы не попадают в индексы. Нужно добавлять отборы по измерениям.
Заключение:
-
Виртуальные таблицы — мощный инструмент, но требующий аккуратного обращения.
-
Суть оптимизации: помочь СУБД, предоставив ей максимально конкретные условия в
WHERE, чтобы она могла использовать индексы и не перебирать гигабайты лишних данных.

