Периодический регистр сведений
Периодический регистр хранит информацию (ресурсы) не только для некоторых наборов значений (измерения), но дополнительно хранит историю изменения этой информации (ресурсов) во времени.
Например, «обычный» регистр Цены товаров для покупателей может выглядеть следующим образом:
Измерение: Покупатель |
Измерение: Товар |
Ресурс: Цена |
Реквизит: ФИО |
---|---|---|---|
Магазин «Луч» | Принтер | 10 000 | Булатов И.В. |
Магазин «Луч» | Монитор | 14 000 | Булатов И.В. |
Предприятие «Ротор» | Монитор | 11 000 | Орлова Е.Н. |
Предприятие «Ротор» | Мышь | 2 000 | Громова Н.П. |
В нем может быть только одна запись про цену принтера в магазине «Луч».
Если сделать такой регистр периодическим, тогда можно будет хранить историю изменения цен:
Период
|
Измерение: Покупатель |
Измерение: Товар |
Ресурс: Цена |
Реквизит: ФИО |
---|---|---|---|---|
12.12.2021 | Предприятие «Ротор» | Принтер | 13 000 | Громова Н.П. |
12.12.2021 | Магазин «Луч» | Принтер | 10 500 | Громова Н.П. |
10.12.2021 | Магазин «Луч» | Принтер | 10 000 | Булатов И.В. |
10.12.2021 | Магазин «Луч» | Монитор | 14 000 | Булатов И.В. |
06.12.2021 | Предприятие «Ротор» | Монитор | 11 000 | Орлова Е.Н. |
03.12.2021 | Предприятие «Ротор» | Мышь | 2 000 | Громова Н.П. |
Например, в магазине «Луч» принтер стоил 10 000, а начиная с 12-го числа он стал стоить 10 500.
Чтобы сделать регистр периодическим, в проекте ему нужно установить свойство Периодичность в значение, отличное от Непериодический.
Частота изменения ресурсов
Установкой свойства Периодичность вы не только добавляете в регистр стандартное поле Период, но и указываете, как часто можно изменять значения ресурсов для тех же самых значений измерений. Например, как часто можно менять цену принтера в магазине «Луч».
предлагает на выбор несколько значений периодичности: Секунда, День, Месяц, Квартал или Год. Это значит, что запись с теми же значениями измерений можно добавить в регистр раз в секунду, раз в день и т. д. При этом значение ресурсов у нее может быть тем же самым (цена не изменилась) или другим (цена изменилась). Главное, что ресурсы гарантированно не могут изменяться чаще, чем периодичность регистра.
В зависимости от выбранного значения свойства Периодичность тип стандартного поля Период будет разным и значения, которые записывает в это поле, также будут отличаться.
Если периодичность Секунда, то поле Период имеет тип ДатаВремя. Для остальных значений периодичности поле Период имеет тип Дата.
Если периодичность Месяц, то записывает в поле период первую дату месяца, Квартал — первую дату квартала, Год — первую дату года.
Таким образом регистр с периодичностью Месяц будет выглядеть так:
Период
|
Измерение: Покупатель |
Измерение: Товар |
Ресурс: Цена |
Реквизит: ФИО |
---|---|---|---|---|
01.12.2021 | Предприятие «Ротор» | Принтер | 13 000 | Громова Н.П. |
01.12.2021 | Магазин «Луч» | Принтер | 10 500 | Громова Н.П. |
01.10.2021 | Магазин «Луч» | Принтер | 10 000 | Булатов И.В. |
01.10.2021 | Магазин «Луч» | Монитор | 14 000 | Булатов И.В. |
01.06.2021 | Предприятие «Ротор» | Монитор | 11 000 | Орлова Е.Н. |
01.03.2021 | Предприятие «Ротор» | Мышь | 2 000 | Громова Н.П. |
Тот же регистр, но с периодичностью Год, будет выглядеть так:
Период
|
Измерение: Покупатель |
Измерение: Товар |
Ресурс: Цена |
Реквизит: ФИО |
---|---|---|---|---|
01.01.2012 | Предприятие «Ротор» | Принтер | 13 000 | Громова Н.П. |
01.01.2012 | Магазин «Луч» | Принтер | 10 500 | Громова Н.П. |
01.01.2010 | Магазин «Луч» | Принтер | 10 000 | Булатов И.В. |
01.01.2010 | Магазин «Луч» | Монитор | 14 000 | Булатов И.В. |
01.01.2006 | Предприятие «Ротор» | Монитор | 11 000 | Орлова Е.Н. |
01.01.2003 | Предприятие «Ротор» | Мышь | 2 000 | Громова Н.П. |
Срез последних
Частая задача, ради которой используются периодические регистры сведений, заключается в получении значений на определенную дату. Например, нужно узнать, сколько стоил принтер в магазине «Луч» 11 декабря.
Для решения таких задач для периодического регистра сведений формирует в языке запросов еще одну таблицу, которая называется Срез последних. Эта таблица позволяет вам получать наиболее поздние записи по всем комбинациям измерений для указанной даты.
Например, пусть основная таблица регистра сведений имеет следующий вид:
Период
|
Измерение: Покупатель |
Измерение: Товар |
Ресурс: Цена |
Реквизит: ФИО |
---|---|---|---|---|
12.12.2021 | Предприятие «Ротор» | Принтер | 13 000 | Громова Н.П. |
12.12.2021 | Магазин «Луч» | Принтер | 10 500 | Громова Н.П. |
10.12.2021 | Магазин «Луч» | Принтер | 10 000 | Булатов И.В. |
10.12.2021 | Магазин «Луч» | Монитор | 14 000 | Булатов И.В. |
06.12.2021 | Предприятие «Ротор» | Монитор | 11 000 | Орлова Е.Н. |
03.12.2021 | Предприятие «Ротор» | Мышь | 2 000 | Громова Н.П. |
Таблица Срез последних на дату 15 декабря будет содержать цену принтера в магазине «Луч» — 10 500. Такие значения называются актуальными, то есть полученными на самую старшую дату, которая есть в периодическом регистре.
Период
|
Измерение: Покупатель |
Измерение: Товар |
Ресурс: Цена |
Реквизит: ФИО |
---|---|---|---|---|
12.12.2021 | Предприятие «Ротор» | Принтер | 13 000 | Громова Н.П. |
12.12.2021 | Магазин «Луч» | Принтер | 10 500 | Громова Н.П. |
10.12.2021 | Магазин «Луч» | Монитор | 14 000 | Булатов И.В. |
06.12.2021 | Предприятие «Ротор» | Монитор | 11 000 | Орлова Е.Н. |
03.12.2021 | Предприятие «Ротор» | Мышь | 2 000 | Громова Н.П. |
Таблица Срез последних на дату 11 декабря будет содержать цену принтера в магазине «Луч» — 10 000 и не будет содержать записи о цене принтера в магазине «Луч», так как на 11 декабря такой записи еще не существовало.
Период
|
Измерение: Покупатель |
Измерение: Товар |
Ресурс: Цена |
Реквизит: ФИО |
---|---|---|---|---|
10.12.2021 | Магазин «Луч» | Принтер | 10 000 | Булатов И.В. |
10.12.2021 | Магазин «Луч» | Монитор | 14 000 | Булатов И.В. |
06.12.2021 | Предприятие «Ротор» | Монитор | 11 000 | Орлова Е.Н. |
03.12.2021 | Предприятие «Ротор» | Мышь | 2 000 | Громова Н.П. |
Запрос, обращающийся к таблице Срез последних, будет выглядеть следующим образом:
пер Запрос = Запрос{ВЫБРАТЬ
Цены.Покупатель КАК Покупатель,
Цены.Товар КАК Товар,
Цены.Цена КАК Цена,
Цены.ФИО КАК ФИО
ИЗ
Цены.СрезПоследних(&ПараметрПериод) КАК Цены}
Чтобы получить срез на 11 декабря нужно передать в параметр запроса ПараметрПериод дату 11 декабря. Тогда будут получены записи, у которых значение поля Период меньше или равно указанному значению параметра.
Чтобы получить актуальные записи (для 12 декабря и старше) нужно передать в параметр ПараметрПериод значение Неопределено.
Таким образом, например, если вас интересует цена принтера в магазине «Луч» 11 декабря, то кроме указания параметра виртуальной таблицы нужно ограничить отбираемые записи покупателем и товаром:
пер Запрос = Запрос{ВЫБРАТЬ
Цены.Покупатель КАК Покупатель,
Цены.Товар КАК Товар,
Цены.Цена КАК Цена,
Цены.ФИО КАК ФИО
ИЗ
Цены.СрезПоследних(&ПараметрПериод) КАК Цены}
ГДЕ
Цены.Покупатель == &ПараметрПокупатель
И Цены.Товар == &ПараметрТовар