Имя: Пароль:
1C
1С v8
Вложенный бизнес-процесс. Формируется лишняя задача и не завершается автоматически
0 CaIIIka
 
17.11.21
12:57
Здравствуйте! Не пойму логику.

Есть точка маршрута "РасходнаяНакладная" типа "Вложенный бизнес-процесс".

В модуле объекта БП "ОбработкаСчета" для каждой накладной формируется вложенный бизнес процесс:


Процедура РасходнаяНакладнаяПередСозданиемВложенныхБизнесПроцессов(ТочкаМаршрутаБизнесПроцесса, ФормируемыеБизнесПроцессы, Отказ)
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    СвязанныеДокументы.Ссылка КАК РасходнаяНакладная
        |ИЗ
        |    КритерийОтбора.СвязанныеДокументы(&Счет) КАК СвязанныеДокументы
        |ГДЕ
        |    СвязанныеДокументы.Ссылка ССЫЛКА Документ.РасходнаяНакл
        |    И НЕ СвязанныеДокументы.Ссылка.Проведен";

    Запрос.УстановитьПараметр("Счет", Предмет);
    
    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        
        ВедЗадача = СоздатьЗадачу(БизнесПроцессы.ОбработкаСчета.ТочкиМаршрута.РасходнаяНакладная);
        ВедЗадача.Записать();
        
        БП = БизнесПроцессы.ОбработкаРасходнойНакладной.СтартБизнесПроцесса(ВыборкаДетальныеЗаписи.РасходнаяНакладная, ВедЗадача.Ссылка);
        
        Если БП <> Неопределено Тогда
            ФормируемыеБизнесПроцессы.Добавить(БП);    
        Иначе
            ВедЗадача.Удалить();
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры



В функции БизнесПроцессы.ОбработкаРасходнойНакладной.СтартБизнесПроцесса:



БП = БизнесПроцессы.ОбработкаРасходнойНакладной.СоздатьБизнесПроцесс();
    
БП.ВедущаяЗадача = ВедущаяЗадачаСсылка;
    
БП.Автор = ПараметрыСеанса.ТекущийПользователь;
БП.Дата = ТекущаяДата();
БП.Состояние = Перечисления.СостоянияБизнесПроцессов.Активен;
БП.Предмет = Предмет;
БП.Важность = Перечисления.ВариантыВажностиЗадачи.Обычная;

БП.Записать();

БП.Старт();

Возврат БП.Ссылка;



На выходе из "ПередСозданиемВложенныхБизнесПроцессов" имеем задачу "РасходнаяНакладная" связанную с бизнес-процессом счета, и бизнес-процесс "ОбработкаРасходнойНакладной" для расходной накладной, у которого указана вышеуказанная ведущая задача.

Затем, если в модуле объекта БП "ОбработкаСчета" не описать процедуру "РасходнаяНакладнаяПередСозданиемЗадач", то создается еще одна ПУСТАЯ задача с наименованием "РасходнаяНакладная" (по точке маршрута).
Если описать процедуру "РасходнаяНакладнаяПередСозданиемЗадач" по аналогии с другими задачами, получится задача, похожая на созданную в качестве ведущей для расходной накладной. ЭТА ЗАДАЧА НЕ ВЫПОЛНЯЕТСЯ ПРИ ЗАВЕРШЕНИИ БП "ОбработкаРасходнойНакладной".

МЫСЛИ:

Пытаться передавать задачи, созданные в качестве ведущих в массив "ФормируемыеЗадачи" в процедуру "РасходнаяНакладнаяПередСозданиемЗадач". Но штатными средствами не получается. В "ПередСозданиемВложенныхБизнесПроцессов" имеется лишь массив "ФормируемыеБизнесПроцессы", и в этой процедуре создавались вложенные БП и ведущие задачи. В "РасходнаяНакладнаяПередСозданиемЗадач" имеется только пустой массив "ФормируемыеЗадачи" без данных о созданных ранее вложенных БП и их ведущих задач. Замкнутый круг. "Горшочек и дудочка"...


ЧЯДНТ???
1 CaIIIka
 
17.11.21
16:54
Не пойму, почему точка вложенного бизнес-процесса помимо того, что создает бизнес-процессы и отдельную ведущую задачу для каждого из них, еще создает задачу для себя, как обычная желтая точка маршрута? Логически может и правильно, но эта задача не завершается при завершении вложенных БП. И вообще непонятно, как двинуть процесс дальше без участия человека. Сразу после выполнения вложенных БП деятельность человека не предусмотрена, работает автоматика. Я написал код в точке завершения вложенного БП, который проверяет, все ли ведущие задачи по этим вложенным процессам выполнены. И если да, то выполняет эту "лишнюю" задачу, принадлежащую синему квадрату. НО!!! Процесс дальше не двигается. Задачи все выполнены, новая не создается. Если руками выполнить, идет дальше как надо. Видимо, в это время если ее программно выполнить, механизм не может продвинуться дальше. Что за дебилизм?

Кто имел дело с вложенными БП? Я уже все перекопал и все найденные книги перечитал. Нигде не написано, что должна создаваться задача, привязанная прямо к точке. Задачи, связанные с вложенными БП - да. Но не к самой точке. Нафига она вообще создается? А, еще... Если в "при создании задач" для синего квадрата СтандартнуюОбработку в Ложь увести, то система сбоить начинает, выдавая ошибки.
2 CaIIIka
 
17.11.21
16:57
+(1) .... СтандартнуюОбработку в Ложь увести и не создавать эту долбаную задачу ......