gifts2017

Регламентные/фоновые задачи с запуском внешней обработки

Опубликовал Иван (iones) в раздел Администрирование - Системное

Частенько, по крайней мере мне, требуется настроить очередную фоновую задачу, которая будет по определенному расписанию выполнять ту или иную функцию.


Каждый раз лезть в конфигуратор, и вручную добавлять новое регламентное задание, как-то не удобно.
Вот и возникла мысль реализовать функционал подключения внешних обработок (хранящихся в справочнике Внешние обработки), в новой фоновой/регламентной задаче.

Процедура в Глобальном модуле мод_ОбщийМодуль

Процедура мод_ВнешняяОбработка(Код=Неопределено) Экспорт
       Если Код=Неопределено Тогда
              ЗаписьЖурналаРегистрации("Регламентное задание. Внешняя обработка: ОШИБКА! Не правильно указан параметр '"+Код+"'", УровеньЖурналаРегистрации.Предупреждение);
       Иначе
              СсылкаНаВнешнююОбработку = Справочники.ВнешниеОбработки.НайтиПоКоду(Код);
              Если СсылкаНаВнешнююОбработку.Пустая() Тогда
                     ЗаписьЖурналаРегистрации("Регламентное задание. Внешняя обработка: ОШИБКА! Внешняя обработка по коду '"+Код+"' не найдена", УровеньЖурналаРегистрации.Предупреждение);
              Иначе 
                     ДвоичныеДанные = СсылкаНаВнешнююОбработку.ХранилищеВнешнейОбработки.Получить(); 
                     Если ДвоичныеДанные = Неопределено Тогда
                            ЗаписьЖурналаРегистрации("Регламентное задание. Внешняя обработка: ОШИБКА! Внешняя обработка '"+СсылкаНаВнешнююОбработку+"' не имеет двоичных данных", УровеньЖурналаРегистрации.Предупреждение);
                     Иначе
                            Попытка
                                  АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
                                  ИмяОбработки = ВнешниеОбработки.Подключить(АдресВоВременномХранилище, , Ложь);
                                  Если СсылкаНаВнешнююОбработку.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Обработка Тогда
                                          внОбработка = ВнешниеОбработки.Создать(ИмяОбработки);
                                  Иначе
                                          внОбработка = ВнешниеОтчеты.Создать(ИмяОбработки);
                                  КонецЕсли;
                                   Попытка
                                          внОбработка.ВыполнитьЗадание();
                                   Исключение
                                          ЗаписьЖурналаРегистрации("Регламентное задание. Внешняя обработка: ОШИБКА! Внешняя обработка '"+СсылкаНаВнешнююОбработку+"' должна иметь в модуле экспортную процедуру 'ВыполнитьЗадание() Экспорт'", УровеньЖурналаРегистрации.Предупреждение);
                                   КонецПопытки; 
                            Исключение 
                                   ЗаписьЖурналаРегистрации("Регламентное задание. Внешняя обработка: ОШИБКА! '"+ОписаниеОшибки()+"'", УровеньЖурналаРегистрации.Предупреждение);
                            КонецПопытки;
                     КонецЕсли;
              КонецЕсли;
       КонецЕсли; 
КонецПроцедуры


Далее по картинкам:

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

Наименование Файл Версия Размер
мод_СозданиеРегламентированногоЗадания.epf 225
.epf 12,16Kb
21.09.12
225
.epf 12,16Kb Скачать

См. также

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

Комментарии

