gifts2017

Запуск обработок по расписанию, не меняя конфигурации

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

Почти перед каждым вставала задача запуска некой обработки по расписанию (читай регламентное задание) - но добавление нового регламентного задания в конф нет возможности. Тогда подойдет этот механизм.

Кому не итересно читать дальше, суть механизма:

Все построено на обмене. Создается обмен данными, по ПРАВИЛАМ!!!. Добавляется правила, у которых в событии ПослеЗагрузкиПравилОбмена создается обработка и вызывается экпортная процедура. А в обработоке чего душа желает. Вот.

Теперь по порядку:

1. Добавляем настройку:

Обмен

 В краце по полям:

Наименование - понятно

Узел                 - не принципиально

Тип обмена      - Обмен через файловый ресурс (с другими не пробывал)

Каталог            - При обменение через файловый ресурс, в этот каталог будут валится сообщения обмена.

Все остальные поля не принципиальны.

 

2. Вобщем то сами правила. - В них вся соль :)

 

'

'2.01
'4279b494-5374-4cb7-964a-a93a7171dfcf
'Отчет По Дебиторке
'2012-03-02T20:23:53
'<Источник ВерсияПлатформы="8.0" ВерсияКонфигурации="1.3.22.1" СинонимКонфигурации="Управление производственным предприятием, редакция 1.3">УправлениеПроизводственнымПредприятием
'<Приемник ВерсияПлатформы="8.0" ВерсияКонфигурации="1.3.22.1" СинонимКонфигурации="Управление производственным предприятием, редакция 1.3">УправлениеПроизводственнымПредприятием
'

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


КодОбработки = "100000009";

ИмяСобытия = "Автоотчет";

Ссылка = Справочники.ВнешниеОбработки.НайтиПоКоду(КодОбработки);

Если НЕ
Ссылка.Пустая() Тогда

    Попытка

       
ИмяФайла = ПолучитьИмяВременногоФайла();

       
ДвоичныеДанные = Ссылка.ХранилищеВнешнейОбработки.Получить();

       
ДвоичныеДанные.Записать(ИмяФайла);

       
ВнешнаяОбработка = ВнешниеОбработки.Создать(ИмяФайла, Ложь); // БезопасныРежим ложь, иначе файл не создаст

       
ВнешнаяОбработка.Тест(); //Эскпортная функция/процедура в модуле обработки


       
//Ответ = ВнешнаяОбработка.Тест(); - Это если необходимо, что то возвращать

        //Если Ответ Тогда


        // ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация, , ,"Отчет выполнен успешно.");


        //Иначе


        // ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , ,"Ошибка формирования и отправки отчета.");


        //КонецЕсли;

   
Исключение

       
ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , ,"Ошибка запуска обработки.");

    КонецПопытки;

    //
СтандартнаяОбработка = Ложь;

Иначе

   
ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , ,"Не найдена обработка с кодом " + КодОбработки);

КонецЕсли;

'
'
'
'
'
'
'
'

'

 Эти правила необходимо загрузить в обмен (кнопочка открыть и записать :))

3. Далее необходимо настроить запуск обмена:

Вкалдка "Автоматический обмен". Доавбялем настройку. Ставим расписание запуска. ВАЖНЫЙ МОМЕНТ: В выполняемых действиях (второй прямоугольник на скрине ниже) необходимо добавить выгрузку данных.

Настройка обмена


4. Про обработку: Тут никаких особенностей нет. Важно понимать, где будет выполнятся процедура сервер/клиент - Вобщем использывать провильные методы.

 В итоге: По расписанию запускается выполнение обмена. Грузятнся правила, там событие... Обработка ... Выгружать нечего. В Каталог калдется файл сообщения обмена.

Данный механизм прекрасно работает в УПП (1_3_20_1 и выше) и БП (2_0_30_8 и выше). По сути будет работать в любой типовой конфе, где есть обмены.

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

Наименование Файл Версия Размер
Правила для загрузки с диска 114
.xml 2,12Kb
13.09.12
114
.xml 2,12Kb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение
Комментарии
1. Konstantin Konstantin (KonstB) 13.09.12 13:57
Что-то криво правила разместились(пункт 2), отвались шапка и подвал хмл. Ниже все в txt.
2. alex_japanese_student (Alex_Japanese_Student) 13.09.12 15:30
забавно придумано, плюсанул за креатив
3. Владимир (vladismi) 13.09.12 15:46
Нестандартно, но интересно найдено место для запуска произвольной процедуры.
Во внешние обработки можно положить все что угодно, лишь бы были права.
Открыта дыра в защите базы.
Ждем хакеров...
4. Konstantin Konstantin (KonstB) 13.09.12 15:56
(3) vladismi, ну это Вы уж громко :)
5. Александр Капустин (kapustinag) 13.09.12 23:59
А не из пушки ли по воробьям получается?
Ну хорошо - не подходит механизм регламентных/фоновых заданий.
Но уж планировщиком операционной системы можно воспользоваться - запускать по расписанию задание, в котором всего одна команда - старт 1С8 в режиме enterprise, и в параметрах командной строки указана обработка для запуска.
Эту обработку можно сделать таким образом, что она при открытии сделает все, что нужно, а потом закроет 1С-Предприятие.
6. Василий Антонов (khaoos) 14.09.12 05:17
(5) Да, обычно так и делают, но, думаю, такой способ тоже не всем может подойти. У пользователя может не быть прав на открытие внешних обработок, или право COM-соединения (если через скрипт делать), или нельзя пароль хранить в скрипте. Так-то способ оригинальный, но неплохо было бы упомянуть, что запускаемая обработка или сами же правила должны чистить хотя бы периодически регистрацию изменений на этом "виртуальном" узле. А то и объем базы будет расти, да и обход в цикле "выгружаемых" измененных объектов будет все дольше и дольше (насчет последнего могу ошибаться, может до этого и не дойдет с такими "пустыми" правилами).
7. Фаниль Исламов (fancy) 14.09.12 06:31
(6) khaoos,
Так раз обмен будет происходить по произвольным правилам обмена, то никакой автоматической регистрации изменений не будет, только то, что вы сами напишите в правилах выгрузки, -а раз там нечего будет выгружать, то все "накладные" расходы по времени будут минимальны
8. Василий Антонов (khaoos) 14.09.12 06:45
Откуда плану обмена знать по каким правилам будут выгружать его изменения? Есть еще так называемые правила регистрации изменений. В новых БСП-шных "управляемых" конфигурациях они используются.

Добавлено: а я вспомнил, давно не пользовался обменом на старых конфигурациях: там же табличка есть, что выгружать, что не выгружать, что по ссылкам и т.д. И да, регистрация изменений, кажется, туда смотрит при принятии решения.
9. Konstantin Konstantin (KonstB) 14.09.12 09:26
(5) kapustinag,
1. Если у Вас нет прав на планировщик? - в больший компаниях такое есть.
2. Не предпочитаю использовать внешние обработки, т.к. сменился серв, упала сеть все обработина не запустилась. Поэтому проще запускать из обработок, загруженных в базу (просто надежнее). А как запустить Предприятие с параметром запуска обработки под кодом ХХХ я не знаю - буду рад если Вы просветите как это сделать )

Да и так, считаю, что совсем не из пушки. Т.к. все в одном месте. Надо базу перекинуть - все останется. В Вашем же варианте, надо еще и про планировщик не забыть.
10. Konstantin Konstantin (KonstB) 14.09.12 09:51
(8) khaoos,
В новых БСП-шных "управляемых" конфигурациях они используются.

