Добавление, запись значений в регистр сведений в 1С

Предназначение регистра сведений

Регистры сведений в 1С — это прикладные объекты конфигурации для хранения данных в структурированном виде (в разрезе измерений). Например, в регистре сведений можно хранить курсы валют в разрезе валют, цены номенклатуры в разрезе номенклатур, ФИО физических лиц в разрезе физических лиц и т.д.

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

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

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

Физически регистр сведений представляет собой таблицу, в которой хранятся следующие данные:

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

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

Структура

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

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

записи, хранимые в базе данных, будут выглядеть следующим образом:

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

Периодичность

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

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

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

Подчинение регистратору

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

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

Например, изменение цен компании может производиться только определенным кругом лиц, и каждое такое изменение должно сопровождаться «бумажным» документом. В этом случае можно использовать режим подчинения регистратору, при котором изменение цен может быть выполнено только специальным документом — Изменение цен товаров.

Уникальность записей

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

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

Формы

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

Форма списка

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

Форма записи

Для просмотра и изменения отдельных записей регистра сведений используется форма записи. Как правило, она представляет данные в удобном для восприятия и редактирования виде:

Функциональные возможности регистра сведений

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

Настройка и свойства регистра сведений 1С 8

Два главных свойства регистра сведения — Периодичность и Режим записи.

Это уникальные свойства регистра сведений, которых больше нет ни у одного объекта метаданных. Рассмотрим их подробнее.

Периодичность регистра сведений 1C

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

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

  • Непериодический
  • В пределах секунды
  • В пределах дня
  • В пределах месяца
  • В пределах квартала
  • В пределах года

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

А одна из главных особенностей периодического регистра сведений — возможность получать готовые значения «Среза первых» и «Среза последних». Эта информация позволяет очень быстро получить из базы данных информацию о последнем (первом) установленном значении на определенную дату.

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

В 1С 8.2 и 8.3 это свойство может быть либо в значении «Независимый», либо — «Подчинение регистратору». В первом случае записи можно будет произвести как программно, так и из формы списка регистра сведений. Во втором случае обязательно указание документа-регистратора записи. Это накладывает определенные ограничения, но в то же время открывает новые возможности.

Свойства измерения регистра сведений

Также следует обратить внимание на палитру свойств измерений регистра сведений 1С 8.3. Особенно на флаги Ведущее и Основной отбор:

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

Программная запись в регистр сведений 1С

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

Использование менеджера записи:

НоваяЗапись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
НоваяЗапись.Валюта = Справочники.Валюты.НайтиПоНаименованию(«USD»);
НоваяЗапись.Период = Дата(31,12,2016);
НоваяЗапись.Курс = 100;
НоваяЗапись.Кратность = 1;
НоваяЗапись.Записать();

Использование набора записей регистра сведений 1С:

НовыйНаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
//если вы не установите отбор — удалятся все записи регистра сведений
НовыйНаборЗаписей.Отбор.Валюта.Установить(Доллар, Истина);
НовыйНаборЗаписей.Отбор.Период.Установить(Дата(31,12,2016), Истина);
//формируем непосредственно запись набора
НоваяЗаписьНабора = НовыйНаборЗаписей.Добавить();
НоваяЗаписьНабора.Валюта = Справочники.Валюты.НайтиПоНаименованию(«USD»);
НоваяЗаписьНабора.Период = Дата(31,12,2016);
НоваяЗаписьНабора.Курс = 100;
НоваяЗаписьНабора.Кратность = 1;
НовыйНаборЗаписей.Записать();

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

Видеолекция по регистрам сведений в 1С для начинающих:

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте — регулярно выходят новые видео):

Создание одной записи в регистр сведений 1С.

Чтобы сделать запись в регистр сведений 1С необходимо воспользоваться менеджером записи.

Пример:

// Создаем менеджер записи
СоздатьКурсыВалют = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
// Устанавливаем измерения, ресурсы и устанавливаем период записи
СоздатьКурсыВалют.Валюта = СсылкаВалюта;
СоздатьКурсыВалют.Курс = Курс;
СоздатьКурсыВалют.Кратность = 1;
СоздатьКурсыВалют.Период = ТекущаяДата();
//Записываем получившуюся запись с замещением (если уже есть такая запись с такими измерениями и периодом)
СоздатьКурсыВалют.Записать(Истина);

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

Создание нескольких записей в регистр сведений 1С.

Если требуется добавить сразу несколько записей, нужно воспользоваться набором записей.

Пример:

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

В процессе выполнения программного кода, в регистре сведений «Курсы валют», будут сделаны записи по таблице «Таблица Курсов» с замещением.

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

Если требуется изменить уже существующие записи, тогда Вам подойдет следующий код


Пример:

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

В результате выполнения вы установите новый курс у валюты, которая установлена в отборе.

Создание и запись пустого набора

Заголовок говорит сам за себя:

&НаСервере Процедура УдалитьЗаписиНаСервере() НаборЗаписей = РегистрыСведений.ДанныеДляОбработки.СоздатьНаборЗаписей() НаборЗаписей.Записать(Истина) КонецПроцедуры 

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

Чтение и запись порциями

Просто берем из регистра записи порциями и обрабатываем, пока записи не кончатся:

&НаСервере Процедура УдалитьЗаписиНаСервере() Продолжать = Истина Пока Продолжать Цикл Запрос = Новый Запрос Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1000  | ДанныеДляОбработки.Номенклатура  |ИЗ  | РегистрСведений.ДанныеДляОбработки КАК ДанныеДляОбработки" Продолжать = Не Запрос.Выполнить().Пустой() Выборка = Запрос.Выполнить().Выбрать() Пока Выборка.Следующий() Цикл НаборЗаписей = РегистрыСведений.ДанныеДляОбработки.СоздатьНаборЗаписей() НаборЗаписей.Отбор.Номенклатура.Установить(Выборка.Номенклатура) НаборЗаписей.Записать(Истина) КонецЦикла КонецЦикла КонецПроцедуры 

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

Чтение и запись порциями в транзакциях

По сути берется предыдущий вариант, но цикл обхода записей заключаем в транзакцию:

&НаСервере Процедура УдалитьЗаписиНаСервере() Сообщение = Новый СообщениеПользователю Сообщение.Текст = "" + ТекущаяДата() + " Начало" Сообщение.Сообщить() Продолжать = Истина Пока Продолжать Цикл Запрос = Новый Запрос Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1000  | ДанныеДляОбработки.Номенклатура  |ИЗ  | РегистрСведений.ДанныеДляОбработки КАК ДанныеДляОбработки" Продолжать = Не Запрос.Выполнить().Пустой() Выборка = Запрос.Выполнить().Выбрать() НачатьТранзакцию() Пока Выборка.Следующий() Цикл НаборЗаписей = РегистрыСведений.ДанныеДляОбработки.СоздатьНаборЗаписей() НаборЗаписей.Отбор.Номенклатура.Установить(Выборка.Номенклатура) НаборЗаписей.Записать(Истина) КонецЦикла ЗафиксироватьТранзакцию() КонецЦикла Сообщение = Новый СообщениеПользователю Сообщение.Текст = "" + ТекущаяДата() + " Завершение" Сообщение.Сообщить() КонецПроцедуры 

Таким образом мы уменьшим количество записей в БД.

Сравнение

Сравним скорость удаления 1 000 000 записей порциями по 1 000 записей с использованием транзакций и без них. Используется файловая ИБ расположенная на жестком диске SATA 3(Специально используется жестки диск, а не SSD для более выраженного различия).

Удаление порциями: 25 минут 12 секунд
Удаление порциями с транзакциями: 15 минут 43 секунды

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

Программная очистка регистра сведений не подчиненного регистратору производится при помощи записи пустого набора записей.

 НаборЗаписей = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей(); // ИмяРегистра например "КурсыВалют", "ПлановыеАвансы", "ЦеныНоменклатуры" и т.д НаборЗаписей.Записать(); 

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

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

Обработка очистка регистра сведений в 1С 8.3

Существует обработка, с помощью которой можно произвести очистку любого регистра сведений – «Очистка регистра сведений 1С.epf», работающая как в обычных формах, так и в управляемых. Чтобы ею воспользоваться, ее необходимо открыть в пользовательском режиме через пункт меню «Файл» — «Открыть».

Рис.3 Обработка очистка регистра сведений в 1С 8.3

Указываем имя регистра, который нам нужно очистить (обязательно уточнить его название в конфигураторе) и нажимаем кнопку «Очистить регистр».

Рис.4 Очистить регистр

После некоторого ожидания операция завершена. Таким способом можно очистить любой регистр сведений в программе.

Обработка – свертка независимого периодического регистра сведений

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

Чтобы открыть обработку для использования в конфигурации (управляемое приложение), нужно запустить 1С 8.3 в режиме «Толстый клиент (обычное приложение)». Для этого в Конфигураторе изменить режим запуска в пункте меню «Сервис» — «Параметры».

Рис.5 Обработка – свертка независимого периодического регистра сведений

Установив переключатель в положение «Толстый клиент (обычное приложение)», нажимаем кнопку «Применить» или «Ок».

Рис.6 «Толстый клиент (обычное приложение)»

После этого заходим в режим «1С:Предприятие» через меню «Сервис» Конфигуратора.

Рис.7 Заходим в режим «1С:Предприятие»

В результате наша программа открылась в режиме обычного приложения (оно использовалось в более старых версиях программы 1С). Используя кнопку «Открыть» на панели инструментов, открываем нашу обработку. Ее настройки интуитивно понятны. Устанавливаем дату, выбираем регистры, которые хотим очистить и нажимаем кнопку «Выполнить».

Рис.8 Устанавливаем дату, выбираем регистры, которые хотим очистить и нажимаем кнопку «Выполнить»

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

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

Чтобы найти в регистре сведений запись и прочитать ее, нужна помощь запросов. Например, нам надо получить цены, внесенные определенным регистратором:

 ВЫБРАТЬ ЦеныНоменклатуры.Номенклатура, ЦеныНоменклатуры.Цена ИЗ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ГДЕ ЦеныНоменклатуры.Регистратор = &Регистратор  


Источники

  • https://pro1c8.ru/programmnaya-rabota-registr-svedenij/
  • https://v8.1c.ru/platforma/registr-svedeniy/
  • https://programmist1s.ru/registryi-svedeniy-1s/
  • http://1s-manual.ru/zapis-v-registr-svedenij-1s/
  • https://guesto.ru/1c-udaleniye-zapisey-registra-svedeniy/
  • https://wiseadvice-it.ru/o-kompanii/blog/articles/ochistka-registra-svedenii-1s-8-3/
  • https://wiseadvice-it.ru/o-kompanii/blog/articles/registr-svedenii-v-1s-8-3/

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: