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