Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦОО_ИСБУ_Лек3.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
684 Кб
Скачать
☆

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

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

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

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

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

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

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

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

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

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

Период

Валюта

Курс

Кратность

Источник

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

РБК

Чтобы систематизировать знания об основной таблице регистра сведений, приведем список всех полей, которые она предоставля­ет:

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

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

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

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

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

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

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

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

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

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

Измере­ния:

Организация

СправочникСсылка.Организации

Физлицо

СправочникСсылка.Физлица

Подразделение

СправочникСсылка.Подразделения

Должность

СправочникСсылка.Должности

Ресурсы:

Состояние

ПеречислениеСсылка.СостояниеФизлица

ТабельныйНомер

Число

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

В пределах дня

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

ВЫБРАТЬ Период, Организация, Физлицо, Должность, Состояние

И3 РегистрСведений.СведенияОСотрудниках

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

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

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

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

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

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

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

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

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

Валюта

Курс

EUR

30,8717

GBR

49,4375

USD

31,4568

Рубль

1

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

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

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

Период

Валюта

Курс

01.08.2002

EUR

30,8717

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

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

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

ИЗ РегистрСведений.КуреыВалют.СрезПервых(&ВыбДата, Валюта=&ВыбВалюта);

Период

Валюта

Курс

01.01.2002

EUR

26,6172

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]