Как сделать отбор по регистратору

Обновлено: 07.07.2024

В этой статье мы подробно рассмотрим, как программно изменить запись регистра сведений и разберем примеры работы с независимыми регистрами сведений и регистрами с подчинением регистраторам.

Рекомендуем Вам тестовое изменение записей в регистре сведений выполнять на копии информационной базы .

Если Вы нуждаетесь в готовом решении по быстрому изменению записей регистра сведений — обратите внимание на нашу разработку Изменение записей регистра сведений​ . Обработка позволит Вам решить все задачи по изменению записей в регистре сведений и значительно сэкономить время на разработку аналогичного решения!

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

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

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

Что бы удалить все записи из регистра достаточно написать две строчки кода.

  1. Выбрать регистр сведений для удаления.
  2. Создать набор записей.
  3. Записать пустой набор записей.

Удаление записей в независимом регистре сведений с отбором. В примере удаляются все записи из регистра сведений “СтатусыЗаданий” по определенной организации.

  1. Считаем что в переменную Орг установлена нужная для очистки организация.
  2. Создаем набор записей.
  3. Устанавливаем отбор по организации.
  4. Записываем пустой набор данных.

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

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

Удаление записей из регистра сведений подчиненного регистратору с дополнительным отбором

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

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

Удаление записей из регистра с большим количеством записей

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

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

Если регистр сведений подчинен регистратору, то для добавления записей в него необходимо создать набор записей этого регистра с установленным отбором по нужному регистратору, заполнить этот набор записей и записать его:
Код 1C v 8.х

По умолчанию запись выполняется с замещением, т. е. существующие записи этого регистратора в регистре сведений будут удалены.
Для того чтобы добавить записи к существующим записям регистратора, необходимо указывать значение Ложь параметра метода Записать() набора записей. При этом необходимо позаботиться о том, чтобы значения измерений добавляемых записей были уникальны для записей данного регистратора в регистре сведений, иначе запись выполнена не будет:
Код 1C v 8.х

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

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


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

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


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

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

Добавление записей

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

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

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

Общая схема добавления записей в регистр сведений при помощи объекта НаборЗаписей выглядит так:

  • создание объекта НаборЗаписей ;
  • наложение отборов на измерения, период (если регистр периодический) и регистратора (если регистр подчинен регистратору);
  • добавление и заполнение значений полей записей;
  • запись набора записей.

Общая схема добавления записей в регистр сведений при помощи объекта МенеджерЗаписи выглядит так:

  • создание объекта МенеджерЗаписи ;
  • заполнение значений полей записи;
  • запись записи.

Изменение записей

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

Общая схема редактирования записей регистров сведений:

  • создание объекта НаборЗаписей или МенеджерЗаписи ;
  • наложение отборов;
  • чтение записей базы данных, соответствующих наложенным отборам;
  • редактирование прочитанных записей;
  • запись отредактированных записей.

Чтение записей

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

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

Кроме чтения запросом возможно использование методов объектной модели.

Для непериодических регистров сведений:

  • Выбрать(Отбор, Порядок) — выбирает записи с указанным отбором;
  • ВыбратьПоРегистратору(Регистратор) — выбирает все записи указанного регистратора;
  • Получить(Отбор) — получает ресурсы записи с отбором по всем измерениям.

Для периодических регистров сведений:

  • Выбрать(НачалоИнтервала, КонецИнтервала, Отбор, Порядок) — выбирает записи с указанным отбором, у которых период находится между НачалоИнтервала и КонецИнтервала ;
  • ВыбратьПоРегистратору(Регистратор) — выбирает все записи указанного регистратора;
  • Получить(Период, Отбор) — получает ресурсы записи с отбором по всем измерениям и периоду;
  • ПолучитьПервое(НачалоПериода, Отбор) — получает ресурсы наиболее ранней записи, соответствующей указанным периоду и отбору;
  • ПолучитьПоследнее(КонецПериода, Отбор) — получает ресурсы наиболее поздней записи, соответствующей указанным периоду и отбору;
  • СрезПервых(НачалоПериода, Отбор) — получает таблицу наиболее ранних записей, соответствующую указанным периоду и отбору;
  • СрезПоследних(КонецПериода, Отбор) — получает таблицу наиболее поздних записей, соответствующую указанным периоду и отбору.

Удаление записей

Для удаления записи (записей) в независимом регистре сведений необходимо:

Для удаления записей в подчиненном регистре сведений необходимо:

  • создать набор записей;
  • наложить отбор на регистратора;
  • записать набор записей без предварительного чтения.

Очистка регистра сведений

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

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

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

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Читайте также: