Профессия — 1С

Рукопашный бой Карташ

Категории

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

рубрики: Виртуальные таблицы | Дата: 11 Июнь, 2017

Регистры накопления в системе 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

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

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

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

   

2018г. Профессия — 1С. Обмен опытом по программированию в 1С