Имя: Пароль:
1C
1С v8
Как в условии бизнес-процесса обратиться к реквизиту задачи?
0 Ivan_495
 
29.09.16
14:19
Как в процедуре проверки условия в бизнесс-процессе обратиться к реквизиту задачи?
Процедура ПроверкаВыполненияПроверкаУсловия(ТочкаМаршрутаБизнесПроцесса, Результат)
    
    Если Задачи.ЗадачаВводТМЦ.ПолучитьСсылку().ПолучитьОбъект().Статус=Перечисления.Статус.Закрыто тогда
    Результат=Истина;
    иначе
    Результат=Ложь;
КонецЕСли;

КонецПроцедуры
1 Ivan_495
 
29.09.16
14:20
Задачи.ЗадачаВводТМЦ.ПолучитьСсылку().ПолучитьОбъект().Статус не работает
2 Ivan_495
 
29.09.16
14:28
или вообще у задачи реквизиты не создавать, а создать их в бизнесс-процессе?
3 Ivan_495
 
30.09.16
11:34
up
4 Лефмихалыч
 
30.09.16
11:35
(0) записывай в бизнес процесс все, что нужно, для того, чтобы проверить условие
5 Ivan_495
 
30.09.16
11:46
6 Ivan_495
 
30.09.16
11:47
(0) Признак "Отправить на доработку" нужно хранить в отдельном регистре, который свяжет предмет согласования и бизнес процесс. Кнопка "Не согласовано" в задаче должна записывать запись в этот регистр, а проверка условия должна получать запись из этого регистра по своему бизнес процессу и его предмету.

В форме задачи совать что-то в реквизиты бизнес процесса - глупая затея. Особенно, если есть групповые задачи, а реквизит один (хотя в этом случае надо будет и регистр переделать, но это проще, чем БП ломать).
Записывать признак в саму задачу тоже идиотизм, т.к. при проверке условия нужно будет нужную задачу искать (а она уже выполнена).
7 Ivan_495
 
30.09.16
11:48
(4) хочу обратиться к реквизиту задачи в моментпроверки условия БП, чтобы отправить задачу на доработку
8 Ivan_495
 
30.09.16
11:52
(4) т.е. если есть реквизит "статус" у задачи, создать такой же у БП и при изменении в задаче "статус" писать в "статусБП"
9 Ivan_495
 
30.09.16
11:52
?
10 bootini
 
30.09.16
12:18
Запросом ищи последнюю выполненную задачу по этому БП и точке маршрута.
11 Ivan_495
 
30.09.16
12:20
(4) спасибо
а если бп групповой лучше в регистре связи хранить между бп и задачей, как Вы раньше советовали?
12 bootini
 
30.09.16
12:24
Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Задача.Ссылка
    |ИЗ
    |    Задача.ЗадачаИсполнителя КАК Задача
    |ГДЕ
    |    Задача.БизнесПроцесс = &БизнесПроцесс
    |    И Задача.ТочкаМаршрута = &ТочкаМаршрута
    |    И Задача.Выполнена
    |    И НЕ Задача.ПометкаУдаления
    |
    |УПОРЯДОЧИТЬ ПО
    |    Задача.Дата УБЫВ";
    Запрос.УстановитьПараметр("БизнесПроцесс", Ссылка);
    Запрос.УстановитьПараметр("ТочкаМаршрута", ТочкаМаршрута);
    
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    
    Если Выборка.Следующий() Тогда
        Возврат Выборка.Ссылка;
    КонецЕсли;
13 Ivan_495
 
30.09.16
12:35
(12) благодарю
14 Лефмихалыч
 
30.09.16
12:49
(7) при выполнении задачи записывай все, что понадобится условию, в процесс. А в условии бери данные из процесса
15 Лефмихалыч
 
30.09.16
12:50
+(14) если в условиях заниматься поиском выполненных задач, то потом, когда карта маршрута вдруг изменится, условие может начать работать неправильно и поймать его за руку вовремя будет невозможно - это станет очевидно, когда пачка процессов ускачут не туда.
16 Ivan_495
 
30.09.16
13:04
в модуле формы задачи пишу
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    
Если ТекущийОбъект.статус=Перечисления.Статус.Закрыто тогда
ТекущийОбъект.БизнесПроцесс.ПолучитьОбъект().статус=Перечисления.Статус.Закрыто;
ТекущийОбъект.БизнесПроцесс.ПолучитьОбъект().Записать();
КонецЕСли;

КонецПроцедуры

все проходит без ошибок, но реквезит "статус" БП не меняется
17 Nuobu
 
30.09.16
13:06
(16) Перечитай форму. Открой, закрой. Ну или нормально заверши бизнес-процесс.
18 Ivan_495
 
30.09.16
13:10
(14) а подскажите как Вы записываете данные из задачи в бизнес-процесс?
19 Ivan_495
 
30.09.16
13:22
В форме задачи совать что-то в реквизиты бизнес процесса - глупая затея
20 bootini
 
30.09.16
14:05
(16) По-нормальному сделай, ты получаешь объект изменяешь, потом получаешь опять не измененный и записываешь.
21 Ivan_495
 
30.09.16
14:16
(20) создал РС одно измерение БП и ресурс статус, пишу в него и читаю
22 Лефмихалыч
 
30.09.16
14:17
(16) не там пишешь. Пиши в модуле бизнес процесса в обработчике ПриВыполненииЗадачи
23 Лефмихалыч
 
30.09.16
14:18
вообще, общее правило хорошего кода - в форме может быть только тот код, который непосредственно связан с отображением. А абсолютно все, что приводит к изменению данных в БД, должно быть в модулях.
24 Ivan_495
 
30.09.16
14:34
(21) +
Процедура ПередЗаписью(Отказ)
МенеджерЗаписи = РегистрыСведений.СтатусЗадачи.СоздатьМенеджерЗаписи();
//    
МенеджерЗаписи.БП=БизнесПроцесс;
МенеджерЗаписи.Статус =Статус;
МенеджерЗаписи.Записать();    
    
КонецПроцедуры

Процедура ПроверкаВыполненияПроверкаУсловия(ТочкаМаршрутаБизнесПроцесса, Результат)
    // Вставить содержимое обработчика.
    
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    СтатусЗадачи.Статус
        |ИЗ
        |    РегистрСведений.СтатусЗадачи КАК СтатусЗадачи
        |ГДЕ
        |    СтатусЗадачи.БП = &БП";
    
    Запрос.УстановитьПараметр("БП", ссылка);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    ВыборкаДетальныеЗаписи.Следующий();
    тек=ВыборкаДетальныеЗаписи.статус;
    
    Если тек=Перечисления.Статус.Закрыто тогда
        Результат=Истина;
    иначе
        Результат=Ложь;
    КонецЕСли;

КонецПроцедуры
25 Лефмихалыч
 
30.09.16
14:38
(24) ты, если спросить чего-то хотел, то спрашивай словами. Просто так твои простыни ни кому не интересны
26 Ivan_495
 
30.09.16
14:39
(25) сделал вроде все как ты писал на регистре
27 Ivan_495
 
30.09.16
14:41
вроде работает
28 Ivan_495
 
30.09.16
15:02
(25) а не подскажешь как сделать, чтобы БП был невидим для пользователей?
чтобы заказчик нажал кнопку и открывалась сразу задача, а не БП
29 Ivan_495
 
30.09.16
15:05
заказчик=инициатор БП
30 Михаил Козлов
 
30.09.16
15:55
(0) Не знаю, будет ли Вам полезным (при реализации БП средней сложности):
- в задачу реквизиты не добавляли. Все необходимые реквизиты были в БП;
- при необходимости выполнения задачи, требующего интерактивных действий, открывалась нужная форма БП.
31 Лефмихалыч
 
30.09.16
16:10
(28) сделай общую форму "Мои задачи", в которую выбирай запросом данные из Задачи.ЗадачаИсполнителя.ЗадачиПоИсполнителю() - там будут только те задачи, котрые по адресации подходят пользователю. Без процессов.
32 Ivan_495
 
30.09.16
17:30
(31) это уже сделано
не понятно как сделать программный запуск БП?
когда есть журнал БП то созадешь новый БП и безпроблем,
а если этот журнал не показывать
33 Ivan_495
 
