1с запрос параметры виртуальной таблицы

v8: Запрос в параметрах виртуальной таблицы

Листал книгу и увидел рекомендации использовать по масимуму параметры виртуальной таблицы вместо левых соединений. Рекомендация привела в тупик (никогда так не делал).
Провел два эксперимента:
1. Как рекомендуют
ВЫБРАТЬ
РасходнаяНакладнаяНоменклатура.Номенклатура
ПОМЕСТИТЬ р
ИЗ
Документ.РасходнаяНакладная.Номенклатура КАК РасходнаяНакладнаяНоменклатура
ГДЕ
РасходнаяНакладнаяНоменклатура.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ОстаткиНоменклатурыОстатки.Номенклатура,
ОстаткиНоменклатурыОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ОстаткиНоменклатуры.Остатки(
,
Номенклатура В
(ВЫБРАТЬ РАЗЛИЧНЫЕ
р.Номенклатура
ИЗ
р КАК р)) КАК ОстаткиНоменклатурыОстатки
2. Как всегда сам делал
ВЫБРАТЬ
РасходнаяНакладнаяНоменклатура.Номенклатура,
ОстаткиНоменклатурыОстатки.КоличествоОстаток
ИЗ
Документ.РасходнаяНакладная.Номенклатура КАК РасходнаяНакладнаяНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки
ПО РасходнаяНакладнаяНоменклатура.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
ГДЕ
РасходнаяНакладнаяНоменклатура.Ссылка = &Ссылка

Или я не правильно понял рекомендацию (время выполнения запросов вообще не сравнимо-второй выполняется мгновенно), или лучше книжки не листать?

Источник

Обращения к виртуальным таблицам

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

1. При использовании виртуальных таблиц в запросах, следует передавать в параметры таблиц все условия, относящиеся к данной виртуальной таблице. Не рекомендуется обращаться к виртуальным таблицам при помощи условий в секции ГДЕ и т.п.

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

Например, следующий запрос использует секцию ГДЕ запроса для выборки из виртуальной таблицы:

Запрос.Текст = «ВЫБРАТЬ
| Номенклатура
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки()
|ГДЕ
| Склад = &Склад»;

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

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

Запрос.Текст = «ВЫБРАТЬ
| Номенклатура
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад)»;

2.1. При обращении к виртуальной таблице следует передавать в условия наиболее простые конструкции, например, «Измерение = Значение». Не рекомендуется использовать подзапросы и соединения(*) в параметрах виртуальной таблицы, так как это приводит к медленной работе запроса.

* Примечание: как явные соединения в подзапросах, так и неявные – при обращении к полям «через точку» от ссылки и соединения, добавляемые из ограничений доступа к данным (RLS), предусмотренных в ролях конфигурации.

2.2. При необходимости использовать подзапросы рекомендуется соблюдать следующие условия:

2.3. В случае, если нужно использовать несколько условий с подзапросами, следует выбрать одно, удовлетворяющее условиям выше и отфильтровывающее максимальное количество записей. Остальные условия следует накладывать на внешний запрос.

Кроме того, в ряде случаев можно обойтись и без перемещения условий на внешний запрос, если применять временные таблицы.
Например, вместо условия (неправильно):

Номенклатура В (. ) И Характеристика В (. ) И Серия В(. )

(Номенклатура, Характеристика, Серия) В (ВЫБРАТЬ Номенклатура, Характеристика, Серия ИЗ ВременнаяТаблицаТоваров)

Источник

Конструктор запросов 1С — обучение на примерах

Урок 6. Виртуальные таблицы и их использование в конструкторе запросов

Задача 1: Получить остатки номенклатуры на указанном складе на конец месяца.

Задача 2: Получить актуальную цену на конец месяца по указанной номенклатуре и типу цен.

Новые механизмы: заполнение параметров виртуальных таблиц.

Теоретическая часть урока №6

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

Рассмотрим основные виды виртуальных таблиц 1с для различных объектов метаданных:

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

1с запрос параметры виртуальной таблицы

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

1с запрос параметры виртуальной таблицы

СрезПоследних и СрезПервых

1с запрос параметры виртуальной таблицы

Остатки в регистре накопления

1с запрос параметры виртуальной таблицы

Остатки в регистре бухгалтерии

1с запрос параметры виртуальной таблицы

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

Обороты в регистре накопления

1с запрос параметры виртуальной таблицы

Обороты в регистре бухгалтерии

1с запрос параметры виртуальной таблицы

Остатки и обороты в регистре накопления

1с запрос параметры виртуальной таблицы

Остатки и обороты в регистре бухгалтерии

1с запрос параметры виртуальной таблицы

Все параметры используемые в данной таблице были описаны в предыдущих пунктах.

Обороты Дебет Кредит

1с запрос параметры виртуальной таблицы

Движения с субконто

1с запрос параметры виртуальной таблицы

Практическая часть урока №6

В данном разделе нам предстоит решить две задачи по пройденной теме.

Задача 1

Получить остатки номенклатуры на указанном складе на конец месяца.

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

В итоге у нас получится запрос со следующим текстом:

Задача 2

Получить актуальную цену на конец месяца по указанной номенклатуре и типу цен.

1с запрос параметры виртуальной таблицы

В итоге у нас получится запрос со следующим текстом:

Источник

Особенности работы с параметрами виртуальных таблиц


Параметр запроса

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

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

Параметр компоновки данных

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

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

Совместное использование параметра запроса и параметра компоновки данных

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

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

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

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

Таким образом, запись:

И значение параметра &Начало используется только в случае если в настройках не установлено значение параметра &НачалоПериода.

Источник

Использование отборов в запросах с виртуальными таблицами

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

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

1. Запрос с использованием отбора заданного конструкцией языка запросов

2. Запрос с использованием отбора заданного параметром виртуальной таблицы

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

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

Где реквизит Источник может принимать значения: интернет, печатные издания.

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

1. Запрос с использованием отбора заданного конструкцией языка запросов

2.Запрос с использованием отбора заданного параметром виртуальной таблицы

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

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *