Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_4_Регистры сведений.doc
Скачиваний:
14
Добавлен:
05.09.2019
Размер:
9.65 Mб
Скачать

2.4 Лабораторная работа № 4. Регистры сведений

Цель работы. Получение навыков работы с регистрами сведений.

2.4.1 Теоретические сведения

Объект конфигурации «Регистр сведений» является прикладным объектом и предназначен для описания структуры хранения данных в разрезе нескольких измерений. На основе этого объекта платформа создает в базе данных информационную структуру, в которой может храниться произвольная информация «привязанная» к набору измерений.

Основная задача регистра сведений — хранить существенную для прикладной задачи информацию, состав которой развернут по определенной комбинации значений и, при необходимости, развернут во времени. Например, если мы хотим хранить информацию о ценах конкурентов на продаваемые нами товары, то собранная информация о ценах разворачивается по товарам и конкурентам. А если мы хотим отслеживать динамику изменений цен, и будем заносить их периодически, то хранимая информация разворачивается также и во времени. Эта информация хранится в регистре в виде записей. На запись нельзя сделать ссылку из информационной базы. В системе может быть только одна запись с определенной комбинацией измерений и периодом.

В системе «1С: Предприятие» для хранения подобных данных и работы с ними используется специальный механизм — регистры сведений.

Важной особенностью регистра сведений является его способность (при необходимости) хранить данные с привязкой ко времени. Благодаря этому регистр сведений может хранить не только актуальные значения данных, но и историю их изменения во времени. Регистр сведений, использующий привязку ко времени называют обычно периодическим регистром сведений.

Периодичность регистра сведений можно определить одним из следующих значений:

  • в пределах секунды,

  • в пределах дня,

  • в пределах месяца,

  • в пределах квартала,

  • в пределах года.

  • в пределах регистратора (если установлен режим записи - «Подчинение регистратору»).

Периодический регистр сведений всегда содержит служебное поле «Период», добавляемое системой автоматически. Оно имеет тип Дата, и служит для указания факта принадлежности записи к какому-либо периоду. При записи данных в регистр, платформа всегда приводит значение этого поля к началу того периода, в который он попадает. Например, если в регистр сведений с периодичностью в пределах месяца записать данные, в которых период указан как 08.04.2004, то регистр сохранит эти данные со значением периода равным 01.04.2004.

Регистр сведений, фактически, представляет собой массив данных, необходимый, чтобы реализовать функцию, которая может выдать необходимую информацию по определенному набору аргументов. Аргументы функции называются измерениями, а результат функции — ресурсами. В приведенном выше примере регистр «ЦеныКонкурентов» будет содержать измерения «Конкурент» и «Товар», и ресурс «Цена». Ресурсов может быть больше чем один: например, можно хранить оптовую и розничную цены.

Для разворота этой информации во времени используется поле «Период» регистра. Оно не вносится в качестве измерения, а добавляется системой автоматически при создании периодического регистра.

Для периодических регистров сведений система поддерживает такие стандартные операции, как получение наиболее позднего или наиболее раннего значения по определенной комбинации измерений (например, получение последней введенной цены по конкретному товару и конкретному конкуренту), а также получения среза наиболее поздних или ранних значений. Например, могут быть получены все последние введенные цены по различным товарам и конкурентам.

Наиболее характерный пример периодической величины — курс валюты. При выполнении каких-либо расчетов (например, при определении рублевой цены пересчетом валютной цены по курсу) важно знать его величину на момент вычисления.

Особенно важно знать курс валюты при выполнении каких-либо расчетов «задним числом» — в этом случае необходимо «вспоминать» курс за уже прошедшие даты.

Чтобы иметь возможность получать подобные сведения, необходимо создать таблицу, графами в которой были бы, очевидно, наименование валюты, дата курса, и сама величина курса. Строки такой таблицы содержат курс определенной валюты на конкретную дату.

Дата

Валюта

Курс

31.01.2002

USD

30,1372

