diff --git a/README.md b/README.md
index a578da3..218892c 100644
--- a/README.md
+++ b/README.md
@@ -24,7 +24,7 @@
Для настройки нужно использовать обработку "Управление менеджером заданий".
-![Управление менеджером заданий](http://habrastorage.org/files/8cf/ca4/474/8cfca447435642a6b3d065d8c39fdc86.jpg "Настройки менеджера заданий")
+![Управление менеджером заданий](http://habrastorage.org/files/d04/5c7/e46/d045c7e46e23479a9bb25ccbc9b996fc.JPG "Настройки менеджера заданий")
Доступные настройки:
diff --git a/ReleaseHistory.md b/ReleaseHistory.md
index a150b7b..085b4c4 100644
--- a/ReleaseHistory.md
+++ b/ReleaseHistory.md
@@ -1,3 +1,6 @@
+# 1.4.5
+- После сбоя сервера 1С больше не зависают задания в статусе ОжидаетВыделенногоИсполнителя (#11)
+
# 1.4.4
- Добавлена возможность просматривать параметры запуска заданий (#12)
diff --git "a/src/tests/\320\242\320\265\321\201\321\202\321\213_\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/ObjectModule.txt" "b/src/tests/\320\242\320\265\321\201\321\202\321\213_\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/ObjectModule.bsl"
similarity index 95%
rename from "src/tests/\320\242\320\265\321\201\321\202\321\213_\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/ObjectModule.txt"
rename to "src/tests/\320\242\320\265\321\201\321\202\321\213_\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/ObjectModule.bsl"
index 7802b65..134f5e4 100644
--- "a/src/tests/\320\242\320\265\321\201\321\202\321\213_\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/ObjectModule.txt"
+++ "b/src/tests/\320\242\320\265\321\201\321\202\321\213_\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/ObjectModule.bsl"
@@ -37,6 +37,7 @@
НаборТестов.Добавить("ТестДолжен_ЗапуститьЗаданиеВнеОчереди");
НаборТестов.Добавить("ТестДолжен_ДождатьсяВыполненияНесколькихЗаданий");
НаборТестов.Добавить("ТестДолжен_ПроверитьЧтоОжиданиеВыполненияНесколькихЗаданийИмеетОбщийТаймаут");
+ НаборТестов.Добавить("ТестДолжен_ВзятьВРаботуЗаданиеВСтатусеОжидаетВыделенногоИсполнителяЕслиВремяЖизниЗаданияМинутаИБольше");
НаборТестов.НачатьГруппу("Настройки повторного выполнения упавших тестов");
НаборТестов.Добавить("ТестДолжен_ПолучитьКоличествоЗаданийНаПаузе");
@@ -129,6 +130,7 @@
ПараметрыЗадания = Новый Структура("Секунды", 2);
КлючЗадания1 = мзЗадания.ДобавитьЗадание("Тестирование.Уснуть", ПараметрыЗадания);
КлючЗадания2 = мзЗадания.ДобавитьЗадание("Тестирование.Уснуть", ПараметрыЗадания);
+ МодифицироватьЗадание(КлючЗадания2, Новый Структура("Состояние", Перечисления.мзСостоянияЗаданий.ОжидаетВыделенногоИсполнителя));
КлючЗадания3 = мзЗадания.ДобавитьЗадание("Тестирование.Уснуть", ПараметрыЗадания);
КлючЗадания4 = мзЗадания.ДобавитьЗадание("Тестирование.Уснуть", ПараметрыЗадания);
КлючЗадания5 = мзЗадания.ДобавитьЗадание("Тестирование.Уснуть", ПараметрыЗадания);
@@ -513,6 +515,16 @@
Ожидаем.Что(Задание.ЗавершениеВыполнения, "При отмене должно заполняться поле ЗавершениеВыполнения").Заполнено();
Ожидаем.Что(Задание.ЗавершениеВыполнения, "ЗавершениеВыполнения >= ВремяДоОтмены").БольшеИлиРавно(ВремяДоОтмены);
Ожидаем.Что(Задание.ЗавершениеВыполнения, "ЗавершениеВыполнения <= ВремяПослеОтмены").МеньшеИлиРавно(ВремяДоОтмены);
+
+ КлючЗадания2 = мзЗадания.ДобавитьЗадание("Тестирование.Уснуть", ПараметрыЗадания);
+ МодифицироватьЗадание(КлючЗадания2, Новый Структура("Состояние", Перечисления.мзСостоянияЗаданий.ОжидаетВыделенногоИсполнителя));
+
+ Ожидаем.Что(мзЗадания.ОтменитьЗадание(КлючЗадания2), "Задания в состоянии ОжидаетВыделенногоИсполнителя так же могут отменяться").ЭтоИстина();
+
+ КлючЗадания3 = мзЗадания.ДобавитьЗадание("Тестирование.Уснуть", ПараметрыЗадания);
+ МодифицироватьЗадание(КлючЗадания2, Новый Структура("Состояние", Перечисления.мзСостоянияЗаданий.НаПаузе));
+
+ Ожидаем.Что(мзЗадания.ОтменитьЗадание(КлючЗадания3), "Задания в состоянии НаПаузе так же могут отменяться").ЭтоИстина();
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоВзятоеВРаботуИлиВыполненноеЗаданиеНеОтменяется() Экспорт
@@ -610,6 +622,30 @@
мзЗадания.ДождатьсяВыполнения(КлючиЗаданий, Сч);
КонецПроцедуры
+
+Процедура ТестДолжен_ВзятьВРаботуЗаданиеВСтатусеОжидаетВыделенногоИсполнителяЕслиВремяЖизниЗаданияМинутаИБольше() Экспорт
+ ПараметрыЗадания = Новый Структура("Секунды", 1);
+ КлючВыполняемогоЗадания = мзЗадания.ДобавитьЗадание("Тестирование.Уснуть", ПараметрыЗадания);
+
+ МодифицироватьЗадание(КлючВыполняемогоЗадания, Новый Структура("Состояние", Перечисления.мзСостоянияЗаданий.ОжидаетВыделенногоИсполнителя));
+
+ мзЗадания.МенеджерЗаданий_Выполнение();
+ СостояниеИзменилось = мзЗадания.ОжидатьИзмененияСостояния(КлючВыполняемогоЗадания, Перечисления.мзСостоянияЗаданий.ОжидаетВыделенногоИсполнителя, 1);
+
+ Ожидаем.Что(СостояниеИзменилось, "Ожидали, что состояние останется прежним. Время жизни задания меньше минуты").ЭтоЛожь();
+
+ НаборЗаписей = ПолучитьЗаполненныйНаборЗаписейПоКлючуЗадания(КлючВыполняемогоЗадания);
+ НаборЗаписей[0].Период = НаборЗаписей[0].Период - 60;
+ НаборЗаписей.Записать();
+
+ мзЗадания.МенеджерЗаданий_Выполнение();
+ СостояниеИзменилось = мзЗадания.ОжидатьИзмененияСостояния(КлючВыполняемогоЗадания, Перечисления.мзСостоянияЗаданий.ОжидаетВыделенногоИсполнителя, 1);
+
+ Ожидаем.Что(СостояниеИзменилось, "Ожидали, что состояние изменится. Время жизни задания равно минуте").ЭтоИстина();
+
+ ТекущееСостояние = мзЗадания.ПолучитьСостояниеЗадания(КлючВыполняемогоЗадания);
+ Ожидаем.Что(ТекущееСостояние).Равно(Перечисления.мзСостоянияЗаданий.Выполняется);
+КонецПроцедуры
// } Выполнение заданий
// { Настройки повторного выполнения упавших тестов
diff --git "a/src/tests/\320\242\320\265\321\201\321\202\321\213_\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/renames.txt" "b/src/tests/\320\242\320\265\321\201\321\202\321\213_\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/renames.txt"
index cf833c6..7e19c2a 100644
--- "a/src/tests/\320\242\320\265\321\201\321\202\321\213_\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/renames.txt"
+++ "b/src/tests/\320\242\320\265\321\201\321\202\321\213_\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/renames.txt"
@@ -1,6 +1,6 @@
copyinfo-->und\copyinfo
e55b6225-b6a5-497d-8138-9d717a530aa8.0\info-->und\e55b6225-b6a5-497d-8138-9d717a530aa8.0\info
-e55b6225-b6a5-497d-8138-9d717a530aa8.0\text-->ObjectModule.txt
+e55b6225-b6a5-497d-8138-9d717a530aa8.0\text-->ObjectModule.bsl
fed00b80-d6f3-4e51-a432-abf2eaba9aee-->und\fed00b80-d6f3-4e51-a432-abf2eaba9aee
root-->und\root
version-->und\version
diff --git "a/src/tests/\320\242\320\265\321\201\321\202\321\213_\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/und/fed00b80-d6f3-4e51-a432-abf2eaba9aee" "b/src/tests/\320\242\320\265\321\201\321\202\321\213_\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/und/fed00b80-d6f3-4e51-a432-abf2eaba9aee"
index e83ea33..cb3b027 100644
--- "a/src/tests/\320\242\320\265\321\201\321\202\321\213_\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/und/fed00b80-d6f3-4e51-a432-abf2eaba9aee"
+++ "b/src/tests/\320\242\320\265\321\201\321\202\321\213_\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/und/fed00b80-d6f3-4e51-a432-abf2eaba9aee"
@@ -4,9 +4,9 @@
{1,
{4,b542ff82-4059-46a1-8cec-5659c7f6f14f,c020af6f-d011-491e-9360-284faee8ab91,
{0,
-{0,
+{1,
{0,0,e55b6225-b6a5-497d-8138-9d717a530aa8},"Тесты_МенеджерЗаданий",
-{1,"ru","Тесты менеджер заданий"},""}
+{1,"ru","Тесты менеджер заданий"},"",0,0}
},00000000-0000-0000-0000-000000000000,"",00000000-0000-0000-0000-000000000000},4,
{2bcef0d1-0981-11d6-b9b8-0050bae0a95d,0},
{3daea016-69b7-4ed4-9453-127911372fe6,0},
diff --git "a/src/tests/\320\242\320\265\321\201\321\202\321\213_\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/und/versions" "b/src/tests/\320\242\320\265\321\201\321\202\321\213_\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/und/versions"
index 5661901..2e1e57e 100644
--- "a/src/tests/\320\242\320\265\321\201\321\202\321\213_\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/und/versions"
+++ "b/src/tests/\320\242\320\265\321\201\321\202\321\213_\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/und/versions"
@@ -1 +1 @@
-{1,7,"",d72f24d1-4819-4c3f-8146-aee33d51c764,"root",4a6c20e3-c1ef-4d10-98b6-697b587c54f1,"e55b6225-b6a5-497d-8138-9d717a530aa8.0",9a5dd7b4-f25b-45c6-9492-9350a2279a72,"copyinfo",e98cb223-d813-4b52-8740-8250b23854cf,"fed00b80-d6f3-4e51-a432-abf2eaba9aee",a96f90d7-e978-4c28-adf8-cda0275e69cc,"versions",fb5bd96b-29d8-42f4-9bae-5ee4d6126335,"version",57de6ddd-a883-4bed-9490-e92f6def9419}
\ No newline at end of file
+{1,7,"",a8c7b7aa-159f-4bc3-ba1e-f287ef2f0023,"copyinfo",b00d47f3-592e-47fe-9b43-589bc9e03cd2,"e55b6225-b6a5-497d-8138-9d717a530aa8.0",821523a6-721a-46b5-8dd2-6ece758b1b8e,"fed00b80-d6f3-4e51-a432-abf2eaba9aee",52997236-3f0c-4ee2-bde1-047604d0cd9e,"root",abfd6b97-85f8-4545-8185-dfe90be1f642,"version",8dd0270a-81c9-4c5a-b970-744821e5ecad,"versions",c8b2558a-2bce-486b-b74b-f65cc5bea15f}
\ No newline at end of file
diff --git "a/src/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/CommonModules/\320\274\320\267\320\227\320\260\320\264\320\260\320\275\320\270\321\217/Ext/Module.bsl" "b/src/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/CommonModules/\320\274\320\267\320\227\320\260\320\264\320\260\320\275\320\270\321\217/Ext/Module.bsl"
index 24d30c0..385a3bd 100644
--- "a/src/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/CommonModules/\320\274\320\267\320\227\320\260\320\264\320\260\320\275\320\270\321\217/Ext/Module.bsl"
+++ "b/src/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/CommonModules/\320\274\320\267\320\227\320\260\320\264\320\260\320\275\320\270\321\217/Ext/Module.bsl"
@@ -164,18 +164,21 @@
Если НаборЗаписей.Количество() = 1 Тогда
Задание = НаборЗаписей[0];
- ДеталиЗадания = Новый Структура("ИмяМетода, Параметры");
- ДеталиЗадания.ИмяМетода = Задание.ИмяМетода;
- ДеталиЗадания.Параметры = Задание.Параметры.Получить();
-
- Задание.КлючИсполнителя = КлючИсполнителя;
- Задание.Состояние = Перечисления.мзСостоянияЗаданий.Выполняется;
- Задание.НачалоВыполнения = ТекущаяДата();
- Задание.КоличествоПопытокВыполения = Задание.КоличествоПопытокВыполения + 1;
-
- НаборЗаписей.Записать();
-
- СделатьОтметкуВЖР("Начало выполнения задания", КлючЗадания);
+ СостоянияДляВзятияВРаботу = ПолучитьСостоянияДляВзятияВРаботу();
+ Если СостоянияДляВзятияВРаботу.Найти(Задание.Состояние) <> Неопределено Тогда
+ ДеталиЗадания = Новый Структура("ИмяМетода, Параметры");
+ ДеталиЗадания.ИмяМетода = Задание.ИмяМетода;
+ ДеталиЗадания.Параметры = Задание.Параметры.Получить();
+
+ Задание.КлючИсполнителя = КлючИсполнителя;
+ Задание.Состояние = Перечисления.мзСостоянияЗаданий.Выполняется;
+ Задание.НачалоВыполнения = ТекущаяДата();
+ Задание.КоличествоПопытокВыполения = Задание.КоличествоПопытокВыполения + 1;
+
+ НаборЗаписей.Записать();
+
+ СделатьОтметкуВЖР("Начало выполнения задания", КлючЗадания);
+ КонецЕсли;
КонецЕсли;
Возврат ДеталиЗадания;
@@ -214,56 +217,22 @@
КонецФункции
Функция ОжидатьСостояниеЗадания(Знач КлючЗадания, Знач ОжидаемоеСостояние, Знач Таймаут = 5) Экспорт
- Запрос = Новый Запрос;
- Запрос.Текст =
- "ВЫБРАТЬ
- | Истина КАК ДождалисьСостояния
- |ИЗ
- | РегистрСведений.мзЗадания КАК мзЗадания
- |ГДЕ
- | мзЗадания.Ключ = &КлючЗадания
- | И мзЗадания.Состояние = &ОжидаемоеСостояние";
- Запрос.УстановитьПараметр("КлючЗадания", КлючЗадания);
- Запрос.УстановитьПараметр("ОжидаемоеСостояние", ОжидаемоеСостояние);
-
ВремяВРаботе = 0;
- ДождалисьСостояния = Ложь;
- Пока ВремяВРаботе < Таймаут Цикл
- РезультатЗапроса = Запрос.Выполнить();
- Если Не РезультатЗапроса.Пустой() Тогда
- ДождалисьСостояния = Истина;
- Прервать;
- КонецЕсли;
-
+ ДождалисьСостояния = (ОжидаемоеСостояние = ПолучитьСостояниеЗадания(КлючЗадания));
+ Пока Не ДождалисьСостояния И (ВремяВРаботе < Таймаут) Цикл
ВремяВРаботе = ВремяВРаботе + Спать(1);
+ ДождалисьСостояния = (ОжидаемоеСостояние = ПолучитьСостояниеЗадания(КлючЗадания));
КонецЦикла;
Возврат ДождалисьСостояния;
КонецФункции
Функция ОжидатьИзмененияСостояния(Знач КлючЗадания, Знач ТекущееСостояние, Знач Таймаут = 5) Экспорт
- Запрос = Новый Запрос;
- Запрос.Текст =
- "ВЫБРАТЬ
- | Истина КАК СостояниеИзменилось
- |ИЗ
- | РегистрСведений.мзЗадания КАК мзЗадания
- |ГДЕ
- | мзЗадания.Ключ = &КлючЗадания
- | И мзЗадания.Состояние <> &ТекущееСостояние";
- Запрос.УстановитьПараметр("КлючЗадания", КлючЗадания);
- Запрос.УстановитьПараметр("ТекущееСостояние", ТекущееСостояние);
-
ВремяВРаботе = 0;
- СостояниеИзменилось = Ложь;
- Пока ВремяВРаботе < Таймаут Цикл
- РезультатЗапроса = Запрос.Выполнить();
- Если Не РезультатЗапроса.Пустой() Тогда
- СостояниеИзменилось = Истина;
- Прервать;
- КонецЕсли;
-
+ СостояниеИзменилось = (ТекущееСостояние <> ПолучитьСостояниеЗадания(КлючЗадания));
+ Пока Не СостояниеИзменилось И (ВремяВРаботе < Таймаут) Цикл
ВремяВРаботе = ВремяВРаботе + Спать(1);
+ СостояниеИзменилось = (ТекущееСостояние <> ПолучитьСостояниеЗадания(КлючЗадания));
КонецЦикла;
Возврат СостояниеИзменилось;
@@ -274,7 +243,8 @@
НаборЗаписей = ПолучитьЗаполненныйНаборЗаписейПоКлючуЗадания(КлючЗадания);
Если НаборЗаписей.Количество() = 1 Тогда
Задание = НаборЗаписей[0];
- Если Задание.Состояние = Перечисления.мзСостоянияЗаданий.Ожидает Или Задание.Состояние = Перечисления.мзСостоянияЗаданий.НаПаузе Тогда
+ СостоянияПоддерживающиеОтмену = ПолучитьСостоянияПоддерживающиеОтмену();
+ Если СостоянияПоддерживающиеОтмену.Найти(Задание.Состояние) <> Неопределено Тогда
Успех = Истина;
Задание.Состояние = Перечисления.мзСостоянияЗаданий.Отменено;
Задание.ЗавершениеВыполнения = ТекущаяДата();
@@ -287,24 +257,48 @@
// } Работа с заданием
// { Работа с множествами заданий
-Функция ПолучитьКоличествоЗаданийВСостоянии(Знач Состояние)
+Функция ПолучитьСостоянияДляВзятияВРаботу()
+ СостоянияДляВзятияВРаботу = Новый Массив;
+ СостоянияДляВзятияВРаботу.Добавить(Перечисления.мзСостоянияЗаданий.Ожидает);
+ СостоянияДляВзятияВРаботу.Добавить(Перечисления.мзСостоянияЗаданий.ОжидаетВыделенногоИсполнителя);
+
+ Возврат СостоянияДляВзятияВРаботу;
+КонецФункции
+
+Функция ПолучитьСостоянияПоддерживающиеОтмену()
+ СостоянияПоддерживающиеОтмену = ПолучитьСостоянияДляВзятияВРаботу();
+ СостоянияПоддерживающиеОтмену.Добавить(Перечисления.мзСостоянияЗаданий.НаПаузе);
+
+ Возврат СостоянияПоддерживающиеОтмену;
+КонецФункции
+
+Функция ПолучитьКоличествоЗаданийВСостояниях(Знач МассивСостояний)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
- | Количество(*) КАК Количество
+ | КОЛИЧЕСТВО(*) КАК Количество
|ИЗ
| РегистрСведений.мзЗадания КАК мзЗадания
|ГДЕ
- | мзЗадания.Состояние = &Состояние";
- Запрос.УстановитьПараметр("Состояние", Состояние);
+ | мзЗадания.Состояние В(&Состояния)";
+ Запрос.УстановитьПараметр("Состояния", МассивСостояний);
РезультатЗапроса = Запрос.Выполнить();
КоличествоЗаданий = РезультатЗапроса.Выгрузить()[0].Количество;
Возврат КоличествоЗаданий;
КонецФункции
+Функция ПолучитьКоличествоЗаданийВСостоянии(Знач Состояние)
+ МассивСостояний = Новый Массив;
+ МассивСостояний.Добавить(Состояние);
+ КоличествоЗаданий = ПолучитьКоличествоЗаданийВСостояниях(МассивСостояний);
+
+ Возврат КоличествоЗаданий;
+КонецФункции
+
Функция ПолучитьКоличесвоЗаданийВОчереди() Экспорт
- КоличесвоЗаданийВОчереди = ПолучитьКоличествоЗаданийВСостоянии(Перечисления.мзСостоянияЗаданий.Ожидает);
+ МассивСостояний = ПолучитьСостоянияДляВзятияВРаботу();
+ КоличесвоЗаданийВОчереди = ПолучитьКоличествоЗаданийВСостояниях(МассивСостояний);
Возврат КоличесвоЗаданийВОчереди;
КонецФункции
@@ -315,7 +309,7 @@
Возврат КоличествоЗаданийНаПаузе;
КонецФункции
-Функция ПолучитьВсеЗаданияВСостоянии(Знач Состояние)
+Функция ПолучитьВсеЗаданияВСостояниях(Знач МассивСостояний)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
@@ -323,16 +317,25 @@
|ИЗ
| РегистрСведений.мзЗадания КАК мзЗадания
|ГДЕ
- | мзЗадания.Состояние = &Состояние";
- Запрос.УстановитьПараметр("Состояние", Состояние);
+ | мзЗадания.Состояние В (&Состояния)";
+ Запрос.УстановитьПараметр("Состояния", МассивСостояний);
РезультатЗапроса = Запрос.Выполнить();
- ВсеЗаданияСоСтатусом = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ключ");
+ ВсеЗаданияВСостояниях = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ключ");
+
+ Возврат ВсеЗаданияВСостояниях;
+КонецФункции
+
+Функция ПолучитьВсеЗаданияВСостоянии(Знач Состояние)
+ МассивСостояний = Новый Массив;
+ МассивСостояний.Добавить(Состояние);
+ ВсеЗаданияВСостоянии = ПолучитьВсеЗаданияВСостояниях(МассивСостояний);
- Возврат ВсеЗаданияСоСтатусом;
+ Возврат ВсеЗаданияВСостоянии;
КонецФункции
Функция ПолучитьВсеЗаданияИзОчереди()
- ВсеЗаданияИзОчереди = ПолучитьВсеЗаданияВСостоянии(Перечисления.мзСостоянияЗаданий.Ожидает);
+ МассивСостояний = ПолучитьСостоянияДляВзятияВРаботу();
+ ВсеЗаданияИзОчереди = ПолучитьВсеЗаданияВСостояниях(МассивСостояний);
Возврат ВсеЗаданияИзОчереди;
КонецФункции
@@ -344,6 +347,11 @@
КонецФункции
Функция ПолучитьЗаданияИзОчереди(Знач КоличествоЗаданий)
+ // Для заданий в состоянии "ОжидаетВыделенногоИсполнителя" делаем допущение, что
+ // если за 60 секунд выделенный исполнитель не запустился и не взял задание в работу, то
+ // он уже не запустится никогда (например, проблемы с rphost)
+ // Обрабатываем такие задания в общем порядке очереди
+
ИнформацияПоОграничениямНаКоличествоИсполнителей = ПолучитьИнформациюПоОграничениямНаКоличествоИсполнителейМетодовОбработчиков();
Запрос = Новый Запрос;
@@ -356,12 +364,16 @@
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.мзНастройкиМетодовОбработчиков КАК мзНастройкиМетодовОбработчиков
| ПО мзЗадания.ИмяМетода = мзНастройкиМетодовОбработчиков.ИмяМетода
|ГДЕ
- | мзЗадания.Состояние = ЗНАЧЕНИЕ(Перечисление.мзСостоянияЗаданий.Ожидает)
+ | (мзЗадания.Состояние = ЗНАЧЕНИЕ(Перечисление.мзСостоянияЗаданий.Ожидает)
+ | ИЛИ мзЗадания.Период < &ПериодМинутуНазад
+ | И мзЗадания.Состояние = ЗНАЧЕНИЕ(Перечисление.мзСостоянияЗаданий.ОжидаетВыделенногоИсполнителя))
|
|УПОРЯДОЧИТЬ ПО
| ЕСТЬNULL(мзНастройкиМетодовОбработчиков.Приоритет, 0) УБЫВ,
| мзЗадания.КоличествоПопытокВыполения,
| мзЗадания.Период";
+ ОднаМинута = 60;
+ Запрос.УстановитьПараметр("ПериодМинутуНазад", ТекущаяДата() - ОднаМинута);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
ВыбранныеЗадания = Новый Массив;
@@ -426,12 +438,9 @@
КонецФункции
Процедура ОтменитьВсеЗаданияВОчереди() Экспорт
- ВсеЗаданияИзОчереди = ПолучитьВсеЗаданияИзОчереди();
- Для каждого КлючЗадания Из ВсеЗаданияИзОчереди Цикл
- ОтменитьЗадание(КлючЗадания);
- КонецЦикла;
- ВсеЗаданияНаПаузе = ПолучитьВсеЗаданияНаПаузе();
- Для каждого КлючЗадания Из ВсеЗаданияНаПаузе Цикл
+ СостоянияПоддерживающиеОтмену = ПолучитьСостоянияПоддерживающиеОтмену();
+ ЗаданияДляОтмены = ПолучитьВсеЗаданияВСостояниях(СостоянияПоддерживающиеОтмену);
+ Для каждого КлючЗадания Из ЗаданияДляОтмены Цикл
ОтменитьЗадание(КлючЗадания);
КонецЦикла;
КонецПроцедуры
diff --git "a/src/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/Configuration.xml" "b/src/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/Configuration.xml"
index 73a2b7f..4673417 100644
--- "a/src/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/Configuration.xml"
+++ "b/src/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\227\320\260\320\264\320\260\320\275\320\270\320\271/Configuration.xml"
@@ -44,7 +44,7 @@
Russian
Evgeniy Pavlyuk
- 1.4.4
+ 1.4.5
false
false