Часто встречаюсь с задачей: нужно сделать разовую обработку с длительным выполнением кода на сервере.
Хотелось бы написать внешнюю обработку: нажимаем кнопку в форме, дальше видим прогресс выполнения в форме.
Задача решаемая:
- С помощью расширения, можно даже без БСП довольно просто запустить исполнение кода на сервере (если кому-то нужно, могу добавить описание, как делать, с примером);
- Регистрация в дополнительных обработках, тоже достаточно просто, можно воспользоваться ВыполнитьКомандуВФоне, можно через длительные операции запустить ВыполнитьКоманду, в таком случае получаем все возможности длительных операций.
- Запуск функции из модуля объекта внешней обработки.
Третий вариант - самый привлекательный, но самый сложно достижимый. На Инфостарте есть готовые решения, но они, на мой взгляд, довольно сложные, поэтому, лично мне проще использовать другие варианты.
Недавно я писал обработку и наткнулся на новый вариант запуска внешней обработки фоном, во всяком случае для меня новым.
Обработка, которую я писал, должна была эпизодически запускать команду дополнительной обработки (регламентные задание на сервере отключены).
Сначала сделал с помощью ВыполнитьКомандуВФоне, но в таком варианте постоянно всплывает окно диалога выполнения команды дополнительной обработки.
Решил переписать через длительные операции.
Начинаю заполнять параметры для запуска процедуры в фоне ДлительныеОперации.ПараметрыВыполненияПроцедуры(), читаю описание:
* ВнешнийОтчетОбработка
- Неопределено - по умолчанию.
- ДвоичныеДанные - когда указано имя метода, которое начинается с "ВнешнийОтчет." или
"ВнешняяОбработка.". Для вызова такого метода требуется право интерактивного открытия
внешнего отчета или обработки соответственно.
Внешний отчет или обработка подключаются с защитой от опасных действий.
Т.е. вот так прямо просто можно запустить код внешней обработки фоном?
Решил попробовать написать обработку, и всё заработало. Сложность возникла только в указании пути к процедуре.
Всё было бы хорошо, но есть один нюанс "Внешний отчет или обработка подключаются с защитой от опасных действий".
Возникает проблема даже просто с запуском процедуры в фоне, т.к. файл обработки каждый раз создается новый, я так и не разобрался, по какому принципу определяется безопасность данного действия, иногда выполняется, а иногда выдаёт ошибку "действие не безопасно".
Опасных действий достаточно много, что серьёзно ограничивает область применения описанного варианта запуска внешней обработки фоном.
Была мысль, что можно обойти проблему, через использования профиля безопасности, но БСП отключает профиль безопасности.
Можно расширением сделать вставку для запуска в небезопасном режиме, либо с использованием профиля безопасности, но это уже не такое простое и элегантное решение.
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.5.18.59