d9e5a92d

Глава 8. Регистры сведений

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

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

Например, можно завести регистр СведенияОСотрудниках с измерением Физлицо и ресурсом Состояние. Этот регистр будет хранить текущее состояние сотрудника, которое будет меняться при проведении документов ПриемНаРаботу и Увольнение.

Структура регистра сведений СведенияОСотрудниках такова:


Измерения: Физлицо СправочникСсылка.Физлица
Ресурсы: Состояние Перечисление.СостояниеСотрудника (значения: Работает, НеРаботает)
Таблица записей этого регистра сведений будет иметь следующий вид:



Разработка в системе 1 (лПредприятие 8.0

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

Структура регистра сведений ЦеныНоменклатуры приведена ниже:

Измерения: Номенклатура СправочникСсылка.Номенклатура
ТипЦен СправочникСсылка.Типы Цен
Ресурсы: Цена ЧИСЛО
Записи регистра будут храниться в следующем виде:
Становится понятно, что регистр сведений хранит информацию именно по комбинации измерений. Если измерений всего два, то это можно отобразить в виде следующей кросс-таблицы:

Номенклатура Мелкооптовая

цена
Розничная

цена
Оптовая

цена
Монитор 19м 340,00
Монитор LCD 22" 1999,00
Мышь 2-кноп. 1,70 1,50
Необходимо учитывать одно важное свойство регистра сведений: каждая запись однозначно определяется комбинацией измерений. Если в регистр добавить запись с точно такими же измерениями, как уже существующая, то новая запись перезапишет прежнюю, или будет выдано сообщение об ошибке, в зависимости от варианта записи.

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

Для наглядного представления регистров сведений с тремя измерениями, подошел бы куб или таблица с вложенными группировками. Примером такого регистра может служить регистр сведений МестаРаботыСотрудников с измерениями Сотрудник, Организация, Подразделение и ресурсами Должность, ДатаПриема.

Структура регистра сведений МестаРаботыСотрудников такова:
Измере

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

Сотруд

ник
Организа

ция
Подразде

ление
Должность Дата

приема
Иванов Темп плюс Маркетинг маркетолог 12.01.2003
Иванов Темп плюс Отдел продаж продавец-

консультант
11.01.2003
Иванов Белый свет Отдел

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

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

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

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

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

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

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

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

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

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

КонецЕсли;

КонецЦикла;

Режим записи

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

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

Периодические регистры сведений

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

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

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

• в пределах секунды,

• в пределах дня,

• в пределах месяца,

« в пределах квартала,

• в пределах года,

• по позиции регистратора (доступен, если режим записи у регистра — «Подчинение регистратору»).

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

Самый простой пример периодического регистра сведений — КурсыВалют. Этот регистр сведений хранит курсы всех валют на каждый день.

Структура регистра приведена на следующем рисунке:

IP КдесыВалют ? Измерения »•* Валота а ^ Ресурсы I Курс I Кратность В \ Реквизиты ¦> Источник В - Формы

ФсцмэСгыске ФсрмэЗагиен Ф ормаНаЙераЗагыеай [7~І Макеты

Таблица записей этого регистра выглядит так:

.......Период * ВіІЮГа Kyp
?ЗКСп П1 Шг EUR ^ 26 ?17c0
f Pt 01 200? use ] 3013720
7, eg ш жг EU P ^ 26 7634U
[ G3 01 Ж2 EUR t 2643060
— м оі жг USE) І 3067Э7Р
С помощью метода ПолучитьПоследнее можно получить значение курса валюты, действовавшее на определенную дату. Если в регистре сведений записи на эту дату не окажется, то будет возвращено значение на ближайшую предыдущую дату. Например, для валюты USD на дату 02.01.2002 не был введен курс, тогда будет браться курс на ближайшую предыдущую дату, т.е. на 01.01.2002.

Сделаем регистр сведений ЦеныНоменклатуры периодическим, чтобы развернуть во времени информацию о ценах на товары с периодичностью «День»:

Измерения: Номенклатура СправочникСсылка. Номенклатура
Тип цен СправочникСсылкаТипы Цен
Ресурсы: Цена число
Периодич

ность
В пределах дня
Таблица записей этого регистра будет такова:
Период Номенклатура Тип цен Цена
01.01.2003 Монитор 19" Розничная 1500,00
01.01.2003 Монитор 19" Оптовая 1400,00
01.01.2003 Мышь 2-кноп. Розничная 1,50
01.02.2003 Монитор 19" Розничная 1350,00
01.02.2003 Монитор 19” Оптовая 1300,00
01.02.2003 Мышь 2-кнол, Розничная 1,20

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примеры:

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

Выборка = РегКурсы.Выбрать();

МенеджерЗаписи = РегКурсы.СоздатьМенеджерЗаписиО;

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

ФормаСписка = РегКурсы.ПолучитьФормуСписка();

ОсновнойМакет = РегКурсы.ПолучитьМакет("Основной");

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

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

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

• Для непериодических регистров сведений: Получить(<структура>)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример:

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

//установим отбор по дате и валюте //если этого не сделать, то весь регистр //будет переписан новым набором Набор.Отбор.Валюта.Значение = ВыбВалюта;

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

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

Разработка в системе 1 С: Предприятие 8.0

//добавим запись в набор (не в базу данных) НовЗапись = Набор .Добавить () ;

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

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

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

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

//записи по заданному отбору будут переписаны Набор.Записать(Истина);

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

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

Например:

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

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

//установим условие отбора по дате Набор.Отбор.Период.Значение = ВыбДата;

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

//прочитаем записи из базы данных Набор.Прочитать();

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

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

КонецЕсли;

//1-й вариант обхода записей набора Для Каждого запись Из Набор Цикл

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

КонецЦикла;

//2-й вариант обхода записей набора //индексация записей в наборе начинается с О Для н = 0 по Набор.Количество()-1 Цикл

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

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

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

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

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

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

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

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

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

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

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

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

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

Разработка в системе 1 С:Предприятие 8.0

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

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

ПриЗаписи

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

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

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

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

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

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

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

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

КонецЦикла;

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

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

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

айбйать (<0тбор>, <Порядок>) l^fl'lttiiy

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

ЗУлать(<Начало интервала>, <Конец интервала>, <0тбор>, <Порядок>)

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

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

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

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

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

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

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

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

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

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

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

КонецЦикла;

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

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

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

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

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

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

КонецЦикла;

Регистр сведений и формы

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

Для вывода записей регистра сведений необходимо в форме разместить табличное поле и задать ему свойство ТипЗначения в значение «РегистрСведенийСписок.КурсыВалют».

Форма списка и форма записи в режиме «Предприятие» для регистра КурсыВалют могут выглядеть следующим образом:



Ш
ПевИ ~ ВаЛіФго Кцрс \ pd?H 1 rlttJHHK ¦*
U1 U1 Ы f г 1 РИА =
01 01 2002 GBR ІЪ*#- 1 1 и*4ТДО1Ь»Ы4 бйнк
or 0) 200? USE SC 1 Центральна банк Ff
02 01 2002 E i—|
0301 2O02E ^k-U^HVL
03 01 200213 Иеоиоа л Г1
СП 02 2002 G FMP к
01 03 2002 С
Л 03 2002 LI *'!«*' ^ 2651’’
02 04 2Q02 Е h рдті-югтъ 1
Л2 04 2002 G
12 04 3002 U Уточнит г11-Г FoLFn3Htjc^flHt*i'TTr*ir х
01 ?52002 Е
•— ,
ИВ—_____ t_ __?_i
Обычно редактирование записей вручную производится только для регистров, не подчиненных документу-регистратору, но в 1С:Предприятии 8.0 есть возможность интерактивно редактировать движения документа, для чего обычно создается еще одна закладка «Движения» в форме документа.

Запросы к регистрам сведений

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

В системе 1С:Предприятие 8.0 для обращения к регистрам с помощью запросов используются специальные таблицы-источники данных. Эти таблицы-источники специфичны для каждого вида регистров и делятся на основную и виртуальные:

Основная таблица

Предоставляет доступ ко всем записям регистра.

Виртуальные таблицы

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

Основная таблица регистра сведений

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

Самый простой случай — получение всех записей регистра КурсыВалют:

ВЫБРАТЬ * ИЗ РегистрСведений.КурсыВалют

Разработка в системе 1 С: Предприятие 8.0

Ниже приведен результат этого запроса:

Период Валюта Курс Кратность Источник
01.01.2002 Рубль 1 1
01.01.2002 EUR 26,6172 1 РБК
01.02.2002 EUR 26,4306 1 РБК
01.03.2002 EUR 26,7634 1 РБК
02.04.2002 EUR 27,2493 1 РБК
01.05.2002 EUR 28,1785 1 РБК
01.06.2002 EUR 29,3711 1 РБК
01.06.2002 USD 31,3058 1 РБК
01.05.2002 USD 31,1951 1 ЦБ ФР
02.04.2002 USD 31,1741 1 РБК
01.03.2002 USD 30,9404 1 ЦБ ФР
01.02.2002 USD 30,6797 1 РБК
01.01.2002 USD 30,1372 1 ЦБ ФР
Данный запрос просто выбирает все записи регистра сведений, не производя никакую дополнительную их обработку. Чтобы получить записи за определенный период или по конкретной валюте, необходимо добавить в запрос условие ГДЕ.

Допустим, нам нужны записи за первый квартал по валюте «EUR», тогда для решения этой задачи нам понадобится следующий запрос:

ВВДРАТЬ * ИЗ РегистрСведений.КурсыВалют

ГДЕ Валюта = &ВыбВалюта И Период МЕЖДУ ЬНачДата И ЬКонДата

Результат запроса будет такой:
Период Валюта Курс Кратность Источник
01.01.2002 EUR 26,6172 1 РБК
Период Валюта Курс Кратность Источник
01.02.2002 EUR 26,4306 1 РБК
01.03,2002 EUR 26,7634 1 РБК
Чтобы систематизировать знания об основной таблице регистра сведений, приведем список всех полей, которые она предоставляет:

<Имя измерения>

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

<Имя реквизита>

Набор полей, содержащий значения реквизитов регистра.

<Имя ресурса>

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

Активность

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

МоментВремени

Содержит момент времени записи регистра.

НомерСтроки

Содержит номер строки, определяемый как порядковый номер записи в наборе записей.

Период

Содержит период, к которому относится запись регистра. Используется только для периодических регистров.

Регистратор

Содержит ссылку на документ-регистратор движения. • '

Разработка в системе 1 С:Предприятие 8.0

Приведем пример обращения к одному из регистров, записываемых регистраторами (документами).

Возьмем регистр СведенияОСотрудниках и рассмотрим его структуру:

Измере

ния:
Организация СправочникСсылка. Организации
Физлицо СправочникСсылка.Физлица
Подразделение СправочникСсылка.Подразделения
Должность С пра воч ни к С с ыл ка. Д о л ж ноет и
Ресурсы: Состояние ПеречислениеСсылка. Состояние-Физлица
ТабельныйНомер Число
Перио

дичность
В пределах дня
Следующий запрос покажет только нужные поля из этого регистра:

ВЫБРАТЬ Период, Организация,

Физлицо, Должность, Состояние ИЗ РегистрСведений.СведенияОСотрудниках

Результат запроса показан на следующем рисунке:

15032002 10112001 ^

01022002

1(111 2001
Организация

000 Рдеста

000 Рдеста

000 Ракета

000 Рдеста

000 Ракета
лнэлщо ___

Петров Степан

Демидова Руслана Меднов Роман

Орехова Стелами* Петров Степан
^Должность _

Рабски

Главный бухгалтер

Ді^ектор

Манецжер по персоналу Начальник цена
Состоя**

Работает

Работает

Работает

Работает

Работает

Работает
1011 2001 000 Рдеста Срезом Степана* Бухгалтер
Ш01 2001 АОЗТ Пслег Ломким Степан Директор Работает
10012001 АОЗТ Полег Де**«ов4 Руслана Начавъ»* отдела Работает
1001 2001 АОЗТ Полет Роглонода Ата Менеджер по продажам Работает
01122001 ГэАО Пуск Романов а Ата Гладеыі бухгалтер Работает
01 022002 ЗАО Пуск Гр*горА« Оксана Менеджер по продажам Работает
01022002 1 ЗАО Пуск Дета имев Руслане Менеджер по продажам Работает
Таблица получения среза последних записей

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

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

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

Дата

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

Условие

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

Следующий запрос получает последние актуальные курсы всех валют на заданную дату (или на момент времени):

ВЫБРАТЬ Валюта, Курс

ИЗ РегистрСведений.КурсыВалют.СрезПоследних(&ВыбДата);
Валюта Курс
EUR 30,8717
GBR 49,4375
USD 31,4568
Рубль 1
Чтобы получить курс конкретной валюты, можно указать условие получения таблицы среза последних записей:

Валюта=&ВыбВалюта);

ВЫБРАТЬ Период, Валюта, Курс

ИЗ РегистрСведений.КурсыВалют.СрезПоследних(ЬВыбДата,
Период Валюта Курс
01.08.2002 EUR 30,8717
Разработка в системе 1С Предприятие 8.0

Таблица получения среза первых записей

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

Валюта=йВыбВалю!га);

ВЫБРАТЬ Период, Валюта, Курс

ИЗ РегистрСведений. КурсыВалют. СрезПервых (&ВыбДата,
Период Валюта Курс
0101.2002 EUR 26,6172

Важные отличия от версии 7.7

• Введен новый объект «Регистр сведений», предназначенный для хранения информации практически любого типа, развернутой по комбинации измерений. Для хранения истории изменения этой информации регистр сведений делается периодическим.

• Больше нет периодических реквизитов справочников и периодических констант. Вместо них предлагается использовать периодические регистры сведений.

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

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

• Движения документа записываются не по одному, а наборами.

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

• У регистров могут быть формы и макеты. Например, у регистров сведений может быть форма списка, форма набора записей и форма одной записи. Записи из регистра могут быть показаны на любой форме, в том числе в журнале документов по текущему документу или на закладке «Движения» в форме документа.

• У регистров есть модуль набора записей, который может содержать процедуры-обработчики событий ПередЗаписью и ПриЗаписи



Содержание раздела