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

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

Виртуальные таблицы 1С: какие есть и когда их применять

Какие виртуальные таблицы есть в 1С: остатки, обороты, срезы, актуальность итогов. Как выбрать таблицу в запросе, избежать ошибок и проверить результат.

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

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

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

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

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

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

Виртуальные таблицы регистров накопления

Регистры накопления дают самый востребованный набор виртуальных таблиц. Для регистров с видом «Остатки» доступны три таблицы: Остатки, Обороты и ОстаткиИОбороты. Для регистров с видом «Обороты» доступна только таблица Обороты — понятия «остаток» у оборотного регистра нет.

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

Таблица Обороты возвращает суммы прихода и расхода за интервал с возможностью группировки по периодам (день, месяц, квартал) и по регистраторам. Таблица ОстаткиИОбороты объединяет оба показателя: начальный остаток, приход, расход и конечный остаток за период. Она удобна для отчётов вида «сальдо-оборотная ведомость» по товарам или контрагентам, но тяжелее двух первых, поэтому не стоит применять её там, где достаточно только остатков.

Какую таблицу регистра накопления выбрать

Остатки

Нужны только остатки на дату: склад, долги, резервы. Самый лёгкий вариант.

Обороты

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

ОстаткиИОбороты

Нужен полный отчёт «начало — движение — конец». Тяжелее остальных, используйте осознанно.

Виртуальные таблицы регистров сведений

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

Обе таблицы доступны только если у регистра сведений установлена периодичность (регистр периодический). Для непериодического регистра сведений виртуальных таблиц нет вовсе — данные читаются напрямую из основной таблицы. В параметрах срезов указывают дату среза и условие отбора по измерениям; отбор лучше задавать именно в параметрах, а не в секции ГДЕ — это быстрее.

Виртуальные таблицы регистров бухгалтерии

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

Таблица Остатки даёт сальдо по счетам и субконто на дату, Обороты — обороты за период, в том числе корреспонденции между счетами (поля КорСчет, КорСубконто). Таблица ДвиженияССубконто — это фактически проводки с развёрнутыми субконто; она удобна для детальных расшифровок, но по объёму чтения близка к прямому чтению движений.

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

Виртуальные таблицы регистров расчёта

Регистры расчёта имеют специализированные таблицы, связанные с механизмом вытеснения и периодом действия. Основные из них: ФактическийПериодДействия — показывает реальные интервалы действия записей с учётом вытеснения другими видами расчёта, и ДанныеГрафика — возвращает данные связанного графика работы (норму часов и дней) по периодам действия записей.

Дополнительно доступны таблицы База — для получения расчётной базы по зависимым видам расчёта, и Перерасчеты — список записей, требующих перерасчёта. Эти таблицы применяются внутри расчётных модулей и в отчётах по зарплате; вне расчётных задач они почти не используются.

Регистр накопления (остатки)Остатки, Обороты, ОстаткиИОбороты

Обороты доступны всегда, остатки — только у вида «Остатки»

Регистр сведенийСрезПервых, СрезПоследних

Только для периодических регистров

Регистр бухгалтерииОстатки, Обороты, ОстаткиИОбороты, ДвиженияССубконто

Плюс отборы по счёту и субконто в параметрах

Регистр расчётаФактическийПериодДействия, ДанныеГрафика, База, Перерасчеты

Работают с периодом действия и вытеснением

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

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

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

bsl
ВЫБРАТЬ Остатки.Номенклатура, Остатки.КоличествоОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, Склад = &Склад) КАК Остатки
Порядок построения запроса к виртуальной таблице
  1. 1
    Определите, какой агрегат нужен: остаток, оборот или срез значений
  2. 2
    Выберите соответствующую виртуальную таблицу и проверьте её доступность для регистра
  3. 3
    Передайте период и отборы через параметры таблицы, а не через ГДЕ
  4. 4
    Проверьте результат на тестовых данных: сверьте остатки со стандартным отчётом
  5. 5
    Замерьте время выполнения на копии рабочей базы при большом объёме данных

Типичные ошибки и ограничения

Самая распространённая ошибка — обращение к виртуальной таблице без параметров периода в запросах, которые выполняются часто (в проведении документов, в подписках на события). На небольшой базе это незаметно, на рабочей — приводит к блокировкам и таймаутам. Вторая частая проблема — соединение виртуальной таблицы с таблицей движений без дублирования отборов, из-за чего СУБД строит неоптимальный план.

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

Типичные ошибки
01
Вызов Остатки без параметра периода — платформа считает остатки по всем движениям, запрос резко замедляется
02
Отбор по измерениям в секции ГДЕ вместо параметров таблицы — сначала читаются все итоги, потом отбрасываются лишние
03
Использование ОстаткиИОбороты там, где нужны только остатки — лишняя нагрузка без выигрыша
04
Попытка получить СрезПоследних у непериодического регистра сведений — таблица недоступна, запрос не пройдёт проверку
05
Ожидание актуальных остатков при отключенной актуальности итогов — данные не совпадают с движениями

Как проверить результат и выбрать подход

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

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

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

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

Соответствие итогов
Норма

Суммы совпадают со стандартным отчётом на контрольные даты

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

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

Время выполнения
Норма

Запрос отрабатывает за приемлемое время на рабочем объёме данных

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

Заметная пауза — проверьте, заданы ли параметры периода и отборы

Полнота данных
Норма

Все ожидаемые позиции присутствуют в выборке

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

Часть позиций потеряна — возможно, лишний отбор в параметрах таблицы

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

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

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

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

Чем виртуальная таблица отличается от временной таблицы в запросе?

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

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

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

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

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

Какая виртуальная таблица самая быстрая?

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

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

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

Итог

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

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