1. Илья (gucci76) 26.09.12 11:11
За качественное оформление уже достойно плюса!
Спасибо.
2. BobaG (bobaG) 26.09.12 11:39
3. Сергей Вн (EmpireSer) 26.09.12 23:32
А можно выложить не только обработку, а архив с обработкой и картинками настройки (можно их и в doc оформить)?
4. Иван (iones) 27.09.12 10:30
(3) EmpireSer, а что Вам мешает сохранить картинки и составить инструкцию самим?
5. Владимир (vladismi) 28.09.12 10:28
6. Alexey Osipov (alexey_1c) 28.09.12 10:31
7. Сергей Рудаков (fishca) 28.09.12 10:45
8. Иван (iones) 01.10.12 14:07
Пожалуйста =)
пользуйтесь на здоровье!
Только одно хочу добавить, во внешней обработке нужно создавать форму, обязательно. Иначе при подгрузке в во внешние обработки, будет ругаться.
9. Роман (Raminus) 01.10.12 14:46
хорошо оформлено, зачет! :)
10. Иван (iones) 03.10.12 12:00
И еще...учтите что при подвязке внешней обработки в регламентные задачи, в результате не отрабатываются некоторые команды, т.е. завершится с ошибкой!
Например:
Предупредить(), НайтиФайлы(), Вопрос(), вроде Сообщить() и т.п.
Это ограничение самой 1С, то что выполняется строго на клиенте.
11. Дмитрий Наветный (Кебабыч) 12.12.12 17:10
Спасибо, реально полезная обработка. Удивительно что подобные очень удобные мелочи не включаются в стандарт системы...
12. Александр Лыткин (TrinitronOTV) 19.12.12 06:29
спасибо автору за данный труд, забираю себе для работы
13. isn Игнатьев (isn) 18.01.13 12:34
Спасибо автору за данную разработку. Очень интересная идея, попробую приобщить к своей работе.
14. Иван (iones) 18.01.13 15:32
Пользуйтесь с удовольствием!
Прост когда-то передо мной также стояла задача усовершенствовать фоновую задачу, менять параметры, добавлять некие условия. Каждый раз приходилось вмешиваться в конфигурацию, в результате родилась идея подключения внешней обработки.
15. andrey dyak (dyak84) 21.02.13 19:41
Спасибо за идею и за работу. автор подскажите ваша обработка будет работать с УТ для украины типовой
16. Алексей (Alex1c) 28.02.13 23:23
Откуда на 12 скрине берется форма для добавления регламентного задания для внешней обработки?
17. Иван (iones) 04.03.13 11:13
(16) Alex1c, если внимательно всмотреться в скрины, то это обработка создается Вами, и загружается в базу, во внешние обработки.
Вроде подробные сканы, а вопросы остаются... =))
18. Алексей (Alex1c) 05.03.13 20:06
Свою обработку я с закрытыми глазами узнаю )) Речь идет о форме с заголовком "Новое регламентное задание" в которой предлагается выбрать внешнюю обработку и установить для нее расписание.
Попробовал сделать все по инструкции. Не работает. В журнале ошибка "Количество фактических параметров фонового задания не совпадает с количеством параметров метода фонового задания. ". Ошибка возникает при вызове общего модуля с параметрами. Если передача параметров не предусмотрена, модуль вызывается. В качестве параметра вы передаете код и затем ищете обработку по коду. Каким образом вы передаете параметр "код" в общий модуль?
19. Алексей (Alex1c) 06.03.13 00:58
С параметром так и не разобрался. Для своей задачи чуть упростил. Сделал два регламентных задания и соответственно два общих модуля. Одно задание выполняется раз в 10 минут, второе один раз в день. В общих модулях не используется поиск по передаваемому в параметре коду обработки, а выполняются соответственно все обработки из папки "Автомат 10 минут" и из папки "Автомат 1 день". Для генерации и отправки ежедневных отчетов папка "Автомат 1 день". Сколько в ней обработок , столько и будет рассылаться. Для синхронизации со сторонней базой вторая папка с более частым запуском. За идею плюс поставил ))
20. Елена Козлова (eaKozlova) 02.04.13 11:07
Большое спасибо за идею и экономию времени. Плюс.
21. Ирина (irbush) 02.04.13 12:28
Спасибо большое очень облегчит работу с заданиями.
22. Юрий Осипов (yuraos) 02.04.13 13:45
(10) iones,
Плюс за смекалку!
---
Вызов
 Сообщить()
на стороне сервера исключения не вызывает - просто игнорися.

Остальное верно для клиент-серверной базы, где задания крутятся на сервере 1С.

Для файловой базы задания крутятся в отдельной клиентской сессии, поэтому,
я полагаю, есть возможность использовать указанные "интерактивные" функции.

Правда более правомерно сказать "а кому это надо"?
У планировщика глаз нет!
:)
23. Юрий Осипов (yuraos) 02.04.13 14:03
(22)
мое замечание - только для обычного приложения!
в управляемом все более занятно
...
Из-за задницы с инкапсуляцией функционала для переиспользования:
Один из старых способов (еще с 8.0) - размещать функционал в модуле объекта
с доступом через Объект
Новый способ (появился в 8.2) - размещать функционал в модуле менеджера объекта
с доступом через МенеджерОбъекта
Ни то - ни другое на стороне клиента - НЕ ДОСТУПНО!
---
Поэтому приходится все выполнять на стороне сервера,
даже если обращение к базе данных не требуется.
:)
24. Жека Moscow (SpartakM) 12.04.13 05:02
Не совсем понял, откуда взялась форма регламентного задания, где можно указать, какую конкретно обработку запускать?
можете пояснить?
25. Алексей (Alex1c) 12.04.13 18:26
(24)+1 Я в (16) спрашивал, но ответ автора не пояснил вопрос
26. Жека Moscow (SpartakM) 12.04.13 20:12
(25)обработка, которая создает регламентные задания, находится в файле статьи.
можешь скачать.....
27. Иван (iones) 16.04.13 15:00
(25) Alex1c, обработка добавления нового, или редактирования существующего фонового задания (только с прикрепленной внешней обработкой) прикреплена к данной статье.
Светлый ум; +1 Ответить
28. Андрей Волин (kser87) 31.10.13 15:34
Библиотека стандартных подсистем. Такая хорошая штука. И почему никто туда не смотрит?

Подсистема "Дополнительные отчеты и обработки"
Подсистема "Регламентные и фоновые задания"

Взял, да скопировал в свою конфу. И делов-то.
29. Георгий Георгий (zhloby3k) 01.11.13 14:25
Как раз недавно избавлялись от создания временных файлов при создании внешних обработок в фоновых заданиях.
Получилось как-то так:

 
НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(СсылкаНаВнешнююОбработку, "ХранилищеОбработки");
ИмяОбработки = ВнешниеОбработки.Подключить(НавигационнаяСсылка, Имя, Ложь);

ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяОбработки);
ВнешняяОбработка.ОбработатьУведомление(Источник, СсылкаНаВнешнююОбработку);
...Показать Скрыть
Прикрепленные файлы:
sanfoto; iones; МимохожийОднако; +3 Ответить 1
30. Аркадий Кучер (Abadonna) 03.11.13 04:30
(0)
Каждый раз лезть в конфигуратор, и вручную добавлять новое регламентное задание, как-то не удобно.

Пару лет назад сделал по другому, и никаких внешних обработок:
Универсальное регламентное задание
alex-l19041; МимохожийОднако; vkr; +3 Ответить
31. Lemkus Смирноов (Lemkus) 05.11.13 13:01
Часто такая задача возникает, когда нельзя менять конфигурацию.
Для такого случая предложенное решение не подходит.
Мне больше понравилась оригинальная идея, предложенная в это статье http://infostart.ru/public/151693/
32. Иван (iones) 30.01.14 14:37
(29) zhloby3k, спасибо за подсказку! Подправил =)
33. Сергей Давыдяк (podzemelchik) 26.05.14 15:00
Подскажите пожалуйста, как происходит заполнение параметра процедуры "мод_ВнешняяОбработка"?
34. Иван (iones) 19.09.14 17:18
(33) podzemelchik, присмотритесь повнимательнее к скрину 6.
Создается новая регламентная задача, и указывается процедура мод_ВнешняяОбработка.
В данную обработку передается Код элемента справочника Внешние обработки.
А как создать новую фоновую задачу, обработка во вложении.
35. Белка (Белка13) 30.09.14 15:51
Создала:Регл.задан -"мод_ВнешняяОбработка" и ОбщийМодуль-"мод_ОбщийМодуль"!
Закрепила обработку.( В модуле ______Процедура ВыполнитьЗадание() Экспорт)
Запустила "Регламентные и фон. задания"!
Фон.задания: Состояние= Задание выполнено
Но обработка не отработала! Хотя с формы по кнопке--- отлично проходит!
Что может быть?
36. Вика Козлова (natarezn) 25.06.15 08:47
Хочется автору сказать спасибо! отпринтскринила все ! боюсь забыть где это . пишу сейчас обработку под регламент :)
37. Константин Куликов (Светлый ум) 28.10.15 08:44
Скорость выполнения фонового задания (для обычной обработки с экспортной процедурой ) была значительно ниже, чем вызов процедуру обработки bat файлом.
пример:
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа