Основной отбор по периоду регистр сведений что это
Перейти к содержимому

Основной отбор по периоду регистр сведений что это

  • автор:

Для чего нужен "Основной отбор по периоду" у РС

Регистры сведений
Редактирование регистра сведений
Если для регистра указано, что он переиодический и выбран независимый режим записи, то становится доступным свойство Основной отбор по периоду. Если флажок установлен, то наряду с основными измерениями и реквизитами регистра учавствующими в отборе записей при регистрации изменений, можно указывать отбор по полю «Период» (см. главу 18 «Механизмы обмена данными» параграф «Служба регистрации изменений»).

Разработка структуры регистра сведений
Свойства измерения (ресурса, реквизита) регистра сведений
Индексировать. Для измерений свойство доступно для редактирования, если измерение не является ведущим. Для измерений, ресурсов и реквизитов с установленным свойством Индексировать создается отдельный индекс, что увеличивает производительность при работе с регистром.

При просмотре регистра в режиме «1С:Предприятие» существует возможность сортировать записи регистра по индексированным измерениям, ресурсам и реквизитам.

Регистры сведений 1С 8.3

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

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

НЕПЕРИОДИЧЕСКИЙ РЕГИСТР СВЕДЕНИЙ 1С

Основное предназначение регистров сведений в том, что в них должны храниться показатели аналитики. Например, у нас есть задача хранить виды топлива (АИ-92, АИ-95 и т.д.), но также и цену на этот вид топлива. Как это удобное всего организовать. Однозначно сами виды топлива необходимо хранить в каком-то справочнике. Так его и назовем – вид топлива. Но где же хранить цену на этот вид топлива? Самое первое решение в реквизите справочника.

Очевидно, такое решение имеет место, если цена у нас ни когда не изменяется. Но в жизни такое редко случается, поэтому если мы так сделаем, то возникнет необходимость каждый раз изменять элемент справочника при изменении цены. В принципе, почему бы и нет. Но, если мы еще добавим новый разрез цены – поставщик топлива: у одного и того же вида топлива может быть разная цена для разных поставщиков, то хранение цены в реквизите справочника станет принципиально не возможной: мы не будем знать, к какому поставщику относиться эта цена.

Для решения этих задач служит специальный объект конфигурации — регистр сведений. В этом регистре сведений можно создавать записи, в которых будет указано, что для такого-то вида топлива, для такого-то поставщика устанавливается такая-то цена.

Сейчас мы и решим эту маленькую прикладную задачу: в нашей конфигурации есть два справочника «Виды топлива» и «Поставщики топлива»

Необходимо организовать возможность хранения цены для каждого вида топлива с учетом поставщиков. Для этого в конфигураторе 1С создадим новый регистр сведений ЦеныНаТопливо.

На закладке Основные установим имя и синоним. Все остальное оставим как есть.

Теперь на закладке данные создадим два измерения – ВидТоплива и ПоставщикТоплива, типы которых ссылки на соответствующие справочники.

У обоих измерений поставим флаг – Ведущее. Это значит, что если мы удалим элемент справочника, который указан в какой-то записи регистра сведений, то эта запись удалиться автоматически. Так же есть одно интерфейсное следствие этого флага: если флаг установлен, то в форме элемента справочника мы сможем посмотреть на записи этого регистра для этого элемента.

Установим для каждого измерения этот флаг.

У нас непериодический регистр, и в нем два измерения ВидТоплива и ПоставщикТоплива это значит, что мы не сможем создать две записи с одинаковыми значениями полей ВидТоплива и ПоставщикТоплива. Программа выдаст ошибку. Что и разумно – не может быть две разных цены на один и тот же вид топлива у одного и того же поставщика. А если может, то это значит, что необходимо добавить еще один разрез (например, база поставщика).

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

Мы создадим ресурс – Цена (тип число 10,2).

И всё. Сохраним конфигурацию и откроем этот регистр сведений и заведем какую-нибудь запись.

Если мы сейчас попробуем создать запись с точно таким же набором измерений, то возникнет ошибка: «Запись с такими ключевыми полями существует».

И последний момент: поскольку мы у измерения ВидТоплива установили флаг «Ведущее», то у элемента справочника ВидыТоплива появилась команда на открытие регистра сведений «Цена на топливо».

Если мы в управляемом приложении 1С перейдем по этой команде, то увидим все цены для нашего вида топлива.

ПЕРИОДИЧЕСКИЕ РЕГИСТРЫ СВЕДЕНИЙ

Как Вы уже должны знать, основное предназначение регистров сведений в том, что они служат для хранения показателей аналитики объектов учета. Но если раньше наши показатели были статичны, т.е. была цена топлива и все, то в случае периодических регистров сведений эти показатели могут изменяться во времени. Например, цена топлива на 01.03.2018 может быть 33 р, а на 02.03.2018 – 34. Для такого учета мы можем использовать и обычный (непериодический) регистр сведений: просто наша запись с ценой для нужного вида топлива будет каждый раз переписываться для новой цены. Но, если у нас стоит цель знать историю цен и использовать цены старых периодов, то такое решение нам не подходит.

В этом случае необходимо использовать свойство Периодичность регистра сведений. В этом свойстве можно указать несколько значений периодичности.

После того, как вы установили периодичность регистра сведений стал доступен флаг «Основной отбор по периоду».

Этот флаг необходим, в случае работы распределенной информационной базы, это значит, что при обмене данными отбор будет вестись, в том числе, по периоду.

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

В этом поле необходимо указывать дату, на которую приходится соответствующая запись. Причем эта дата будет кратной той периодичности, которую мы установили в свойстве основной отбор. Например, если у нас периодичность месяц, то нельзя в поле Период установить дату 25.03.2018, платформа сама округлит её до 01.03.2018, а если будет периодичность год, то платформа округлит дату до начала года 01.01.2018.

Мы у нашего регистра сведений «Цены номенклатуры» установим периодичность «В пределах дня».

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

Но, в тоже время период, по сути, становиться измерением, поэтому нельзя сделать запись с одним и тем же набором полей и периодом. Возникнет ошибка. Поле Период это по сути то же измерение.

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

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

Регистры сведений, которые подчинены какому-то документу называют «Подчиненные регистры сведений».

ПОДЧИНЕННЫЕ РЕГИСТРЫ СВЕДЕНИЙ

Теперь сделаем регистр сведений «Цены на топливо» подчиненным. Для этого создадим в конфигураторе 1С документ «Установка цен топлива поставщика», у которого будет один реквизит «Поставщик» с типом СправочникСсылка.ПоставщикТоплива, а так же табличная часть «Список цен» с реквизитами: «Вид топлива» с типом СправочникСсылка.ВидыТоплива и цена с типом Число (10,2), как у ресурса регистра сведений.

На закладке «Движения» конструктора документов свойство Проведение установим разрешить, а Оперативное проведение – запретить (цены можно устанавливать и задним числом).

У регистра сведений режим записи установим «Подчинение регистратору», а периодичность оставим «В пределах дня».

На закладке «Регистраторы» регистра сведений установим документ «Установка цен топлива поставщика».

Осталось «прописать» движения этого документа по регистру сведений. Мы это сделаем при помощи конструктора. Для этого перейдем в редактор документа на закладку «Движения», в котором нажмем на кнопку «Конструктор движения».

В открывшемся конструкторе движения регистров выберем табличную часть «Список цен» и свяжем реквизиты табличной части и документа с полями регистра сведений.

После этого в модуле документа «Установка цен топлива поставщика» должен появиться код, который будет осуществлять запись движений по регистру сведений при проведении документа.

Запустим управляемое приложение 1С: Предприятия, и, если мы создадим документ и запишем в него какие-то данные.

То после его проведения, будут созданы записи в регистре сведений. Причем у регистра сведений появится новое поле Регистратор.

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

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

После такой установки свойств регистра сведений можно создавать и проводить несколько документов с одинаковыми периодами и одинаковыми наборами данных.

Смотрите также:
Электронный учебник по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Игра «Кто хочет стать миллионером?» с вопросами на определенную тематику (язык программирования JavaScript, английские, немецкие, французские, испанские, португальские, ни­дер­ландские, итальянские слова, электробезопасность, промышленная безопасность, бокс и т.п.), написанная на 1С
Программирование в 1С 8.3 с нуля — краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки

Работа с регистрами сведений

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

Для регистров сведений связь с регистраторами не всегда обязательна.

Добавление записей в регистр сведений

Программно добавить записи в регистр сведений можно двумя способами:

  • с помощью объекта МенеджерЗаписи;
  • с помощью объекта НаборЗаписей.

Добавление записей с помощью объекта МенеджерЗаписи

Объект МенеджерЗаписи можно использовать только для работы с независимыми регистрами. Причем можно обрабатывать только одну запись. Таким образом, для того, чтобы в периодический, независимый регистр сведений “КурсыВалют” с измерением “Валюта” и ресурсами “Курс” и “Кратность” добавить одну запись – курс и кратность валюты на определенную дату – можно использовать следующий код:

Добавление записей в независимый регистр сведений помощью объекта НаборЗаписей

Добавление записей в независимый регистр сведений с помощью НабораЗаписей выполняется по следующему алгоритму:

  1. Создание объекта НабораЗаписи;
  2. Установка отбора по измерениям и периоду (если регистр периодический);
  3. Добавление и заполнение значений полей записи;
  4. Запись набора.

Для примера выполним добавление записей в тот же регистр сведений “КурсыВалют“, предварительно установив отбор по измерению “Валюта” и периоду.

Добавление записей в регистр сведений, подчиненный регистратору

Для добавление записей в регистр сведений, подчиненный регистратору, выполняется с помощью объекта НаборЗаписей по следующему алгоритму:

  1. Создание объекта НаборЗаписей;
  2. Установка отбора по определенному регистратору;
  3. Заполнение записей набора;
  4. Запись набора.

Изменение записей в регистре сведений

Изменение записей в независимом регистре сведений

Изменять записи в независимом регистре сведений можно как с помощью МенеджераЗаписи, так и с помощью НабораЗаписей. Изменение записей выполняется по следующему алгоритму:

  1. Создание объекта МенеджерЗаписи или НаборЗаписи;
  2. Установить отборы;
  3. Чтение записей из базы данных, соответствующих наложенному отбору;
  4. Редактирование полученных записей;
  5. Запись измененных записей.

При изменении записей в независимом регистре сведений с помощью объекта МенеджерЗаписи, действуют такие же ограничения как и при добавлении. При изменении записи с помощью менеджера, после чтения значений выполним проверку – есть ли записи для изменения.

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

Изменение записей в регистрах сведений подчиненных регистраторам

Изменение записей регистров, подчиненных регистраторам, возможно только с помощью наборов записей. При этом всегда используется отбор по регистратору. Нельзя добавлять или удалять отдельные записи. Можно только считывать и записывать записи по регистратору.

Изменение записей выполняется по следующему алгоритму:

  1. Создать объект НаборЗаписей;
  2. Установить отбор по определенному регистратору;
  3. Прочитать набор;
  4. Изменить записи набора;
  5. Записать набор.

Удаление записи в регистре сведений

Удаление записи из независимого регистра сведений

Для удаления записи из независимого регистра сведений выполняется по следующему алгоритму:

Каталог статей

РегистрСведенийМенеджерЗаписи.<имя>. Позволяет читать, записывать и удалять отдельную запись регистра сведений. Используется только для регистров сведений, не изменяемых регистраторами, т. е. для которых в конфигураторе установлен режим записи Независимый.

РегистрСведенийЗапись.<имя>. Предоставляет доступ к записи регистра сведений. Объект не создается непосредственно, а предоставляется другими объектами, связанными с регистром сведений. Например, данный объект представляет записи регистра в наборе записей.

РегистрСведенийКлючЗаписи.<имя>. Представляет собой набор значений, однозначно идентифицирующих запись регистра. Объект используется в тех случаях, когда необходимо сослаться на определенную запись. Например, он выступает в качестве значения свойства ТекущаяСтрока табличного поля, отображающего список записей регистра.

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

Измерения

Измерения, к значениям которых необходим быстрый доступ (например, при реализации отборов), следует располагать первыми, далее – в порядке убывания «популярности в отборах». Таким образом будет обеспечиваться возможность эффективного применения индексов при реализации задач чтения информации из таблицы регистра.

Также необходимо иметь в виду, что, например, 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 записи набора записей (см картинку выше):

  1. запись пустого набора для старого значения ключевых полей
  2. запись набора с новыми данными.

Соответственно событие "ПередЗаписью" срабатывает дважды и это надо учитывать.

  • // Добавить запись через набор записей

НаборЗап = РегистрыСведений.Цены.СоздатьНаборЗаписей();
НаборЗап.Отбор.Номенклатура.значение = СсылкаНоменклатура; //Если не установит отбор, то будут замещены все записи.
// Если регистр имеет несколько измерений, а в отборе установим только одно, то при записи набора будут удалены все записи с данной номенклатурой и записана только одна запись. Не забываем про период, так как он тоже является "измерением" регистра.
НаборЗап.Прочитать(); //Если не прочитать, то тоже замещены все записи для данной номенклатуры
Запись = НаборЗап.Добавить();
Запись.Номенклатура = Ссылка;
Запись.Период = ТекущаяДата();
Запись.Цена = Цена;
НаборЗап.Записать();

  • // Пример, получить значение ресурса по набору измерений. Для метода Получить() обязательна передача параметра, содержащего структуру отбора значений по всем измерениям.

СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("ФизическоеЛицо", ПроверяемоеЛицо);
СтруктураОтбора.Вставить("Подразделение", ВыбранноеПодразделение);
СтруктураРесурсов = РегистрыСведений.Сотрудники.Получить(СтруктураОтбора);

  • // Пример: удалить все записи регистра сведений за текущий месяц.

Выборка = РегистрыСведений.Цены.Выбрать(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата()));
Пока Выборка.Следующий() Цикл
Выборка.ПолучитьМенеджерЗаписи().Удалить();
КонецЦикла;

  • // Пример: удалить все записи регистра сведений через выборку по отбору.

ОтборР = Новый Структура("Документ");
ОтборР.Документ = Ссылка;
// в качестве полей для отбора могут использоваться измерения или реквизиты регистра, для которых в конфигураторе установлен признак индексирования в значение Индексировать или установлен признак Ведущее. Но необходимо помнить, что отбор при этом возможен только на равенство и только по одному полю. Для периодических регистров доступна возможность отобрать записи за интервал времени.
Выборка = РегистрыСведений.МенеджерыКлиентов.Выбрать(,,ОтборР,);
Пока Выборка.Следующий() Цикл
Выборка.ПолучитьМенеджерЗаписи().Удалить();
КонецЦикла;

  • // Пример получения записей регистра сведений, исключая границы интервала

// Установить значения границ
ГраницаНачалаИнтервала = Новый Граница(НачалоИнтервала, ВидГраницы.Исключая);
ГраницаКонцаИнтервала = Новый Граница(КонецИнтервала, ВидГраницы.Исключая);
// Подготовить структуру отбора по измерению "Номенклатура"
СтруктураОтбора = Новый Структура("Номенклатура", ВыбранныйТовар);
// Получить выборку записей
ВыборкаЗаписей = РегистрыСведений.ПерсонифицированныйПрайс.Выбрать(ГраницаНачалаИнтервала, ГраницаКонцаИнтервала, СтруктураОтбора);
Пока ВыборкаЗаписей.Следующий() Цикл
// Выполнить действие с очередной записью
//.
КонецЦикла;

  • // Пример: удалить все записи (полностью очистить регистр).

НабоЗаписей= РегистрыСведений.Цены.СоздатьНаборЗаписей();
НаборЗаписей.Записать();

  • // Пример: показать изменение цен на элемент номенклатуры в течение года.

Отбор = Новый Структура("Номенклатура", Справочники.Номенклатура.НайтиПоКоду("0000005"));
Выборка = РегистрыСведений.Цены.Выбрать(НачалоГода(ТекущаяДата()), ТекущаяДата(), Отбор);
Пока Выборка.Следующий() цикл
Сообщить("Дата = " + Выборка.Период + ", цена = " + Выборка.Цена);
КонецЦикла;

Проектирование регистров сведений

Что лучше? Создать несколько регистров с большим количеством ресурсов или, наоборот, создать много регистров, но с меньшим количеством ресурсов?

При ответе на это вопрос надо учитывать:

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

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

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

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

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

«Слабое звено». Если данные одного из ресурсов нужно модифицировать очень часто, то объем базы будет расти существеннее, если в составе регистра много ресурсов. Особенно, если какой-нибудь из ресурсов будет являться хранилищем значений, в котором будет храниться картинка или бинарные данные. Такие данные вообще целесообразнее выделять в отдельный регистр.

Эффективность применения индексов. Расстановки измерений регистра сведений имеет важное значение. Измерения, к значениям которых необходим быстрый доступ (например, при реализации отборов), следует располагать первыми, далее – в порядке убывания «популярности в отборах». Таким образом будет обеспечиваться возможность эффективного применения индексов при реализации задач чтения информации из таблицы регистра.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *