- Предназначение регистра сведений
- Структура
- Периодичность
- Подчинение регистратору
- Уникальность записей
- Формы
- Форма списка
- Форма записи
- Функциональные возможности регистра сведений
- Настройка и свойства регистра сведений 1С 8
- Периодичность регистра сведений 1C
- Режим записи регистра сведений
- Свойства измерения регистра сведений
- Программная запись в регистр сведений 1С
- Создание одной записи в регистр сведений 1С.
- Создание нескольких записей в регистр сведений 1С.
- Изменение записей регистра сведений с отбором
- Создание и запись пустого набора
- Чтение и запись порциями
- Чтение и запись порциями в транзакциях
- Сравнение
- Программная очистка регистра сведений
- Обработка очистка регистра сведений в 1С 8.3
- Обработка – свертка независимого периодического регистра сведений
- Поиск и чтение в регистре сведений
Предназначение регистра сведений
Регистры сведений в 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», работающая как в обычных формах, так и в управляемых. Чтобы ею воспользоваться, ее необходимо открыть в пользовательском режиме через пункт меню «Файл» — «Открыть».
Указываем имя регистра, который нам нужно очистить (обязательно уточнить его название в конфигураторе) и нажимаем кнопку «Очистить регистр».
После некоторого ожидания операция завершена. Таким способом можно очистить любой регистр сведений в программе.
Обработка – свертка независимого периодического регистра сведений
Есть еще одна обработка, позволяющая очистить регистр сведений, подходящая для любых конфигурация 8.2 и 8.3, работающих как обычное приложение. (СверткаНезависимогоПериодическогоРегистраСведений.epf).
Чтобы открыть обработку для использования в конфигурации (управляемое приложение), нужно запустить 1С 8.3 в режиме «Толстый клиент (обычное приложение)». Для этого в Конфигураторе изменить режим запуска в пункте меню «Сервис» — «Параметры».
Установив переключатель в положение «Толстый клиент (обычное приложение)», нажимаем кнопку «Применить» или «Ок».
После этого заходим в режим «1С:Предприятие» через меню «Сервис» Конфигуратора.
В результате наша программа открылась в режиме обычного приложения (оно использовалось в более старых версиях программы 1С). Используя кнопку «Открыть» на панели инструментов, открываем нашу обработку. Ее настройки интуитивно понятны. Устанавливаем дату, выбираем регистры, которые хотим очистить и нажимаем кнопку «Выполнить».
Наши регистры будут очищены. Но, повторимся, при выполнении этой операции необходимо быть особенно внимательным и обязательно не забыть провести резервное копирование информационной базы, как и при большинстве манипуляций с базой и ее целостностью. Здесь же это особенно важно сделать, так как операция по обнулению регистров необратима.
Поиск и чтение в регистре сведений
Чтобы найти в регистре сведений запись и прочитать ее, нужна помощь запросов. Например, нам надо получить цены, внесенные определенным регистратором:
ВЫБРАТЬ ЦеныНоменклатуры.Номенклатура, ЦеныНоменклатуры.Цена ИЗ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ГДЕ ЦеныНоменклатуры.Регистратор = &Регистратор
- 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/