Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Меркулова_Пособие_РазработкаУправляемыхПриложен...doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
17.82 Mб
Скачать

Реквизиты регистра сведений

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

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

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

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

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

Если Выборка.Источник = ЗаданныйИсточник Тогда

КонецЕсли;

КонецЦикла;

Режим записи

При редактировании свойств регистра в Конфигураторе можно указать режим записи: «Независимый» и «Подчинение регистра­тору», что определяет, как будут вноситься записи в регистр: вручную или документами.

Под регистратором понимается документ, которому принадлежат движения по этому регистру. Обычно при проведении документа формируются движения по регистру, но это необязательно. Дви­жения могут быть сформированы из любого места программы, лишь бы они были привязаны к документу-регистратору.

С помощью метода ПолучитьПоследнее можно получить значе­ние курса валюты, действовавшее на определенную дату. Если в регистре сведений записи на эту дату не окажется, то будет воз­вращено значение на ближайшую предыдущую дату. Например, для валюты USD на дату 02.01.2012 не был введен курс, тогда бу­дет браться курс на ближайшую предыдущую дату, т.е. на 01.01.2012.

9.2. Программная обработка данных из регистра сведений

Решим следующую задачу. Нам хотелось бы вывести курс валюты на текущую дату в списке справочника Валюты.

Для начала создадим форму списка справочника Валюты.

Реквизит Список имеет тип ДинамическийСписок. Это означает, что мы можем вмешаться в создание этого списка, так как он строится на основе некоего запроса, генерируемого, в данном случае, системой автоматически. Для того, чтобы самостоятельно отредактировать запрос, который лежит в основе динамического списка, нам нужно в окне его свойств (рис. 9.4. ) установить флаг ПроизвольныйЗапрос.

Рис. 9.4. Редактирование свойств динамического списка

После установки этого флага мы можем нажать на ссылку Открыть у поля Настройка списка и увидеть, какой именно запрос система построила для создания этого списка,

рис. 9.5.

Рис. 9.5. Запрос по умолчанию для заполнения динамического списка

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

ВЫБРАТЬ

СправочникВалюты.Ссылка,

СправочникВалюты.ВерсияДанных,

СправочникВалюты.ПометкаУдаления,

СправочникВалюты.Предопределенный,

СправочникВалюты.Код,

СправочникВалюты.Наименование,

КурсыВалютСрезПоследних.Курс

ИЗ

Справочник.Валюты КАК СправочникВалюты

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних КАК КурсыВалютСрезПоследних

ПО СправочникВалюты.Ссылка = КурсыВалютСрезПоследних.Валюта

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

После показанной модификации запроса, формирующего динамический список разместим в форме списка справочника новое поле Курс, которое будет доступно в списке реквизитов динамического списка (рис. 9.6.).

Рис. 9.6. Добавление в форму списка поля Курс

Форма списка приобретет вид, показанный на рис. 9.7.

Рис. 9.7. Измененная форма списка справочника.

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

Для этого создадим форму элемента, внесем в нее реквизит формы Курс и перенесем этот реквизит на форму, рис. 9.8.

Рис.9.8. Добавление в форму элемента нового реквизита формы

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

Рис.9.9. Назначение процедуры-обработчика для событии ПриИзменении

В теле обработчика запишем:

&НаКлиенте

Процедура КурсПриИзменении(Элемент)

ЗаписатькурсНаСервере();

КонецПроцедуры

Процедура ЗаписатькурсНаСервере()

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

РегистрКурсыВалют.Период = ТекущаяДата();

РегистрКурсыВалют.Валюта = Объект.Ссылка;

РегистрКурсыВалют.Курс = Курс;

РегистрКурсыВалют.Кратность = 1;

РегистрКурсыВалют.Записать();

КонецПроцедуры

Форма элемента справочника, Рис.9.10.

Рис. 9.10. Форма элемента справочника после добавления нового реквизита формы

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

&НаКлиенте

Процедура ПриОткрытии(Отказ)

ПрочитатьКурсНаСервере();

КонецПроцедуры

Процедура ПрочитатьКурсНаСервере()

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

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

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

Курс= СтруктураКурс.Курс;

КонецПроцедуры