Виртуальная таблица «Обороты» регистра накопления 1С

Для регистра с типом «Обороты»

Регистр накопления с типом обороты  имеет виртуальную таблицу итогов, к которой мы можем обращаться в запросах. Регистр накопления с типом «Остатки» так же имеет такую виртуальную таблицу, но далее мы увидим, в чем отличие реально выполняемых на стороне СУБД.

Давайте посмотрим, что из себя представляет эта таблица, с точки зрения СУБД.

Запрос через виртуальную таблицу 1С без указания интервала дат

ВЫБРАТЬ
Контрагент,
СуммаОборот
ИЗ
РегистрНакопления.Закупки.Обороты

В СУБД

ВЫБРАТЬ
    Контрагент КАК Контрагент,
    СУММА(Сумма) КАК СуммаОборот
ИЗ
    РегистрНакопления.ЗакупкиТаблицаИтогов
СГРУППИРОВАТЬ ПО
    Контрагент

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

В частности в запросе 1С к виртуальной таблице нет поля Номенклатура и на стороне СУБД нет номенклатуры: данные берутся по Контрагенту и по нему агрегируются.

Курс 1С: Эксперт. Обороты регистра накопления с типом Обороты запрос 1С
На стороне 1С.
Курс 1С: Эксперт. Обороты регистра накопления с типом Обороты запрос СУБД
Виртуальная табл. «Обороты» в СУБД

А теперь давайте посмотрим, как это будет выглядеть, если мы зададим интервала дат, например, с 1 августа по 10 сентября  (2019.08.01 — 2019.09.10):

Запрос через виртуальную таблицу 1С с указанием интервала дат

ВЫБРАТЬ
    Контрагент,
    КоличествоОборот,
    СуммаОборот
ИЗ
    РегистрНакопления.Закупки.Обороты(2019.08.01, 2019.09.10,,)

В СУБД

ВЫБРАТЬ
    Контрагент КАК Контрагент,
    СУММА(Количество) КАК КоличествоОборот,
    СУММА(Сумма) КАК СуммаОборот
ИЗ
    РегистрНакопления.ЗакупкиТаблицаИтогов
ГДЕ
    Период >= 2019.08.01 И Период <= 2019.09.01
СГРУППИРОВАТЬ ПО
    Номенклатура

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Контрагент КАК Контрагент,
    СУММА(Количество) КАК КоличествоОборот,
    СУММА(Сумма) КАК СуммаОборот
ИЗ
РегистрНакопления.Закупки
ГДЕ
    Период > 2019.09.01 И Период <= 2019.09.10
    И Активность = ИСТИНА
СГРУППИРОВАТЬ ПО
    Номенклатура
Курс 1С: Эксперт. Обороты регистра накопления с типом Обороты запрос СУБД
Виртуальная табл. «Обороты» с интервалом дат в СУБД

Для регистра с типом «Остатки»

Давайте рассмотрим, как формируются «Обороты» для регистра накопления с типом остатки.

Запрос через виртуальную таблицу 1С

ВЫБРАТЬ
    Номенклатура КАК Номенклатура,
    КоличествоОборот КАК КоличествоОборот
ИЗ
    РегистрНакопления.ОстаткиНаСкладах.Обороты(2019.08.01, 2019.09.10,,)

В СУБД

ВЫБРАТЬ
    Номенклатура КАК Номенклатура,
    СУММА(Количество для Приход И -Количество для Расход) КАК КоличествоОборот,
    СУММА(Количество для ВидДвижения = Приход) КАК КоличествоПриход,
    СУММА(Количество для ВидДвижения = Расход) КАК КоличествоРасход
 ИЗ
    РегистрНакопления.ОстаткиНаСкладах
ГДЕ
    Период >= 2019.08.01 И Период <= 2019.09.10
    И Активность = ИСТИНА
СГРУППИРОВАТЬ ПО
    Номенклатура
Курс 1С: Эксперт. Обороты регистра накопления с типом Остатки запрос СУБД
Виртуальная табл. «Обороты» для РН с типом Остатки в СУБД

Для регистра «Остатки», обороты всегда формируются по данным кластерного индекса! Следовательно, зачастую, целесообразнее обращаться к движениям и самими рассчитывать оборот…

Данная тема подробнее рассматривается в пакете видео-курса «Секреты 1С: Эксперта» Шаг 2. Занятие 06-02 Виртуальные таблицы регистра накопления.

Константин Ефимов | 1С: Эксперт. Сопровождение проектов 1С.

КОНСТАНТИН ЕФИМОВ
Комментарии и вопросы