Виртуальных таблиц нет в базе: платформа строит их в момент запроса из таблиц движений и итогов регистра. От того, как вы передали параметры, зависит, посчитает ли СУБД остатки по одному складу или по всей базе.
Какие бывают
| Регистр | Таблицы |
|---|---|
| Накопления, вид Остатки | Остатки, Обороты, ОстаткиИОбороты |
| Накопления, вид Обороты | Обороты |
| Сведений, периодический | СрезПоследних, СрезПервых |
| Бухгалтерии | Остатки, Обороты, ОстаткиИОбороты, ОборотыДтКт, ДвиженияССубконто |
| Расчёта | ДанныеГрафика, ФактическийПериодДействия, базовые данные |
Параметры
Остатки(Период, Условие): остатки на момент. Без периода актуальные остатки.Обороты(НачалоПериода, КонецПериода, Периодичность, Условие).ОстаткиИОбороты(Начало, Конец, Периодичность, МетодДополнения, Условие).СрезПоследних(Период, Условие): по каждому набору измерений последняя запись с периодом не позже даты.
Поля ресурса Количество: КоличествоОстаток (Остатки), КоличествоПриход, КоличествоРасход, КоличествоОборот (Обороты), КоличествоНачальныйОстаток, КоличествоКонечныйОстаток (ОстаткиИОбороты).
Условие в параметрах или в ГДЕ
// Хорошо: считаются остатки только склада
РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад)
// Плохо: считаются остатки всех складов, потом фильтр
РегистрНакопления.ТоварыНаСкладах.Остатки() КАК Т ГДЕ Т.Склад = &Склад
Условие в параметрах попадает внутрь подзапроса, который строит таблицу. Условие в ГДЕ фильтрует уже посчитанный результат. Отбор по рассчитанному ресурсу (КоличествоОстаток < 0) возможен только в ГДЕ: до расчёта остатка ещё нет. Список значений передают через Номенклатура В (&Товары) или В (ВЫБРАТЬ Номенклатура ИЗ ВТТовары).
Границы периода
Даты в параметрах точные до секунды. Дата 31.03.2026 без времени это начало дня:
- в Обороты(&Начало, &Конец) движения 31 марта не попадут, если &Конец = 31.03.2026 0:00:00. Передают КонецДня(Дата);
- Остатки(&Дата) с датой без времени дадут остаток на утро.
При проведении остатки берут на момент документа. МоментВремени() даёт остаток до документа, а Новый Граница(МоментВремени(), ВидГраницы.Включая) с его движениями.
Периодичность и метод дополнения
Периодичность таблицы Обороты: Период, Регистратор, Запись, Секунда, День, Неделя, Месяц, Квартал, Год, Авто. Регистратор детализирует обороты до документа (для расшифровки), но не может пользоваться итогами.
МетодДополнения в ОстаткиИОбороты: Движения (строки только там, где были движения) или ДвиженияИГраницыПериода (ещё и строки на границах периода).
Срез на дату каждого документа
СрезПоследних принимает одну дату. Если нужна цена на дату каждого документа, срез не подходит: берут МАКСИМУМ(Период) с условием Период <= ДатаДокумента для каждой пары «товар, дата» и соединяют с физической таблицей регистра.
Производительность
- Условия на измерения в параметрах.
- Итоги регистра включены и рассчитаны.
- Не соединять большие таблицы с виртуальной таблицей без отбора: сначала отобрать во временную таблицу.
- Без цепочек точек в условиях.
Что спросят на собесе
- Почему условие лучше писать в параметрах виртуальной таблицы?
- Какие поля есть у таблицы Обороты регистра остатков?
- Почему отчёт за месяц не видит последний день?
- Как получить цену на дату каждого документа?
- Что такое граница Включая и зачем она при проведении?