Имя: Пароль:
1C
 
Универсальная процедура для запуска фоноого задания
0 Aydar
 
13.02.20
12:46
Добрый день!

Необходимо написать код для запуска процедуры обработки в фоновом режиме, но обработка может быть 3 видов:
1. Внешняя обработка (не добавлена ни в конфигуратор, ни в справочник "дополнительные отчеты и обработки")
2. Внутренняя, которая добавлена в конфигуратор
3. Внешняя, которая добавлена в справочник "дополнительные отчеты и обработки"

Необходимо написать код, которая будет работать не зависимо от вида обработки.
Есть ли какие-либо идеи или примеры?
1 Fish
 
13.02.20
12:50
А что именно не получается?
2 vicof
 
13.02.20
12:51
(1) Он же написал)
"Необходимо написать код"
3 Ненавижу 1С
 
гуру
13.02.20
12:56
(0) зачем?
4 Aydar
 
13.02.20
12:58
(3) что бы обработка не ломалась при изменении типа обработки
5 Aydar
 
13.02.20
13:52
ни у кого нет такого примера?
6 Fish
 
13.02.20
13:53
(4) Т.е. обработка уже есть?
7 Aydar
 
13.02.20
14:12
(6) есть, работает только когда добавляю во "внешние отчеты и обработки"
8 ДНН
 
13.02.20
14:15
(0) Сначала ищешь в метаданных, потом во внешних обработках, потом на диске
9 Franchiser
 
гуру
13.02.20
14:17
В БСП все есть
10 Franchiser
 
гуру
13.02.20
14:18
Только для реализации 1-го пункта возможно придется свое писать.
11 Franchiser
 
гуру
13.02.20
14:24
С 1-м пунктом нужно перемещать обработку на сервер, а если в кластере более 1 сервера, то не понятно на каком она окажется.
12 FIXXXL
 
13.02.20
16:02
(11) в ХЗ ее, двоично
13 Franchiser
 
гуру
13.02.20
16:07
(12) В БСП не реализовано нормально выполнение процедур модулей обработки внешней через файл-открыть в фоне. Это только если свои процедуры писать.
14 unenu
 
13.02.20
16:08
(9) запуска внешней обработки в фоне в БСП нет,
встроенные можно
методы общих модулей можно

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

код приводит не буду - все что нужно я написал.
15 Franchiser
 
гуру
13.02.20
16:13
Вот у меня так сделано:
//ВНИМАНИЕ! Обработка должна лежать на общем ресурсе доступного с 2-х серверов иначе может возникнуть ошибка
                //Имя обработки необходимо подправить на путь к обработке на общем ресурсе...
                СтруктураПараметров = Новый Структура;
                СтруктураПараметров.Вставить("ИмяОбработки",                     ИмяОбработки); //это обработка переданная с клиента во врем. папку на 1-м из серверов
                СтруктураПараметров.Вставить("ИмяМетода",                         ВыполняемаяПроцедура);
                СтруктураПараметров.Вставить("ПараметрыВыполнения",             ПараметрыДлительнойОперации);
                СтруктураПараметров.Вставить("ЭтоВнешняяОбработка",             ЭтоВнешняяОбработка);
                СтруктураПараметров.Вставить("ДополнительнаяОбработкаСсылка",     Неопределено);
                
                //Сообщить("Т3");
                
                //Фоновое выполнение внешней обработки: но иногда фоновое запускается на другом сервере клсатера, тогда юудет ошибка, нужен общий каталог
                РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне(
                УникальныйИдентификатор,
                "ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки",
                СтруктураПараметров,
                НСтр("ru = 'Выполнение длительной операции на сервере (демо)'"));