Разработка и Конфигурация · 12 мин
Виртуальные таблицы 1С: какие есть и когда их применять
Какие виртуальные таблицы есть в 1С: остатки, обороты, срезы, актуальность итогов. Как выбрать таблицу в запросе, избежать ошибок и проверить результат.
Виртуальные таблицы — это специальные источники данных в языке запросов 1С, которые платформа строит на лету из физических таблиц регистров. Они позволяют получить уже агрегированные итоги: остатки на дату, обороты за период, срез последних значений — одним простым запросом вместо сложной группировки по движениям. Практически любой отчёт по складу, финансам или расчётам с контрагентами опирается именно на виртуальные таблицы.
При этом виртуальные таблицы — не «настоящие» таблицы в базе данных. Когда запрос обращается к ним, платформа динамически формирует SQL-обращение к таблицам итогов и движений. Отсюда следуют два важных свойства: с одной стороны, разработчик получает готовые агрегаты почти бесплатно, с другой — неправильное использование (например, обращение без параметров) может сильно замедлить запрос.
Набор доступных виртуальных таблиц зависит от типа объекта конфигурации: регистры накопления, регистры сведений, регистры бухгалтерии и регистры расчёта имеют разные наборы. Ниже разобраны все основные виды, условия их доступности и типовые ошибки при работе с ними.
Что такое виртуальная таблица и как она работает
Виртуальная таблица — это не объект, хранящийся в базе, а конструкция языка запросов, которую платформа разворачивает в обращение к физическим таблицам. Например, таблица «Остатки» регистра накопления читает таблицу итогов, а таблица «Обороты» — либо итоги оборотов, либо группирует движения, если итоги по нужному периоду не хранятся.
Именно поэтому параметры виртуальной таблицы так важны: они подставляются прямо в формируемый платформой SQL-запрос и ограничивают объём читаемых данных. Запрос к «Остатки» без указания периода заставит платформу рассчитывать остатки по всем движениям регистра, что на больших базах приводит к заметным паузам.
Виртуальные таблицы регистров накопления
Регистры накопления дают самый востребованный набор виртуальных таблиц. Для регистров с видом «Остатки» доступны три таблицы: Остатки, Обороты и ОстаткиИОбороты. Для регистров с видом «Обороты» доступна только таблица Обороты — понятия «остаток» у оборотного регистра нет.
Таблица Остатки возвращает остатки по измерениям на указанный момент времени. Типовое применение — складские остатки, взаиморасчёты, резервы товаров. В параметрах указывают период и условие отбора по измерениям. Если период не задан, берутся текущие остатки.
Таблица Обороты возвращает суммы прихода и расхода за интервал с возможностью группировки по периодам (день, месяц, квартал) и по регистраторам. Таблица ОстаткиИОбороты объединяет оба показателя: начальный остаток, приход, расход и конечный остаток за период. Она удобна для отчётов вида «сальдо-оборотная ведомость» по товарам или контрагентам, но тяжелее двух первых, поэтому не стоит применять её там, где достаточно только остатков.
Какую таблицу регистра накопления выбрать
Нужны только остатки на дату: склад, долги, резервы. Самый лёгкий вариант.
Нужны суммы движений за период или разбивка по дням/месяцам/документам.
Нужен полный отчёт «начало — движение — конец». Тяжелее остальных, используйте осознанно.
Виртуальные таблицы регистров сведений
Для периодических регистров сведений доступны две таблицы: СрезПервых и СрезПоследних. СрезПоследних возвращает самые свежие значения ресурсов на указанную дату — классический пример: актуальные цены номенклатуры, курсы валют, ФИО сотрудника. СрезПервых работает зеркально: возвращает самые ранние значения на дату и после неё, что полезно при анализе истории изменений.
Обе таблицы доступны только если у регистра сведений установлена периодичность (регистр периодический). Для непериодического регистра сведений виртуальных таблиц нет вовсе — данные читаются напрямую из основной таблицы. В параметрах срезов указывают дату среза и условие отбора по измерениям; отбор лучше задавать именно в параметрах, а не в секции ГДЕ — это быстрее.
Виртуальные таблицы регистров бухгалтерии
Регистры бухгалтерии предоставляют самый богатый набор: Остатки, Обороты, ОстаткиИОбороты и ДвиженияССубконто. Особенность в том, что ресурсы здесь раздваиваются по дебету и кредиту (СуммаДт, СуммаКт), а в параметрах появляются отборы по счёту, субконто и организации.
Таблица Остатки даёт сальдо по счетам и субконто на дату, Обороты — обороты за период, в том числе корреспонденции между счетами (поля КорСчет, КорСубконто). Таблица ДвиженияССубконто — это фактически проводки с развёрнутыми субконто; она удобна для детальных расшифровок, но по объёму чтения близка к прямому чтению движений.
Параметры виртуальных таблиц бухгалтерии строго позиционные: период, отбор по счёту, виды субконто, условие. Частая ошибка — передавать отбор по субконто в секции ГДЕ вместо параметра «Виды субконто»: платформа тогда вынуждена читать лишние данные и запрос работает медленнее.
Виртуальные таблицы регистров расчёта
Регистры расчёта имеют специализированные таблицы, связанные с механизмом вытеснения и периодом действия. Основные из них: ФактическийПериодДействия — показывает реальные интервалы действия записей с учётом вытеснения другими видами расчёта, и ДанныеГрафика — возвращает данные связанного графика работы (норму часов и дней) по периодам действия записей.
Дополнительно доступны таблицы База — для получения расчётной базы по зависимым видам расчёта, и Перерасчеты — список записей, требующих перерасчёта. Эти таблицы применяются внутри расчётных модулей и в отчётах по зарплате; вне расчётных задач они почти не используются.
Обороты доступны всегда, остатки — только у вида «Остатки»
Только для периодических регистров
Плюс отборы по счёту и субконто в параметрах
Работают с периодом действия и вытеснением
Как правильно задавать параметры и отборы
Параметры виртуальной таблицы указываются в круглых скобках после её имени и имеют строго фиксированные позиции. Например, для таблицы Остатки регистра накопления первый параметр — период, второй — условие отбора в виде строки. Пропускать параметры можно, оставляя запятые, но осознанно: пропущенный период означает расчёт по всем движениям.
Главное правило производительности: все ограничения, которые можно выразить параметрами виртуальной таблицы, должны быть в параметрах, а не в секции ГДЕ основного запроса. Условие в ГДЕ применяется уже после того, как виртуальная таблица сформирована целиком, — то есть сначала читаются лишние данные, потом они отбрасываются.
ВЫБРАТЬ Остатки.Номенклатура, Остатки.КоличествоОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, Склад = &Склад) КАК Остатки- 1Определите, какой агрегат нужен: остаток, оборот или срез значений
- 2Выберите соответствующую виртуальную таблицу и проверьте её доступность для регистра
- 3Передайте период и отборы через параметры таблицы, а не через ГДЕ
- 4Проверьте результат на тестовых данных: сверьте остатки со стандартным отчётом
- 5Замерьте время выполнения на копии рабочей базы при большом объёме данных
Типичные ошибки и ограничения
Самая распространённая ошибка — обращение к виртуальной таблице без параметров периода в запросах, которые выполняются часто (в проведении документов, в подписках на события). На небольшой базе это незаметно, на рабочей — приводит к блокировкам и таймаутам. Вторая частая проблема — соединение виртуальной таблицы с таблицей движений без дублирования отборов, из-за чего СУБД строит неоптимальный план.
Есть и принципиальные ограничения. Виртуальные таблицы не поддерживают произвольные вычисляемые поля на уровне своего определения — все вычисления делаются в основном запросе. Таблица ОстаткиИОбороты не учитывает документы, проведённые после границы расчёта итогов, если итоги не актуализированы, — поэтому для регистров в режиме разделения итогов следят за актуальностью. Наконец, срезы периодических регистров сведений могут вернуть устаревшее значение, если запись с нужной датой ещё не введена, — это не ошибка платформы, а отражение реального состояния данных.
Как проверить результат и выбрать подход
Надёжный способ проверки — сверить результат запроса со штатным отчётом конфигурации: универсальным отчётом, отчётом по остаткам склада или оборотно-сальдовой ведомостью. Совпадение итогов на контрольных датах (конец месяца, произвольная дата внутри периода) подтверждает корректность параметров. Расхождение чаще всего означает неверно заданный период: например, остатки «на начало дня» вместо «на конец дня».
При выборе между виртуальной таблицей и прямым чтением движений руководствуйтесь задачей. Если нужен агрегат — виртуальная таблица почти всегда предпочтительнее: она использует хранимые итоги. Если нужна детализация до строк документов — читайте таблицу движений напрямую, виртуальные таблицы здесь только добавят лишний слой.
Как проверить результат запроса
Суммы совпадают со стандартным отчётом на контрольные даты
Расхождения на одну и ту же дату — проверьте границу периода
Запрос отрабатывает за приемлемое время на рабочем объёме данных
Заметная пауза — проверьте, заданы ли параметры периода и отборы
Все ожидаемые позиции присутствуют в выборке
Часть позиций потеряна — возможно, лишний отбор в параметрах таблицы
Как выбрать источник данных
Частые вопросы
Чем виртуальная таблица отличается от временной таблицы в запросе?
Виртуальная таблица — встроенный источник данных, который платформа вычисляет из регистра; она существует всегда и не требует создания. Временная таблица — это промежуточный результат, который разработчик сам помещает в менеджер временных таблиц внутри пакетного запроса и использует в последующих запросах пакета.
Почему запрос к таблице Остатки возвращает неактуальные данные?
Чаще всего причина в границе периода: остатки «на дату» без указания времени считаются на начало дня, а движения текущего дня ещё не попадают в выборку. Реже — в неактуализированных итогах регистра. Проверьте период параметра и при необходимости используйте конец дня или границу с включением документа.
Можно ли создать собственную виртуальную таблицу?
Нет, состав виртуальных таблиц жёстко определён платформой для каждого типа регистра. Разработчик может лишь использовать существующие с параметрами либо строить аналогичную логику вручную — группировкой по таблице движений.
Какая виртуальная таблица самая быстрая?
Однозначного ответа нет: скорость зависит от объёма данных, параметров и хранимых итогов. Как правило, Остатки с заданным периодом читает готовые итоги и работает быстрее, чем ОстаткиИОбороты, которой нужно рассчитывать движения за интервал. Главный фактор скорости — не выбор таблицы, а корректно заданные параметры.
Доступны ли виртуальные таблицы в СКД и динамических списках?
В СКД — да: набор данных типа «Запрос» поддерживает обращение к любым виртуальным таблицам, и это стандартный способ построения отчётов. В динамических списках произвольный запрос с виртуальными таблицами возможен, но с ограничениями: такой список теряет часть штатных возможностей интерактивной работы.
Что важно запомнить
Виртуальные таблицы 1С — это готовые агрегаты регистров: Остатки, Обороты и ОстаткиИОбороты у регистров накопления, СрезПервых и СрезПоследних у периодических регистров сведений, расширенный набор у регистров бухгалтерии и расчёта. Всегда задавайте период и отборы через параметры таблицы, выбирайте минимально достаточный агрегат и проверяйте итоги по стандартным отчётам.