Сегодня поговорим о Регистре сведений.
Содержание:
1. Регистр сведений - это
2. Виды регистров сведений
3. Измерения, ресурсы, реквизиты регистра сведений
4. Периодический регистр сведений
5. Свойства регистра и измерений
6. Добавление записи в регистр сведений
7. Изменение значения ресурса записи регистра сведений
8. Удаление выбранных записей в регистре сведений
9. Очистка регистра сведений от записей
10. Получить значение ресурса регистра сведений на дату
1. Регистр сведений - это
Регистр сведений предназначен для хранения показателей состояния в разрезе измерений. В отличии от других регистров, ресурсы регистра сведений могут содержать не только числовые значения, в том числе может быть составным.2. Виды регистров сведений
По подчиненности регистратору:
- Независимый регистр сведений - регистр не подчинен регистратору (документу).
- Зависимый регистр сведений - регистр подчинен регистратору (документу).
По периодичности хранимой информации:
- Непериодический регистр сведений - информация в регистре храниться без привязки к дате.
- Периодический регистр сведений - информация в регистре развернута во времени, одним из измерений является дата, называемым Периодом.
3. Измерения, ресурсы, реквизиты регистра сведений
Измерения – описывают разрезы, в которых хранится информация.
Ресурсы – содержат хранимую информацию в разрезе измерения.
Тип ресурса сведений может быть как примитивный (число, строка, дата, булево), так и ссылочный (СправочникСсылка, ПеречислениеСсылка и т.д.). В ресурсе можно хранить даже картинки и другие неструктурированные сведения, поскольку можно создать ресурс типа "ХранилищеЗначения". Ресурс может быть составным типом.
Реквизиты - несут дополнительную информацию (как комментарий), которую нельзя получить из виртуальных таблиц регистра в разрезе измерений.
Рассмотрим пример для понимания смысла измерения и ресурса регистра сведений.
Если узнаем цену Тяпки на любую дату с 1 августа 2021 года до 10 августа 2021, она будет равна 175 рублям.
Если узнаем цену Тяпки на любую дату с 10 августа 2021 года по текущую дату, она будет равна 192 рублям.
Внимание! Описанный выше пример несет образный характер и периоды в примере рассматривали приблизительно. Для точного определения даты и времени для вычисления цены необходимо использовать Дату, МоментВремени или Границу зависит от решаемой задачи. Об особенностях использования периодов и моментов времени поговорим в следующей статье.
4. Периодический регистр сведений
Периодичность:
- Непериодический
- В пределах секунды
- В пределах дня
- В пределах месяца
- В пределах квартала
- В пределах года
- По позиции регистратора
Внимание! При выборе периодичности (кроме "По позиции регистратору"), платформа будет контролировать уникальность записей в пределах заданной периодичности, в таком случаи в регистратор нельзя записать две записи с одинаковым набором Измерений и Периодом. Последовательность состоящая из Измерений и Периода называется Ключом уникальности.
При выборе периодичности "По позиции регистратору" ключ уникальности будет содержать дополнительно ссылку на регистратор (документ), в таком случаи в регистратор нельзя записать две записи с одинаковым набором Измерений, Периодом и Регистратором.
Если запись не уникальна, платформа выдает сообщение “Запись с такими ключевыми полями существует!” и не даст записать набор записей в регистр сведений.
При выборе периодичности в БД создаются виртуальные таблицы:
СрезПервых и СрезПоследних.
Что позволяет быстро получать значения ресурсов о последних (первых) установленных значений на определенную дату.
СрезПервых и СрезПоследних.
Что позволяет быстро получать значения ресурсов о последних (первых) установленных значений на определенную дату.
5. Свойства регистра и измерений
Основной отбор по периоду (для регистра) - если регистр периодический и не подчинен регистратору, то доступно это свойство. Если флажок установлен, то наряду с основными измерениями и реквизитами регистра, участвующими в отборе записей при регистрации изменений для плана обмена, можно указывать отбор по полю Период.
Ведущий (для измерения) - имеет смысл когда измерение имеет тим ссылка на объект. Записи в регистре будут существовать пока существует объект, ссылка на который выбрана в качестве значения этого измерения. При удалении объекта все записи в регистре по этому объекту будут автоматически удалены.
Основной отбор (для измерения) - устанавливает возможность измерения регистрировать изменения для плана обмена.
6. Добавление записи в регистр сведений
Добавление через МенеджерЗаписи, подойдет для добавления одной записи.
НоваяЗапись = РегистрыСведений.Цены.СоздатьМенеджерЗаписи();
НоваяЗапись.Период = Дата;
НоваяЗапись.Номенклатура = Номенклатура;
НоваяЗапись.Цена = Цена;
НоваяЗапись.Записать();
Добавление через НаборЗаписей, подойдет для добавления одной или нескольких записей.
НоваяЗапись.Номенклатура = Номенклатура;
НоваяЗапись.Цена = Цена;
НоваяЗапись.Записать();
Добавление через НаборЗаписей, подойдет для добавления одной или нескольких записей.
НовыйНаборЗаписей = РегистрыСведений.Цены.СоздатьНаборЗаписей();
НовыйНаборЗаписей.Отбор.Период.Установить(Дата,Истина);
НовыйНаборЗаписей.Отбор.Номенклатура.Установить(Номенклатура,Истина);
НоваяЗапись = НовыйНаборЗаписей.Добавить();
НоваяЗапись.Период = Дата;
НоваяЗапись.Номенклатура = Номенклатура;
НоваяЗапись.Цена = Цена;
НовыйНаборЗаписей.Записать();
7. Изменение значения ресурса записи регистра сведений
Изменение значение ресурса записи через НаборЗаписей, подойдет для изменения одной или нескольких записей.
НовыйНаборЗаписей.Отбор.Период.Установить(Дата,Истина);
НовыйНаборЗаписей.Отбор.Номенклатура.Установить(Номенклатура,Истина);
НоваяЗапись = НовыйНаборЗаписей.Добавить();
НоваяЗапись.Период = Дата;
НоваяЗапись.Номенклатура = Номенклатура;
НоваяЗапись.Цена = Цена;
НовыйНаборЗаписей.Записать();
7. Изменение значения ресурса записи регистра сведений
Изменение значение ресурса записи через НаборЗаписей, подойдет для изменения одной или нескольких записей.
НаборЗаписей = РегистрыСведений.Цены.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.Установить(Дата,Истина);
НаборЗаписей.Отбор.Номенклатура.Установить(Номенклатура,Истина);
НаборЗаписей.Прочитать();
Если Не НаборЗаписей.Количество() = 0 Тогда
СуществующаяЗапись = НаборЗаписей[0];
СуществующаяЗапись.Период = Дата;
СуществующаяЗапись.Номенклатура = Номенклатура;
СуществующаяЗапись.Цена = Цена;
НаборЗаписей.Записать();
КонецЕсли;
8. Удаление выбранных записей в регистре сведений
Удаление записей через НаборЗаписей, подойдет для удаления одной или нескольких записей.
НаборЗаписей.Отбор.Период.Установить(Дата,Истина);
НаборЗаписей.Отбор.Номенклатура.Установить(Номенклатура,Истина);
НаборЗаписей.Прочитать();
Если Не НаборЗаписей.Количество() = 0 Тогда
СуществующаяЗапись = НаборЗаписей[0];
СуществующаяЗапись.Период = Дата;
СуществующаяЗапись.Номенклатура = Номенклатура;
СуществующаяЗапись.Цена = Цена;
НаборЗаписей.Записать();
КонецЕсли;
8. Удаление выбранных записей в регистре сведений
Удаление записей через НаборЗаписей, подойдет для удаления одной или нескольких записей.
НаборЗаписей = РегистрыСведений.Цены.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.Установить(Дата,Истина);
НаборЗаписей.Отбор.Номенклатура.Установить(Номенклатура,Истина);
НаборЗаписей.Записать();
9. Очистка регистра сведений от записей
Очистка регистра от записей через НаборЗаписей.
НаборЗаписей.Отбор.Период.Установить(Дата,Истина);
НаборЗаписей.Отбор.Номенклатура.Установить(Номенклатура,Истина);
НаборЗаписей.Записать();
9. Очистка регистра сведений от записей
Очистка регистра от записей через НаборЗаписей.
НаборЗаписей = РегистрыСведений.Цены.СоздатьНаборЗаписей();
НаборЗаписей.Записать();
НаборЗаписей.Записать();
10. Получить значение ресурса регистра сведений на дату
Получить значение ресурса регистра сведений на конкретную дату можно через метод Получить(). Если на эту дату в регистре нет записей, то возвращается структура с пустыми значениями.
Если в нашем примере указать дату 10.08.2021, то на эту дату имеются записи в регистре и метод вернет не пустую цену.
Получить ближайшее значение ресурса регистра сведений на дату можно через метод ПолучитьПервое() и ПолучитьПоследнее(). Эти методы возвращают структуру, содержащую ближайшие, указанной дате, значения ресурсов.
Первый параметр в методах может иметь тип "дата", МоментВремени или Граница. Его можно не указывать, тогда будут найдены первые или последние значения ресурсов в регистре сведений.
Так же получить ближайшее значение ресурса регистра сведений на дату можно через метод СрезПервых() и СрезПоследних(). Эти методы возвращают таблица значений, содержащую ближайшие, указанной дате, значения ресурсов. Если вам необходимо только значение ресурса все данные методами СрезПервых() и СрезПоследних() тянуть с сервера на клиент не разумно.
Первый параметр в методах может иметь тип "дата", МоментВремени или Граница. Его можно не указывать, тогда будут найдены первые или последние значения ресурсов в регистре сведений.
Отбор = Новый Структура("Номенклатура",Номенклатура);
ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(Дата,Отбор);
Цена = ЗначенияРесурсов.Цена;
Так же получить ближайшее значение ресурса регистра сведений на дату можно через метод СрезПервых() и СрезПоследних(). Эти методы возвращают таблица значений, содержащую ближайшие, указанной дате, значения ресурсов. Если вам необходимо только значение ресурса все данные методами СрезПервых() и СрезПоследних() тянуть с сервера на клиент не разумно.
Пример "Добавление через НаборЗаписей, подойдет для добавления одной или нескольких записей." не совсем корректный, надо добавить замечание о том что это не добавление записи, а перезапись регистра новыми записями, т.к. там регистр не читается в набор.
ОтветитьУдалить