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

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

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

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

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

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 и выше). По сути будет работать в любой типовой конфе, где есть обмены.

44 Comments

  1. KonstB

    Что-то криво правила разместились(пункт 2), отвались шапка и подвал хмл. Ниже все в txt.

    Reply
  2. Alex_Japanese_Student

    забавно придумано, плюсанул за креатив

    Reply
  3. vladismi

    Нестандартно, но интересно найдено место для запуска произвольной процедуры.

    Во внешние обработки можно положить все что угодно, лишь бы были права.

    Открыта дыра в защите базы.

    Ждем хакеров…

    Reply
  4. KonstB

    (3) vladismi, ну это Вы уж громко 🙂

    Reply
  5. kapustinag

    А не из пушки ли по воробьям получается?

    Ну хорошо — не подходит механизм регламентных/фоновых заданий.

    Но уж планировщиком операционной системы можно воспользоваться — запускать по расписанию задание, в котором всего одна команда — старт 1С8 в режиме enterprise, и в параметрах командной строки указана обработка для запуска.

    Эту обработку можно сделать таким образом, что она при открытии сделает все, что нужно, а потом закроет 1С-Предприятие.

    Reply
  6. khaoos

    (5) Да, обычно так и делают, но, думаю, такой способ тоже не всем может подойти. У пользователя может не быть прав на открытие внешних обработок, или право COM-соединения (если через скрипт делать), или нельзя пароль хранить в скрипте. Так-то способ оригинальный, но неплохо было бы упомянуть, что запускаемая обработка или сами же правила должны чистить хотя бы периодически регистрацию изменений на этом «виртуальном» узле. А то и объем базы будет расти, да и обход в цикле «выгружаемых» измененных объектов будет все дольше и дольше (насчет последнего могу ошибаться, может до этого и не дойдет с такими «пустыми» правилами).

    Reply
  7. fancy

    (6) khaoos,

    Так раз обмен будет происходить по произвольным правилам обмена, то никакой автоматической регистрации изменений не будет, только то, что вы сами напишите в правилах выгрузки, -а раз там нечего будет выгружать, то все «накладные» расходы по времени будут минимальны

    Reply
  8. khaoos

    Откуда плану обмена знать по каким правилам будут выгружать его изменения? Есть еще так называемые правила регистрации изменений. В новых БСП-шных «управляемых» конфигурациях они используются.

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

    Reply
  9. KonstB

    (5) kapustinag,

    1. Если у Вас нет прав на планировщик? — в больший компаниях такое есть.

    2. Не предпочитаю использовать внешние обработки, т.к. сменился серв, упала сеть все обработина не запустилась. Поэтому проще запускать из обработок, загруженных в базу (просто надежнее). А как запустить Предприятие с параметром запуска обработки под кодом ХХХ я не знаю — буду рад если Вы просветите как это сделать )

    Да и так, считаю, что совсем не из пушки. Т.к. все в одном месте. Надо базу перекинуть — все останется. В Вашем же варианте, надо еще и про планировщик не забыть.

    Reply
  10. KonstB

    (8) khaoos,

    В новых БСП-шных «управляемых» конфигурациях они используются.

    про это сказать ничего не могу.

    В обычном приложении с ничего не регистрируется.

    Reply
  11. khaoos

    (10), Да, я благодаря fancy освежил в памяти этот момент. А в новых конфигурациях «правил выгрузки» нет, а вместо этого можно загрузить xml-файл правил регистрации, который можно разработать или доработать типовой в той же «Конвертации данных». Ну это так, к слову, если кто на новых конфигурациях захочет применить методику.

    Reply
  12. samamoiloff

    (0), класс! На прошлой неделе опять задавался мыслью, что надо бы подумать все-таки чего-то насчет «внешних» регламентных заданий… Прошерстить стандартные 1С механизмы, которые можно использовать в своих целях.

    То есть «мы только думаем, а вы уже сделали…»

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

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

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

    Reply
  13. khaoos

    (12) samamoiloff, близко не смотрел, но, кажется, в последней БСП и об этом уже подумали :). По крайней мере на ИТС мельком читал про запуск внешних обработок по регламенту в подсистеме «Дополнительные отчеты и обработки» (точно не помню названия).

    Reply
  14. tormozit

    Для глобальной автоматизации снаружи инфобаз компания 2iS делает продукт Интеграция http://infostart.ru/public/145983/. Все построено на COM. Там уже сейчас можно определенного вида внешние обработки выполнять по расписанию в любой инфобазе. В следующей версии там уже будет импорт регламентных заданий из «подопечных» инфобаз.

    Reply
  15. samamoiloff

    (13) khaoos,

    будем искать…

    (14) tormozit,

    это тоже хорошо… Но есть задача — продать решение. То есть решение должно быть «из коробки», тут не пристегнешь чужие разработки, само должно справляться, например внешняя обработка. Если ее продавать клиентам, например, с базовой версией или «облачным», то в чем их интерес к суперсистеме, которая все делает с тем, чего у них в основном нет, кроме маленькой обработочки? Или самому только к подобной системе подключать всех клиентов и мониторить, а оно кому-то надо? Если только клиентов подписывать на подобные вашим годовые сублицензии. Вам 10 000, с 100 клиентов по 1000 рублей, 90 тысяч на работу админа-контролера… Что-то вроде окупаемости получается? Но это-удорожание разработки. А тут пример того, как сам выходишь из положения.

    Reply
  16. Abadonna

    (0) Зачем такие сложности?

    /Execute <имя файла внешней обработки>

    Создал батник для пакетного запуска с таким параметром (благо не 7.7, там нельзя было), родным виндовым планировщиком назначил его в задания по расписанию и дел-то…

    Стартуем, например, под пользователем AUTOPILOT, обработка запустилась, выполнила что надо, по завершении сделала ЗавершитьРаботуСистемы(Ложь,Ложь).

    Reply
  17. KonstB

    (16) Abadonna, об этом уже писали в (5), я ответил в (9).

    в двух словах:

    Минусы Вашего решения:

    1. Пропал доступ до файла внешней обратоки (файл сервер лег, переместили и иеще что) — всё, капут 🙂

    2. Необходимо всегда помнить(знать) о планировщике. Встречал организации, у которых с локального компа запускается восстановление последовательности расчетов. Админ не в курсе об том — покилял комп, начился Вой.

    Плюсы:

    1. Простота

    Естествено, раньше я так и делал, до смены работы. Теперь у нас в IT-«отделе» более 200 человек. Админы и Програмисты — разные департаменты. Всеми серверами рулят админы(которых я в лицо то не видел никогда), программисты сидят на терминалах, прав никаких нет.

    Reply
  18. Abadonna

    (17)

    Сермяжная правда тут есть, но мои «автопилотные» всегда мне куда-нибудь сообщают как дела, вплоть до аси 😉

    Если с правами кирдык, тогда полностью согласен. У меня нет ни одного терминала, где бы я не был полноправным админом.

    Reply
  19. Программулькин

    забавно придумано, плюсанул за креатив !

    Reply
  20. samamoiloff

    (16) Abadonna,

    в модели сервиса?

    Reply
  21. kapustinag

    (9)

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

    2. Насчет падений сети, переездов с места на место и недоступности сетевых дисков — такое, конечно, бывает. Но и Ваше решение не 100% защищено от таких событий. Если посмотреть внимательнее на первый же скрин в публикации, то видно, что Тип обмена = Обмен через файловый ресурс, и указан локальный каталог на диске d:

    3. По поводу «… А как запустить Предприятие с параметром запуска обработки под кодом ХХХ я не знаю — буду рад если Вы просветите как это сделать…» — просвещаю. Никакого волшебства. В той внешней обработке, которая находится НЕ В БАЗЕ, и которую Вы запустите через параметры командной строки 1С-Предприятия, будет Вами прописан вызов обработки из справочника «Внешние обработки», или любой другой обработки.

    Вполне рабочее решение, мы использовали его, например, для запуска некоторых отчетов при входе определенных пользователей в 1С.

    Reply
  22. KonstB

    (21) kapustinag,

    1. Правами в ОС рулят админы. Права в ИБ настраивают программисты 1С. — Поэтому ничего странного нет, наоборот 🙂 В больших компаниях Администротор <> Программист.

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

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

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

    3. Это понятно ) Я же имел ввиду, как запустить обработку, которая находится в базе.

    Reply
  23. Abadonna

    (21) kapustinag,

    Правами в ОС рулят админы. Права в ИБ настраивают программисты 1С.

    Есть еще один вариант: программисты рулят админами 😉

    Reply
  24. Новенький_2209

    (17) так ваши доводы, по поводу батников, аналогично можно применить и в вашу сторону: вы настроили обмен и ушли. После вас пришел другой программист, он знает — что обмен нужен для обмена. Спросил у знающего люда — у вас хоть какие-нибудь обмены есть? Ему сказали — нет. Ну пока, до свиданья все ваши настройки 🙂

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

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

    Но само решение, согласен, весьма оригинально!

    Reply
  25. KonstB

    (24) Новенький_2209, Как это «знающий люд» может ответить «НЕТ» — значит это НЕ «знающий люд» 🙂

    Если это Ваш метод, приходя на новое место, сразу килять настройки, не разобравшись, что откуда растет — то успехов Вам… 🙂

    Да и даже если «знающие люди» сказали, что обмена нет, запустив консоль, сразу можно увидеть, что какое-то событие периодически запускается — повод задуматься. Да и как можно удалить настройки обмена — не поняв, что там вертится…

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

    Я никого не заставляю применять данный мех 🙂 Ранее и сам использовал батники для старта обработок по расписанию. Но с переходом на новое место работы, права оказались сильно урезаны — вот и пришлось выкручивается 🙂

    Reply
  26. Новенький_2209

    (25) я только в том ключе, что грохнуть непонятный обмен можно также легко, как и батник, обосновывая это «быть не в теме». Причем именно разговор про отвязанность от конкретных лиц, компетенций и т.д. Как бы вы сказали, можно батник прибить, а что мешает план обмена прибить? 🙂

    >>Я вот, что-то не нашел ничего в конфигурациях на эту тему

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

    Из самописок — в рарусовских вроде поделках есть механизм, в итиле точно есть, причем довольно интересная реализация. Это навскидку, с чем в последнее время работал 🙂

    Ваш способ мне тем понравился, что не нужно вносить изменения. Это ценно.

    Reply
  27. KonstB

    (26) Новенький_2209, дак вся то соль именно в реализации запуска произвольной обработки, без внесения изменений в конфу. Споров нет, если в конфе можно шашкой махать, то можно размахнуться 🙂

    Reply
  28. Новенький_2209

    (27) я взгляну в БП 3.0, есть ли штатный БСПшный механизм там или нет 🙂

    Reply
  29. Созинов

    (16) Abadonna,

    После перезапуска, если не произведен логон пользователя задания не будут выполняться (в смысле 1С не сможет запустить обработку, хотя сами задания конечно же выполняются). Поправьте если не прав.

    Reply
  30. Abadonna

    (29) EfiopReal,

    Если честно — даже и не знаю 😉

    Я как-то склонен вот такое решение применять, проверено на сто пудов:

    http://dev.1tsm.ru/project/114

    Reply
  31. samamoiloff

    (28) Новенький_2209,

    будем очень благодарны, хотя если даже это и есть в БП, это «только» в БП. Хочу продавать обработки универсальные, не зависящие от конфы, даже если она будет базовая…

    Reply
  32. Abadonna

    (29) +/30/

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

    Reply
  33. tazmag

    прикольная штука, правда на данный момент в ней нет необходимости

    Reply
  34. fixin

    голь на выдумки хитра. 😉

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

    Reply
  35. fixin

    (30) не, мое решение круче. 😉

    Reply
  36. lsp71

    (3) vladismi, А нечего всем юзверям раздавать права на запуск внешних обработок/отчетов.

    Reply
  37. adhocprog

    Интересная идея 🙂 Человеческая мысль не знает границ!

    Reply
  38. adhocprog

    (5) нет.

    Т.к. все файлы хранятся в базе, а не по папкам/компьютерам/серверам раскиданы.

    Reply
  39. Muxomop

    Отличная идея! И главное — работает

    Reply
  40. maxx

    А в каком контексте выполняется обработка? Точнее как считать каталог, который указан в настройке, чтобы сформированный для обмена файл, генерируемый моей же обработке, был в каталоге, указанный в настройке?

    Reply
  41. KonstB

    (40) maxx, а не проще ли для обмена использовать обмен (сори, за каламбур).

    Reply
  42. vsozansky

    Отличное решение. На 8.2 все остальное работает очень нестабильно.

    Reply
  43. mbfg@tut.by

    Согласен с автором! Решение интересное!

    Reply
  44. user916099

    (24) За уши притянуто. Для того, чтобы этот обмен не был непонятным, у настройки обмена есть поля «наименование» и «комментарий».

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *