1С:Предприятие 8.2 /
Разработчикам /
Разработка пользовательских интерфейсов
Запросы в динамических списках
Область применения: управляемое приложение.
Методическая рекомендация (полезный совет)
При проектировании динамических списков в формах следует учитывать, что динамические списки предъявляют более высокие требования к скорости выполнения запросов, чем в других случаях (например, в отчетах, в процедурах обработки данных и пр.). Данные в динамических списках непосредственно отображаются пользователю , поэтому скорость вывода и обновления данных является критичной. В данной статье перечислены рекомендации, дополняющие общие сведения по оптимизации запросов (см. группу статей «Оптимизация запросов»).
1. Нужно стараться делать простые запросы для динамических списков. Для этого в первую очередь нужно оптимизировать архитектуру хранения данных, чтобы их было просто отображать в динамических списках.
Пример.
В динамическом списке документов-распоряжений на отгрузку нужно вывести состояние отгрузки. Состояние зависит от остатков регистра накопления, и статусов двух документов другого типа.
НЕПРАВИЛЬНО
Пытаться разработать запрос для динамического списка, который будет учитывать всю сложную логику расчета состояния отгрузки.
ПРАВИЛЬНО
Сделать регистр сведений «Состояния отгрузки», в котором хранить уже рассчитанное состояние отгрузки. При этом расчет можно делать или в процессе проведения документов , которые могут влиять на состояние отгрузки, или отдельным регламентным заданием.
2. Необходимо выбрать один из трех режимов работы динамического списка:
- Динамическое считывание данных включено (рекомендуется). Используются запросы, выбирающие записи в количестве приблизительно соответствующем количеству видимых строк в таблице.
- Динамическое считывание данных выключено, задана основная таблица. Используются запросы, выбирающие по 1000 записей в буфер на сервере, по мере необходимости данные передаются на клиент. Менее эффективно, чем динамическое считывание
- Динамическое считывание данных выключено, основная таблица не задана. Запрос выполняется «как есть». В буфере накапливаются данные, начиная с 1000 записей. Чем ближе к концу списка, тем больше записей. Можно использовать только для заведомо маленьких выборок.
3. При разработке динамического списка следует учитывать что запрос, который фактически будет сформирован к СУБД, зависит от предопределенных настроек отборов, порядка и группировки СКД. В частности это означает, что необходимо рассмотреть индексирование полей:
- По которым выполняется соединение в запросе.
- На которые наложены условия в запросе.
- Выведенных в качестве быстрых отборов.
- По которым выполняется упорядочивание или предусмотрена группировка.
- По которым ожидается, что пользователь будет часто упорядочивать (группировать).
При этом не следует индексировать все поля подряд «на всякий случай», так как избыточные индексы создают неоправданную нагрузку при записи данных.
См. также: Несоответствие индексов и условий запроса, Ограничения при использовании динамических списков
4. Настоятельно не рекомендуется использовать конструкции, «утяжеляющие» запрос:
- конструкции РАЗЛИЧНЫЕ и СГРУППИРОВАТЬ ПО;
- конструкции ВЫБОР в предложении ГДЕ или в условиях соединения;
- упорядочивание по полю, полученному при помощи конструкции ВЫБОР, в том числе и пользовательское.
См. также: Общие требования по разработке оптимальных запросов
5.1 Соединяться в запросе следует только с небольшим количеством реальных таблиц (в оптимальном варианте в динамическом списке – только одна таблица, и она назначена основной).
Не рекомендуется выполнять соединения:
- с большим количеством реальных таблиц. Ориентироваться стоит на количество не более 4 таблиц.
- с вложенными запросами
- с виртуальными таблицами.
См. также: Запросы, выполняющие соединение с вложенными запросами или виртуальными таблицами
5.2. Соединение с виртуальными таблицами допустимо в отдельных случаях, если запрос и архитектура данных удовлетворяют ряду условий:
- допустимо соединение с виртуальными таблицами СрезПоследних (СрезПервых), если регистр сведений содержит
заведомо небольшое количество записей. Например, получение текущего курса валют по данным регистра сведений КурсыВалют; - при обращении к виртуальной таблице будет использованы хранимые итоги регистра сведений (см. Разрешение итогов для периодических регистров сведений )
- запрос к виртуальной таблице Остатки будет преобразован платформой в простое чтение хранимой таблицы итогов без группировок (см. Эффективное обращение к виртуальной таблице «Остатки»)
5.3. При учете количества таблиц, участвующих в запросе, необходимо помнить, что обращение к полям «через точку» приводит к неявному соединению с дополнительными таблицами. Подробнее см.: Разыменование ссылочных полей составного типа в языке запросов
5.4 При работе со списком под неполными правами, в которых настроены ограничения доступа к данным (RLS) к таблицам, участвующим в запросе*, также автоматически присоединяются условия ограничения доступа к данным, которые замедляют работу списка. Именно в этом режиме работы следует проверять скорость работы динамических списков.
6. Предусмотреть оптимизацию при работе с полями составного типа
- При использовании в соединениях, отборах, упорядочивании и других конструкциях составного поля, необходимо чтобы состав типов данного поля определялся только ссылочными типами. Подробнее см.: Ограничения на использование реквизитов составного типа .
- Если известно заранее, какого типа должно быть получено поле составного типа, то его необходимо выражать. Например:
ВЫРАЗИТЬ(ДанныеДокумента.ДокументОснование КАК Документ.АктВыполненныхРабот)
См.также: Разыменование ссылочных полей составного типа в языке запросов
7. Запрос динамического списка рекомендуется менять «на лету» на более оптимальный, если это возможно.
Например, при установке быстрого отбора по полю составного типа рекомендуется изменить запрос динамического списка, выразив это поле.
8. Если применение вышеизложенных рекомендаций не возможно, либо оно не дает должного эффекта, то можно рассмотреть следующие пути оптимизации:
8.1. Отказаться от части возможностей динамического списка.
Например:
- От вывода не столь значимой информации, получение которой приводит к усложнению запроса.
- От реализованных сервисных возможностей по группировке списка.
8.2. Осуществлять вывод данных не в динамический список, а в таблицу или дерево значений.
При этом появятся возможности оптимизации недоступные для динамических списков, такие как использование временных таблиц, пакетных запросов, привилегированного режима и т.д..
Данный способ применим, если выполняется одно из условий:
- Исходных данных заведомо мало (десятки-сотни записей).
- Обязательные отборы, накладываемые на список, гарантируют, что данных в один момент времени записей выводится мало.
- Порционность вывода данных организована другими средствами (вручную), например, как в результатах полнотекстового поиска.
Курс "Бухгалтерский учет + 1С:Бухгалтерия 8.2 для начинающих"
Тренинг-семинар «Как получить работу бухгалтера»
Курсы бухгалтеров с трудоустройством
Другие материалы по теме:
скорость, см. также, делать, доступ, получение, пример:, основная, требования, таблица, состояние, условия, регистр сведений, тип..., что, регистр., список, использование, например, остатки, количество, параметры, работы, пример, данные, документов, регистр, расчет
Материалы из раздела: 1С:Предприятие 8.2 / Разработчикам / Разработка пользовательских интерфейсов
Другие материалы по теме:
Источники данных для расчетов бюджетирования
Использование параметра Условие при обращении к виртуальной таблице
Использование параметра Условие при обращении к виртуальной таблице
Нас находят: 75793, 23453, оптимальные запросы при формировании динамического списка 1с 8 2 управляемые формы, Установить режим только чтения в динамическом списке 1С, как зделать условие в запросе динамического списка
Мы на Facebook