Каталог решений - СКД против запроса с итогами

СКД против запроса с итогами

СКД против запроса с итогами

В наличии

Или как эффективно выгрузить и отобразить результат запроса не в табличном документе, а в табличном поле ? В статье сравниваются два способа выгрузки в  "дерево" :
— при помощи запроса с итогами
— используя СКД

Категория:

Описание

 В практических задачах часто возникает необходимость выгрузки  и отображения результата запроса в табличном поле формы. В статье сравниваются два способа выгрузки в  «дерево» :

— при помощи запроса с итогами
— используя СКД 

§ 1. Запрос с итогами. Или «всё в одном запросе». 

Вначале рассмотрим в «картинках» процесс создания текста запроса с заполнением итоговых полей в одной колонке. 

Исходный запрос :
Рис.1.

 

Исходный запрос с итогами . Отметим затратность :  применение итогов  привело к увеличению выходной таблицы в 4 раза.
Рис. 2.

 

Запрос с вычисляемым итоговым полем «Поле4 » : 
Рис 3.

 

Демонстрация вычисления  «Поле4»  первой строки итогов :
Рис.4.

Из рис.2-4 понятен механизм вычисления итоговых полей запроса :
вначале происходит заполнение итоговой строки по умолчанию (см. Рис2), затем заполняются поля указанные в тексте запроса между опциями  «Итоги» и «По».  

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

Процедура КнопкаВыполнитьНажатие(Кнопка)
Запрос  Новый Запрос;
Запрос.Текст  «ВЫБРАТЬ
                | ХозрасчетныйОбороты.Субконто1 КАК Подразделения,
                | ХозрасчетныйОбороты.Субконто2 КАК НоменклатурныеГруппы,
                | ХозрасчетныйОбороты.Субконто3 КАК СтатьиЗатрат,
                | ХозрасчетныйОбороты.СуммаОборотДт КАК СуммаОборот
                |ИЗ
                | РегистрБухгалтерии.Хозрасчетный.Обороты(, , , Счет = &Счет, , , , ) КАК ХозрасчетныйОбороты
                |ИТОГИ
                | ВЫБОР
                |  КОГДА НоменклатурныеГруппы ЕСТЬ NULL
                |   ТОГДА Подразделения
                |  ИНАЧЕ НоменклатурныеГруппы
                | КОНЕЦ КАК СтатьиЗатрат,
                | СУММА(СуммаОборот)
                |ПО
                | Подразделения,
                | НоменклатурныеГруппы» ;
Запрос.УстановитьПараметр( «Счет», ПланыСчетов.Хозрасчетный.НайтиПоКоду(«20.01«));
Дерево  =  Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);  
КонецПроцедуры
В демонстрационной конфигурациии БП 2.0 (1.6) результат такого запроса выглядит следующим образом :
Рис.5.

§ 2. Применение СКД 

А теперь покажем как использование более «громоздкого» подхода с применением СКД даёт многократный прирост производительности.
К теме прикреплена обработка СравнениеСКДиЗапросаСИтогами.epf , результаты  которой представлены на рисунке :
Рис.6.


 

При этом и запрос с итогами, и СКД выдают «дерево» одного и того же вида — с итогами в одной колонке :
Рис.7.

Особенностью используемых в СКД настроек является наличие единственного пользовательского поля «ПолеДерева» . Этот вариант , который представляется автору наиболее удачным из всех возможных , предложил  Alexk-is :
Рис.8. 

  

Специально подобранный пример таблицы в обработке СравнениеСКДиЗапросаСИтогами.epf   даёт  отчетливое представление об  ограниченности подхода «всё в одном запросе» и демонстрирует преимущества применения  СКД при выводе в «дерево».

§ 3. Заключение

Очевидное преимущество в быстродействии СКД при построении  «дерева» не исключает компактного приема с использованием  запроса с итогами , если объем выводимых данных не очень велик .

Автор благодарит автора Alexk-is за ценные замечания к статье. 

Тема первоначально задумывалась как  дополнение к статье  Заметочки про 1с Предприятие8  и содержала лишь описание подхода «всё в одном запросе» . Но по ходу обсуждения (см. комментарии) выяснилось , что гораздо интереснее сравнительный анализ двух подходов .  Тема изменила название и в текст были внесены существенные изменения . 

Для автора тема использования СКД для построения дерева и последующее обсуждение оказалось неожиданно полезным,  в смысле другого подхода к исследованию циклического графа  (см. тему Запрос против рекурсии..  — теперь построение графа ошибок возможно многократно ускорить , используя СКД)

has been added to your cart:
Оформление заказа