Ускорение отчета 'Контроль передвижений агентов (онлайн-карты)' от AgentPlus v1.5.2
База данных - HighLoad оптимизация
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Анализ кода показал, что причиной задержек при построении отчёта является запрос в цикле.
За построение отчета отвечает обработка «кпкКонтрольПередвиженийАгентовОнлайн».
Непосредственно построение отчета начинается с вызова «ДеревоТрековВыбор».
Стек выглядит следующим образом:
ПолучитьДатуДокументаМУ
ПолучитьДатуДокумента
СформироватьМаркерыДокумента
…
ДеревоТрековВыбор
В процедуре «СформироватьМаркерыДокументов» есть цикл по элементам таблицы документов. В цикле вызывается функция ПолучитьОписаниеДокумента, а из нее функция ПолучитьДатуДокументаМУ.
Ниже текст функции ПолучитьДатуДокументаМУ
Функция ПолучитьДатуДокументаМУ(ТекДок)
ДатыДокумента = Неопределено;
//получим из регистра дату и время создания документа
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| кпкСведенияДокумента.ДатаВремяСоздания,
| кпкСведенияДокумента.Период
|ИЗ
| РегистрСведений.кпкСведенияДокумента.СрезПоследних КАК кпкСведенияДокумента
|ГДЕ
| кпкСведенияДокумента.КПКДокумент = &ТекДокумент";
Запрос.УстановитьПараметр("ТекДокумент", ТекДок);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
ДатаВМУ = СокрЛП(Выборка.ДатаВремяСоздания);
ДатаЗагрузки = СокрЛП(Выборка.Период);
ДатыДокумента = Новый Структура("ДатаВМУ, ДатаЗагрузки", ДатаВМУ, ДатаЗагрузки);
КонецЕсли;
Возврат ДатыДокумента;
КонецФункции
Функция возвращает структуру ДатыДокумента = Новый Структура("ДатаВМУ, ДатаЗагрузки", ДатаВМУ, ДатаЗагрузки).
Есть два способа решения проблемы.
Первый. Годится для не слишком щепетильных, т.к. принимаем допущение, что
ДатаВМУ = ТекДок.Дата и
ДатаЗагрузки = ТекДок.Дата
Тогда функция ПолучитьДатуДокументаМУ примет вид
Функция ПолучитьДатуДокументаМУ(ТекДок)
ДатыДокумента = Неопределено;
ДатаВМУ = ТекДок.Дата;
ДатаЗагрузки = ТекДок.Дата;
ДатыДокумента = Новый Структура("ДатаВМУ, ДатаЗагрузки", ДатаВМУ, ДатаЗагрузки);
Возврат ДатыДокумента;
КонецФункции
В случаях, когда в отчете важно видеть точные даты необходимо использовать другой способ.
Способ Второй.
При втором способе функция ПолучитьДатуДокументаМУ примет вид
Функция ПолучитьДатуДокументаМУ2(ТекДок)
ДатыДокумента = Неопределено;
Выборка = ТабДокументы.Найти(ТекДок,"Документ");
Если Выборка = Неопределено Тогда
Возврат ДатыДокумента;
КонецЕсли;
ДатаВМУ = СокрЛП(Выборка.ДатаСозданияВМУ);
ДатаЗагрузки = СокрЛП(Выборка.Период);
ДатыДокумента = Новый Структура("ДатаВМУ, ДатаЗагрузки", ДатаВМУ, ДатаЗагрузки);
Возврат ДатыДокумента;
КонецФункции
Использовать функцию ПолучитьДатуДокументаМУ без изменения таблицы значений ТабДокументы нельзя.
Обработка со всеми внесенными изменениями в прикрепленном к статье файле. Изменения помечены маркером //Олег.
Вступайте в нашу телеграмм-группу Инфостарт