рубрики: Виртуальные таблицы | Дата: 3 февраля, 2017
Для периодических регистров сведений доступны две виртуальные таблицы: СрезПервых и СрезПоследних Рассмотрим работу с этими виртуальными таблицами с использованием языка запросов 1С. Гораздо чаще применяется СрезПоследних, поэтому с него и начнем.
Срез последних позволяет получить последнюю запись регистра сведений на указанную дату в разрезе измерений. Для таблицы среза последних(первых) есть возможность в скобках указать два параметра через запятую. В первом параметре передается дата на которую делается срез (если параметр не указан срез делается на текущую дату). Второй параметр представляет из себя условие на языке запросов 1С и позволяет устанавливать различные отборы. Как правило в этих отборах используются измерения. Все это звучит достаточно туманно, поэтому без примера никак не обойтись.
Итак пусть у нас есть периодический регистр сведений Цена в котором храняться цены в разрезе товаров и поставщиков. Периодичность регистра — день.
В регистре имеются следующие записи
Период | Товар | Поставщик | Сумма |
---|---|---|---|
01.01.2017 | Карандаш | ООО «Леспром» | 10 |
25.01.2017 | Карандаш | ООО «Леспром» | 15 |
01.01.2017 | Карандаш | ПАО «Канцтовары» | 27 |
01.02.2017 | Карандаш | ПАО «Канцтовары» | 31 |
03.01.2017 | Ручка | ПАО «Канцтовары» | 137 |
01.02.2017 | Ручка | ПАО «Канцтовары» | 145 |
Для начала получим срез последних без использования параметров выполнив вот такой запрос
ВЫБРАТЬ
ЦенаСрезПоследних.Период КАК Период,
ЦенаСрезПоследних.Товар КАК Товар,
ЦенаСрезПоследних.Поставщик КАК Поставщик,
ЦенаСрезПоследних.Сумма КАК Сумма
ИЗ
РегистрСведений.Цена.СрезПоследних КАК ЦенаСрезПоследних
Так как параметры не указаны срез выполняется на текущую дату – 01.02.2017. В результате получаем вот такую таблицу
Период | Товар | Поставщик | Сумма |
---|---|---|---|
25.01.2017 | Карандаш | ООО «Леспром» | 15 |
01.02.2017 | Карандаш | ПАО «Канцтовары» | 31 |
01.02.2017 | Ручка | ПАО «Канцтовары» | 145 |
Здесь мы видим, что комбинация измерений Товар + Поставщик уникальна, т.е. для каждой комбинации измерений регистра была взята запись с максимальной датой, и дата записи меньше или равна текущей дате.
Допустим нам надо сделать то же самое но записи мы хотим получить с датой меньшей или равной 15.01.2017. Для этого необходимо в запросе изменить строку с таблицей среза последних следующим образом
ИЗ
РегистрСведений.Цена.СрезПоследних(&ДатаСреза, ) КАК ЦенаСрезПоследних
Перед выполнением запроса в него конечно же надо передать параметр &ДатаСреза. Теперь результат запроса будет выглядеть так
Период | Товар | Поставщик | Сумма |
---|---|---|---|
01.01.2017 | Карандаш | ООО «Леспром» | 10 |
01.01.2017 | Карандаш | ПАО «Канцтовары» | 27 |
03.01.2017 | Ручка | ПАО «Канцтовары» | 137 |
И наконец представим, что нам надо получить срез последних на ту же дату с условием, что товар у нас Карандаш, а поставщик Канцтовары. Для этого укажем в запросе второй параметр
ИЗ
РегистрСведений.Цена.СрезПоследних(
&ДатаСреза,
Товар = &Товар
И Поставщик = &Поставщик) КАК ЦенаСрезПоследних
В итоге получим только одну запись
Период | Товар | Поставщик | Сумма |
---|---|---|---|
01.01.2017 | Карандаш | ПАО «Канцтовары» | 27 |
Чтобы не запутаться во всех этих скобочках и запятых, лучше воспользоваться конструктором запросов. Покажу на примере последнего запроса.
После выбора в конструкторе запроса таблицы со срезом последних необходимо нажать на кнопку Параметры виртуальной таблицы и в открывшемся окне прописать
Нетрудно догадаться, что для среза первых принцип действия такой же за исключением того, что выбирается первая запись после даты среза.
Спасибо за понятное объяснение. Полно в сети объясняющих, которые только запутывают в этом, хоть не сложном но очень важном вопросе.
Годное объяснение.