Периодические регистры сведений
Многие программисты, знакомые с версией 7.7 и желающие освоить версию 8, спрашивают, куда делись периодические реквизиты справочников и периодические константы. А если их нет, то какой механизм их заменяет? В 1С:Предприятии 8 для хранения истории изменения значений предназначены периодические регистры сведений.
Вообще регистры сведений предназначены для хранения информации, развернутой по комбинации измерений. Главное отличие периодического регистра сведений от обычного заключается в том, что в нем присутствует дополнительное системное измерение «Период», имеющее тип «дата». Это позволяет получать не только текущие сведения об объекте, но также на любой момент времени.
Для периодического реквизита при создании указывается свойство «Периодичность» из следующих возможных значений:
- в пределах секунды,
- в пределах дня,
- в пределах месяца,
- в пределах квартала,
- в пределах года,
- по позиции регистратора (доступен, если режим записи у регистра — «Подчинение регистратору»).
Обратите внимание, что тип ресурса сведений может быть как примитивный (число, строка, дата, булево), так и ссылочный (СправочникСсылка, ДокументСсылка, ПеречислениеСсылка и т.д.). Более того, в регистре сведений можно хранить даже картинки и другие неструктурированные сведения, поскольку можно создать ресурс типа «ХранилищеЗначения».
Самый простой пример периодического регистра сведений — КурсыВалют. Этот регистр сведений хранит курсы всех валют на каждый день. Структура регистра представлена ниже:
Подробная информация о структуре регистра сведений КурсыВалют приведена в следующей таблице:
Измерения: | Валюты | тип «СправочникСсылка.Валюты», ведущее, запрет незаполненных значений |
Ресурсы: | тип «число», длина 15, точность 4, неотрицательное тип «число», длина 10, точность 0, неотрицательное | |
Периодичность | В пределах дня | |
Режим записи | Независимый |
Данные в этот регистр сведений можно вводить вручную с помощью формы списка.
ВНИМАНИЕ. В регистр сведений с определенной периодичностью, не равной «По позиции регистратору», нельзя ввести две записи с одинаковым набором измерений и периодом, т.е. нельзя ввести два курса одной валюты в один день. Если периодичность записи регистра имеет значение «По позиции регистратора», то ключ уникальности записи также содержит и ссылку на документ-регистратор, т.е. в таком регистре не может существовать две записи с одинаковым набором измерений, периодом и регистратором. Это неотъемлемое свойство регистра сведений, отличающее его от остальных регистров. |
Добавление новых записей в регистр сведений, а также перебор имеющихся записей производится стандартным для всех регистров способом. В данном разделе мы рассмотрим только самое важное — получение информации из периодического регистра на определенный момент времени.
Обращение к периодическим сведениям с помощью методов
Объект РегистрСведенийМенеджер позволяет обращаться к «итогам» регистра. Под «итогами» периодического регистра сведений понимаются первые или последние значения ресурсов по указанным измерениям. При этом применяются следующие методы:
Метод | Описание | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Поле | Описание |
---|---|
<Имя измерения> | Набор полей, содержащий значения измерений регистра. Имена полей соответствуют именам измерений. |
<Имя реквизита> | Набор полей, содержащий значения реквизитов регистра. |
<Имя ресурса> | Набор полей, который содержит значения ресурсов регистра. |
Активность | Содержит признак активности записи. Записи, для которых значение данного свойства установлено в Ложь, не будут учитываться при получении «первых» или «последних» записей регистра, а также при получении сведений на определенный момент времени. |
МоментВремени | Содержит момент времени записи регистра. |
НомерСтроки | Содержит номер строки, определяемый как порядковый номер записи в наборе записей. |
Период | Содержит период, к которому относится запись регистра. |
Регистратор | Содержит ссылку на документ-регистратор движения. |
При обращении к виртуальным таблицам СрезПервых и СрезПоследних можно указать следующие параметры:
Параметр | Описание |
---|---|
Дата | Указывается дата или момент времени, на которые будут получены сведения. Если параметр не задан, будут выбираться наиболее поздние/ранние записи. |
Условие | Указывается условие на языке запросов. Оно будет использовано для ограничения состава записей, среди которых будут выбираться наиболее поздние/ранние. Условие будет применяться к исходным записям, а не к уже отобранным. |
Приведем примеры обращения к записям регистра сведений с помощью запросов:
Пример 1. Выбрать все записи регистра сведений
Пример 2. Получить актуальный курс одной валюты на заданную дату
Пример 3. Выбрать актуальные курсы всех валют на заданную дату
Пример 4. Получить актуальный прайс-лист на заданную дату (указан определенный тип цен, например, «Розничная»)
Каталог статей
РегистрСведенийМенеджерЗаписи.<имя>. Позволяет читать, записывать и удалять отдельную запись регистра сведений. Используется только для регистров сведений, не изменяемых регистраторами, т. е. для которых в конфигураторе установлен режим записи Независимый.
РегистрСведенийЗапись.<имя>. Предоставляет доступ к записи регистра сведений. Объект не создается непосредственно, а предоставляется другими объектами, связанными с регистром сведений. Например, данный объект представляет записи регистра в наборе записей.
РегистрСведенийКлючЗаписи.<имя>. Представляет собой набор значений, однозначно идентифицирующих запись регистра. Объект используется в тех случаях, когда необходимо сослаться на определенную запись. Например, он выступает в качестве значения свойства ТекущаяСтрока табличного поля, отображающего список записей регистра.
Информация в регистре сведений хранится в виде записей, каждая из которых содержит значения измерений и соответствующие им значения ресурсов. Измерения регистра описывают разрезы, в которых хранится информация, а ресурсы регистра непосредственно содержат хранимую информацию. В отличие от регистра накопления, ресурсы могут содержать любую информацию. Вместе с каждой записью, находящейся в регистре сведений, можно хранить дополнительную произвольную информацию. Для этого служат реквизиты регистра сведений.
Измерения
Измерения, к значениям которых необходим быстрый доступ (например, при реализации отборов), следует располагать первыми, далее – в порядке убывания «популярности в отборах». Таким образом будет обеспечиваться возможность эффективного применения индексов при реализации задач чтения информации из таблицы регистра.
Также необходимо иметь в виду, что, например, SQL Server накладывает определенное ограничение – не более 16 полей в индексе. Поэтому работа с регистрами, имеющими очень большое количество измерений, может быть неэффективна по скорости из-за невозможности использования индексов.
Если в регистре сведений есть набор данных для разных измерений, и в конфигураторе попытаться удалить измерение, то система выдаст ошибку, что записи стали не уникальными.
Свойства:
- Ведущее
Свойство Ведущее имеет смысл использовать лишь тогда, когда измерение имеет тип ссылки на объект базы данных. Установка свойства Ведущее будет говорить о том, что запись регистра сведений представляет интерес, пока существует тот объект, ссылка на который выбрана в качестве значения этого измерения в этой записи. При удалении объекта все записи регистра сведений по этому объекту тоже будут автоматически удалены.
Если измерению установлен тип "СправочникСсылка", то в форме элемента справочника для ведущего измерения, в панели навигации в группе Перейти появится ссылка. По ней возможен переход к записям этого регистра, которые содержат в измерении ссылку на этот элемент справочника.
- Основной отбор
Если регистр независимый, по этим измерениям будет устанавливаться регистрация изменений для плана обмена. Аналогично использование "Основной отбор по периоду" включает основной отбор для период для периодических регистров.
- Запрет незаполненных значений
При установке этого свойства срабатывает проверка на заполненность измерения в момент записи. Если это свойство было добавлено после того, как в регистр были добавлены значения с пустым значением измерения, то при реструкторизации базы ошибка не будет выведена, так как проверка срабатывает только при записи набора данных.
В отношении поля Период для периодических регистров сведений и в отношении поля Регистратор регистра сведений с подчиненным режимом записи подобная проверка выполняется всегда.
Периодичность
Если записи подчинены регистратору, то у регистра добавляется служебное поле "Регистратор", в которое записывается ссылуа на документ, который совершил проводки. Так же добавляются поля "Номер строки" и "Активность".
"Регистратор" обеспечивает привязку к документу, но не всегда входит в разряд ключевых полей.
Для того чтобы поле Регистратор стало ключевым, необходимо для такого регистра сведений (с режимом записи Подчинение регистратору) установить для свойства Периодичность значение "По позиции регистратора".
С прикладной точки зрения это означает возможность хранения в регистре сведений данных с привязкой к временной оси с дробностью до момента времени. Соответственно данные можно получать тоже на момент времени.
Еще одной особенностью регистра, подчиненного регистратору является то, что появляется служебное поле "Активно", которое можно менять. Снять или установить активность можно только для всех записей набора записей, подчиненных некоему регистратору. Записи, для которых значение данного свойства установлено в Ложь, не будут учитываться при получении «первых» или «последних» записей регистра, а также при получении сведений на определенный момент времени.
Индексы
Непериодический регистр сведений
Индекс, включающий все измерения в том порядке, в котором они заданы при конфигурировании.
Этот индекс создается, если есть хоть одно измерение регистра.
ИзмерениеN + Измерение1 + [Измерение2 +. ]
Индекс, включающий все измерения. Первое поле – ИзмерениеN, затем все остальные измерения в том порядке, в котором они заданы при конфигурировании.
Этот индекс создается, если:
- для измерения измерениеN задано свойство Индексировать или свойство Ведущее;
- измерениеN – не первое измерение;
- измерениеN – не единственное измерение.
Реквизит + Измерение1 + [Измерение2 +. ]
Индекс, в котором первое поле – Реквизит, затем все измерения в том порядке, в котором они заданы при конфигурировании.
Этот индекс создается, если для реквизита свойство Индексировать установлено в значение Индексировать.
Ресурс + Измерение1 + [Измерение2 +. ]
Индекс, в котором первое поле – Ресурс, затем все измерения в том порядке, в котором они заданы при конфигурировании.
Этот индекс создается, если для ресурса свойство Индексировать установлено в значение Индексировать.
В данный индекс включается поле Ресурс, и затем все измерения в том порядке, в котором они заданы в составе регистра как объекта конфигурации.
Периодический регистр сведений
Период + [Измерение1 + . ]
Этот индекс создается всегда для любого периодического регистра сведений.
Измерение1 + [Измерение2 +. ] + Период
Индекс, включающий все измерения в том порядке, в котором они заданы при конфигурировании, и поле Период.
Этот индекс создается, если есть хоть одно измерение регистра.
ИзмерениеN + Период + Измерение1 + [Измерение2 +. ]
Индекс, включающий поле Период и все измерения. Первое поле – ИзмерениеN, затем поле Период, затем все остальные измерения в том порядке, в котором они заданы при конфигурировании.
Этот индекс создается, если:
- для измерения измерениеN свойство Индексировать установлено в значение Индексировать;
- измерениеN – не единственное измерение.
Дополнительный индекс для регистра сведений, подчиненного регистратору
Этот индекс создается всегда для любого регистра сведений, подчиненного регистратору.
Регистр сведений с периодичностью «По позиции регистратора»
Период + Регистратор + НомерСтроки
Эти индексы создаются всегда для любого регистра сведений с периодичностью По позиции регистратора.
Измерение1 + [Измерение2 + . ] + Период + Регистратор + НомерСтроки
Индекс, включающий все измерения в том порядке, в котором они заданы при конфигурировании, поле Период, поле Регистратор и поле НомерСтроки.
Этот индекс создается, если есть хоть одно измерение регистра.
Измерение + Период + Регистратор + НомерСтроки
Этот индекс создается, если для измерения свойство Индексировать установлено в значение Индексировать.
Реквизит + Период + Регистратор + НомерСтроки
Этот индекс создается, если для реквизита свойство Индексировать установлено в значение Индексировать.
Ресурс + Период + Регистратор + НомерСтроки
Этот индекс создается, если для ресурса свойство Индексировать установлено в значение Индексировать.
Последовательность событий
Последовательность событий при сохранении данных из формы записи регистра сведений (записать и закрыть)
Работа с формой записи регистра сведений осуществляется при помощи объекта РегистрСведенийМенеджерЗаписи.<имя>, который, в свою очередь, использует объект РегистрСведенийНаборЗаписей.<имя>.
Особенности внутренней реализации объекта РегистрСведенийМенеджерЗаписи.<имя> таковы, что в случае сохранения существующей записи регистра сведений обработчики события Перед Записью() и ПриЗаписи() модуля набора записей будут вызваны дважды: сначала для старого набора записей (с количеством записей 0) и затем для нового (с количеством записей 1).
Последовательность событий при сохранении данных из формы набора записей регистра сведений (записать и закрыть)
МоментВремени и Граница
Момент времени — комбинация даты и ссылки на документ. Позволяет разделить и упорядочить документы в пределах одной секунды, выстраивая все документы в однозначную последовательность. Момент времени имеет один метод – Сравнить(), при помощи которого возможно сравнение двух моментов времени между собой.
МоментВремени() — это момент непосредственно ПЕРЕД позицией документа (аналог РассчитатьРегистрыНа(ТекущийДокумент() в 7-рке), а если необходимо получить момент непосредственно после позиции документа, то используйте объект Граница.
МоментСразуПослеДокумента = Новый Граница(ДокументСсылка,ВидГраницы.Включая);
Момент = Новый МоментВремени(ТекДокумент.Дата, ТекДокумент.Ссылка); // создает объект момент времени по ссылке и дате документа.
Момент времени и Границу можно передавать в качестве входного параметра виртуальных таблиц регистров сведений
Шаблоны использования
- // Пример: получить текущую цену из периодического регистра сведений "Цены".
Элемент = Справочники.Номенклатура.НайтиПоКоду(4);
Отбор = Новый Структура("Номенклатура", Элемент);
ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(ТекущаяДата(), Отбор);
Цена = ЗначенияРесурсов.Цена;
- // Пример: Получить начальную цену из периодического регистра сведений Цены.
ИмяРегистра = "Цены";
Услуга = Справочники.Номенклатура.НайтиПоНаименованию("Диагностика");
Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", Услуга );
Цена = РегистрыСведений[ИмяРегистра].ПолучитьПервое(ТекущаяДата(), Отбор).Цена;
- // Пример: активизировать требуемую строку списка регистра сведений.
СтруктураКлючевыхПолей = Новый Структура;
СтруктураКлючевыхПолей.Вставить("Период", Дата("20040331000000"));
СтруктураКлючевыхПолей.Вставить("Номенклатура", Справочники.Номенклатура.НайтиПоКоду("0000006"));
Элементы.Материалы.ТекущаяСтрока = РегистрыСведений.Цены.СоздатьКлючЗаписи(СтруктураКлючевыхПолей);
- // Пример: показать номенклатуру, цена на которую была установлена в заданную дату и время.
Набор = РегистрыСведений.Цены.СоздатьНаборЗаписей();
Набор.Отбор.Период.Установить(ЗаданнаяДата, Истина);
Набор.Прочитать();
Для Каждого ОчереднаяЗапись Из Набор Цикл
Сообщить("Номенклатура = "+ ОчереднаяЗапись.Номенклатура +", цена = "+ ОчереднаяЗапись.Цена);
КонецЦикла;
- // Пример: добавить новое значение цены в регистр "Цены".
Запись = РегистрыСведений.Цены.СоздатьМенеджерЗаписи();
Запись.Период = ТекущаяДата();
Запись.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("0000005");
Запись.Цена = 568;
Запись.Записать();
ВАЖНО! Так как при работе с менеджером записи система по умолчанию работает через набор записей, то доступна возможность управления процессом записи, например через событие "ПередЗаписью". Однако надо иметь ввиду, что если после чтения записи изменяются значения её ключевых свойств (период или измерение), то при записи происходит 2 записи набора записей (см картинку выше):
- запись пустого набора для старого значения ключевых полей
- запись набора с новыми данными.
Соответственно событие "ПередЗаписью" срабатывает дважды и это надо учитывать.
- // Добавить запись через набор записей
НаборЗап = РегистрыСведений.Цены.СоздатьНаборЗаписей();
НаборЗап.Отбор.Номенклатура.значение = СсылкаНоменклатура; //Если не установит отбор, то будут замещены все записи.
// Если регистр имеет несколько измерений, а в отборе установим только одно, то при записи набора будут удалены все записи с данной номенклатурой и записана только одна запись. Не забываем про период, так как он тоже является "измерением" регистра.
НаборЗап.Прочитать(); //Если не прочитать, то тоже замещены все записи для данной номенклатуры
Запись = НаборЗап.Добавить();
Запись.Номенклатура = Ссылка;
Запись.Период = ТекущаяДата();
Запись.Цена = Цена;
НаборЗап.Записать();
- // Пример, получить значение ресурса по набору измерений. Для метода Получить() обязательна передача параметра, содержащего структуру отбора значений по всем измерениям.
СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("ФизическоеЛицо", ПроверяемоеЛицо);
СтруктураОтбора.Вставить("Подразделение", ВыбранноеПодразделение);
СтруктураРесурсов = РегистрыСведений.Сотрудники.Получить(СтруктураОтбора);
- // Пример: удалить все записи регистра сведений за текущий месяц.
Выборка = РегистрыСведений.Цены.Выбрать(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата()));
Пока Выборка.Следующий() Цикл
Выборка.ПолучитьМенеджерЗаписи().Удалить();
КонецЦикла;
- // Пример: удалить все записи регистра сведений через выборку по отбору.
ОтборР = Новый Структура("Документ");
ОтборР.Документ = Ссылка;
// в качестве полей для отбора могут использоваться измерения или реквизиты регистра, для которых в конфигураторе установлен признак индексирования в значение Индексировать или установлен признак Ведущее. Но необходимо помнить, что отбор при этом возможен только на равенство и только по одному полю. Для периодических регистров доступна возможность отобрать записи за интервал времени.
Выборка = РегистрыСведений.МенеджерыКлиентов.Выбрать(,,ОтборР,);
Пока Выборка.Следующий() Цикл
Выборка.ПолучитьМенеджерЗаписи().Удалить();
КонецЦикла;
- // Пример получения записей регистра сведений, исключая границы интервала
// Установить значения границ
ГраницаНачалаИнтервала = Новый Граница(НачалоИнтервала, ВидГраницы.Исключая);
ГраницаКонцаИнтервала = Новый Граница(КонецИнтервала, ВидГраницы.Исключая);
// Подготовить структуру отбора по измерению "Номенклатура"
СтруктураОтбора = Новый Структура("Номенклатура", ВыбранныйТовар);
// Получить выборку записей
ВыборкаЗаписей = РегистрыСведений.ПерсонифицированныйПрайс.Выбрать(ГраницаНачалаИнтервала, ГраницаКонцаИнтервала, СтруктураОтбора);
Пока ВыборкаЗаписей.Следующий() Цикл
// Выполнить действие с очередной записью
//.
КонецЦикла;
- // Пример: удалить все записи (полностью очистить регистр).
НабоЗаписей= РегистрыСведений.Цены.СоздатьНаборЗаписей();
НаборЗаписей.Записать();
- // Пример: показать изменение цен на элемент номенклатуры в течение года.
Отбор = Новый Структура("Номенклатура", Справочники.Номенклатура.НайтиПоКоду("0000005"));
Выборка = РегистрыСведений.Цены.Выбрать(НачалоГода(ТекущаяДата()), ТекущаяДата(), Отбор);
Пока Выборка.Следующий() цикл
Сообщить("Дата = " + Выборка.Период + ", цена = " + Выборка.Цена);
КонецЦикла;
Проектирование регистров сведений
Что лучше? Создать несколько регистров с большим количеством ресурсов или, наоборот, создать много регистров, но с меньшим количеством ресурсов?
При ответе на это вопрос надо учитывать:
Структурный подход. Каждая запись в регистре сведений содержит информацию о том, что для данной комбинации ключевых полей установлены некоторые значения ресурсов. То есть если запись добавляется или модифицируется, это выполняется для всех значений ресурсов.
Восприятие пользователем. При проектировании регистра важно проанализировать, как реально меняются значения данных, которые будут храниться в регистре, и выработать определенную модель отражения этих изменений в базе данных. Важно, чтобы отражение предметной области в регистре правильно воспринималось пользователем.
Учет потенциальных модификаций состава регистра. Если в перспективе может потребоваться добавить новые измерения и весь список измерений можно разбить на логические группы, то предпочтительнее создать несколько регистров, которые содержат отдельный логический набор измерений.
Время получения данных, необходимых для работы механизмов решения. Например, при работе некоторого механизма важно получать данные объекта и данные, связанные с данным объектом. Очевидно, что получение этих связанных данных из нескольких ресурсов одного регистра (одной таблицы) будет происходить в общем случае быстрее, нежели получение этих данных из нескольких регистров (нескольких таблиц).
Время записи информации в базу данных. Запись в несколько регистров сведений в общем случае будет выполняться медленнее, нежели запись одной записи с несколькими ресурсами.
«Слабое звено». Если данные одного из ресурсов нужно модифицировать очень часто, то объем базы будет расти существеннее, если в составе регистра много ресурсов. Особенно, если какой-нибудь из ресурсов будет являться хранилищем значений, в котором будет храниться картинка или бинарные данные. Такие данные вообще целесообразнее выделять в отдельный регистр.
Эффективность применения индексов. Расстановки измерений регистра сведений имеет важное значение. Измерения, к значениям которых необходим быстрый доступ (например, при реализации отборов), следует располагать первыми, далее – в порядке убывания «популярности в отборах». Таким образом будет обеспечиваться возможность эффективного применения индексов при реализации задач чтения информации из таблицы регистра.
Регистры сведений в 1С. Примеры программной работы
В статье рассмотрено описание и предназначение регистров сведений, а также примеры работы с регистрами сведений средствами встроенного языка 1С – создание и редактирование наборов записей, отдельных записей, работа с ключом записи.
Содержание
Регистры сведений в 1С 8
Что такое регистр сведений
Регистр сведений – это объект конфигурации, который предназначен для хранения произвольной информации в разрезе нескольких измерений. Например, можно хранить соответствие материально-ответственных лиц и складов, курсы валют или цену на товары. Можно представить регистр сведений как многомерную таблицу, где на каждом пересечении измерений хранятся значения, которые называются Ресурсы.
Помимо измерений и ресурсов, у регистров сведений могут быть определены реквизиты – вспомогательная информация, служащая для уточнения данных – например, ответственный пользователь, комментарий и т.п.
Значения в регистре сведений могут храниться не только в разрезах измерений, но также они могут быть развернуты во времени. В этом случае к записям добавляется стандартное измерение Период. Регистры с информацией, развернутой во времени, называются периодическими.
Периодические регистры сведений позволяют получить информацию о срезе наиболее ранних или наиболее поздних записей.
Строки в многомерной таблице регистра сведений называются записями. Уникальность записей регистра сведений определяется как комбинация измерений и периода. В случае, если регистр сведений не периодический, то период будет не заполнен, и уникальные записи будут отличаться по комбинации измерений. Платформа не допускает создания двух записей с одинаковым набором измерений и периодом. Измерения и период образуют т.н. составной ключ, и называются ключевыми полями.
Записи в регистр сведений могут вноситься как вручную, независимо одна от другой, так и при помощи документов, единым набором. Документ, которым вносится запись в регистр сведений, называется регистратором.
Свойства регистра сведений. Основные настройки
Основные свойства регистра сведений, уникальные только для этого объекта метаданных – это Периодичность и Режим записи. Рассмотрим создание и настройку регистра сведений на примере хранения тарифов работников.
Периодичность регистра сведений
Данное свойство отвечает за доступность стандартного реквизита Период. Периодичность может быть
- В пределах секунды
- В пределах дня
- В пределах месяца
- В пределах квартала
- В пределах года
В случае, если регистр сведений подчинен регистратору (см. ниже), становится доступным еще один вариант периода – по позиции регистратора.
Поле Период входит в составной ключ записи; можно добавлять записи с одинаковым составом измерений, но с разным периодом. Если периодичность – по позиции регистратора, то дата документа может совпадать с точностью до секунды – все равно это будут разные записи, т.к. в этом случае позиция регистратора будет определяться как момент времени (Дата + ссылка на документ). В зависимости от выбранной периодичности, период записи будет автоматически приводиться к началу периода в свойстве Периодичность. Например, если указана периодичность “В пределах дня”, то к началу суток, если “В пределах месяца” – то соответственно к первому числу месяца, и т.д.
Режим записи регистра сведений 1С
Режим записи определяет, можно ли редактировать записи регистра сведений вручную, или они будут вноситься движениями документа-регистратора. Для регистров сведений с режимом записи “Независимый” можно указывать основной отбор для измерений. В случае, если при этом регистр сведений периодический, становится возможным указание флажка Основной отбор по периоду.
Что такое ведущее измерение и основной отбор?
Флаг Ведущее у измерения регистра сведений означает, то данная запись имеет смысл пока существует объект, ссылка на который хранится в данном измерении. Например, если удалить из базы данных сотрудника “Иванов Иван”, то автоматически из регистра сведений будут удалены все записи по тарифам, где в измерении “Сотрудник” был указан Иванов Иван. Если данный флаг не установлен, то при удалении объекта, записи остались бы в регистре с битой ссылкой на него.
Также свойство “Ведущее” у измерения отвечает за построение пользовательского интерфейса. В карточке объекта, который является ведущим измерением, появляется гиперссылка для быстрого перехода к регистру сведений с отбором по текущему объекту.
Если регистр независимый, по этим измерениям будет устанавливаться регистрация изменений для плана обмена. Аналогично использование Основной отбор по периоду включает основной отбор для период для периодических регистров.
Проектирование структуры регистра сведений
Следует стараться избегать архитектурных решений, когда значение одного ресурса регистра сведений меняется значительно чаще чем значение другого. В этом случае целесообразно выделить такие ресурсы в отдельный регистр сведений. Это связано с тем, что в момент записи записываются все ресурсы, а не только измененный, что приводит к неоправданной нагрузке на СУБД.
Получение данных из нескольких ресурсов одного регистра сведений выполняется быстрее, чем получение одного ресурса из нескольких регистров
Следует внимательно отнестись к вопросу – какие поля многомерной таблицы должны быть измерениями, а какие – ресурсами. В зависимости от прикладной задачи, подход может быть различным.
Например, мы хотим знать, какие материально ответственные лица закреплены за тем или иным складским помещением. Если таких МОЛ более одного человека, то правильная архитектура регистра будет такая:
Измерения: МОЛ
Ресурсы: Склад
Если же нам требуется гарантировать, что у одного склада может быть только одно материально ответственное лицо, то состав регистра сведений будет следующий:
Независимый регистр сведений в 1С
Технологическая платформа 1С содержит различные объекты, предназначенные для организации хранения данных.
Одним из классов таких объектов являются регистры. Существуют несколько видов регистров в 1С:
2. Как использовать регистры сведения для базы
Если необходимо хранить единичные, условно-постоянные значения данных общих для базы данных, но получать их отдельно по разным областям и направлениям учета, то зачастую эффективным бывает использование регистров сведений (далее РС).
РС предназначен для организации хранения необъектных данных в нескольких разрезах (рисунок 1).
Ключом записей регистра сведения является набор измерений регистра сведений (рисунок 1).
В принципе «измерений» регистр сведения может вообще не содержать. В этом случае в данных такого регистра может храниться только одно значение ресурса. Запись другого значения обязательно будет сопровождаться замещением предыдущего (рисунок 2).
3. Периодические и непериодические регистры сведений
Одной из возможностей РС является возможность хранения данных в разрезе временных периодов. Установкой значения свойства «Периодичность» при создании регистра можно изменять или совсем отключать эту возможность.
У регистров с установленным значением свойства «Периодичность» не равным «Непериодический регистр сведения» к ключу записей регистра добавляется поле «Период» (рисунок 3).
4. Различия зависимых и независимых регистров сведений
РС могут быть зависимыми – подчиненными регистратору (документу) и независимыми, соответственно, не подчиненными регистратору.
Разница между ними в том, что в каждой записи РС, подчиненного регистратору, есть поле, в котором хранится ссылка на документ-регистратор, в связи с которым и сделана эта запись. А у независимого регистра сведений нет регистратора и соответственно нет поля такого типа в записи (рисунок 4).
Отдельно следует отметить, что если РС является подчиненным регистратору и у свойства «Периодичность» установлено значение «По позиции регистратора», тогда у ключа записей регистра появляется поле «Регистратор» (рисунок 5).
5. Независимые регистры сведений
Независимый регистр сведения не имеет регистратора, и он может быть как непериодическим (ключом записей регистра такого сведения будет набор измерений), так и периодическим (ключом записей регистра будет поле «Период» + набор измерений регистра сведения).
Один из примеров реализации хранения данных с помощью РС – это учет курсов валют во многих типовых конфигурациях 1С на одноименном регистре.