про это сказать ничего не могу.
В обычном приложении с ничего не регистрируется.
11. Василий Антонов (khaoos) 14.09.12 10:00
(10), Да, я благодаря fancy освежил в памяти этот момент. А в новых конфигурациях "правил выгрузки" нет, а вместо этого можно загрузить xml-файл правил регистрации, который можно разработать или доработать типовой в той же "Конвертации данных". Ну это так, к слову, если кто на новых конфигурациях захочет применить методику.
12. Владимир Самойлов (samamoiloff) 14.09.12 15:36
(0), класс! На прошлой неделе опять задавался мыслью, что надо бы подумать все-таки чего-то насчет "внешних" регламентных заданий... Прошерстить стандартные 1С механизмы, которые можно использовать в своих целях.
То есть "мы только думаем, а вы уже сделали..."

Тут ведь какая необходимость есть:

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

Возможно и сама 1С выпустит что-то вроде свободного регл.задания, которое будет мониторить внешние обработки для их запуска.
13. Василий Антонов (khaoos) 14.09.12 17:53
(12) samamoiloff, близко не смотрел, но, кажется, в последней БСП и об этом уже подумали :). По крайней мере на ИТС мельком читал про запуск внешних обработок по регламенту в подсистеме "Дополнительные отчеты и обработки" (точно не помню названия).
14. Сергей Старых (tormozit) 14.09.12 19:45
Для глобальной автоматизации снаружи инфобаз компания 2iS делает продукт Интеграция http://infostart.ru/public/145983/. Все построено на COM. Там уже сейчас можно определенного вида внешние обработки выполнять по расписанию в любой инфобазе. В следующей версии там уже будет импорт регламентных заданий из "подопечных" инфобаз.
15. Владимир Самойлов (samamoiloff) 15.09.12 00:54
(13) khaoos,
будем искать...

(14) tormozit,
это тоже хорошо... Но есть задача - продать решение. То есть решение должно быть "из коробки", тут не пристегнешь чужие разработки, само должно справляться, например внешняя обработка. Если ее продавать клиентам, например, с базовой версией или "облачным", то в чем их интерес к суперсистеме, которая все делает с тем, чего у них в основном нет, кроме маленькой обработочки? Или самому только к подобной системе подключать всех клиентов и мониторить, а оно кому-то надо? Если только клиентов подписывать на подобные вашим годовые сублицензии. Вам 10 000, с 100 клиентов по 1000 рублей, 90 тысяч на работу админа-контролера... Что-то вроде окупаемости получается? Но это-удорожание разработки. А тут пример того, как сам выходишь из положения.
16. Аркадий Кучер (Abadonna) 15.09.12 06:17
(0) Зачем такие сложности?
/Execute <имя файла внешней обработки>

Создал батник для пакетного запуска с таким параметром (благо не 7.7, там нельзя было), родным виндовым планировщиком назначил его в задания по расписанию и дел-то...
Стартуем, например, под пользователем AUTOPILOT, обработка запустилась, выполнила что надо, по завершении сделала ЗавершитьРаботуСистемы(Ложь,Ложь).
17. Konstantin Konstantin (KonstB) 15.09.12 09:46
(16) Abadonna, об этом уже писали в (5), я ответил в (9).
в двух словах:
Минусы Вашего решения:
1. Пропал доступ до файла внешней обратоки (файл сервер лег, переместили и иеще что) - всё, капут :)
2. Необходимо всегда помнить(знать) о планировщике. Встречал организации, у которых с локального компа запускается восстановление последовательности расчетов. Админ не в курсе об том - покилял комп, начился Вой.
Плюсы:
1. Простота

Естествено, раньше я так и делал, до смены работы. Теперь у нас в IT-"отделе" более 200 человек. Админы и Програмисты - разные департаменты. Всеми серверами рулят админы(которых я в лицо то не видел никогда), программисты сидят на терминалах, прав никаких нет.
18. Аркадий Кучер (Abadonna) 15.09.12 10:10
(17) KonstB,
Сермяжная правда тут есть, но мои "автопилотные" всегда мне куда-нибудь сообщают как дела, вплоть до аси ;)
Если с правами кирдык, тогда полностью согласен. У меня нет ни одного терминала, где бы я не был полноправным админом.
19. Программулькин (Программулькин) 15.09.12 11:42
забавно придумано, плюсанул за креатив !
20. Владимир Самойлов (samamoiloff) 15.09.12 11:47
(16) Abadonna,
в модели сервиса?
21. Александр Капустин (kapustinag) 15.09.12 12:20
(9) KonstB,
1. Если нет прав на планировщик операционной системы, то довольно странно, что есть права на управление обменами в ПРОИЗВОДСТВЕННОЙ информационной базе. Так что это не аргумент, и явная недоработка службы безопасности.
2. Насчет падений сети, переездов с места на место и недоступности сетевых дисков - такое, конечно, бывает. Но и Ваше решение не 100% защищено от таких событий. Если посмотреть внимательнее на первый же скрин в публикации, то видно, что Тип обмена = Обмен через файловый ресурс, и указан локальный каталог на диске d:

3. По поводу "... А как запустить Предприятие с параметром запуска обработки под кодом ХХХ я не знаю - буду рад если Вы просветите как это сделать..." - просвещаю. Никакого волшебства. В той внешней обработке, которая находится НЕ В БАЗЕ, и которую Вы запустите через параметры командной строки 1С-Предприятия, будет Вами прописан вызов обработки из справочника "Внешние обработки", или любой другой обработки.
Вполне рабочее решение, мы использовали его, например, для запуска некоторых отчетов при входе определенных пользователей в 1С.
МимохожийОднако; +1 Ответить 2
22. Konstantin Konstantin (KonstB) 15.09.12 12:52
(21) kapustinag,
1. Правами в ОС рулят админы. Права в ИБ настраивают программисты 1С. - Поэтому ничего странного нет, наоборот :) В больших компаниях Администротор <> Программист.

...то довольно странно, что есть права на управление обменами в ПРОИЗВОДСТВЕННОЙ информационной базе.

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

2. По большому счету, обмена то и не происходит. В этот каталог валится "пустое" сообщение обмена. За замечание, Спасибо. Посмотрю, что будет если каталог будет не доступен. (упустил этот момент).

3. Это понятно ) Я же имел ввиду, как запустить обработку, которая находится в базе.
23. Аркадий Кучер (Abadonna) 15.09.12 13:09
(21) kapustinag,
Правами в ОС рулят админы. Права в ИБ настраивают программисты 1С.

Есть еще один вариант: программисты рулят админами ;)
24. Игорь Хитров (Новенький_2209) 17.09.12 15:28
(17) KonstB, так ваши доводы, по поводу батников, аналогично можно применить и в вашу сторону: вы настроили обмен и ушли. После вас пришел другой программист, он знает - что обмен нужен для обмена. Спросил у знающего люда - у вас хоть какие-нибудь обмены есть? Ему сказали - нет. Ну пока, до свиданья все ваши настройки :)

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

С другой стороны, в модели сервиса, о которой тут упоминалось - такой выкрутас не нужен, там уже все есть.

Но само решение, согласен, весьма оригинально!
25. Konstantin Konstantin (KonstB) 17.09.12 15:55
(24) Новенький_2209, Как это "знающий люд" может ответить "НЕТ" - значит это НЕ "знающий люд" :)
Если это Ваш метод, приходя на новое место, сразу килять настройки, не разобравшись, что откуда растет - то успехов Вам... :)
Да и даже если "знающие люди" сказали, что обмена нет, запустив консоль, сразу можно увидеть, что какое-то событие периодически запускается - повод задуматься. Да и как можно удалить настройки обмена - не поняв, что там вертится...

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

