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

Добавил admin | Запросы к регистрам сведений | Вторник 6 октября 2009 20:58

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

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

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

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

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

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

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

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

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

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

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

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

ВЫБРАТЬ * ИЗ РегистрСведений.КурсыВалют
ГДЕ Валюта = &ВыбВалюта И Период МЕЖДУ &НачДата И &КонДата

Результат запроса будет такой:

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

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

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

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

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

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

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

Активность

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

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

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

НомерСтроки

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

Период

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

Регистратор

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

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

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

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

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

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

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

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

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

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

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

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

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

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