Взаимосвязь объектов

Добавил admin | Взаимосвязь объектов | Вторник 6 октября 2009 20:32

Для работы с регистром сведений средствами встроенного языка применяются следующие объекты:

РегистрыСведенийМенеджер

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

РегистрСведенийМенеджер

Операции над регистром сведений, получение выборки, создание новых наборов записей, доступ к формам и макетам регистра сведений.

РегистрСведенийНаборЗаписей

Операции над несколькими записями, их одновременное считывание и запись в базу данных.

РегистрСведенийЗапись

Доступ к одной записи набора регистра сведений. Объект возвращается методами других объектов, например, методом Добавить объекта РегистрСведенийНаборЗаписей.

РегистрСведенийМенеджерЗаписи

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

РегистрСведенийВыборка

Обеспечивает обход записей регистра сведений (перебор).

РегистрСведенийСписок

Обеспечивает управление списком записей регистра сведений в форме в элементе управления ТабличноеПоле.

РегистрСведенийКлючЗаписи

Этот объект нужен для идентификации записи. Он используется для позиционирования в списке на конкретной записи регистра.

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

Графически эту взаимосвязь можно представить следующим образом:

Далее более подробно описаны типичные действия над регистром сведений с помощью этих объектов.

Менеджер регистров сведений

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

РегКурсы = РегистрыСведений.КурсыВалют;
ОтвСотр = РегистрыСведений.ОтветственныеСотрудники;


Объект РегистрыСведенийМенеджер является коллекцией, и для него доступен обход элементов с помощью конструкции «Для Каждого».

Менеджер регистра сведений

Объект РегистрСведенийМенеджер предоставляет доступ к действиям с конкретным регистром. Этот объект позволяет открыть нужную выборку с помощью методов Выбрать и ВыбратьПоРегистратору, создать новый набор записей, создать менеджер записи и ключ записи, через него можно получить форму и макет регистра сведений.

Примеры:

РегКурсы = РегистрыСведений.КурсыВалют;
Выборка = РегКурсы.Выбрать();
МенеджерЗаписи = РегКурсы.СоздатьМенеджерЗаписиО;
Набор = РегКурсы.СоздатьНаборЗаписей();
ФормаСписка = РегКурсы.ПолучитьФормуСписка();
ОсновнойМакет = РегКурсы.ПолучитьМакет("Основной");


Объект РегистрСведенийМенеджер позволяет обращаться к «итогам» регистра. Под «итогами» непериодического регистра сведений понимаются значения ресурсов по заданным измерениям, а для периодических регистров сведений можно получить первое и последнее значение по указанным измерениям, а также срез первых и срез последних записей.

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

Метод Получить имеет два варианта синтаксиса:

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

Получить(<структура>)

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

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

Получить(<Период>, <структура>) где Период — это дата или момент времени, на который требуется получить значения ресурсов.

Метод Получить возвращает структуру, ключи которой совпадают с именами ресурсов, например:


РегКурсы = РегистрыСведений.КурсыВалют;
Отбор = Новый Структура("Валюта",ВыбВалюта);


СтруктураРесурсы = РегКурсы.Получить(ВыбДата, Отбор);


Сообщить(СтруктураРесурсы.Курс);


Сообщить(СтруктураРесурсы.Кратность);



Если записи с такой комбинацией измерений и периода (для периодических регистров) не найдено, то в элементах структуры будут пустые значения.

Следующие методы применимы только для периодического регистра сведений:

• ПолучитьПервое,

• ПолучитьПоследнее,

• СрезПервых,

• СрезПоследних.

Метод ПолучитьПоследнее имеет следующий синтаксис:

ПолучитьПоследнее (<Конец периода>, <структура>)

 

Если он не находит запись в регистре по данной комбинации измерений точно на заданный период, то возвращается ближайшая более ранняя запись, например:

РегКурсы = РегистрыСведений.КурсыВалют;


Отбор = Новый Структура("Валюта",ВыбВалюта);


СтруктураРесурсы = РегКурсы.ПолучитьПоследнее(ВыбДата, Отбор);


Сообщить(СтруктураРесурсы.Курс);


Сообщить(СтруктураРесурсы.Кратность);

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

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


РегКурсы = РегистрыСведений.КурсыВалют;

КурсыВалютНаДату = РегКурсы.СрезПоследних(ВыбДата);

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

Например, следующая программа получает последние актуальные цены по товарам заданного конкурента:

РегЦены = РегистрыСведений.ЦеныКонкурентов;

Отбор = Новый Структура("Конкурент", ВыбКонкурент);

тзЦеныКонкурента = РегЦены.СрезПоследних(ВыбДата,Отбор);

Метод СрезПервых действует аналогично методу СрезПоследних, за исключением того, что он выбирает срез наиболее ранних записей по отношению к заданной дате или моменту времени.

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

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

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

У документов есть свойство Движения, которое предоставляет доступ к наборам записей этого документа по каждому регистру. Как правило, при проведении документов сначала добавляются записи в набор, а затем набор записывается в базу данных. Можно создать новый набор записей из объекта РегистрСведенийМенеджер, если вызвать его метод СоздатьНаборЗаписей. Пока отбор не установлен, набор записей будет распространяться на весь регистр.

