Получение данных из регистра сведений в 1С 8.3

Курс

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

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

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

Для выборки из подчиненного регистра сведений используется метод ВыбратьПоРегистратору. Параметром передается ссылка на регистратор:

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

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

Получение данных из регистра сведений

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

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

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

Регистр сведений

Если попытаться получить данные на 15 апреля методом Получить, то будет получена нулевая цена, потому что именно за 15 апреля нет записи в регистре сведений:

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

Также есть обратный метод ПолучитьПервое, который получает первое установленное значение ресурса после переданной параметром даты:

Срез последних

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

Добавим в регистр еще несколько записей:

Срез последних

Получим срез на 15 апреля:

Будет получена следующая таблица значений:

ПериодТоварТипЦенЦена
10.04.2021ТумбочкаОптовая20
10.04.2021ШкафОптовая200

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

  • Получается выборка из регистра сведений, у которых поле Период <= параметру дата. Если был передан отбор, то добавляется условие по переданным значениям отбора.
  • Полученная выборка сворачивается по всем комбинациям измерений, а для поля период применяется агрегатная функция МАКСИМУМ.
  • Полученная таблица соединяется с основной таблицей регистра по всем измерениям и периоду.
  • Из того что получилось выбираются нужные поля.

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

На практике метод СрезПоследних почти не применяется, потому что гораздо удобней пользоваться виртуальной таблицей СрезПоследних. Данная таблица называется виртуальной, потому что она не хранится физически в СУБД, а формируется непосредственно при выполнении запроса. Запрос, который выполняется для получения данной таблицы такой же как для метода СрезПоследних. Также у виртуальной таблицы есть два параметра: дата и отбор. Состав полей виртуальной таблицы совпадает с составом полей основной таблицы регистра.

Рассмотрим использование данной таблицы на примере:

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

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

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

То в результате будет получен Шкаф, на который была установлена цена в 100 рублей 1 апреля:

Срез последних

А если установить отбор в предложении ГДЕ:

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

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

Итоги регистра сведений

В настройках периодического регистра сведений, на закладке Прочее можно включить использование итогов Разрешить итоги: срез первых и Разрешить итоги:срез последних:

Итоги регистра сведений

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

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


Подписывайтесь на группу ВКонтакте , где я публикую ссылки на новые статьи с данного сайта, а также интересные материалы с других ресурсов по программированию в 1С
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Используя этот сайт, Вы даете согласие на использование cookies. На данном этапе Вы можете отказаться от использования cookies, настроив необходимые параметры в своем браузере.
ok