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