31.01.2002

EUR

26,5456

28.02.2002

USD

30,9404

28.02.2002

EUR

26,7120

30.03.2002

USD

31,1192

30.03.2002

EUR

27,1515

При обращении к подобной таблице следует иметь в виду, что в колонке «Курс» хранятся конкретные величины курса на определенную дату, и подразумевается, что на все последующие даты, до новой величины курса, курс не меняется. Поэтому для получения курса на какую-то промежуточную дату следует брать величину курса на ближайшую предыдущую дату, на которую существует записанный курс.

Также следует понимать, что различные значения валют в колонке «Валюта» фактически означают, что ведется параллельная история курсов нескольких валют. Иначе говоря, приведенную выше таблицу можно отобразить по-другому:

Дата

Курс USD

Курс EUR

31.01.2002

30,1372

26,5456

28.02.2002

30,9404

26,7120

30.03.2002

31,1192

27,1515

Подобных колонок курсов в таблице может быть столько, сколько курсов разных валют требуется хранить.

Если регистр не периодический, то поле «Период» для него не создается. В приведенном примере регистр «ЦеныКонкурентов» может быть непериодическим, если мы не хотим хранить историю изменения цен, а хотим иметь только актуальные цены. Тогда функция регистра сможет ответить на вопрос «какая сейчас цена у такого-то конкурента на такой-то товар», но не сможет ответить на вопрос «какая была цена у такого-то конкурента на такой-то товар в начале года».

Из описанных принципов работы регистра сведений вытекает то, что в системе может быть только одна запись с определенным набором и периодом измерений. Действительно, по одному товару по одному конкуренту может быть только одна цена. Если по какой-либо причине мы можем получить несколько цен и хотим занести эту информацию в базу данных, то нам нужно создать еще одно измерение для хранения того значения, по которому эти цены могут различаться. Например, можно завести измерение «ИсточникИнформации». Тогда можно будет вводить цены конкурентов в разрезе источников.

Как и для других регистров, система контролирует уникальность записей для регистра сведений. Однако, если для прочих регистров уникальным идентификатором записи является регистратор и номер строки, то для регистра сведений применяется другой принцип формирования ключевого значения.

Ключом записи, однозначно идентифицирующим запись, является в данном случае совокупность значений измерений регистра и периода (в случае, если регистр сведений периодический). Регистр сведений не может содержать несколько записей с одинаковыми ключами.

Регистр сведений предоставляет больше свободы в редактировании хранимых данных по сравнению с другими типами регистров. Наряду с тем, что регистр сведений может использоваться в режиме подчинения регистратору (когда записи регистра сведений «привязаны» к документу-регистратору), регистр сведений может использоваться и в независимом режиме, в котором пользователю предоставляется полная свобода интерактивной работы с данными регистра. Регистр сведений, не использующий подчинение регистратору, называют независимым регистром сведений.

Строки регистра сведений, содержащие информацию о значениях ресурсов для определенных значений измерений и конкретного периода, называются записями. Записи в регистр сведений можно вносить двумя способами: вручную или документами.

Эти два варианта влияют на способ внесения информации, а не на основную логику работы регистра.

Документ, которым вносится запись в регистр сведений, называется регистратором.

Регистры, записываемые независимо, могут свободно редактироваться вручную или средствами встроенного языка. При этом, если измерение такого регистра назначено как «ведущее» и значением измерения является ссылка на объект базы данных, то будет считаться, что запись регистра имеет смысл, только пока существует этот объект. Например, если назначить ведущим измерение «Конкурент», то считается, что запись имеет смысл только как информация по данному конкуренту. Соответственно, при удалении конкурента записи по нему будут удалены автоматически.

Если регистр записывается регистратором, то это значит, что записи будут жестко подчинены регистраторам — документам. Обычно это значит, что записи будут порождаться при проведении документов. Соответственно, при удалении документа записи будут удаляться автоматически. В отличие от ведущих измерений, регистратор может быть только один.