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

Содержание
  1. Обращения к виртуальным таблицам
  2. Особенности работы с параметрами виртуальных таблиц
  3. Параметр запроса
  4. Параметр компоновки данных
  5. Совместное использование параметра запроса и параметра компоновки данных
  6. Параметры при автоматическом заполнении полей набора данных
  7. Использование параметра Условие при обращении к виртуальной таблице
  8. Проблема
  9. Пояснение
  10. Рекомендация
  11. Конструктор запросов 1С — обучение на примерах
  12. Урок 6. Виртуальные таблицы и их использование в конструкторе запросов
  13. Теоретическая часть урока №6
  14. Практическая часть урока №6
  15. «Устройство виртуальной таблицы остатков» – бесплатные материалы из курса «Разработка и оптимизация запросов в 1С:Предприятие 8.2 и 8.3»
  16. О чем эта статья
  17. Применимость
  18. Устройство виртуальной таблицы остатков
  19. PDF-версия статьи для участников группы ВКонтакте
  20. Комментарии / обсуждение (4):

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

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


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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Использование параметра Условие при обращении к виртуальной таблице


Проблема

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

Пояснение

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

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

Рекомендация

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

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

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

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

Источник

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

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

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

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

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

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

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

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

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

%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5 %D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B %D0%B2 %D0%BA%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D0%BE%D1%80%D0%B5 %D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2 1%D1%81

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

%D0%9E%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8C %D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B %D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9 %D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B

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

%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B %D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9 %D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B %D0%A1%D1%80%D0%B5%D0%B7 %D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BD%D0%B8%D1%85 1

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

%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B %D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9 %D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B %D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%B8 1

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

%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B %D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9 %D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B %D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%B8 %D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80 %D0%B1%D1%83%D1%85%D0%B3%D0%B0%D0%BB%D1%82%D0%B5%D1%80%D0%B8%D0%B8

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

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

%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B %D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9 %D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B %D0%9E%D0%B1%D0%BE%D1%80%D0%BE%D1%82%D1%8B

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

%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B %D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9 %D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B %D0%9E%D0%B1%D0%BE%D1%80%D0%BE%D1%82%D1%8B %D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80 %D0%B1%D1%83%D1%85%D0%B3%D0%B0%D0%BB%D1%82%D0%B5%D1%80%D0%B8%D0%B8

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

%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B %D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9 %D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B %D0%9E%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%B8 %D0%B8 %D0%BE%D0%B1%D0%BE%D1%80%D0%BE%D1%82%D1%8B %D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80 %D0%BD%D0%B0%D0%BA%D0%BE%D0%BF%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F

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

%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B %D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9 %D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B %D0%9E%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%B8 %D0%B8 %D0%BE%D0%B1%D0%BE%D1%80%D0%BE%D1%82%D1%8B %D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80 %D0%B1%D1%83%D1%85%D0%B3%D0%B0%D0%BB%D1%82%D0%B5%D1%80%D0%B8%D0%B8

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

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

%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B %D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9 %D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B %D0%9E%D0%B1%D0%BE%D1%80%D0%BE%D1%82%D1%8B %D0%94%D1%82 %D0%9A%D1%82

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

%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B %D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9 %D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B %D0%94%D0%B2%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F %D1%81 %D1%81%D1%83%D0%B1%D0%BA%D0%BE%D0%BD%D1%82%D0%BE

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

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

Задача 1

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

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

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

Задача 2

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

%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5 %D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0 %D0%BF%D0%BE %D1%86%D0%B5%D0%BD%D0%B0%D0%BC %D0%BD%D0%BE%D0%BC%D0%B5%D0%BD%D0%BA%D0%BB%D0%B0%D1%82%D1%83%D1%80%D1%8B

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

Источник

«Устройство виртуальной таблицы остатков» – бесплатные материалы из курса «Разработка и оптимизация запросов в 1С:Предприятие 8.2 и 8.3»

О чем эта статья

Статья описывает физическую реализацию виртуальной таблицы остатков конфигурации, работающей в клиент-серверном режиме работы на примере использования СУБД MS SQL Server.

Применимость

В статье рассматривается платформа «1С:Предприятие» редакции 8.3.5.1383. В актуальной версии платформы возможны некоторые изменения в тексте, описанного в материале, запроса T-SQL, выполняемого на стороне сервера СУБД.

Устройство виртуальной таблицы остатков

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

Сначала при помощи метода глобального контекста ПолучитьСтруктуруХраненияБазыДанных() получим список таблиц базы данных, в которых хранятся данные регистра накопления «ТоварныеЗапасы»:
1. %D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D0%BC %D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA %D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86 %D0%B1%D0%B0%D0%B7%D1%8B %D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85

Состав полей основной таблицы регистра накопления и таблицы итогов приведен ниже:

2. %D0%A1%D0%BE%D1%81%D1%82%D0%B0%D0%B2 %D0%BF%D0%BE%D0%BB%D0%B5%D0%B9 %D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D0%BE%D0%B9 %D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B

3. %D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B %D0%B8%D1%82%D0%BE%D0%B3%D0%BE%D0%B2

Хранение итогов для данного регистра настроено в режиме «1С:Предприятие 8» следующим образом:

4. %D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5 %D0%B8%D1%82%D0%BE%D0%B3%D0%B0%D0%BC%D0%B8

Параметры в рассматриваемом запросе заполним следующим образом:

5. %D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B %D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0
Платформа преобразует текст запроса в следующий запрос, который и будет выполнен на сервере СУБД:

Разберем подробнее полученный запрос.

Сначала при помощи первого запроса, входящего в объединение, выбираются данные из итоговой таблицы AccumRgT85. Итоги получаются на дату хранения текущих итогов (01.11.3999), дополнительно накладывается условие на поле Склад (поскольку такое условие использовалось в параметрах виртуальной таблицы). Дополнительно выполняется проверка на отсутствие в результате строк с нулевыми остатками.

Обратите внимание, что производится группировка по выбранным в тексте запроса измерениям. Именно поэтому не требуется в тексте на языке запросов «1С:Предприятие» дополнительно выполнять группировку по измерениям.

Во втором запросе объединения используется таблица движений регистра AccumRg81. В зависимости от вида движения (если RecordKind равно 0, то это Приход, в противном случае – Расход) проставляется знак в выражении. Платформа выбирает данные за период с даты, указанной в качестве параметра виртуальной таблицы, по дату хранения текущих итогов (01.11.3999).

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

Если используется СУБД MS SQL Server и для базы данных установлено смещение дат 2000, то все даты будут храниться с указанным смещением, т.е. вместо 01.11.3999 Вы увидите 01.11.5999.

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

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

Обратите внимание на следующее условие в тексте запроса:

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

Таким образом, таблица итогов регистра накопления позволяет оптимизировать получение остатков.

PDF-версия статьи для участников группы ВКонтакте

Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.

pdf download

Статья в PDF-формате

Комментарии / обсуждение (4):

1511441055 bpfull

А как получить это запрос, который передаётся в SQL?

1418419795 bpfull

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

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

ИТ-шники “от рождения” конечно поймут запрос “с листа”

Источник

Моя дача
Adblock
detector