Имя: Пароль:
1C
 
Бизнес-Процесс. Как получить следующую точку маршрута?
,
0 totparen
 
28.01.16
20:18
Сабж.
Есть метод ПолучитьВходящиеТочки(), работает в том числе и для точки вида "Действие", есть метод ПолучитьИсходящиеТочки(), но помему-то работает только для точек вида "Разделение".

Как можно найти исходящие точки для действия?
1 Сниф
 
28.01.16
20:21
А зачем? Ведь в каждой точке есть свои обработчики.
2 totparen
 
28.01.16
20:22
Нужна зашить универсальный алгоритм в задачу. Анализировать следующую ТМ.
3 totparen
 
28.01.16
20:27
Можно конечно перебрать все точки маршрута и вычислить ПолучитьВходящиеТочки() = ТекущаяТочкаМаршрута, но это костыль.
4 Сниф
 
28.01.16
20:35
(2) То есть использовать схему нестандартным образом? Тогда можно на декорациях-стрелках и справочнике. Кажется, вы это и хотите сделать.
Если так - то перебрать все элементы схемы, узнать для которых ПолучитьВходящиеТочки()= ТекущаяТочкаМаршрута, именно так. Тупо узнать куда ведут стрелочки от текущей точки - перебрать все другие узлы.
И это не костыль, это норма. Ведь вы сознательно отказываетесь от стандартного программирования бизнес-процесса.
5 totparen
 
28.01.16
20:37
Что-то типа этого. Всё-равно считаю костылём.

Функция ПолучитьИсходящиеТочки(пТочкаМаршрута)
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    РемонтТехникиТочки.Ссылка
        |ИЗ
        |    БизнесПроцесс.РемонтТехники.Точки КАК РемонтТехникиТочки";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    лРезультат = Новый Массив;
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        лВходящиеТочки = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьВходящиеТочки();
        Если лВходящиеТочки.Найти(пТочкаМаршрута) <> Неопределено Тогда
            лРезультат.Добавить(ВыборкаДетальныеЗаписи.Ссылка);
        КонецЕсли;
    КонецЦикла;
    
    Возврат лРезультат;
КонецФункции
6 Сниф
 
28.01.16
20:48
Как-то мне пришлось делать бизнес-процесс, где около 100 строк в табличной части - и каждая строка должна согласовываться по инстанциям отдельно от других (согласование бюджетных операций).  
Для решения я оставил в схеме только Старт, Финиш, и бесконечный цикл проверки. А всю логику вынес в табличную часть "История" и модуль.

И что значит "зашить универсальный алгоритм в задачу"? Если его зашить в модуле - это одно. Если вы хотите, чтобы схема бизнес-процесса редактировалась в пользовательском режиме - тогда нужно делать декорации-стрелки и, например, хранить код в справочнике.
7 Сниф
 
28.01.16
20:59
(5) Вы не ответили на вопрос :) Цель - программирование бизнес-процесса в конфигураторе или пользователям дать такую возможность?
8 totparen
 
28.01.16
21:05
(7)
Цель - при открытии формы задачи, анализировать следующую точку маршрута, и если следующая ТМ вида "точка выбора" - запрашивать у пользователя вариант(результат выполнения) задачи. Что бы на следующем этапе проскочить через выбор. Как-то так.

БП только осваиваю...
9 totparen
 
28.01.16
21:06
+(8) Задачу могут ведь формировать разные бизнес процессы. Вот и анализировать карты маршрута для универсальности.
10 Сниф
 
28.01.16
22:01
(8) так на то она и точка выбора - запрашивать у пользователя вариант ответа. Другого назначения у точки выбора и нет.
Тогда вам можно использовать стандартный механизм. Я уже не помню (и лень поднять конфу из бекапа), но у точки выбора есть во входящих параметрах, кажется, результат выбора, или как его. Вот туда и передаете, что выбрал пользователь. И логика сама дальше по схеме бежит) Не нужно программировать - какая точка следующая. Это рисуется в схеме.
11 totparen
 
29.01.16
07:00
Входящие параметры у обработчика точки выбора ТочкаВыбораВарианта и Результат. Если выбор зависит от пользователя, то мне нужно это и запросить у пользователя. Не создавать же мне дополнительный диалог, после выполнения задачи. Как это делать по правильному?
12 cw014
 
29.01.16
07:04
Есть ПолучитьИсходящуюТочку() - работает для разделения и ПолучитьИсходящиеТочки() - для всего остального
13 totparen
 
29.01.16
07:12
(12) Хм... действительно. То что нужно. Почему-то забраковал эту функция изначально. Мерси. Вот чуял что должна быть функция.
14 totparen
 
29.01.16
07:23
А как всё-таки обрабатывать выбор варианта, если он зависит от результата выполнения предыдущей точки действия?
15 Smile 8D
 
29.01.16
09:53
(14) Обычно добавляют реквизит в бизнес-процесс и присваивают ему значение (в предыдущей точке). А в обработчике выбора пишут условие на значение этого реквизита.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой