1
0
mirror of https://github.com/kuzyara/JobsConsole2019.epf.git synced 2025-02-19 19:00:08 +02:00

оптимизация открытия, таймаут 200 мс на получение состояний рег. заданий

This commit is contained in:
ROSSKO\Nikolay.Kuznecov 2020-10-22 16:04:04 +07:00
parent d1db8b1501
commit 6357533aae
6 changed files with 98 additions and 52 deletions

View File

@ -1,7 +1,9 @@
#Область ОбработчикиСобытийФормы
// Расписание регламентного задания
&НаКлиенте
Перем Расписание;
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Расписание = ПолучитьРасписаниеРегламентногоЗадания(РегламентноеЗаданиеИД);
@ -192,8 +194,6 @@
Возврат Результат;
КонецФункции
&НаСервере
Функция ПолучитьОбъектРегламентногоЗадания(УникальныйНомерЗадания) Экспорт

View File

@ -16,7 +16,6 @@
Ключ = Параметры.Ключ;
КонецЕсли;
Для Каждого Метаданное Из Метаданные.РегламентныеЗадания Цикл
Элементы.ИмяМетода.СписокВыбора.Добавить(Метаданное.ИмяМетода);
КонецЦикла;

View File

@ -3946,6 +3946,26 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ВремяЗаполненияРегламентных</name>
<title>
<key>ru</key>
<value>Время заполнения регламентных</value>
</title>
<id>16</id>
<valueType>
<types>Number</types>
<numberQualifiers>
<precision>10</precision>
</numberQualifiers>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>ОбновитьРегламентныеЗадания</name>
<title>
@ -3955,7 +3975,7 @@
<id>1</id>
<toolTip>
<key>ru</key>
<value>Обновить регламентные задания</value>
<value>Обновить регламентные задания и состояния каждого (может занять продолжительное время)</value>
</toolTip>
<use>
<common>true</common>

View File

@ -6,28 +6,23 @@
ЭтаФорма.ОтборФоновыхЗаданийВключен = Истина;
// защитный фильтр при интенсивном запуске фоновых
ИнтервалДляОтбора = 3600;
ЭтаФорма.ОтборФоновыхЗаданий = Новый ХранилищеЗначения(Новый Структура("Начало", ТекущаяДата() - ИнтервалДляОтбора));
ЭтаФорма.ОтборФоновыхЗаданий = Новый ХранилищеЗначения(Новый Структура("Начало", ТекущаяДатаСеанса() - ИнтервалДляОтбора));
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Попытка
ОтборПриОткрытии();
Если АвтообновлениеСпискаФоновыхЗаданий = Истина Тогда
ПодключитьОбработчикОжидания("ОбработчикАвтоОбновленияФоновыхЗаданий", ПериодАвтоОбновленияСпискаФоновыхЗаданий);
КонецЕсли;
Если АвтообновлениеСпискаРегламентныхЗаданий = Истина Тогда
ПодключитьОбработчикОжидания("ОбработчикАвтоОбновленияРегламентныхЗаданий", ПериодАвтоОбновленияСпискаРегламентныхЗаданий);
КонецЕсли;
ОбновитьСписокФоновыхЗаданий();
ОбновитьСписокРегламентныхЗаданий();
Исключение
ПоказатьИнформациюОбОшибке(ИнформацияОбОшибке());
КонецПопытки;
ОбновитьПриСоздании();
Если АвтообновлениеСпискаФоновыхЗаданий = Истина Тогда
ПодключитьОбработчикОжидания("ОбработчикАвтоОбновленияФоновыхЗаданий", ПериодАвтоОбновленияСпискаФоновыхЗаданий);
КонецЕсли;
Если АвтообновлениеСпискаРегламентныхЗаданий = Истина Тогда
ПодключитьОбработчикОжидания("ОбработчикАвтоОбновленияРегламентныхЗаданий", ПериодАвтоОбновленияСпискаРегламентныхЗаданий);
КонецЕсли;
#Если ТолстыйКлиентОбычноеПриложение Тогда
Элементы.СписокРегламентныхЗаданийЖурналРегистрации1.Видимость = Ложь;
#КонецЕсли
@ -35,10 +30,27 @@
Элементы.СписокРегламентныхЗаданийВыполнитьЗаданиеВручную.Заголовок = "На клиенте (толстый клиент)";
#КонецЕсли
Элементы.СписокФоновыхЗаданийНастройкаСпискаФоновыхЗаданий.Пометка = АвтообновлениеСпискаФоновыхЗаданий;
Элементы.СписокРегламентныхЗаданийНастройкаСпискаРегламентныхЗаданий.Пометка = АвтообновлениеСпискаРегламентныхЗаданий;
Элементы.СписокРегламентныхЗаданийНастройкаСпискаРегламентныхЗаданий.Пометка = АвтообновлениеСпискаРегламентныхЗаданий;
КонецПроцедуры
&НаСервере
Процедура ОбновитьПриСоздании()
Попытка
ОтборПриОткрытии();
ОбновитьСписокФоновыхЗаданий();
ОбновитьСписокРегламентныхЗаданий();
Исключение
СообщитьПользователю(ИнформацияОбОшибке());
КонецПопытки;
ВерсияОбработки = РеквизитФормыВЗначение("Объект").ВерсияОбработки();
ЭтаФорма.Заголовок = СтрШаблон("Регламентные и фоновые задания %1", ВерсияОбработки);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
ОтключитьОбработчикОжидания("ОбработчикАвтоОбновленияФоновыхЗаданий");
@ -111,7 +123,7 @@
ОбновитьСписокРегламентныхЗаданий();
Исключение
ПоказатьИнформациюОбОшибке(ИнформацияОбОшибке());
СообщитьПользователю(ИнформацияОбОшибке());
КонецПопытки;
КонецПроцедуры
@ -136,6 +148,11 @@
&НаКлиенте
Процедура СписокРегламентныхЗаданийПриАктивизацииСтроки(Элемент)
ПодключитьОбработчикОжидания("ОбновитьСостояниеТекущегоРегламентногоЗадания", 1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСостояниеТекущегоРегламентногоЗадания()
ТекущаяСтрока = Элементы.СписокРегламентныхЗаданий.ТекущаяСтрока;
Если ТекущаяСтрока = Неопределено Тогда
Возврат;
@ -173,8 +190,8 @@
ПоследнееЗадание = Регламентное.ПоследнееЗадание;
Исключение
ПоследнееЗадание = Неопределено;
Инфо = ИнформацияОбОшибке();
СообщитьПользователю(ПодробноеПредставлениеОшибки(Инфо));
ТекстОшибки = ОписаниеОшибки();
СообщитьПользователю(ТекстОшибки);
Возврат Результат;
КонецПопытки;
@ -225,11 +242,11 @@
&НаКлиенте
Процедура ОбновитьРегламентныеЗадания(Команда)
ОбновитьСписокРегламентныхЗаданий();
ОбновитьСписокРегламентныхЗаданий(Истина);
КонецПроцедуры
&НаСервере
Процедура ОбновитьСписокРегламентныхЗаданий()
Процедура ОбновитьСписокРегламентныхЗаданий(ПолучитьСостояниеВсех = Ложь)
Перем ТекущийИдентификатор;
ТекущаяСтрока = Элементы.СписокРегламентныхЗаданий.ТекущаяСтрока;
@ -248,7 +265,7 @@
СписокРегламентныхЗаданий.Очистить();
ВывестиРегламентные();
ВывестиРегламентные(ПолучитьСостояниеВсех);
СписокРегламентныхЗаданий.Сортировать("Метаданные");
@ -293,20 +310,21 @@
КонецФункции
&НаСервере
Процедура ВывестиРегламентные()
Процедура ВывестиРегламентные(ПолучитьСостояниеВсех = Ложь)
Отбор = ПолучитьОтборРегламентных();
Попытка
Регламентные = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор);
Исключение
Инфо = ИнформацияОбОшибке();
СообщитьПользователю(ПодробноеПредставлениеОшибки(Инфо));
ТекстОшибки = ОписаниеОшибки();
СообщитьПользователю(ТекстОшибки);
Возврат;
КонецПопытки;
Таймаут = Ложь;
НачалоЗамера = ТекущаяУниверсальнаяДатаВМиллисекундах();
Оптимизация = Ложь;
Сч = 0;
Количество = Регламентные.Количество();
Для Каждого Регламентное Из Регламентные Цикл
НоваяСтрока = СписокРегламентныхЗаданий.Добавить();
НоваяСтрока.Метаданные = Регламентное.Метаданные.Представление();
@ -319,15 +337,18 @@
НоваяСтрока.Идентификатор = Регламентное.УникальныйИдентификатор;
НоваяСтрока.Метод = Регламентное.Метаданные.ИмяМетода;
ТаймаутВывода = 1000;
Если ТекущаяУниверсальнаяДатаВМиллисекундах() - НачалоЗамера < ТаймаутВывода Тогда
ТаймаутВыводаМиллисекунд = 200;
ДлительностьВывода = ТекущаяУниверсальнаяДатаВМиллисекундах() - НачалоЗамера;
Если НЕ Таймаут И ДлительностьВывода < ТаймаутВыводаМиллисекунд ИЛИ ПолучитьСостояниеВсех Тогда
Сч = Сч + 1;
// На больших базах подвисает...
СвойстваПоследнегоВыполненного = ПолучитьСвойстваПоследнегоВыполненного(НоваяСтрока.Идентификатор, Регламентное);
НоваяСтрока.Состояние = СвойстваПоследнегоВыполненного.Состояние;
НоваяСтрока.Выполнялось = СвойстваПоследнегоВыполненного.Выполнялось;
Иначе
Оптимизация = Истина;
КонецЕсли;
Если НЕ Таймаут И ДлительностьВывода > ТаймаутВыводаМиллисекунд Тогда
Таймаут = Истина;
КонецЕсли;
ИмяРегламентногоЗадания = НоваяСтрока.Метаданные + ?(ЗначениеЗаполнено(НоваяСтрока.Наименование), ":" + НоваяСтрока.Наименование, "");
Строки = СписокФоновыхЗаданий.НайтиСтроки(Новый Структура("Метод, Наименование", НоваяСтрока.Метод, НоваяСтрока.Наименование));
@ -336,13 +357,16 @@
КонецЦикла;
КонецЦикла;
Если Оптимизация Тогда
Пояснение = "Получение состояния всех регламентных заданий заняло длительное время, поэтому обновление происходит только при активации строки.";
Элементы.СписокРегламентныхЗаданийВыполнялось.Заголовок = "Выполнялось*";
Элементы.СписокРегламентныхЗаданийВыполнялось.Подсказка = Пояснение;
Элементы.СписокРегламентныхЗаданийСостояние.Заголовок = "Состояние*";
Элементы.СписокРегламентныхЗаданийСостояние.Подсказка = Пояснение;
КонецЕсли;
ВремяЗаполненияРегламентных = ТекущаяУниверсальнаяДатаВМиллисекундах() - НачалоЗамера;
ОптимизацияТекстПояснения = СтрШаблон("За %1 мсек. получено состояние %2 из %3 регламентных заданий,"
+ " но обновление происходит и при активации строки.", ВремяЗаполненияРегламентных, Сч, Количество)
+ " Для отображения состояния сразу всех воспользуйтесь командой обновления списка регламентных заданий.";
Элементы.СписокРегламентныхЗаданийВыполнялось.Подсказка = ОптимизацияТекстПояснения;
Элементы.СписокРегламентныхЗаданийВыполнялось.Заголовок = "Выполнялось" + ?(Сч = Количество, "", "*");
Элементы.СписокРегламентныхЗаданийСостояние.Подсказка = ОптимизацияТекстПояснения;
Элементы.СписокРегламентныхЗаданийСостояние.Заголовок = "Состояние" + ?(Сч = Количество, "", "*");
КонецПроцедуры
@ -579,7 +603,8 @@
ОтменитьФоновыеЗадания();
ОбновитьСписокФоновыхЗаданий();
Исключение
ПоказатьИнформациюОбОшибке(ИнформацияОбОшибке());
ТекстОшибки = ОписаниеОшибки();
СообщитьПользователю(ТекстОшибки);
КонецПопытки;
КонецПроцедуры
@ -701,8 +726,8 @@
Попытка
Фоновые = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
Исключение
Инфо = ИнформацияОбОшибке();
СообщитьПользователю(ПодробноеПредставлениеОшибки(Инфо));
ТекстОшибки = ОписаниеОшибки();
СообщитьПользователю(ТекстОшибки);
Возврат;
КонецПопытки;

View File

@ -1,3 +1,4 @@
#Область СведенияОВнешнейОбработке
// -------------------------------------------------------
//
// БСП
@ -22,7 +23,6 @@
// Теперь нам необходимо передать в виде массива имен, к чему будет подключена наша ВПФ
// Имейте ввиду, что можно задать имя в таком виде: Документ.* - в этом случае обработка будет подключена ко всем документам в системе,
// которые поддерживают механизм ВПФ
// МассивНазначений.Добавить("Документ.ЗаказКлиента");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
// Теперь зададим имя, под которым ВПФ будет зарегистрирована в справочнике внешних обработок
@ -55,17 +55,17 @@
// Выполняет команду в фоновом варианте
Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт
Если ИдентификаторКоманды = "" Тогда
Если ИдентификаторКоманды = "" Тогда
ИдентификаторКоманды = "";
КонецЕсли;
КонецПроцедуры
Функция НаименованиеОбработки()
Возврат Метаданные().Синоним
Возврат Метаданные().Синоним;
КонецФункции
@ -77,7 +77,7 @@
Функция ВерсияОбработки() Экспорт
Возврат "1.0.9";
Возврат "1.0.10";
КонецФункции
@ -106,3 +106,5 @@
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
#КонецОбласти

View File

@ -6,7 +6,7 @@
<name>КонсольЗаданий2019</name>
<synonym>
<key>ru</key>
<value>Консоль заданий2019</value>
<value>Консоль заданий 2019</value>
</synonym>
<comment>https://github.com/kuzyara/JobsConsole2019.epf (c)Душелов'2009</comment>
<containedObjects classId="c3831ec8-d8d5-4f93-8a22-f9bfae07327f" objectId="03ed91a2-d56a-422c-8411-70bd7d3b1a76"/>