Пример:

//создадим новый пустой набор записей, действующий на весь регистр

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

 

//установим отбор по дате и валюте

//если этого не сделать, то весь регистр

//будет переписан новым набором

Набор.Отбор.Валюта.Значение = ВыбВалюта;

Набор.Отбор.Период.Значение = ВыбДата;

Набор.Отбор.Валюта.Использование = Истина;

Набор.Отбор.Период.Использование = Истина;

 

//добавим запись в набор (не в базу данных)

НовЗапись = Набор.Добавить();

НовЗапись.валюта = ВыбВалюта;

НовЗапись.Период = ВыбДата;

НовЗапись.Курс = НовыйКурс;

 

//запишем набор в базу данных

//записи по заданному отбору будут переписаны

Набор.Записать(Истина);

 

Внимание! Если отбор в наборе записей не установлен, то такой набор перепишет весь регистр. Чтобы этого не произошло, необходимо установить отбор по измерениям регистра, а для периодических регистров дополнительно — по полю Период, если же регистр имеет периодичность «По позиции регистратора», то еще и по полю Регистратор. При записи набора с параметром Истина сначала удаляются все записи с заданным отбором, а затем на их место записываются новые.

Через набор записей можно обращаться к уже существующим записям регистра сведений. Для этого нужно установить свойство Отбор и прочитать записи из базы данных. Свойство Отбор является объектом типа Отбор, свойства которого совпадают с именами измерений регистра сведений и являются объектами типа ЭлементОтбора.

Например:

//создадим новый пустой набор записей

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

 

//установим условие отбора по дате

Набор.Отбор.Период.Значение = ВыбДата;

Набор.Отбор.Период.Использование = Истина;

 

//прочитаем записи из базы данных

Набор.Прочитать();

Если НЕ Набор.Выбран () Тогда

	Сообщить("Набор не был прочитан");


КонецЕсли;
 

//1-й вариант обхода записей набора

Для Каждого запись Из Набор Цикл

	Сообщить(СокрЛП(запись.Валюта) + " " + СокрЛП(запись.Курс));

КонецЦикла;

 

//2-й вариант обхода записей набора

//индексация записей в наборе начинается с 0

Для н = 0 по Набор.Количество()-1 Цикл

	запись = Набор[н];

	Сообщить(СокрЛП(запись.Валюта) + " " + СокрЛП(запись.Курс));

КонецЦикла;

 

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

Набор.Прочитать();

тзЗаписи = Набор.Выгрузить();

Набор.Загрузить(тзЗаписи);

Набор.Записать();

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

Можно выгружать в массив и загружать из массива только одну колонку набора записей, для чего предназначены методы ВыгрузитьКолонку и ЗагрузитьКолонку. Выгружаются и загружаются записи, имеющие тот же индекс, что и элементы массива (индексация записей набора и элементов массива начинается с 0).

МассивКурсов = Набор.ВыгрузитьКолонку("Курс");

Набор.ЗагрузитьКолонку(МассивКурсов,"Курс");

Для удаления записей из набора существует два метода: Удалить и Очистить. Первый метод удаляет запись с заданным индексом, хотя в качестве параметра можно передавать и саму запись (объект типа РегистрСведенийЗапись). Второй метод полностью очищает набор, удаляя все записи. Обратите внимание, что записи удаляются из набора, а не из регистра сведений.

Модуль набора записей

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

В модуле набора записей регистра могут располагаться процедуры-обработчики событий ПередЗаписью и ПриЗаписи:

ПередЗаписью

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

ПриЗаписи

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

Выборка из регистра сведений

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

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

Пока Выборка.Следующий() Цикл

	Сообщить(СокрЛГН Выборка.Валюта) + " " +

	СокрЛП(Выборка.Период) + " " +

	СокрЛТКВыборка.Курс) ) ;

КонецЦикла;

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

Синтаксис метода Выбрать следующий:

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

Выбрать (<Отбор>, <Порядок>)

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

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

Параметры Начало интервала и Конец интервала позволяют задать границы интервала и могут иметь тип «дата», МоментВремени или Граница.

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

Нач = Новый МоментВремени(ВыбДатаВремяНачала);

Кон = Новый Граница(ВыбДатаВремяОкончания,ВидГраницы.Включая);

Отбор = Новый Структура("Валюта", ВыбВалюта);


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


Пока Выборка.Следующий() Цикл


	Сообщить(СокрЛТК Выборка.Валюта) + " " +


	СокрЛП(Выборка.Период) + " " +


	СокрЛП(Выборка.Курс));


КонецЦикла;


 

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

Для операций над одной записью регистра сведений применяется объект РегистрСведенийМенеджерЗаписи. Этот объект существует только у независимого регистра сведений, т.е. не подчиненного регистратору.

Например, следующая программа удаляет безвозвратно все записи из регистра сведений КурсыВалютРасчетаЗарплаты:


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


Пока Выборка.Следующий() Цикл


	МенеджерЗаписи = Выборка.ПолучитьМенеджерЗаписи();


	МенеджерЗаписи.Удалить();


КонецЦикла;