30.09.16
17:53
(30) вроде не логично, между исполнителями и инициаторами ходят задачи, которые даже внешне выглядеть могут по-разному
34 Лефмихалыч
 
30.09.16
17:56
(33) как раз именно это-то и логично. В задаче ни какой бизнес-логики не должно быть. Задача - это просто транспорт, который при помощи механизма адресации и карты маршрута процесса доставляет работу до пользователя, а работать эту работу он должен в соответствующих объектах конфигурации, наделенных для этого бизнес-логикой.
35 Ivan_495
 
30.09.16
18:15
ok
36 Ivan_495
 
30.09.16
18:16
если задачу ушла 2-м пользователям, один из них её выполнил, как сделать эту задачу недоступной для изменения остальным?
37 Ivan_495
 
03.10.16
11:59
(30) попробовал сделать как у вас, создал форму в БП и пытаюсь её вызвать в задаче, но обработкаИнтерактивнойАктивации в управляемом приложении не работает

Процедура обработкаИнтерактивнойАктивации(ТочкаМаршрутаБизнесПроцесса, Задача, СтандартнаяОбработка)
    // Вставить содержимое обработчика.
    Форма=ПолучитьФорму("ФормаБизнесПроцесса");
    Форма.задача=Задача;
    Форма.Открыть();
    СтандартнаяОбработка=Ложь;
КонецПроцедуры
38 Лефмихалыч
 
03.10.16
12:37
при открытии формы задачи


ЭтаФорма.ТОлькоПросмотр = Объект.Выполнена;
39 Ivan_495
 
03.10.16
13:47
(38) а форму то бп где вызывать, при открытии формы задачи?
40 Ivan_495
 
03.10.16
14:21
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
ОткрытьФорму("БизнесПроцесс.ВводТМЦ.Форма.ФормаБизнесПроцесса",,ЭтаФорма);
Отказ=Истина;    
КонецПроцедуры
вот так работает
зачем
ЭтаФорма.ТОлькоПросмотр = Объект.Выполнена; не понятно?
41 Лефмихалыч
 
03.10.16
14:22
(39) (40) нахрена это делать вообще? Тебе нужна форма задачи
42 Ivan_495
 
03.10.16
14:25
(41) мне нужно где-то хранить реквизиты, почитал книгу проф разработку, пишут что реквизиты хранятся в БП
43 Ivan_495
 
03.10.16
14:26
и в зависимости от процесса открывается форма бп вместо формы задчи
Процедура ЗапросНаСозданиеТМЦОбработкаИнтерактивнойАктивации(ТочкаМаршрутаБизнесПроцесса, Задача, СтандартнаяОбработка)
    // Вставить содержимое обработчика.
    Форма=ПолучитьФорму("ФормаБизнесПроцесса");
    Форма.задача=Задача;
    Форма.Открыть();
    СтандартнаяОбработка=Ложь;
КонецПроцедуры
44 Лефмихалыч
 
03.10.16
14:27
(42) какие в жопу реквизиты? Тебе надо, чтобы выполненную задачу не могли менять, так? У задачи есть предопределенный реквизит "Выполнена". В форме задачи при открытии устанавливай ТолькоПросмотр, если она Выполнена. Всё, больше не надо ни чего.
Ну, или ты задаешь один вопрос, а ответ тебе нужен на другой
45 Ivan_495
 
03.10.16
14:29
(44) да речь не о том
я всю эту ветку создал , чтобы понять где хранить реквизиты , которые заполняет пользователь?
46 Ivan_495
 
03.10.16
14:30
у меня 9 реквизитов для обработки пользователем
47 Лефмихалыч
 
03.10.16
14:33
(45) (46) на этот вопрос однозначного ответа не бывает.
И это совсем не тот вопрос, который ты изначально задавал. Изначально ты спрашивал, где хранить то, на основании чего проверять условие в карте маршрута.
48 Ivan_495
 
03.10.16
14:36
(47) в том-то все и дело если хранить условие в ревизите БП, то и проверять его нет никаких проблем
49 Михаил Козлов
 
03.10.16
16:09
Насчет УФ не скажу, а в ОФ делали как в (43) (правда без СтандартнаяОбработка=Ложь;).
50 Ivan_495
 
03.10.16
18:39
(49) это пример из книжки проф
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший