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

Публикация № 153090

Администрирование - Системное

96
Удобный блок, который позволяет создавать новые фоновые задания без постоянного вмешательства в конфигурацию. Создаете внешнюю обработку, подгружаете ее в справочник внешних обработок, выбираете ее через консоль заданий (интерфейс: обычные и управляемые формы)


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

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

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

 

Данная форма будет работать в любой конфигурации на управляемых или обычных формах.

Данный консоль заданий будет работрать в любой конфигурации где имеется справочник ВнешниеОбработки и реквизит ХранилищеВнешнейОбработки с типом ХранилищеЗначения (это типовые конфигурации БП 2.0, УПП 2.5, 3.1...), либо справочник ДополнительныеОтчетыИОбработки и реквизит ХранилищеОбработки  с типом ХранилищеЗначения (это конфигурация БП 3.0).

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

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

96

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

Наименование Файл Версия Размер
Консоль заданий с выбором внешних обработок (УФ/ОФ)
.epf 45,16Kb
19.03.19
1
.epf 1.1.2 45,16Kb 1 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. gucci76 341 26.09.12 11:11 Сейчас в теме
За качественное оформление уже достойно плюса!
Спасибо.
2. bobaG 62 26.09.12 11:39 Сейчас в теме
3. EmpireSer 26.09.12 23:32 Сейчас в теме
А можно выложить не только обработку, а архив с обработкой и картинками настройки (можно их и в doc оформить)?
4. iones 178 27.09.12 10:30 Сейчас в теме
(3) EmpireSer, а что Вам мешает сохранить картинки и составить инструкцию самим?
5. vladismi 161 28.09.12 10:28 Сейчас в теме
6. alexey_1c 28.09.12 10:31 Сейчас в теме
7. fishca 1151 28.09.12 10:45 Сейчас в теме
8. iones 178 01.10.12 14:07 Сейчас в теме
Пожалуйста =)
пользуйтесь на здоровье!
Только одно хочу добавить, во внешней обработке нужно создавать форму, обязательно. Иначе при подгрузке в во внешние обработки, будет ругаться.
9. Raminus 01.10.12 14:46 Сейчас в теме
хорошо оформлено, зачет! :)
10. iones 178 03.10.12 12:00 Сейчас в теме
И еще...учтите что при подвязке внешней обработки в регламентные задачи, в результате не отрабатываются некоторые команды, т.е. завершится с ошибкой!
Например:
Предупредить(), НайтиФайлы(), Вопрос(), вроде Сообщить() и т.п.
Это ограничение самой 1С, то что выполняется строго на клиенте.
22. yuraos 964 02.04.13 13:45 Сейчас в теме
(10)
Плюс за смекалку!
---
Вызов
 Сообщить()
на стороне сервера исключения не вызывает - просто игнорися.

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

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

Правда более правомерно сказать "а кому это надо"?
У планировщика глаз нет!
:)
23. yuraos 964 02.04.13 14:03 Сейчас в теме
(22)
мое замечание - только для обычного приложения!
в управляемом все более занятно
...
Из-за задницы с инкапсуляцией функционала для переиспользования:
Один из старых способов (еще с 8.0) - размещать функционал в модуле объекта
с доступом через Объект
Новый способ (появился в 8.2) - размещать функционал в модуле менеджера объекта
с доступом через МенеджерОбъекта
Ни то - ни другое на стороне клиента - НЕ ДОСТУПНО!
---
Поэтому приходится все выполнять на стороне сервера,
даже если обращение к базе данных не требуется.
:)
11. Кебабыч 20 12.12.12 17:10 Сейчас в теме
Спасибо, реально полезная обработка. Удивительно что подобные очень удобные мелочи не включаются в стандарт системы...
12. TrinitronOTV 19.12.12 06:29 Сейчас в теме
спасибо автору за данный труд, забираю себе для работы
13. isn 13 18.01.13 12:34 Сейчас в теме
Спасибо автору за данную разработку. Очень интересная идея, попробую приобщить к своей работе.
14. iones 178 18.01.13 15:32 Сейчас в теме
Пользуйтесь с удовольствием!
Прост когда-то передо мной также стояла задача усовершенствовать фоновую задачу, менять параметры, добавлять некие условия. Каждый раз приходилось вмешиваться в конфигурацию, в результате родилась идея подключения внешней обработки.
15. dyak84 21.02.13 19:41 Сейчас в теме
Спасибо за идею и за работу. автор подскажите ваша обработка будет работать с УТ для украины типовой
16. Alex1c 16 28.02.13 23:23 Сейчас в теме
Откуда на 12 скрине берется форма для добавления регламентного задания для внешней обработки?
SirYozha; +1 Ответить
17. iones 178 04.03.13 11:13 Сейчас в теме
(16) Alex1c, если внимательно всмотреться в скрины, то это обработка создается Вами, и загружается в базу, во внешние обработки.
Вроде подробные сканы, а вопросы остаются... =))
18. Alex1c 16 05.03.13 20:06 Сейчас в теме
Свою обработку я с закрытыми глазами узнаю )) Речь идет о форме с заголовком "Новое регламентное задание" в которой предлагается выбрать внешнюю обработку и установить для нее расписание.
Попробовал сделать все по инструкции. Не работает. В журнале ошибка "Количество фактических параметров фонового задания не совпадает с количеством параметров метода фонового задания. ". Ошибка возникает при вызове общего модуля с параметрами. Если передача параметров не предусмотрена, модуль вызывается. В качестве параметра вы передаете код и затем ищете обработку по коду. Каким образом вы передаете параметр "код" в общий модуль?
19. Alex1c 16 06.03.13 00:58 Сейчас в теме
С параметром так и не разобрался. Для своей задачи чуть упростил. Сделал два регламентных задания и соответственно два общих модуля. Одно задание выполняется раз в 10 минут, второе один раз в день. В общих модулях не используется поиск по передаваемому в параметре коду обработки, а выполняются соответственно все обработки из папки "Автомат 10 минут" и из папки "Автомат 1 день". Для генерации и отправки ежедневных отчетов папка "Автомат 1 день". Сколько в ней обработок , столько и будет рассылаться. Для синхронизации со сторонней базой вторая папка с более частым запуском. За идею плюс поставил ))
20. eaKozlova 2 02.04.13 11:07 Сейчас в теме
Большое спасибо за идею и экономию времени. Плюс.
21. irbush 02.04.13 12:28 Сейчас в теме
Спасибо большое очень облегчит работу с заданиями.
24. SpartakM 54 12.04.13 05:02 Сейчас в теме
Не совсем понял, откуда взялась форма регламентного задания, где можно указать, какую конкретно обработку запускать?
можете пояснить?
25. Alex1c 16 12.04.13 18:26 Сейчас в теме
(24)+1 Я в (16) спрашивал, но ответ автора не пояснил вопрос
26. SpartakM 54 12.04.13 20:12 Сейчас в теме
(25)обработка, которая создает регламентные задания, находится в файле статьи.
можешь скачать.....
27. iones 178 16.04.13 15:00 Сейчас в теме
(25) Alex1c, обработка добавления нового, или редактирования существующего фонового задания (только с прикрепленной внешней обработкой) прикреплена к данной статье.
Светлый ум; +1 Ответить
28. kser87 1828 31.10.13 15:34 Сейчас в теме
Библиотека стандартных подсистем. Такая хорошая штука. И почему никто туда не смотрит?

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

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

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

ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяОбработки);
ВнешняяОбработка.ОбработатьУведомление(Источник, СсылкаНаВнешнююОбработку);
Прикрепленные файлы:
vsozansky; sanfoto; iones; МимохожийОднако; +4 Ответить
32. iones 178 30.01.14 14:37 Сейчас в теме
(29) zhloby3k, спасибо за подсказку! Подправил =)
30. Abadonna 3824 03.11.13 04:30 Сейчас в теме
(0)
Каждый раз лезть в конфигуратор, и вручную добавлять новое регламентное задание, как-то не удобно.

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