Имя: Пароль:
1C
 
Выполнение процедуры внеш обработки в фоне
0 SergDon
 
15.04.25
15:38
Коллеги, добрый день!
Прошу помочь разобраться.
Мне нужно выполнить процедуру, которая вызывается из внешней обработки после проведения документа.
Я сделал так:
&НаСервере
&ИзменениеИКонтроль("ПослеЗаписиНаСервере")
Процедура Н_ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

   #Вставка
    ВызовМоейПроцедуры();
   #КонецВставки
КонецПроцедуры

&НаСервере
Процедура ВызовМоейПроцедуры()
    
   ПараметрыЗадания = Новый Структура;
   ПараметрыЗадания.Вставить("ИмяМетода", "МойМетод");
   ПараметрыЗадания.Вставить("ПараметрыВыполнения", Новый Структура("Ссылка",Объект.Ссылка));
   ПараметрыЗадания.Вставить("ЭтоВнешняяОбработка", Истина);
    ПараметрыЗадания.Вставить("ДополнительнаяОбработкаСсылка", Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Некая обработка"));
    
    ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор);
    ПараметрыВыполнения.НаименованиеФоновогоЗадания = "Мое фоновое задание";

   ВыполняемыйМетод = "ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки";
    
   Рез = ДлительныеОперации.ВыполнитьВФоне(ВыполняемыйМетод, ПараметрыЗадания, ПараметрыВыполнения);
    
КонецПроцедуры
1 SergDon
 
15.04.25
15:40
Приходит ошибка, что слишком много фактических параметров
Хотя передаю всего один параметр, как и должно
2 Волшебник
 
15.04.25
15:40
Зачем? Что делает эта процедура? Почему она во внешней обработке?
3 SergDon
 
15.04.25
15:49
Эта процедура создает документ/ты по алгоритму на основании данных в табличной части.
Т.к. в документе как правило много строк в ТЧ и он проводится долго, то была поставлена задача создавать документы в фоне после проведения
4 SergDon
 
15.04.25
15:52
Можно конечно это делать интерактивно из внешней обработки, подобрав туда проведенный документ.
5 Builder
 
15.04.25
15:59
(0) Что мешает перетащить эту процедуру в это же расширение? Зачем внешняя обработка?
6 SergDon
 
15.04.25
16:02
(5) Так сложилось исторически.
Если иначе не получится, придется перетащить
7 Волшебник
 
15.04.25
16:09
(3) Сделайте подписку на проведение документа
8 Мультук
 
гуру
15.04.25
16:11
(0)

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

2) Покажите объявление "МойМетод" в вашей обработке
9 SergDon
 
15.04.25
16:34
(8)
Процедура МойМетод(Ссылка) Экспорт
10 SergDon
 
15.04.25
16:37
Ошибка происходит в модуле ОбщегоНазначения
Процедура ВыполнитьМетодОбъекта(Знач Объект, Знач ИмяМетода, Знач Параметры = Неопределено) Экспорт

Во время выполнения этой команды:
Выполнить "Объект." + ИмяМетода + "(" + ПараметрыСтрока + ")";
11 СвинТуз
 
15.04.25
16:42
Осталось немного.
Посмотреть строку команды после выполнить.
Посмотреть что такое "Объект"
12 СвинТуз
 
15.04.25
16:43
и посмотреть отдельно и внимательно на "ПараметрыСтрока"
13 SergDon
 
15.04.25
16:55
(12)
Уже смотрел. Параметры там не правильные, но дело в том, что
я вызываю процедуру. В первом посте написал как
ДлительныеОперации.ВыполнитьВФоне(ВыполняемыйМетод, ПараметрыЗадания, ПараметрыВыполнения);

Из одной из вложенных процедур вызывается
Процедура ВыполнитьМетодОбъекта(
И ее менять я не могу
Поскольку она много откуда еще вызывается
14 АгентБезопасной Нацио
 
15.04.25
17:02
Ошибка там же, где всегда...
15 1Сергей
 
15.04.25
17:33
ВыполняемыйМетод = "ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки";


Это чо?
16 craxx
 
15.04.25
21:53
(13) Позовите программиста
17 Gucci76
 
15.04.25
22:30
(0) Делал как то запуск в фоне для внешней обработки.
Код запуска похож.
Только запуск в фоне происходил с клиента.
И обработка была подключена как дополнительная внешняя обработка.
18 Franchiser
 
гуру
16.04.25
00:07
(0)
АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено,УникальныйИдентификатор);
            ВыполняемыйМетод = "ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки";
            СтруктураПараметров = Новый Структура();
            СтруктураПараметров.Вставить("Поток",     НомерПотока);//многопоточно
            СтруктураПараметров.Вставить("ПериодЗаписи", 1); // Секунд
            СтруктураПараметров.Вставить("ПорцияДанных", ТаблицаСПорциями[НомерПотока-1].НаборДанных); //
            СтруктураПараметров.Вставить("АдресХранилища"                     , АдресХранилища);
            СтруктураПараметров.Вставить("Действие", ТекДействие); //
            
            Для каждого Стр из СтруктураРеквизитовФормы Цикл
                СтруктураПараметров.Вставить(Стр.Ключ,Стр.Значение);    
            КонецЦикла;
    
            ПараметрыЗадания = Новый Структура;
            ПараметрыЗадания.Вставить("ИмяОбработки", ИмяОбработки);
            ПараметрыЗадания.Вставить("ИмяМетода", "МойМетод");
            ПараметрыЗадания.Вставить("ПараметрыВыполнения", СтруктураПараметров);
            ПараметрыЗадания.Вставить("ЭтоВнешняяОбработка", Истина);
            ПараметрыЗадания.Вставить("ДополнительнаяОбработкаСсылка", ОбъектСсылка);
            
            ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
            ПараметрыВыполнения.НаименованиеФоновогоЗадания = НаименованиеЗадания;
            
            РезультатФоновогоЗадания = ДлительныеОперации.ВыполнитьВФоне(ВыполняемыйМетод, ПараметрыЗадания, ПараметрыВыполнения);

Процедура МойМетод(ПараметрыВыполнения, РезультатАдресХранилища) Экспорт
...
КонецПроцедуры
19 SergDon
 
16.04.25
15:02
Получилось! Спасибо всем!
Подставил это:
Процедура МойМетод(ПараметрыВыполнения, РезультатАдресХранилища) Экспорт

И все заработало!

В ПараметрыВыполнения передаю структуру
ПараметрыВыполнения.Вставить("Ссылка", ОбъектСсылка)
Закон Брукера: Даже маленькая практика стоит большой теории.