Я никого не заставляю применять данный мех :) Ранее и сам использовал батники для старта обработок по расписанию. Но с переходом на новое место работы, права оказались сильно урезаны - вот и пришлось выкручивается :)
26. Игорь Хитров (Новенький_2209) 17.09.12 16:12
(25) KonstB, я только в том ключе, что грохнуть непонятный обмен можно также легко, как и батник, обосновывая это "быть не в теме". Причем именно разговор про отвязанность от конкретных лиц, компетенций и т.д. Как бы вы сказали, можно батник прибить, а что мешает план обмена прибить? :)

>>Я вот, что-то не нашел ничего в конфигурациях на эту тему
Это смотря какие конфигурации смотреть. В БСП это есть, если последняя версия в УТ 11 и БП 3.0 - значит и там должно быть (либо появиться как-то), иначе в модели сервиса ничего нельзя сделать.
Из самописок - в рарусовских вроде поделках есть механизм, в итиле точно есть, причем довольно интересная реализация. Это навскидку, с чем в последнее время работал :)

Ваш способ мне тем понравился, что не нужно вносить изменения. Это ценно.
27. Konstantin Konstantin (KonstB) 17.09.12 16:26
(26) Новенький_2209, дак вся то соль именно в реализации запуска произвольной обработки, без внесения изменений в конфу. Споров нет, если в конфе можно шашкой махать, то можно размахнуться :)
28. Игорь Хитров (Новенький_2209) 17.09.12 17:04
(27) KonstB, я взгляну в БП 3.0, есть ли штатный БСПшный механизм там или нет :)
29. EfiopReal (Созинов) 17.09.12 18:26
(16) Abadonna,
После перезапуска, если не произведен логон пользователя задания не будут выполняться (в смысле 1С не сможет запустить обработку, хотя сами задания конечно же выполняются). Поправьте если не прав.
30. Аркадий Кучер (Abadonna) 17.09.12 18:36
(29) EfiopReal,
Если честно - даже и не знаю ;)
Я как-то склонен вот такое решение применять, проверено на сто пудов:
http://dev.1tsm.ru/project/114
31. Владимир Самойлов (samamoiloff) 17.09.12 23:43
(28) Новенький_2209,
будем очень благодарны, хотя если даже это и есть в БП, это "только" в БП. Хочу продавать обработки универсальные, не зависящие от конфы, даже если она будет базовая...
32. Аркадий Кучер (Abadonna) 18.09.12 02:36
(29) +/30/
Забыл написать: есть возможность скриптом создавать задание от имени system, тогда никакой logon от имени пользователя ни во что не стучит.
33. tazmag tazmag (tazmag) 20.09.12 17:32
прикольная штука, правда на данный момент в ней нет необходимости
34. Осипов Сергей (fixin) 24.09.12 17:06
голь на выдумки хитра. ;-)
я лично все же поменял конфу, создал справочник параметры регл. заданий, надо бы печатнуть, что ле.
35. Осипов Сергей (fixin) 24.09.12 17:07
(30) не, мое решение круче. ;-)
36. Сергей (lsp71) 17.10.12 13:05
(3) vladismi, А нечего всем юзверям раздавать права на запуск внешних обработок/отчетов.
37. Владимир Гусев (adhocprog) 09.11.12 17:26
Интересная идея :) Человеческая мысль не знает границ!
38. Владимир Гусев (adhocprog) 09.11.12 17:38
(5) нет.
Т.к. все файлы хранятся в базе, а не по папкам/компьютерам/серверам раскиданы.
39. Muxomop Muxomop (Muxomop) 17.01.14 14:08
Отличная идея! И главное - работает
40. Maxim Goncharov (maxx) 18.03.14 13:17
А в каком контексте выполняется обработка? Точнее как считать каталог, который указан в настройке, чтобы сформированный для обмена файл, генерируемый моей же обработке, был в каталоге, указанный в настройке?
41. Konstantin Konstantin (KonstB) 19.03.14 10:44
(40) maxx, а не проще ли для обмена использовать обмен (сори, за каламбур).