Регистры накопления в системе 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-каналы с уроками программирования Сайты для обучения программированию Лекции и уроки