рубрики: Виртуальные таблицы | Дата: 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 |
Эта таблица объединяет в себе две ранее рассмотренные и позволяет получить обороты за выбранный период времени, а также остатки на начало и на конец периода. Также можно установить отбор.
Использование этой таблицы может быть оправдано, когда нужно в одном отчете одновременно получить и обороты и остатки на начало и конец периода. В остальных случаях злоупотреблять ее применением не стоит.
здесь нет документа-основания, т.е регистратора. без него скучно….