gifts2017

Универсальное регламентное задание

Опубликовал Ilya Baykov (Ilyabaykov) в раздел Программирование - Практика программирования

Простое решение, позволяющее на лету создавать регламентные задания.

Когда-то давно видел что-то подобное, сейчас стал искать - не нашел, потому сделал свое.

 

Универсальная подсистема регламентных заданий

Позволяет выполнять в качестве регламентного задания экспортные процедуры общих модулей, встроенные обработки и внешние обработки.

Интеграция

1. объеденить с конфигурацией

2. Для реквизита "ВнешняяОбработка" справочника "РегламентныеЗадания" установить тип "Внешние обработки"

3. Если внешняя обработка хранится в реквизите, отличном от "ХранилищеВнешнейОбработки" поменять в процедуре "ВыполнитьРегЗаданиеПоНастройке" общего модуля и в процедуре "ЗаполнитьСписокРеквизитов" формы элемента справочника создание внешней обработки

Настройка базы

После интеграции необходимо настроить выполенение основного рег. задания - "УниверсальноеРегламентноеЗадание" именно оно будет вызывать все задания, созданные на пользовательском уровне.

Настройка регламентных заданий

Задания создаются на пользовательском уровне.

Для каждого задания указывается:

Активность - выполняются только активные задания

Расписание - аналогично обычным рег. заданиям. Важно! Настройки повторов при аварийном завершении в настоящей версии не отрабатываются и не учитываются

Тип выполняемого задания - Процедура, Обработка, Внешняя обработка

Выполняемое действие - ссылка на обработку или внешнюю обработку, не заполняется для действия "Процедура"

Выполняемый метод - для типа действия "Процедура" - имя процедуры общего модуля с указанием общего модуля, для обработки - имя экспортной процедуры, размещенной в модуле обработки. Имя процедуры указывается без скобок, т.е. только имя.

Табличная часть "Параметры Метода" - содержит список параметров вызываемого метода. Метод вызывается с передачей всех параметров, указанных в данной таблице. Заполняется вручную, количество строк должно совпадать с количеством параметров выполняемого метода.

Табличная часть "ПараметрыОбработки" - содержит список реквизитов обработки, заполняется автоматическ после выбора обработки.

На второй закладке содержится лог выполнения данного задания. При двойном клике по записе лога открывается табличный документ-результат выполнения обработки, в случае, если такой результат формируется, так же см. ниже.

Описание внешнего интерфейса

По окончании работы обратоток принимаются экспортные переменные модуля обработки "РезультатВыполненияСтрокой" и "РезультатВыполненияТаблицей" - содержащие соответственно строковое описание результата работы и табличный документ.

При выполнении процедуры эти переменные так-же доступны для записи. Т.е. текст

РезультатВыполненияСтрокой="Не найден файл обмена"

в тексте процедуры позволит передать это сообщение в подсистему.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Архив содержит CF и простейшую обратотку
.zip 47,31Kb
08.08.13
119
.zip 47,31Kb 119 Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Епрст (Ёпрст) 19.06.13 10:01
Хреново, что на 8.1 работать не будет, там внешние обработки не создать на сервере..
2. Никита Грызлов (nixel) 19.06.13 10:54
(1) Ёпрст, тут еще формы управляемые. в любом случае работать не будет =)

Вопрос к автору: от чего отталкивались? от БСПшной подсистемы с вырезанием лишнего? или своя разработка?
3. Ilya Baykov (Ilyabaykov) 19.06.13 12:13
(2) nixel, разработка своя, собственно задача была - повесить на регламент внешнюю обработку, в БСП, честно говоря, даже не посмотрел, только после Вашего комментария заглянул туда.
4. Maxim2012 (ZhokhovM) 19.06.13 13:52
Добрый день! Добавьте, пожалуйста, в конфу примерчик встроенной обработки или хотя бы внешнюю обработку. Буду рад!
5. Алексей Роза (DoctorRoza) 19.06.13 19:59
Туманное описание, зато звучит очень интригующе! Опишите детально, что в сф-нике, пример обработки, как будет работать в серверном и файловом варианте.
6. Ilya Baykov (Ilyabaykov) 21.06.13 00:20
(4) Maxim2012, Обновил, добавил простейшую обработку. Так-же добавил ее текст в картинки
7. Ilya Baykov (Ilyabaykov) 21.06.13 00:21
(5) DoctorRoza, эм... что именно туманно? добавил скрины
8. aspirator 23 (aspirator23) 22.06.13 15:56
Очень знакомо. Делал подобное, но правда дальше управления внешними обработками не дошел.
Здесь конечно более универсально.
9. Алекс Климанов (fuxic) 24.06.13 13:05
Заставить решать эту задачу с помощью этого функционала для меня было легче и проще, чем экспортировать из БСП дополнительные отчеты и обработки.

Err:
1. выполнить задание в форме - выдавать сообщение о необходимости записать объект, поскольку метод работает по ссылке
2. Залания <> Задания - везде бяка
3. при настройке периода обновление строки представления не происходит
тестирую дальше
10. Алекс Климанов (fuxic) 24.06.13 13:11
1. АТ_ПоследнееУспешноеВыполениеРеглЗаданий - Выполение?
2. регистр АТ_РезультатВыполненияРегламентныхЗаданий - заменить основную форму
11. Алекс Климанов (fuxic) 24.06.13 13:20
Отбор = НаборЗаписей.Отбор.Найти("РегламентноеЗадание");
Отбор.Использование = ИСТИНА;
Отбор.ВидСравнения = ВидСравнения.Равно;
Отбор.Значение = Задание;

Зачем "найти"? я перфекционист походу :(

Отбор.РегламентноеЗадание.Установить(Задание);
12. Ilya Baykov (Ilyabaykov) 24.06.13 13:45
(11) fuxic, так автоподстановка работает :D, по остальным - спасибо, поправлю обновлю. Ещё в форме элемента справочника "НоваяСтрока.ИмяПараметра = Реквизит.Синоним;" на "НоваяСтрока.ИмяПараметра = Реквизит.Имя;" поменять надо, тоже сделаю.
13. Вадим Кравченко (MK) 15.07.13 09:08
На тестовой базе все ок было (правда переделал под себя многое), а вот на рабочей сразу пара багов вылезла:
1. Неправильно работает отбор заданий к выполнению - если задание ни разу не выполнялось, в отбор оно не попадает. Вместо
	                      |ГДЕ
	                      |	РегламентныеЗадания.Активное
	                      |	И НЕ ПоследнееУспешноеВыполнение.Выполняется
нужно использовать что-то вроде
	                      |ГДЕ
	                      |	РегламентныеЗадания.Активное
	                      |	И НЕ ЕСТЬNULL(ПоследнееУспешноеВыполнение.Выполняется,ЛОЖЬ)

2. Определение необходимости выполнения задания - тоже не так работает, назначил задание на однократное выполнение каждый день (каждый день; с 7:00:00 один раз в день) - выполняется с 7:00 ежеминутно. Причина - в этой строке:
	НеобходимоВыполнитьЗадание = Расписание.ТребуетсяВыполнение(,,ВыборкаЗапроса.ДатаПоследнегоВыполнения);

Не используется второй параметр - ДатаНачалаПоследнегоЗапуска, а при такой настройке расписания как у меня, он нужен. Я обошелся изменением этой строки на такую:
	НеобходимоВыполнитьЗадание = Расписание.ТребуетсяВыполнение(,ВыборкаЗапроса.ДатаПоследнегоВыполнения,ВыборкаЗапроса.ДатаПоследнегоВыполнения);
Не уверен, что всегда будет работать правильно, но для моих задач хватит.

А вообще идея и реализация мне нравится!
14. Ilya Baykov (Ilyabaykov) 08.08.13 16:24
(13) MK, Спасибо, действительно, признак выполнения добавил в последний момент и как следует не оттестировал. Исправил, выложил исправленную версию.
15. Артём Артёмов (TeMochkiN) 30.12.13 14:36
Удобная вещь. У самого всё руки не доходили это сделать xD
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа