- •Назначение
- •6.2. Непериодические регистры сведений
- •6.3. Периодические регистры сведений
- •6.4. Реквизиты регистра сведений
- •6.5. Режим записи
- •6.6. Приемы программирования регистров сведений
- •Описание менеджера регистра сведений
- •Описание набора записей регистра сведений
- •Модуль набора записей
- •Выборка из регистра сведений
- •Описание менеджера записи регистра сведений
- •6.4. Формы регистра сведений
Описание набора записей регистра сведений
Набор записей позволяет оперировать сразу несколькими записями регистра. Набор записей можно целиком прочитать из базы данных, добавить в него записи или изменить их, целиком записать в базу данных. Это основной способ программного добавления и редактирования записей регистра сведений.
У документов есть свойство Движения, которое предоставляет доступ к наборам записей этого документа по каждому регистру. Как правило, при проведении документов сначала добавляются записи в набор, а затем набор записывается в базу данных.
Можно создать новый набор записей из объекта РегистрСведенийМенеджер, если вызвать его метод СоздатьНаборЗаписей. Пока отбор не установлен, набор записей будет распространяться на весь регистр.
Пример:
//создадим новый пустой набор записей, действующий на весь регистр
Набор = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей ();
//установим отбор по дате и валюте
//если этого не сделать, то весь регистр
//будет переписан новым набором
Набор.Отбор.Валюта.Значение = ВыбВалюта;
Набор.Отбор.Период.Значение = ВыбДата;
//признак использования элемента отбора в фильтре. Если свойство //имеет значение Истина, то будет выполняться фильтрация по данному //элементу отбора, иначе элемент отбора не будет участвовать в //фильтрации.
Набор.Отбор.Валюта.Использование = Истина;
Набор.Отбор.Период.Использование = Истина;
//добавим запись в набор (не в базу данных)
НовЗапись = Набор.Добавить();
НовЗались.Валюта = ВыбВалюта;
НовЗапись.Период = ВыбДата;
НовЗапись.Курс = НовыйКурс;
//запишем набор в базу данных
//записи по заданному отбору будут переписаны
Набор.Записать(Истина);
Замечание. Если отбор в наборе записей не установлен, то такой набор перепишет весь регистр. Чтобы этого не произошло, необходимо установить отбор по измерениям регистра, а для периодических регистров дополнительно - по полю Период, если же регистр имеет периодичность «По позиции регистратора», то еще и по полю Регистратор. При записи набора с параметром Истина сначала удаляются все записи с заданным отбором, а затем на их место записываются новые.
Через набор записей можно обращаться к уже существующим записям регистра сведений. Для этого нужно установить свойство Отбор и прочитать записи из базы данных.
Например:
//создадим новый не пустой набор записей
Набор = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
//установим условие отбора по дате
Набор.Отбор.Период.Значение = ВыбДата;
Набор.Отбор.Период.Использование = Истина;
//прочитаем записи из базы данных
Набор.Прочитать();
Если НЕ Набор.Выбран() Тогда
Сообщить("Набор не был прочитан");
КонецЕсли;
//1-й вариант обхода записей набора
Для Каждого запись Из Набор Цикл
Сообщить(СокрЛП(запись.Валюта) + " " + СокрЛП(запись.Курс));
КонецЦикла;
//2-й вариант обхода записей набора
//индексация записей в наборе начинается с 0
Для н = 0 по Набор.Количество()-1 Цикл
запись = Набор[н];
Сообщить(СокрЛП(запись.Валюта) + " " + СокрЛП(запись.Курс));
КонецЦикла;
Записи набора можно выгружать в таблицу значений с помощью метода Выгрузить или, наоборот, загружать записи в набор из таблицы значений с помощью метода Загрузить:
Набор.Прочитать () ;
тзЗаписи = Набор.Выгрузить();
…
Набор.3агрузить(тз3аписи);
Набор.Записать();
При выгрузке структура таблицы значений полностью соответствует структуре набора. При загрузке загружаются только те колонки, имена которых в наборе и таблице значений совпадают.
Можно выгружать в массив и загружать из массива только одну колонку набора записей, для чего предназначены методы ВыгрузитьКолонку и ЗагрузитьКолонку. Выгружаются и загружаются записи, имеющие тот же индекс, что и элементы массива (индексация записей набора и элементов массива начинается с 0).
МассивКурсов = Набор.ВыгрузитьКолонку("Курс");
…
Набор.ЗагрузитьКолонку(МассивКурсов,"Курс");
Для удаления записей из набора существует два метода: Удалить и Очистить. Первый метод удаляет запись с заданным индексом, хотя в качестве параметра можно передавать и саму запись (объект типа РегистрСведенийЗапись). Второй метод полностью очищает набор, удаляя все записи. Обратите внимание, что записи удаляются из набора, а не из регистра сведений.
