Урок по треку Разработка на 1С 6 мин

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

Остатки, Обороты, ОстаткиИОбороты, СрезПоследних и условия в параметрах.

Виртуальных таблиц нет в базе: платформа строит их в момент запроса из таблиц движений и итогов регистра. От того, как вы передали параметры, зависит, посчитает ли СУБД остатки по одному складу или по всей базе.

Какие бывают

РегистрТаблицы
Накопления, вид ОстаткиОстатки, Обороты, ОстаткиИОбороты
Накопления, вид ОборотыОбороты
Сведений, периодическийСрезПоследних, СрезПервых
БухгалтерииОстатки, Обороты, ОстаткиИОбороты, ОборотыДтКт, ДвиженияССубконто
РасчётаДанныеГрафика, ФактическийПериодДействия, базовые данные

Параметры

  • Остатки(Период, Условие): остатки на момент. Без периода актуальные остатки.
  • Обороты(НачалоПериода, КонецПериода, Периодичность, Условие).
  • ОстаткиИОбороты(Начало, Конец, Периодичность, МетодДополнения, Условие).
  • СрезПоследних(Период, Условие): по каждому набору измерений последняя запись с периодом не позже даты.

Поля ресурса Количество: КоличествоОстаток (Остатки), КоличествоПриход, КоличествоРасход, КоличествоОборот (Обороты), КоличествоНачальныйОстаток, КоличествоКонечныйОстаток (ОстаткиИОбороты).

Условие в параметрах или в ГДЕ

// Хорошо: считаются остатки только склада
РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад)

// Плохо: считаются остатки всех складов, потом фильтр
РегистрНакопления.ТоварыНаСкладах.Остатки() КАК Т ГДЕ Т.Склад = &Склад

Условие в параметрах попадает внутрь подзапроса, который строит таблицу. Условие в ГДЕ фильтрует уже посчитанный результат. Отбор по рассчитанному ресурсу (КоличествоОстаток < 0) возможен только в ГДЕ: до расчёта остатка ещё нет. Список значений передают через Номенклатура В (&Товары) или В (ВЫБРАТЬ Номенклатура ИЗ ВТТовары).

Границы периода

Даты в параметрах точные до секунды. Дата 31.03.2026 без времени это начало дня:

  • в Обороты(&Начало, &Конец) движения 31 марта не попадут, если &Конец = 31.03.2026 0:00:00. Передают КонецДня(Дата);
  • Остатки(&Дата) с датой без времени дадут остаток на утро.

При проведении остатки берут на момент документа. МоментВремени() даёт остаток до документа, а Новый Граница(МоментВремени(), ВидГраницы.Включая) с его движениями.

Периодичность и метод дополнения

Периодичность таблицы Обороты: Период, Регистратор, Запись, Секунда, День, Неделя, Месяц, Квартал, Год, Авто. Регистратор детализирует обороты до документа (для расшифровки), но не может пользоваться итогами.

МетодДополнения в ОстаткиИОбороты: Движения (строки только там, где были движения) или ДвиженияИГраницыПериода (ещё и строки на границах периода).

Срез на дату каждого документа

СрезПоследних принимает одну дату. Если нужна цена на дату каждого документа, срез не подходит: берут МАКСИМУМ(Период) с условием Период <= ДатаДокумента для каждой пары «товар, дата» и соединяют с физической таблицей регистра.

Производительность

  • Условия на измерения в параметрах.
  • Итоги регистра включены и рассчитаны.
  • Не соединять большие таблицы с виртуальной таблицей без отбора: сначала отобрать во временную таблицу.
  • Без цепочек точек в условиях.

Что спросят на собесе

  • Почему условие лучше писать в параметрах виртуальной таблицы?
  • Какие поля есть у таблицы Обороты регистра остатков?
  • Почему отчёт за месяц не видит последний день?
  • Как получить цену на дату каждого документа?
  • Что такое граница Включая и зачем она при проведении?

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.