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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Читайте также:  Какое одеяло лучше форум

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    // Добавление записи в независимый непериодический регистр сведений
    НаборЗаписей = РегистрыСведений . ВерсииПодсистем . СоздатьНаборЗаписей (); // Этап 1
    НаборЗаписей . Отбор . ИмяПодсистемы . Установить ( ИмяПодсистемы ); // Этап 2
    // Этап 3
    НоваяЗапись = НаборЗаписей . Добавить ();
    НоваяЗапись . ИмяПодсистемы = ИмяПодсистемы ;
    НоваяЗапись . Версия = НомерВерсии ;
    НаборЗаписей . Записать (); // Этап 4

    // Добавление записи в независимый периодический регистр сведений
    НаборЗаписей = РегистрыСведений . КурсыВалют . СоздатьНаборЗаписей (); // Этап 1
    // Этап 2
    НаборЗаписей . Отбор . Валюта . Установить ( Доллар );
    НаборЗаписей . Отбор . Период . Установить ( НачалоДня ( ТекущаяДата ()));
    // Этап3
    НоваяЗапись = НаборЗаписей . Добавить ();
    НоваяЗапись . Период = ТекущаяДата ();
    НоваяЗапись . Валюта = Доллар ;
    НоваяЗапись . Курс = 57.92 ;
    НоваяЗапись . Кратность = 1 ;
    НаборЗаписей . Записать (); // Этап 4

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

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

    // Добавление записи в независимый непериодический регистр сведений
    Запись = РегистрыСведений . ВерсииПодсистем . СоздатьМенеджерЗаписи (); // Этап 1

    // Этап 2
    Запись . ИмяПодсистемы = ИмяПодсистемы ;
    Запись . Версия = НомерВерсии ;

    Запись . Записать (); // Этап 3

    // Добавление записи в независимый периодический регистр сведений
    Запись = РегистрыСведений . КурсыВалют . СоздатьМенеджерЗаписи (); // Этап 1

    // Этап 2
    Запись . Период = ТекущаяДата ();
    Запись . Валюта = Доллар ;
    Запись . Курс = 57.92 ;
    Запись . Кратность = 1 ;

    Запись . Записать (); // Этап 3

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

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

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

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

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

    // Редактирование записей с использованием объекта МенеджерЗаписи
    Запись = РегистрыСведений . КурсыВалют . СоздатьМенеджерЗаписи (); // Этап 1
    // Этап 2
    Запись . Период = ДатаКурса ;
    Запись . Валюта = Доллар ;
    Запись . Прочитать (); // Этап 3
    Если Запись . Выбран () Тогда // Проверка, что запись существует
    Запись . Курс = 57.92 ; // Этап 4
    Запись . Записать (); // Этап 5
    КонецЕсли;

    Читайте также:  Best of all biz как отписаться

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

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

    Запрос = Новый Запрос ;
    Запрос . Текст =
    «ВЫБРАТЬ
    | КурсыВалют.Период,
    | КурсыВалют.Валюта,
    | КурсыВалют.Курс
    |ИЗ
    | РегистрСведений.КурсыВалют КАК КурсыВалют» ;

    Выборка = Запрос . Выполнить (). Выбрать ();
    Пока Выборка . Следующий () Цикл
    // обход результата выполнения запроса
    КонецЦикла;

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

    // Получение записи, у которой валюта равна значению из переменной «ВыбраннаяВалюта» и период МЕНЬШЕ или равен значению из переменной «ВыбраннаяДата»
    Запрос = Новый Запрос ;
    Запрос . Текст =
    «ВЫБРАТЬ
    | КурсыВалютСрезПоследних.Период,
    | КурсыВалютСрезПоследних.Валюта,
    | КурсыВалютСрезПоследних.Курс
    |ИЗ
    | РегистрСведений.КурсыВалют.СрезПоследних(&Период, Валюта = &Валюта) КАК КурсыВалютСрезПоследних» ;

    Запрос . УстановитьПараметр( «Валюта» , ВыбраннаяВалюта );
    Запрос . УстановитьПараметр( «Период» , ВыбраннаяДата );

    Выборка = Запрос . Выполнить (). Выбрать ();
    Пока Выборка . Следующий () Цикл
    // обход результата выполнения запроса
    КонецЦикла;

    // Получение записи, у которой валюта равна значению из переменной «ВыбраннаяВалюта» и период БОЛЬШЕ или равен значению из переменной «ВыбраннаяДата»
    Запрос = Новый Запрос ;
    Запрос . Текст =
    «ВЫБРАТЬ
    | КурсыВалютСрезПервых.Период,
    | КурсыВалютСрезПервых.Валюта,
    | КурсыВалютСрезПервых.Курс
    |ИЗ
    | РегистрСведений.КурсыВалют.СрезПервых(&Период, Валюта = &Валюта) КАК КурсыВалютСрезПервых» ;

    Запрос . УстановитьПараметр( «Валюта» , ВыбраннаяВалюта );
    Запрос . УстановитьПараметр( «Период» , ВыбраннаяДата );

    Выборка = Запрос . Выполнить (). Выбрать ();
    Пока Выборка . Следующий () Цикл
    // обход результата выполнения запроса
    КонецЦикла;

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

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

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

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

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

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

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

    1. создать набор записей;
    2. наложить требуемые отборы на измерения и период (если регистр периодический);
    3. записать набор записей без предварительного чтения.

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

    НаборЗаписей . Отбор . Валюта . Установить ( Доллар );
    НаборЗаписей . Отбор . Период . Установить ( НачалоДня ( ТекущаяДата ()));

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

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

    НаборЗаписей = РегистрыСведений . ЦеныНоменклатуры . СоздатьНаборЗаписей ();
    НаборЗаписей . Отбор . Регистратор . Установить ( СсылкаНаДокументРегистратор );
    НаборЗаписей . Записать ();

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

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

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

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

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

    Запрос = Новый Запрос ( «ВЫБРАТЬ
    | ЦеныНоменклатуры.Регистратор
    |ИЗ
    | РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры» );

    Выборка = Запрос . Выполнить (). Выбрать ();

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

    Остались вопросы?
    Спросите в комментариях к статье.

    6 комментариев

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

    Читайте также:  Сервер для работы в офисе

    Не понятно за счет чего может быть профит при записи набора записей независимого регистра сведений. Можете пояснить?

    Работа платформы с регистрами сведений несколько раз менялась. 8.3 стала более оптимальной и как бы мне не хотелось «потыкать палочкой» в 8.1 и в ранние версии 8.2, дабы показать как все было плохо, решил этого не делать. Кому станет любопытно «как было» — получит мотивацию изучить вопрос.

    Зачем накладывать Отбор, когда создаётся новый набор записей?

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

    Структура

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Формы

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

    Форма списка

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

    Форма записи

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

    Ссылка на основную публикацию
    Тест звука лево право
    Статьи, Схемы, Справочники Отправить комментарий. Тест для наушников от audiocheck. Нашел интересный тест для наушников, может окажется полезным при покупке...
    Стабилизатор напряжения в щиток на дин рейку
    Конечно самый простой и верный способ установить и подключить реле напряжения - это обратится к электрику профессионалу Сейчас редко можно...
    Стабилизатор напряжения чистый синус
    Вместо привычного с детства числа 220 в маркировке современных электроприборов все чаще попадается 230. С недавних пор именно 230 В...
    Тест карты памяти андроид
    Описание для SD Card Test Воспользуйтесь лучшей на сегодняшний день утилитой для тестирования SD-карт. Протестируйте скорость как внутреннего, так и...
    Adblock detector