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 @@
+
+
+
+
\ 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 @@
+
+
\ 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
+ 3
+ 10
+
+
+
\ No newline at end of file