Как получить ключ запущенного Регламентного Задания

Представьте ситуацию:

Вы используете один метод (процедуру) для нескольких регламентных заданий. Процедура сработала, но как штатными средствами определить какое именно РЗ ее запустило?

Спросите зачем? В одной из конфигураций у меня, например, все РЗ не предопределенные! Каждое РЗ (созданное в конфигураторе) — лишь определенный МЕТОД обработки данных! А в консоле настройки РЗ в режиме Предприятия (шедуллере) уже создается немыслимое множество всевозможных РЗ для обработки разных ситуаций. Но количество методов обработки ограничено, оно описано Регламентными Заданиями (методами) в режиме конфигуратора.
Пример: В конфигураторе создано РЗ архивирования файлов. А в режиме Предприятия (шедуллере) пользователь создает несколько РЗ на архивирование и для каждого указывает каталоги откуда брать/куда выкладывать.

Вот Вам хитроумный способ получить ключ (т.е. уникальность) сработавшего Регламентного Задания в процедуре обработчике.

Что у нас есть в штатных средствах? Есть возможность только посмотреть список работающих Фоновых Заданий, отфильтровать его по времени запуска/имени метода и надеяться, что с этим же методом в данный момент не было запущено других РЗ с этим же методом.

ТАК ВОТ, есть ТОЧНЫЙ неописанный метод

Достаточно:

1. При записи Регламентного Задания (в режиме предприятия в шедуллере, в обработке редактирования Регламентных Заданий) заполнить параметры:

       мсПараметров = Новый Массив;
       мсПараметров.Добавить(Ключ);
       РегламентноеЗадание.Параметры = мсПараметров;

       В переменную Ключ передать уникальный ключ (имя) этого задания и он запишется в шаблон ДАННОГО РЕГЛАМЕНТНОГО ЗАДАНИЯ.

2. А в запускаемой РЗ процедуре (методе) поместить параметр «КлючРЗ» (например, имя неважно):

        Процедура ЗапускРегламентногоЗадания(КлючРЗ) Экспорт

        И при запуске этот параметр будет содержать Ключ, занесенный в параметры при записи РЗ в шедуллере, который можно использовать.

        Я, например, по Ключу нахожу соответствующую запись в Регистре сведений и забираю дополнительные настройки РЗ. Такие как Каталоги архивирования.

ЗЫ. Чтобы метод начал работать, ВСЕ РЗ в режиме предприятия нужно перезаписать (переинициализировать).

Метод найден Чтением/Думанием/Тыканием. Причины его работы науке неизвестны.

12 Comments

  1. YuraLu

    О как!?!

    Легко и просто!

    Теперь только фоновые победить. Может кто знает, как с фоновыми справиться?

    Или у меня руки кривые — подскажите!

    Reply
  2. Bitnikov

    (1) YuraLu, дык, если я правильно понял вопрос, статья как раз это и описывает!

    Фоновое — частный случай регламентного. Об этом и есть статья. Когда УЖЕ сработало регламентное (т.е. стало фоновым), вот тогда и есть проблема получить его ключ.

    Или у Вас проблема в файловой базе? Если да, то увы, с ними не работаю, подсказать не могу.

    Reply
  3. Tippa

    большой и жирный ПЛЮС не за публикацию, а за последнюю фразу :

    Метод найден Чтением/Думанием/Тыканием. Причины его работы науке неизвестны.

    🙂

    Reply
  4. Bitnikov

    (3) Tippa, спасибо)))

    Догадки, конечно, есть. Видимо, обращение к процедуре записывается вместе с элементом Регламентного Задания. Как только мы «проинициализировали» обращение с указанием параметра, дальше он при каждом запуске отрабатывает шаблоном.

    Reply
  5. bulpi

    Хм… Это есть в синтакс-помошнике. Регламентное задание, свойство «Параметры».

    Reply
  6. Bitnikov

    (5) bulpi, Гуд поинт. Вот только нет прямого описания как использовать. И уж тем более нет упоминания с другой стороны баррикады — со стороны процедуры

    Reply
  7. DoctorRoza

    Ну если только в качестве информации такой способ и пойдет. Только автор правильно вопрос задал в начале статьи, но на него ответа так и не дал. И в самом деле- зачем? Применение одной процедуры для нескольких РЗ видимо связано с обязанностями пользователей, их правами. ИМХО, это изврат! 🙂 Плодить то зачем? Может стоит переосмыслить логику работы.

    Reply
  8. V_V_V

    В пункте 1 — КлючРЗ. В пункте 2 — Ключ. Так и должно быть?

    Reply
  9. Bitnikov

    (8) V_V_V, Переменные в разных модулях. Если желаете, именуйте одинаково

    Reply
  10. Bitnikov

    (7) DoctorRoza,

    Пример: Регламентное Задание в конфе (и процедура соответственно) настроены на выполнение определенных действий, например, на выборку файлов и выполнение определенных действий с ними, архивирование фор экзампл. Пользователь в режиме предприятия создает Регламентное Задание и настраивает Папку откуда брать файлы и Папку куда выкладывать архив. Подобных заданий может быть тысяча. А РЗ в Конфе ОДНА! Необходимо при запуске ФЗ определять по ключу РЗ настройки из Регистра сведений (как в примере, папки для архивирования).

    Логику работы пересматривать не стоит, что-то мне мой опыт подсказывает, что это бесполезно)))

    Я же максимально лаконично (чтобы не утомлять) написал причины в описание. Молодой человек, что ж Вы не додумываете сами, а заставляете работать пальцами других!

    Да, для полноценного понимания нужно разделить термины РЗ в конфигурации и РЗ в пользовательском режиме. Я не стал на это акцентировать внимание в статье.

    Reply
  11. HIgor

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

    Reply
  12. mrmasson

    первый пункт не понял

    Reply

Leave a Comment

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