diff --git "a/features/libraries/\320\224\320\260\320\275\320\275\321\213\320\265/step_definitions/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217.xml" "b/features/libraries/\320\224\320\260\320\275\320\275\321\213\320\265/step_definitions/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217.xml" new file mode 100644 index 000000000..482b022c2 --- /dev/null +++ "b/features/libraries/\320\224\320\260\320\275\320\275\321\213\320\265/step_definitions/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217.xml" @@ -0,0 +1,30 @@ + + + + + + c3831ec8-d8d5-4f93-8a22-f9bfae07327f + 29d2f52d-0ed1-4254-a6bc-bbc6bc333ab1 + + + 503de865-4645-4496-b5dd-2e4a76236095 + 4d213f80-34d7-4f82-80f0-c17b4f80d887 + + + + Регламентные_задания + + + ru + Регламентные_задания + + + + ExternalDataProcessor.Регламентные_задания.Form.Форма + + + +
Форма
+
+
+
\ No newline at end of file diff --git "a/features/libraries/\320\224\320\260\320\275\320\275\321\213\320\265/step_definitions/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/features/libraries/\320\224\320\260\320\275\320\275\321\213\320\265/step_definitions/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..cd892735e --- /dev/null +++ "b/features/libraries/\320\224\320\260\320\275\320\275\321\213\320\265/step_definitions/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/features/libraries/\320\224\320\260\320\275\320\275\321\213\320\265/step_definitions/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/features/libraries/\320\224\320\260\320\275\320\275\321\213\320\265/step_definitions/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 000000000..0d960f56c --- /dev/null +++ "b/features/libraries/\320\224\320\260\320\275\320\275\321\213\320\265/step_definitions/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,12 @@ + +
+ + + + + cfg:ExternalDataProcessorObject.Регламентные_задания + + true + + + \ No newline at end of file diff --git "a/features/libraries/\320\224\320\260\320\275\320\275\321\213\320\265/step_definitions/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/features/libraries/\320\224\320\260\320\275\320\275\321\213\320\265/step_definitions/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..cb13f5f8a --- /dev/null +++ "b/features/libraries/\320\224\320\260\320\275\320\275\321\213\320\265/step_definitions/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265_\320\267\320\260\320\264\320\260\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,427 @@ +&НаКлиенте +Перем КолСекундОжидания; +&НаКлиенте +Перем ДатаНачалаОжидания; +&НаКлиенте +Перем ИмяРегламентногоЗадания; +&НаКлиенте +Перем ИмяМетода; + +#Область Служебные_функции_и_процедуры + +&НаКлиенте +// контекст фреймворка Vanessa-ADD +Перем Ванесса; + +&НаКлиенте +// Структура, в которой хранится состояние сценария между выполнением шагов. Очищается перед выполнением каждого сценария. +Перем Контекст Экспорт; + +&НаКлиенте +// Структура, в которой можно хранить служебные данные между запусками сценариев. Существует, пока открыта форма Vanessa-ADD. +Перем КонтекстСохраняемый Экспорт; + +&НаКлиенте +Перем Ожидаем; + +&НаКлиенте +// Функция экспортирует список шагов, которые реализованы в данной внешней обработке. +Функция ПолучитьСписокТестов(КонтекстФреймворкаBDD) Экспорт + Ванесса = КонтекстФреймворкаBDD; + + ВсеТесты = Новый Массив; + + // описание шагов + // пример вызова Ванесса.ДобавитьШагВМассивТестов(ВсеТесты, Снипет, ИмяПроцедуры, ПредставлениеТеста, ОписаниеШага, ТипШагаДляОписания, ТипШагаВДереве); + + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ОтменяюВсеФоновыеЗаданияУКоторыхИмяМетодаОтРегламентногоЗаданияСИменем(Парам01)","ОтменяюВсеФоновыеЗаданияУКоторыхИмяМетодаОтРегламентногоЗаданияСИменем","Дано отменяю все фоновые задания, у которых имя метода от регламентного задания с именем ""РегламентноеЗадание1""", "Отмена выполнения фоновых заданий, у которых имя метода совпадает с именем метода от указанного регламентного задания. В имени задания допустимо использовать шаблонный поиск через *.", "Данные.Регламентные\фоновые задания"); + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ОтменяюВсеФоновыеЗаданияУКоторыхИмяМетодаОтРегламентногоЗадания(Парам01)","ОтменяюВсеФоновыеЗаданияУКоторыхИмяМетодаОтРегламентногоЗадания","Дано отменяю все фоновые задания, у которых имя метода от регламентного задания ""Регламентное задание1""", "Отмена выполнения фоновых заданий, у которых имя метода совпадает с имени метода от указанного регламентного задания. Задание ищется по синониму. В наименования задания допустимо использовать шаблонный поиск через *.", "Данные.Регламентные\фоновые задания"); + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ОтменяюВсеФоновыеЗаданияУКоторыхИмяМетода(Парам01)","ОтменяюВсеФоновыеЗаданияУКоторыхИмяМетода","Дано отменяю все фоновые задания, у которых имя метода ""СлужебныйМодуль.МетодРегламентногоЗадания1""", "Отмена выполнения фоновых заданий, у которых имя метода с указанным именем метода.", "Данные.Регламентные\фоновые задания"); + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ВыполняюМетодРегламентногоЗаданияСИменем(Парам01)","ВыполняюМетодРегламентногоЗаданияСИменем","Когда выполняю метод регламентного задания с именем ""РегламентноеЗадание1""","Вызов метода от указанного регламентного задания на сервере. В имени задания допустимо использовать шаблонный поиск через *.", "Данные.Регламентные\фоновые задания"); + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ВыполняюМетодРегламентногоЗадания(Парам01)","ВыполняюМетодРегламентногоЗадания","Когда выполняю метод регламентного задания ""Регламентное задание1""", "Вызов метода от указанного регламентного задания на сервере. Задание ищется по синониму. В наименовании задания допустимо использовать шаблонный поиск через *.", "Данные.Регламентные\фоновые задания"); + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ЗапускаюРегламентноеЗаданиеСИменем(Парам01)","ЗапускаюРегламентноеЗаданиеСИменем","Когда запускаю регламентное задание с именем ""РегламентноеЗадание1""", "Создание и запуск фонового задания с методом от указанного регламентного задания. В имени задания допустимо использовать шаблонный поиск через *.", "Данные.Регламентные\фоновые задания"); + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ЗапускаюРегламентноеЗадание(Парам01)","ЗапускаюРегламентноеЗадание","Когда запускаю регламентное задание ""Регламентное задание1""", "Создание и запуск фонового задания с методом от указанного регламентного задания. Задание ищется по синониму. В наименовании задания допустимо использовать шаблонный поиск через *.", "Данные.Регламентные\фоновые задания"); + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ЖдуЗавершенияРегламентногоЗаданияСИменемВТечениеСекунд(Парам01,Парам02)","ЖдуЗавершенияРегламентногоЗаданияСИменемВТечениеСекунд","И жду завершения регламентного задания с именем ""РегламентноеЗадание1"" в течение 2 секунд", "Ожидать завершения ранее запущенного фонового задания. В имени задания допустимо использовать шаблонный поиск через *.", "Данные.Регламентные\фоновые задания"); + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ЖдуЗавершенияРегламентногоЗаданияВТечениеСекунд(Парам01,Парам02)","ЖдуЗавершенияРегламентногоЗаданияВТечениеСекунд","И жду завершения регламентного задания ""Регламентное задание1"" в течение 2 секунд", "Ожидать завершения ранее запущенного фонового задания. Задание ищется по синониму. В наименовании задания допустимо использовать шаблонный поиск через *.", "Данные.Регламентные\фоновые задания"); + + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ЗапускаюФоновоеЗаданиеСМетодом(Парам01)","ЗапускаюФоновоеЗаданиеСМетодом","Когда запускаю фоновое задание с методом ""СлужебныйМодуль.МетодРегламентногоЗадания1""", "Запуск фонового задания с серверным методом из серверного общего модуля.", "Данные.Регламентные\фоновые задания"); + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ЖдуЗавершенияФоновогоЗаданияСМетодомВТечениеСекунд(Парам01,Парам02)","ЖдуЗавершенияФоновогоЗаданияСМетодомВТечениеСекунд","И жду завершения фонового задания с методом ""СлужебныйМодуль.МетодРегламентногоЗадания1"" в течение 2 секунд", "Ожидать завершения ранее запущенного фонового задания. Поиск задания ведется по имени метода", "Данные.Регламентные\фоновые задания"); + + Возврат ВсеТесты; +КонецФункции + +&НаСервере +// Служебная функция. +Функция ПолучитьМакетСервер(ИмяМакета) + ОбъектСервер = РеквизитФормыВЗначение("Объект"); + Возврат ОбъектСервер.ПолучитьМакет(ИмяМакета); +КонецФункции + +&НаКлиенте +// Служебная функция для подключения библиотеки создания fixtures. +Функция ПолучитьМакетОбработки(ИмяМакета) Экспорт + Возврат ПолучитьМакетСервер(ИмяМакета); +КонецФункции + +#КонецОбласти + + + +#Область Работа_со_сценариями + +&НаКлиенте +// Процедура выполняется перед началом каждого сценария +Процедура ПередНачаломСценария() Экспорт + +КонецПроцедуры + +&НаКлиенте +// Процедура выполняется перед окончанием каждого сценария +Процедура ПередОкончаниемСценария() Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область Шаги + +/////////////////////////////////////////////////// +//Реализация шагов +/////////////////////////////////////////////////// + +&НаКлиенте +//Когда выполняю метод регламентного задания с именем "РегламентноеЗадание1" +//@ВыполняюМетодРегламентногоЗаданияСИменем(Парам01) +Процедура ВыполняюМетодРегламентногоЗаданияСИменем(ИмяРегламентногоЗадания) Экспорт + //Ванесса.ПосмотретьЗначение(Парам01,Истина); + ДатаНачала = ТекущаяДата(); + Имя = ВыполняюМетодРегламентногоЗаданияСИменемСервер(ИмяРегламентногоЗадания); + ДобавитьОписаниеЗаданияВКонтекст(Имя, ДатаНачала); +КонецПроцедуры + +&НаКлиенте +//Когда выполняю метод регламентного задания "Регламентное задание1" +//@ВыполняюМетодРегламентногоЗадания(Парам01) +Процедура ВыполняюМетодРегламентногоЗадания(СинонимРегламентногоЗадания) Экспорт + //Ванесса.ПосмотретьЗначение(Парам01,Истина); + ДатаНачала = ТекущаяДата(); + Имя = ВыполняюМетодРегламентногоЗаданияПоСинонимуСервер(СинонимРегламентногоЗадания); + ДобавитьОписаниеЗаданияВКонтекст(Имя, ДатаНачала); +КонецПроцедуры + +&НаКлиенте +//Когда запускаю регламентное задание с именем "ИмяИзМетаданных" +//@ЗапускаюРегламентноеЗаданиеСИменем(Парам01) +Процедура ЗапускаюРегламентноеЗаданиеСИменем(ИмяРегламентногоЗадания) Экспорт + ДатаНачала = ТекущаяДата(); + Имя = ЗапускаюРегламентноеЗаданиеСИменемСервер(ИмяРегламентногоЗадания); + ДобавитьОписаниеЗаданияВКонтекст(Имя, ДатаНачала); +КонецПроцедуры + +&НаКлиенте +//Когда запускаю регламентное задание "Заголовок задания" +//@ЗапускаюРегламентноеЗадание(Парам01) +Процедура ЗапускаюРегламентноеЗадание(СинонимРегламентногоЗадания) Экспорт + ДатаНачала = ТекущаяДата(); + Имя = ЗапускаюРегламентноеЗаданиеПоСинонимуСервер(СинонимРегламентногоЗадания); + ДобавитьОписаниеЗаданияВКонтекст(Имя, ДатаНачала); +КонецПроцедуры + +&НаКлиенте +//И жду завершения регламентного задания с именем "ИмяИзМетаданных" в течение 10 секунд +//@ЖдуЗавершенияРегламентногоЗаданияСИменемВТечениеСекунд(Парам01,Парам02) +Процедура ЖдуЗавершенияРегламентногоЗаданияСИменемВТечениеСекунд(ПарамИмяРегламентногоЗадания, КолСекунд) Экспорт + Ванесса.ЗапретитьВыполнениеШагов(); + + ИмяРегламентногоЗадания = ПарамИмяРегламентногоЗадания; + КолСекундОжидания = КолСекунд; + ДатаНачалаОжидания = ТекущаяДата(); + + ПодключитьОбработчикОжидания("ОбработчикОжидания_РегламентныеЗадания", 1); +КонецПроцедуры + +&НаКлиенте +//И жду завершения регламентного задания "Заголовок задания" в течение 10 секунд +//@ЖдуЗавершенияРегламентногоЗаданияВТечениеСекунд(Парам01,Парам02) +Процедура ЖдуЗавершенияРегламентногоЗаданияВТечениеСекунд(СинонимРегламентногоЗадания, КолСекунд) Экспорт + Ванесса.ЗапретитьВыполнениеШагов(); + + ИмяРегламентногоЗадания = НайтиИмяРегламентногоЗаданияПоСинонимуСервер(СинонимРегламентногоЗадания); + КолСекундОжидания = КолСекунд; + ДатаНачалаОжидания = ТекущаяДата(); + + ПодключитьОбработчикОжидания("ОбработчикОжидания_РегламентныеЗадания", 1); +КонецПроцедуры + +&НаКлиенте +//Дано отменяю все фоновые задания, у которых имя метода от регламентного задания с именем "РегламентноеЗадание1" +//@ОтменяюВсеФоновыеЗаданияУКоторыхИмяМетодаОтРегламентногоЗаданияСИменем(Парам01) +Процедура ОтменяюВсеФоновыеЗаданияУКоторыхИмяМетодаОтРегламентногоЗаданияСИменем(ИмяРегламентногоЗадания) Экспорт + ОтменяюВсеФоновыеЗаданияУКоторыхИмяМетодаОтРегламентногоЗаданияСИменемСервер(ИмяРегламентногоЗадания); +КонецПроцедуры + +&НаКлиенте +//Дано отменяю все фоновые задания, у которых имя метода от регламентного задания "Регламентное задание1" +//@ОтменяюВсеФоновыеЗаданияУКоторыхИмяМетодаОтРегламентногоЗадания(Парам01) +Процедура ОтменяюВсеФоновыеЗаданияУКоторыхИмяМетодаОтРегламентногоЗадания(СинонимРегламентногоЗадания) Экспорт + ОтменяюВсеФоновыеЗаданияУКоторыхИмяМетодаОтРегламентногоЗаданияСервер(СинонимРегламентногоЗадания); +КонецПроцедуры + +&НаКлиенте +//Дано отменяю все фоновые задания, у которых имя метода "СлужебныйМодуль.МетодРегламентногоЗадания1" +//@ОтменяюВсеФоновыеЗаданияУКоторыхИмяМетода(Парам01) +Процедура ОтменяюВсеФоновыеЗаданияУКоторыхИмяМетода(ИмяМетода) Экспорт + ОтменяюВсеФоновыеЗаданияПоИмениМетода(ИмяМетода); +КонецПроцедуры + +&НаКлиенте +//Когда запускаю фоновое задание с методом "СлужебныйМодуль.МетодРегламентногоЗадания1" +//@ЗапускаюФоновоеЗаданиеСМетодом(Парам01) +Процедура ЗапускаюФоновоеЗаданиеСМетодом(ИмяМетода) Экспорт + ДатаНачала = ТекущаяДата(); + ЗапускаюФоновоеЗаданиеСМетодомСервер(ИмяМетода); + ДобавитьОписаниеЗаданияПоИмениМетодаВКонтекст(ИмяМетода, ДатаНачала); +КонецПроцедуры + +&НаКлиенте +//И жду завершения фонового задания с методом "СлужебныйМодуль.МетодРегламентногоЗадания1" в течение 2 секунд +//@ЖдуЗавершенияФоновогоЗаданияСМетодомВТечениеСекунд(Парам01,Парам02) +Процедура ЖдуЗавершенияФоновогоЗаданияСМетодомВТечениеСекунд(ПарамИмяМетода, КолСекунд) Экспорт + Ванесса.ЗапретитьВыполнениеШагов(); + + ИмяМетода = ПарамИмяМетода; + КолСекундОжидания = КолСекунд; + ДатаНачалаОжидания = ТекущаяДата(); + + ПодключитьОбработчикОжидания("ОбработчикОжидания_Фоновые_ПоИмениМетода", 1); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервереБезКонтекста +Функция ВыполняюМетодРегламентногоЗаданияСИменемСервер(ИмяРегламентногоЗадания) + МетаЗадание = НайтиРегламентноеЗаданиеПоИмениСервер(ИмяРегламентногоЗадания); + ВыполнитьРегламентное(МетаЗадание); + Возврат МетаЗадание.Имя; +КонецФункции + +&НаСервереБезКонтекста +Функция НайтиРегламентноеЗаданиеПоИмениСервер(ИмяРегламентногоЗадания) + МетаЗадание = Метаданные.РегламентныеЗадания.Найти(ИмяРегламентногоЗадания); + Если МетаЗадание = Неопределено Тогда + ВызватьИсключение "Не найдено регламентное задание по имени " + ИмяРегламентногоЗадания; + КонецЕсли; + Возврат МетаЗадание; +КонецФункции + +&НаСервереБезКонтекста +Процедура ВыполнитьРегламентное(МетаЗадание) + Выполнить(МетаЗадание.ИмяМетода + "();"); +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ВыполняюМетодРегламентногоЗаданияПоСинонимуСервер(СинонимРегламентногоЗадания) + МетаЗадание = НайтиРегламентноеЗаданиеПоСинонимуСервер(СинонимРегламентногоЗадания); + ВыполнитьРегламентное(МетаЗадание); + Возврат МетаЗадание.Имя; +КонецФункции + +&НаСервереБезКонтекста +Функция НайтиРегламентноеЗаданиеПоСинонимуСервер(СинонимРегламентногоЗадания) + РегулярныеВыражения = ВнешниеОбработки.Создать("РегулярныеВыражения"); + Для каждого МетаЗадание Из Метаданные.РегламентныеЗадания Цикл + Если МетаЗадание.Синоним = СинонимРегламентногоЗадания + Или РегулярныеВыражения.СтрокаСоответствуетШаблону(МетаЗадание.Синоним, СинонимРегламентногоЗадания) Тогда + + Возврат МетаЗадание; + КонецЕсли; + КонецЦикла; + + ВызватьИсключение "Не найдено регламентное задание по синониму " + СинонимРегламентногоЗадания; +КонецФункции + +&НаСервереБезКонтекста +Функция НайтиИмяРегламентногоЗаданияПоСинонимуСервер(СинонимРегламентногоЗадания) + РегулярныеВыражения = ВнешниеОбработки.Создать("РегулярныеВыражения"); + Для каждого МетаЗадание Из Метаданные.РегламентныеЗадания Цикл + Если МетаЗадание.Синоним = СинонимРегламентногоЗадания + Или РегулярныеВыражения.СтрокаСоответствуетШаблону(МетаЗадание.Синоним, СинонимРегламентногоЗадания) Тогда + + Возврат МетаЗадание.Имя; + КонецЕсли; + КонецЦикла; + + ВызватьИсключение "Не найдено регламентное задание по синониму " + СинонимРегламентногоЗадания; +КонецФункции + +&НаСервереБезКонтекста +Функция ЗапускаюРегламентноеЗаданиеСИменемСервер(ИмяРегламентногоЗадания) Экспорт + МетаЗадание = НайтиРегламентноеЗаданиеПоИмениСервер(ИмяРегламентногоЗадания); + ФЗ = ФоновыеЗадания.Выполнить(МетаЗадание.ИмяМетода, Неопределено, МетаЗадание.Имя); + + Возврат МетаЗадание.Имя; +КонецФункции + +&НаСервереБезКонтекста +Функция ЗапускаюРегламентноеЗаданиеПоСинонимуСервер(СинонимРегламентногоЗадания) Экспорт + МетаЗадание = НайтиРегламентноеЗаданиеПоСинонимуСервер(СинонимРегламентногоЗадания); + ФЗ = ФоновыеЗадания.Выполнить(МетаЗадание.ИмяМетода, Неопределено, МетаЗадание.Имя); + Возврат МетаЗадание.Имя; +КонецФункции + +&НаСервереБезКонтекста +Процедура ЗапускаюФоновоеЗаданиеСМетодомСервер(ИмяМетода) Экспорт + ФЗ = ФоновыеЗадания.Выполнить(ИмяМетода, Неопределено); +КонецПроцедуры + +&НаКлиенте +Процедура ОбработчикОжидания_РегламентныеЗадания() + ИмяОбработчика = "ОбработчикОжидания_РегламентныеЗадания"; + + Попытка + ОписаниеЗадания = Контекст[КлючРегламентногоЗадания(ИмяРегламентногоЗадания)]; + Завершено = ФоновоеЗаданиеЗавершеноСервер(ИмяРегламентногоЗадания, ОписаниеЗадания); + Исключение + ОписаниеОшибки = ОписаниеОшибки(); + ОтключитьОбработчикОжидания(ИмяОбработчика); + Ванесса.ПродолжитьВыполнениеШагов(Истина, + Ванесса.СтрШаблон_("Возникла ошибка при ожидании выполнения фонового задания%1%2", Символы.ПС, ОписаниеОшибки)); + Возврат; + КонецПопытки; + + Если (ТекущаяДата() - ДатаНачалаОжидания) >= КолСекундОжидания Тогда + ОтключитьОбработчикОжидания(ИмяОбработчика); + Ванесса.ПродолжитьВыполнениеШагов(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОбработчикОжидания_Фоновые_ПоИмениМетода() + ИмяОбработчика = "ОбработчикОжидания_Фоновые_ПоИмениМетода"; + + Попытка + ОписаниеЗадания = Ванесса.ПолучитьЗначениеИзКонтекста(КлючФоновогоЗадания(ИмяМетода)); + Завершено = ФоновоеЗаданиеПоИмениМетодаЗавершеноСервер(ИмяМетода, ОписаниеЗадания); + Исключение + ОписаниеОшибки = ОписаниеОшибки(); + ОтключитьОбработчикОжидания(ИмяОбработчика); + Ванесса.ПродолжитьВыполнениеШагов(Истина, + Ванесса.СтрШаблон_("Возникла ошибка при ожидании выполнения фонового задания%1%2", Символы.ПС, ОписаниеОшибки)); + Возврат; + КонецПопытки; + + Если (ТекущаяДата() - ДатаНачалаОжидания) >= КолСекундОжидания Тогда + ОтключитьОбработчикОжидания(ИмяОбработчика); + Ванесса.ПродолжитьВыполнениеШагов(); + КонецЕсли; +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ФоновоеЗаданиеЗавершеноСервер(ИмяРегламентногоЗадания, ОписаниеЗадания) + РасшифровкаОшибки = "Имя регламентного задания - " + ОписаниеЗадания.Имя; + МетаЗадание = НайтиРегламентноеЗаданиеПоИмениСервер(ИмяРегламентногоЗадания); + Возврат ФоновоеЗаданиеЗавершено(МетаЗадание.ИмяМетода, ОписаниеЗадания, РасшифровкаОшибки); +КонецФункции + +&НаСервереБезКонтекста +Функция ФоновоеЗаданиеПоИмениМетодаЗавершеноСервер(ИмяМетода, ОписаниеЗадания) + РасшифровкаОшибки = "Имя метода для фонового задания - " + ОписаниеЗадания.ИмяМетода; + Возврат ФоновоеЗаданиеЗавершено(ИмяМетода, ОписаниеЗадания, РасшифровкаОшибки); +КонецФункции + +&НаСервереБезКонтекста +Функция ФоновоеЗаданиеЗавершено(ИмяМетода, ОписаниеЗадания, РасшифровкаОшибки) + МассивФоновых = НайтиФоновые(ИмяМетода, ОписаниеЗадания); + //ПоказатьДанныеФоновых(МассивФоновых); + Если МассивФоновых.Количество() = 0 Тогда + Возврат Истина; + ИначеЕсли МассивФоновых.Количество() > 1 Тогда //TODO вернуть + ВызватьИсключение "Количество фоновых заданий больше одного. " + РасшифровкаОшибки; + КонецЕсли; + + ФЗ = МассивФоновых[0]; + Если ФЗ.Состояние = СостояниеФоновогоЗадания.Активно Тогда + Возврат Ложь; + ИначеЕсли ФЗ.Состояние = СостояниеФоновогоЗадания.Завершено Тогда + Возврат Истина; + ИначеЕсли ФЗ.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда + ВызватьИсключение "Фоновое задание завершено аварийно. " + РасшифровкаОшибки; + ИначеЕсли ФЗ.Состояние = СостояниеФоновогоЗадания.Отменено Тогда + ВызватьИсключение "Фоновое задание завершено отменено. " + РасшифровкаОшибки; + КонецЕсли; +КонецФункции + +&НаСервереБезКонтекста +Функция НайтиФоновые(ИмяМетода, ОписаниеЗадания) + Отбор = Новый Структура("ИмяМетода,Начало", ИмяМетода, ОписаниеЗадания.Начало); + МассивФоновых = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + Возврат МассивФоновых; +КонецФункции + +&НаСервереБезКонтекста +Процедура ПоказатьДанныеФоновых(МассивФоновых) + Сообщить("Фоновые задания:"); + Индекс = 0; + Для каждого ФЗ Из МассивФоновых Цикл + Индекс = Индекс + 1; + Сообщить("№ " + Индекс); + Сообщить(" ИмяМетода " + ФЗ.ИмяМетода); + Сообщить(" Состояние " + ФЗ.Состояние); + Сообщить(" Начало " + ФЗ.Начало); + Сообщить(" Наименование " + ФЗ.Наименование); + Сообщить(" УникальныйИдентификатор " + ФЗ.УникальныйИдентификатор); + Сообщить(" Ключ " + ФЗ.Ключ); + Сообщить("---"); + КонецЦикла; +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ОтменяюВсеФоновыеЗаданияУКоторыхИмяМетодаОтРегламентногоЗаданияСИменемСервер(ИмяРегламентногоЗадания) Экспорт + МетаЗадание = НайтиРегламентноеЗаданиеПоИмениСервер(ИмяРегламентногоЗадания); + ОтменяюВсеФоновыеЗаданияПоИмениМетода(МетаЗадание.ИмяМетода); +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ОтменяюВсеФоновыеЗаданияУКоторыхИмяМетодаОтРегламентногоЗаданияСервер(СинонимРегламентногоЗадания) Экспорт + МетаЗадание = НайтиРегламентноеЗаданиеПоСинонимуСервер(СинонимРегламентногоЗадания); + ОтменяюВсеФоновыеЗаданияПоИмениМетода(МетаЗадание.ИмяМетода); +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ОтменяюВсеФоновыеЗаданияПоИмениМетода(ИмяМетода) Экспорт + Отбор = Новый Структура("ИмяМетода", ИмяМетода); + МассивФоновых = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + Для каждого ФЗ Из МассивФоновых Цикл + ФЗ.Отменить(); + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьОписаниеЗаданияВКонтекст(ИмяРегламентногоЗадания, ДатаНачала) + ОписаниеЗадания = Новый Структура; + ОписаниеЗадания.Вставить("Имя", ИмяРегламентногоЗадания); + ОписаниеЗадания.Вставить("Начало", ДатаНачала); + Контекст.Вставить(КлючРегламентногоЗадания(ИмяРегламентногоЗадания), ОписаниеЗадания); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьОписаниеЗаданияПоИмениМетодаВКонтекст(ИмяМетода, ДатаНачала) + ОписаниеЗадания = Новый Структура; + ОписаниеЗадания.Вставить("ИмяМетода", ИмяМетода); + ОписаниеЗадания.Вставить("Начало", ДатаНачала); + Ванесса.СохранитьЗначениеВКонтекст(КлючФоновогоЗадания(ИмяМетода), ОписаниеЗадания); +КонецПроцедуры + +&НаКлиенте +Функция КлючРегламентногоЗадания(Имя) + Возврат "ФоновоеЗадание_" + Имя; +КонецФункции + +&НаКлиенте +Функция КлючФоновогоЗадания(ИмяМетода) + Возврат "ФоновоеЗадание_ИмяМетода_" + ИмяМетода; +КонецФункции + +#КонецОбласти diff --git "a/features/libraries/\320\224\320\260\320\275\320\275\321\213\320\265/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\321\217.feature" "b/features/libraries/\320\224\320\260\320\275\320\275\321\213\320\265/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\321\217.feature" new file mode 100644 index 000000000..fa7beccbe --- /dev/null +++ "b/features/libraries/\320\224\320\260\320\275\320\275\321\213\320\265/\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\321\217.feature" @@ -0,0 +1,60 @@ +# language: ru +@Tree + +Функционал: Регламентные задания + Как разработчик + Я хочу управлять регламентными заданиями + Чтобы выполнять сложные бизнес-процессы + +Контекст: + Дано отменяю все фоновые задания, у которых имя метода от регламентного задания с именем "РегламентноеЗадание1" + Дано отменяю все фоновые задания, у которых имя метода от регламентного задания "Регламентное задание1" + Дано отменяю все фоновые задания, у которых имя метода "СлужебныйМодуль.МетодРегламентногоЗадания1" + Дано Я удаляю все элементы Справочника "ПростойСправочник" + +Сценарий: Простой запуск метода регламентного задания + + Когда выполняю метод регламентного задания с именем "РегламентноеЗадание1" + + Тогда в базе есть элементы справочника "ПростойСправочник" с указанными в таблице наименованиями + | Создано регламентным 1 | + +Сценарий: Простой запуск метода регламентного задания по синониму + + Когда выполняю метод регламентного задания "Регламентное задание1" + Тогда в базе есть элементы справочника "ПростойСправочник" с указанными в таблице наименованиями + | Создано регламентным 1 | + +Сценарий: Запуск регламентного задания по имени + + Когда запускаю регламентное задание с именем "РегламентноеЗадание1" + И жду завершения регламентного задания с именем "РегламентноеЗадание1" в течение 2 секунд + Тогда в базе есть элементы справочника "ПростойСправочник" с указанными в таблице наименованиями + | Создано регламентным 1 | + +Сценарий: Запуск регламентного задания по синониму + + Когда запускаю регламентное задание "Регламентное задание1" + И жду завершения регламентного задания "Регламентное задание1" в течение 2 секунд + Тогда в базе есть элементы справочника "ПростойСправочник" с указанными в таблице наименованиями + | Создано регламентным 1 | + +Сценарий: Простой запуск фонового задания по имени метода + + Когда запускаю фоновое задание с методом "СлужебныйМодуль.МетодРегламентногоЗадания1" + И жду завершения фонового задания с методом "СлужебныйМодуль.МетодРегламентногоЗадания1" в течение 2 секунд + + Тогда в базе есть элементы справочника "ПростойСправочник" с указанными в таблице наименованиями + | Создано регламентным 1 | + +Сценарий: Негативный поиск фонового задания по имени метода + + Тогда Проверяю шаги на Исключение: + | Когда запускаю фоновое задание с методом "НесуществующийМодуль.МетодРегламентногоЗадания1" | + # | 'И жду завершения фонового задания с методом "НесуществующийМодуль.МетодРегламентногоЗадания1" в течение 1 секунд'| + +Сценарий: Негативный поиск регламентного задания по имени + + Тогда Проверяю шаги на Исключение: + | Когда запускаю регламентное задание с именем "НесуществующееРегламентноеЗадание1" | + # | 'И жду завершения регламентного задания с именем "НесуществующееРегламентноеЗадание1" в течение 1 секунд' | diff --git "a/lib/CF/83NoSync/CommonModule.\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271\320\234\320\276\320\264\321\203\320\273\321\214.Module.txt" "b/lib/CF/83NoSync/CommonModule.\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271\320\234\320\276\320\264\321\203\320\273\321\214.Module.txt" index 7578921bd..269face40 100644 --- "a/lib/CF/83NoSync/CommonModule.\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271\320\234\320\276\320\264\321\203\320\273\321\214.Module.txt" +++ "b/lib/CF/83NoSync/CommonModule.\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271\320\234\320\276\320\264\321\203\320\273\321\214.Module.txt" @@ -17,4 +17,16 @@ Функция ПутьКVB() Экспорт Возврат Константы.ПутьКVanessaADD.Получить(); -КонецФункции \ No newline at end of file +КонецФункции + +Процедура МетодРегламентногоЗадания1() Экспорт + СоздатьЭлементПростогоСправочника("Создано регламентным 1"); +КонецПроцедуры + +Функция СоздатьЭлементПростогоСправочника(Наименование) + Спр = Справочники.ПростойСправочник.СоздатьЭлемент(); + Спр.Наименование = Наименование; + Спр.РеквизитБулево = Истина; + Спр.Записать(); +КонецФункции + diff --git a/lib/CF/83NoSync/Configuration.xml b/lib/CF/83NoSync/Configuration.xml index e02addbc9..34b993644 100644 --- a/lib/CF/83NoSync/Configuration.xml +++ b/lib/CF/83NoSync/Configuration.xml @@ -129,6 +129,7 @@ Админ НедоступнаяРоль СлужебныйМодуль + РегламентноеЗадание1 ОбщаяКомандаДляСправочника1 ПутьКVanessaADD СлужебныйСчетчик diff --git "a/lib/CF/83NoSync/ScheduledJob.\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\320\276\320\265\320\227\320\260\320\264\320\260\320\275\320\270\320\2651.xml" "b/lib/CF/83NoSync/ScheduledJob.\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\320\276\320\265\320\227\320\260\320\264\320\260\320\275\320\270\320\2651.xml" new file mode 100644 index 000000000..e9dd3b177 --- /dev/null +++ "b/lib/CF/83NoSync/ScheduledJob.\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\320\276\320\265\320\227\320\260\320\264\320\260\320\275\320\270\320\2651.xml" @@ -0,0 +1,22 @@ + + + + + РегламентноеЗадание1 + + + ru + Регламентное задание1 + + + + CommonModule.СлужебныйМодуль.МетодРегламентногоЗадания1 + + + false + false + 3 + 10 + + + \ No newline at end of file