Ускорение отчета 'Контроль передвижений агентов (онлайн-карты)' от AgentPlus v1.5.2

Администрирование - Оптимизация БД (HighLoad)

У пользователей системы AgentPlus (Агент Плюс) отчет 'Контроль передвижений агентов (онлайн-карты)' v1.5.2 вызывает восторг и разочарование одновременно. Восторг – потому, что позволяет увидеть маршрут передвижения пользователя системы с привязкой к карте и дорогам, разочарование – от длительности построения отчета. Отчет по 45 точкам маршрута у меня строится больше минуты. Тестировалось на "Управление торговым Предприятием" 1.2.45.2.

Анализ кода показал, что причиной задержек при построении отчёта является запрос в цикле.

За построение отчета отвечает обработка «кпкКонтрольПередвиженийАгентовОнлайн».

Непосредственно построение отчета начинается с вызова «ДеревоТрековВыбор».

Стек выглядит следующим образом:

ПолучитьДатуДокументаМУ

                ПолучитьДатуДокумента

                СформироватьМаркерыДокумента

…            

                ДеревоТрековВыбор

 

В процедуре «СформироватьМаркерыДокументов» есть цикл по элементам таблицы документов. В цикле вызывается функция ПолучитьОписаниеДокумента, а из нее функция ПолучитьДатуДокументаМУ.

 

Ниже текст функции ПолучитьДатуДокументаМУ

 


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

Функция возвращает структуру ДатыДокумента = Новый Структура("ДатаВМУ, ДатаЗагрузки", ДатаВМУ, ДатаЗагрузки).

 

Есть два способа решения проблемы.

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

ДатаВМУ = ТекДок.Дата и

ДатаЗагрузки = ТекДок.Дата

 

Тогда функция ПолучитьДатуДокументаМУ примет вид
 

Функция ПолучитьДатуДокументаМУ(ТекДок)
                ДатыДокумента = Неопределено;
                ДатаВМУ = ТекДок.Дата; 
                ДатаЗагрузки = ТекДок.Дата;

                ДатыДокумента = Новый Структура("ДатаВМУ, ДатаЗагрузки", ДатаВМУ, ДатаЗагрузки);
                
                Возврат ДатыДокумента;
КонецФункции

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

 

Способ Второй.

При втором способе функция ПолучитьДатуДокументаМУ примет вид
 

Функция ПолучитьДатуДокументаМУ2(ТекДок)
                ДатыДокумента = Неопределено;
                
                Выборка = ТабДокументы.Найти(ТекДок,"Документ");
                Если Выборка = Неопределено Тогда
                                Возврат ДатыДокумента;
                КонецЕсли;        
                ДатаВМУ = СокрЛП(Выборка.ДатаСозданияВМУ);
                ДатаЗагрузки = СокрЛП(Выборка.Период);
                ДатыДокумента = Новый Структура("ДатаВМУ, ДатаЗагрузки", ДатаВМУ, ДатаЗагрузки);
                Возврат ДатыДокумента;
КонецФункции

Использовать функцию ПолучитьДатуДокументаМУ без изменения таблицы значений ТабДокументы нельзя.

Обработка со всеми внесенными изменениями в прикрепленном к статье файле. Изменения помечены маркером //Олег.

Скачать файлы

Наименование Файл Версия Размер
Ускорение отчета 'Контроль передвижений агентов (онлайн-карты)' от AgentPlus.:
.epf 187,29Kb
02.05.18
3
.epf 187,29Kb 3 Скачать

См. также

В этой теме еще нет сообщений.
Оставьте свое сообщение