V8_7_Регистры сведений.ppt
- Количество слайдов: 21
4. 6. Регистры сведений (РС)
Назначение Регистры сведений предназначены для хранения информации, развернутой по комбинации измерений. Если требуется хранить историю изменений этой информации, то регистр сведений нужно сделать периодическим. Тип хранимой информации в ресурсах регистра сведений может быть как один из примитивных типов данных (число, строка, дата, булево), так и ссылка на объект базы данных (элемент справочника, документ и др. ). Регистры имеют два режима записи: «Независимый» и «Подчинение регистратору» , что определяет, как будут вноситься записи в регистр: вручную или документами. Под регистратором понимается документ, которому принадлежат движения по этому регистру. Обычно при проведении документа формируются движения по регистру, но это необязательно. Движения могут быть сформированы из любого места программы, лишь бы они были привязаны к документу-регистратору.
Пример 1. Регистр сведений «Курсы валют» , заполняемый в форме самого регистра.
Основное свойство РС В регистре сведений не может существовать две записи с одинаковым набором измерений, периодом (для периодических регистров) и регистратором (для регистров с периодичностью по позиции регистратора). Это принципиально отличает регистр сведений от регистра накоплений, в котором такая ситуация является вполне нормальной (например, два прихода одного товара на один и тот же склад).
Пример 2 Непериодический регистр сведений Места. Работы. Сотрудников с измерениями Сотрудник, Организация, Подразделение и ресурсами Должность, Дата. Приема. Такая структура РС предполагает, что сотрудник может работать в одной организации в разных подразделениях, но он не может занимать разные должности внутри подразделения одной и той же организации.
Ведущие измерения Некоторые измерения регистра сведений можно назначить ведущими, что возможно только для измерений, которые являются ссылками на объекты базы данных. Это нужно сделать, если записи регистра не имеют смысла без данного объекта. Тогда удаление объекта базы данных приведет к автоматическому удалению записей регистра сведений, ссылающихся на этот объект. Например, записи о курсе валюты не имеют смысла, если сама валюта была удалена.
Реквизиты РС При создании регистра сведений, кроме измерений и ресурсов, можно определить реквизиты регистра. Их можно представить как дополнительные колонки в таблице записей регистра. Реквизиты содержат сопроводительную информацию для каждой записи регистра. Например, в регистр сведений Курсы. Валют можно добавить реквизит Источник, который будет показывать, откуда была получена информация о курсе валюты. Разработчик может использовать реквизиты для отбора нужных записей при обходе выборки или при использовании запроса. Следующий пример выбирает все записи регистра, у которых реквизит равен определенному значению: Выборка = Регистры. Сведений. Курсы. Валют. Выбрать(); Пока Выборка. Следующий() Цикл Если Выборка. Источник = Заданный. Источник Тогда ……. Конец. Если; Конец. Цикла;
Периодические РС В БД часто требуется хранить не только текущие сведения, а «помнить» историю изменения значений, например, нужно знать курсы валют на каждую дату и т. д. Например, периодический регистр сведений об объемах продаж разных моделей автомобилей разными менеджерами фирмы с измерениями Менеджер, Модель автомобиля, Период (периодичность - год) и ресурсом Объем продаж Еще пример: РС Курсы. Валют с периодичностью 1 день
Приемы программирования РС
1. Обращение к РС Объект Регистры. Сведений. Менеджер предоставляет доступ к объектам Регистр. Сведений. Менеджер через свои свойства. Например: Рег. Курсы = Регистры. Сведений. Курсы. Валют; Отв. Сотр = Регистры. Сведений. Ответственные. Сотрудники; Объект Регистры. Сведений. Менеджер является коллекцией, и для него доступен обход элементов с помощью конструкции «Для Каждого» . Для Каждого Регистр ИЗ Регистры. Сведений Цикл ……. Конец. Цикла; Все прочие приемы относятся к объекту Регистр. Сведений. Менеджер
2. Выборка из РС Осуществляется с помощью методов Выбрать и Выбрать. По. Регистратору, Пример 1: Рег. Курсы = Регистры. Сведений. Курсы. Валют; Выборка = Рег. Курсы. Выбрать(); Выборку можно ограничить только нужными записями, используя параметры метода Выбрать. Пример 2: Нач = Выб. Дата. Нач; Кон = Новый Граница(Выб. Дата. Кон, Вид. Границы. Включая); Отбор = Новый Структура("Валюта", Выб. Валюта); Выборка = Регистры. Сведений. Курсы. Валют. Выбрать(Нач, Кон, Отбор); Пока Выборка. Следующий() Цикл Сообщить (Сокр. ЛП(Выборка. Валюта) + " " + Сокр. ЛП(Выборка. Период) + " " + Сокр. ЛП(Выборка. Курс)); Конец. Цикла
2. обращение к «итогам» регистра осуществляется с помощью методов Получить, Получить. Первое и Получить. Последнее, Срез. Первых и Срез. Последних, а также запросов Пример 3: Рег. Курсы = Регистры. Сведений. Курсы. Валют; Отбор = Новый Структура("Валюта", Выб. Валюта); Структура. Ресурсы = Рег. Курсы. Получить(Выб. Дата, Отбор); Сообщить(Структура. Ресурсы. Курс); Сообщить(Структура. Ресурсы. Кратность); Если записи с такой комбинацией измерений и периода (для периодических регистров) не найдено, то в элементах структуры будут пустое значения. Замечание. Метод Получить возвращает структуру, ключи которой совпадают с именами ресурсов
(продолжение) Пример 4 Рег. Курсы = Регистры. Сведений. Курсы. Валют; Отбор = Новый Структура("Валюта", Выб. Валюта); Структура. Ресурсы = Рег. Курсы. Получить. Последнее(Выб. Дата, Отбор); Сообщить(Структура. Ресурсы. Курс); Сообщить{Структура. Ресурсы. Кратность); Если метод не находит запись в регистре по данной комбинации измерений точно на заданный период, то возвращается ближайшая более ранняя запись. Пример 5 Рег. Курсы = Регистры. Сведений. Курсы. Валют; тз. Курсы. Валют. На. Дату = Рег. Курсы. Срез. Последних(Выб. Дата); Метод возвращает таблицу значений с найденными записями. Структура таблицы значений совпадает со структурой РС
3. операции с одной записью РС Пример 1. Формирование новой записи Регистр. Курсы. Валют = Регистры. Сведений. Курсы. Валют. Создать. Менеджер. Записи(); Регистр. Курсы. Валют. Период = Дата. Курса; Регистр. Курсы. Валюта = Валюта; Регистр. Курсы. Валют. Курс = 1; Регистр. Курсы. Валют. Кратность = 1; Регистр. Курсы. Валют. Записать(); Пример 2. Удаление всех записей из РС Выборка = Регистры. Сведений. Курсы. Валют. Выбрать(); Пока Выборка. Следующий() Цикл Менеджер. Записи = Выборка. Получить. Менеджер. Записи(); Менеджер. Записи. Удалить(); Конец. Цикла Данные методы существует только у независимого регистра сведений, т. е. не подчиненного регистратору.
4. Набор записей РС Набор записей позволяет оперировать сразу несколькими записями регистра. Набор записей можно целиком прочитать из базы данных, добавить в него записи или изменить их, целиком записать в базу данных. Это основной способ добавления и редактирования записей регистра сведений. Пример: //создадим новый пустой набор записей Набор = Регистры. Сведений. Курсы. Валют. Создать. Набор. Записей (); //установим отбор по дате и валюте. Если этого не сделать, то // весь регистр будет переписан новым набором Набор. Отбор. Валюта. Значение = Выб. Валюта; Набор. Отбор. Период. Значение = Выб. Дата; //признак использования элемента отбора в фильтре. Если // свойство имеет значение Истина, то будет выполняться // фильтрация по данному элементу отбора, иначе элемент // отбора не будет участвовать в фильтрации.
Набор записей РС (продолжение) Набор. Отбор. Валюта. Использование = Истина; Набор. Отбор. Период. Использование = Истина; //добавим запись в набор (не в базу данных) Нов. Запись = Набор. Добавить(); Нов. Зались. Валюта = Выб. Валюта; Нов. Запись. Период = Выб. Дата; Нов. Запись. Курс = Новый. Курс; //запишем набор в базу данных //записи по заданному отбору будут переписаны Набор. Записать(Истина); Замечание. Если отбор в наборе записей не установлен, то такой набор перепишет весь регистр. Чтобы этого не произошло, необходимо установить отбор по измерениям регистра, а для периодических регистров дополнительно - по полю Период, если же регистр имеет периодичность «По позиции регистратора» , то еще и по полю Регистратор. При записи набора с параметром Истина сначала удаляются все записи с заданным отбором, а затем на их место записываются новые (если ЛОЖЬ, то добавляются).
Набор записей РС (продолжение) Через набор записей можно обращаться к уже существующим записям РС. Например: //создадим новый пустой набор записей Набор = Регистры. Сведений. Курсы. Валют. Создать. Набор. Записей(); //установим условие отбора по дате Набор. Отбор. Период. Значение = Выб. Дата; Набор. Отбор. Период. Использование = Истина; //прочитаем записи из базы данных Набор. Прочитать(); Если НЕ Набор. Выбран() Тогда Сообщить("Набор не был прочитан"); Конец. Если; Для Каждого запись Из Набор Цикл Сообщить(Сокр. ЛП(запись. Валюта) + " " + Сокр. ЛП(запись. Курс)); Конец. Цикла;
Набор записей РС (продолжение) Записи набора можно выгружать в таблицу значений с помощью метода Выгрузить или, наоборот, загружать записи в набор из таблицы значений с помощью метода Загрузить: Набор. Прочитать () ; тз. Записи = Набор. Выгрузить(); … Набор. 3 агрузить(тз 3 аписи); Набор. Записать(); При выгрузке структура таблицы значений полностью соответствует структуре набора. При загрузке загружаются только те колонки, имена которых в наборе и таблице значений совпадают. Можно выгружать в массив и загружать из массива только одну колонку набора записей, для чего предназначены методы Выгрузить. Колонку и Загрузить. Колонку. Выгружаются и загружаются записи, имеющие тот же индекс, что и элементы массива (индексация записей набора и элементов массива начинается с 0). Массив. Курсов = Набор. Выгрузить. Колонку("Курс"); Набор. Загрузить. Колонку(Массив. Курсов, "Курс"); )
Формирование движений в РС при проведении документа У документов есть свойство Движения, которое предоставляет доступ к наборам записей этого документа по каждому РС.
Продолжение Т. к. запись в регистр ведется документом-регистратором ( приходным документом ), то необходимо включить в модуль его проведения текст:
Модуль набора записей У набора записей регистра есть собственный модуль, который открывается из окна редактирования свойств регистра. В модуле набора записей регистра могут располагаться процедуры-обработчики событий Перед. Записью и При. Записи (самостоятельно)


