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

Jul 18, 2022 21:42

Регистры накопления в системе 1С:Предприятие делятся на два вида: регистры накопления остатков и регистры накопления оборотов.
Вид регистра выбирается при его создании в конфигураторе



Как следует из названия одни предназначены для получения остатков на какую-либо дату, а вторые для получения оборотов за выбранный период. В зависимости от вида регистра накопления платформа 1С:Предприятия формирует разный набор виртуальных таблиц. В этой статье и рассмотрим работу с виртуальными таблицами регистров накопления. Для этого создадим регистр накопления остатков - ТоварыОстатки и регистр накопления оборотов - ТоварыОбороты.



Со стандартной таблицей все понятно. Рассмотрим подробнее виртуальную.

Виртуальная таблица Обороты

Эта таблица позволяет получать оброты ресурсов в разрезе измерений. В нашем случае у нас два измерения: Склад и Товар. И один ресурс - Количество

Пусть в нашем регистре есть следующие записи



Вернемся в конструктор запросов и для начала просто выберем из таблицы ТоварыОбороты.Обороты все поля



Соответственно запрос будет выглядеть следующим образом:

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

Результат выполнения запроса выглядить вот так:

Склад
Товар
КоличествоОборот

Центральный
Ручка
3

Офис
Ручка
7

Центральный
Карандаш
21

Офис
Карандаш
4

То есть мы получили обороты в разрезе товаров и складов за все время. Предположим, что нас не интересуют склады и мы хотим получить обороты только в разрезе товаров.
Для этого исключим из запроса измерение Склад

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

и в результате у нас останется только две строки

Товар
КоличествоОборот

Ручка
10

Карандаш
25

Но как правило за все время существования регистра обороты получать не требуется. В основном они нужны за какой-то конкретный период: месяц, квартал, год и т.д. Плюс еще обычно нужны отборы по измерениям (Товар, Склад). Это достигается использованием параметров виртуальной таблицы. Заполнять параметры удобно из конструктора. По кнопке Параметры виртуальной таблицы открывается диалоговое окно в котором можно прописать все что нам нужно:



После этого наш исходный запрос примет следующий вид

ВЫБРАТЬ
ТоварыОборотыОбороты.Склад,
ТоварыОборотыОбороты.Товар,
ТоварыОборотыОбороты.КоличествоОборот
ИЗ
РегистрНакопления.ТоварыОбороты.Обороты(&НачалоПериода, &КонецПериода, , Склад = &Склад) КАК ТоварыОборотыОбороты

Как видим отличие в том, что в скобках после имени виртуальной таблицы появились параметры, которые необходимо заполнить перед выполнением запроса.
У тех кто только начинает работать с виртуальными таблицам зачастую возникает соблазн вместо использования параметров установить отбор привычным способом:

ИЗ
РегистрНакопления.ТоварыОбороты.Обороты(, , , ) КАК ТоварыОборотыОбороты
ГДЕ
ТоварыОборотыОбороты.Склад = &Склад

Делать так категорически нельзя. Это отрицательно скажется на производительности и на вашей оценке при сдаче экзамена 1С:Специалист.

При заполнении параметров мы пропустили Периодичность. Давайте раскроем список и из массы возможных вариантов выберем Месяц. Все остальные параметры уберем, чтобы не путаться.



После этого наблюдаем, что в полях таблицы появилось поле Период.



Добавив и его в выбранные поля, получим вот такой текст запроса:

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

Выполняем запрос:

Период
Склад
Товар
КоличествоОборот

01.06.2017 0:00:00
Центральный
Ручка
3

01.06.2017 0:00:00
Центральный
Карандаш
-5

01.06.2017 0:00:00
Офис
Карандаш
4

01.05.2017 0:00:00
Офис
Ручка
7

01.05.2017 0:00:00
Центральный
Карандаш
26

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

Регистр накопления остатков

Так же как и с оборотным регистром посмотрим в конструкторе запросов какие же виртуальные таблицы доступны для регистра накопления остатков



Как видим для регистра накопления остатков доступны три виртуальные таблицы: Обороты, Остатки, ОстаткиИОбороты. Рассмотрим каждую из них в отдельности.

Виртуальная таблица Обороты

Несмотря на то, что вид регистра - Остатки, мы тем не менее можем получать по нему и обороты. Плюс у нас здесь есть два дополнительных ресурса: Приход и Расход



Напомню, что когда делается запись в регистр остатков, указывается вид движения накопления (приход или расход), тогда как для оборотного регистра вид движения не указывают. Поэтому здесь мы имеем дополнительный бонус в виде возможности получить не только в целом оборот за период, но и приход с расходом в отдельности. Но конечно если в метаданных есть оборотный регистр с аналогичным набором измерений, то для получения оборотов лучше использовать именно его. В целом работа с этой виртуальной таблицей подобна работе с виртуально таблицей Обороты оборотного регистра, рассмотренной выше.

Виртуальная таблица Остатки

Эта таблица используется для получения остатков ресурсов в разрезе измерений. В параметрах таблицы мы можем указать дату на которую получаем остатки и установить отборы:



Рассмотрим небольшой пример. Имеем следующие записи регистра:



Выберем все доступные поля а в качестве даты получения остатков установим конец июня. Отбор по измерениям устанавливать не будем. Тогда текст запроса будет выглядеть следующим образом:

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

А после его выполнения получим вот такой результат

Склад
Товар
КоличествоОстаток

Центральный
Ручка
3

Центральный
Карандаш
21

Офис
Ручка
7

Офис
Карандаш
4

Виртуальная таблица ОстаткиИОбороты

Эта таблица объединяет в себе две ранее рассмотренные и позволяет получить обороты за выбранный период времени, а также остатки на начало и на конец периода. Также можно установить отбор.



Использование этой таблицы может быть оправдано, когда нужно в одном отчете одновременно получить и обороты и остатки на начало и конец периода. В остальных случаях злоупотреблять ее применением не стоит.

Смотрите также:
Электронный учебник по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Игра "Кто хочет стать миллионером?" с вопросами на определенную тематику (язык программирования JavaScript, английские, немецкие, французские, испанские, португальские, ни­дер­ландские, итальянские слова, электробезопасность, промышленная безопасность, бокс и т.п.), написанная на 1С
Программирование в 1С 8.3 с нуля - краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки

программирование

Previous post Next post
Up