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

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

Отличие реальных и виртуальных таблиц в 1С

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

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

Неправильный выбор таблицы — одна из самых частых причин медленных запросов и неверных результатов. Например, соединение с таблицей движений регистра накопления вместо «Остатков» заставляет платформу сканировать миллионы записей, хотя готовый итог можно получить одной строкой запроса.

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

Что такое реальная таблица в 1С

Реальная (физическая) таблица — это таблица, которая реально существует в СУБД и хранит данные объекта конфигурации. Когда вы создаёте в конфигураторе справочник, документ или регистр, платформа автоматически создаёт для него одну или несколько таблиц в базе данных. Записать в такую таблицу можно только через объектную модель 1С или проведение документа — напрямую SQL-запросами данные менять нельзя.

Примеры реальных таблиц: таблица справочника «Номенклатура», таблица документа «РеализацияТоваровУслуг», таблица движений регистра накопления «ТоварыНаСкладах», таблица записей регистра сведений «ЦеныНоменклатуры». В языке запросов к ним обращаются по имени объекта: РегистрНакопления.ТоварыНаСкладах — это и есть реальная таблица движений.

Реальная таблица регистра накопления содержит каждую строку движения: период, регистратор, вид движения (приход или расход), измерения, ресурсы. Если по складу прошло сто тысяч приходов и расходов, в таблице будет сто тысяч строк. Чтобы узнать текущий остаток, пришлось бы просуммировать их все — именно эту задачу решают виртуальные таблицы.

Что такое виртуальная таблица и как она работает

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

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

Из-за этого обращение к виртуальной таблице без параметров может быть дорогим. Запрос СрезПоследних без указания периода и отбора заставит платформу перебрать все записи регистра сведений и для каждой комбинации измерений найти последнюю. На больших регистрах это заметно нагружает сервер.

Какие виртуальные таблицы есть у разных объектов

Набор виртуальных таблиц зависит от типа объекта метаданных. Справочники и документы виртуальных таблиц не имеют — у них есть только реальные таблицы и табличные части. Основные виртуальные таблицы сосредоточены у регистров.

ОбъектВиртуальные таблицыЧто возвращают
Регистр накопления (остатки)Остатки, ОстаткиИОбороты, ОборотыТекущие остатки, остатки с оборотами за период, суммы оборотов
Регистр накопления (обороты)ОборотыСуммы оборотов за период по измерениям
Регистр сведений (периодический)СрезПервых, СрезПоследнихЗначения ресурсов на самую раннюю или позднюю дату
Регистр бухгалтерииОстатки, Обороты, ОстаткиИОбороты, ОборотыДтКтСальдо и обороты по счетам, в т.ч. корреспонденции
Регистр расчётаДанныеГрафика, ФактическийПериодДействияДанные графика работы, периоды с учётом вытеснения
ПоследовательностьГраницыГраницу актуальности последовательности

У задач есть виртуальная таблица «ЗадачиПоИсполнителю», у бизнес-процессов — таблицы для выборки по точкам маршрута. Они встречаются реже, но работают по тому же принципу: платформа вычисляет результат из реальных таблиц объекта.

Когда использовать реальную таблицу, а когда виртуальную

Правило выбора простое: если нужны сами записи — берите реальную таблицу, если нужны агрегированные итоги — виртуальную. Реальная таблица движений нужна, когда вы анализируете конкретные проводки: какие документы двигали товар, в каком порядке шли движения, какие записи сформировал конкретный регистратор.

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

Маршрут решения

Как выбрать источник данных

Нужен список конкретных движений или записей регистратораИспользуйте реальную таблицу регистра с отбором по регистратору или периоду
Нужен остаток на дату или сальдо по счётуИспользуйте виртуальную таблицу Остатки с параметром периода
Нужны итоги за период по измерениямИспользуйте Обороты или ОстаткиИОбороты с указанием периодичности
Нужно актуальное значение периодического сведения (цена, курс, ставка)Используйте СрезПоследних с явным отбором по измерениям

Пример: остаток товара

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

ВЫБРАТЬ

Остатки.Номенклатура,

Остатки.КоличествоОстаток

ИЗ

РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, Склад = &Склад) КАК Остатки

Здесь период и отбор по складу передаются как параметры виртуальной таблицы — платформа возьмёт готовые итоги и применит отбор на уровне СУБД, а не после выборки.

Как передавать параметры виртуальным таблицам

У каждой виртуальной таблицы есть свой набор параметров, которые указываются в скобках после имени. Для «Остатков» это период и условие отбора, для «Оборотов» — начало и конец периода, периодичность, условие. Для «СрезаПоследних» — период и условие по измерениям.

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

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

Как проверить, что запрос работает правильно

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

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

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

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

Совпадение с типовым отчётом
Норма

Остаток из запроса равен остатку в отчёте на ту же дату и границу

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

Расхождение на сумму движений за день — неверная граница периода

План запроса
Норма

Чтение таблицы итогов регистра

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

Полное сканирование таблицы движений

Отбор по измерениям
Норма

Условие передано в параметры виртуальной таблицы

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

Условие только в секции ГДЕ основного запроса

Итог

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

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

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

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

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

Почему запрос к «Остатки» работает медленно, хотя таблица виртуальная?

Чаще всего отключено или неактуально хранение итогов регистра, либо отбор по измерениям передан в секцию ГДЕ вместо параметров. Проверьте границу итогов и перенесите условия в параметры виртуальной таблицы.

Чем «ОстаткиИОбороты» отличается от «Обороты»?

«Обороты» возвращает только суммы прихода и расхода за период. «ОстаткиИОбороты» дополнительно даёт начальный и конечный остаток на границы периода — именно она нужна для отчётов формата «было — приход — расход — стало».

Есть ли виртуальные таблицы у справочников и документов?

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

Как получить цену товара на дату из регистра сведений?

Используйте виртуальную таблицу СрезПоследних с параметром периода и отбором по номенклатуре в параметрах, а не в условии ГДЕ. Так платформа вычислит срез только по нужным позициям.

Правда ли, что виртуальные таблицы всегда быстрее реальных?

Нет. Они быстрее только для агрегированных данных при правильно переданных параметрах и актуальных итогах. Для выборки отдельных движений по регистратору реальная таблица с отбором будет эффективнее.