Имя: Пароль:
1C
1С v8
УФ. Открыть форму задачи при старте БП
0 mvgfirst
 
10.09.12
11:18
Есть бизнес процесс отлажен и работоспособен в плане стандартной его функциональности.

На задачах настроена "обратная связь" как в учебнике на ИТС. Т.е. при даблкике на задаче в списке - открывается форма связанного с задачей документа и при проведении документа задача выполняется "продвигая" БП на шаг вперед

Нужно что бы при старте процесса, если задача по адресации попадает в зону ответственности пользователя который стартовал БП - автоматически открывалась форма задачи (и если она связана с документом - то и форма документа)

Функциональность нужна универсальная, т.е. не привязанная к конкретной точке конкретного БП. Т.к. БП будет большое количество.

Вопрос - как такое реализовать на Управляемых Формах, где посмотреть примеры подобного решения, если примеров нет в какую сторону настраивать "научный тык" для самостоятельного изучения?
1 mvgfirst
 
10.09.12
11:27
Пробовал запускать процесс по кнопке (специльно для этого создал отдельную кнопку на рабочем столе).
Но почему то когда создаю, записываю и стартую БП, а потом возвращаю его из серверно функции в клиентскую не доступны реквизиты бизнес процесса. Т.е. в клиентскую процедуру возвращается стурктура с полями как реквизиты у бизнес-процесса а не ссылка не бизнес-процесс.

Причем аналогичный способ создания элемента справочника - вовзаращает ссылку на созданный элемент справочника. Почему такое не "прокатывает" с БП?
2 mvgfirst
 
10.09.12
11:36
Хоть намекните - реализуемо?
Здравый смысл подсказывает что реализуемо. Поиск в интернетах наводит на мысли что об обратном. встречаю только вопросы как сделать но почему-то все безответные :-(
3 mvgfirst
 
10.09.12
12:10
Нет спецов по бизнес-процессам? Или задача архинетипичная?
4 kn
 
10.09.12
12:38
а как в УТ 10.3 тебя не устраивает?
5 jump if overflow
 
10.09.12
12:38
т.е. при переходе на очередную точку действия,
согласно адресации (или групповой адресации ) открываем произвольные формы в рамках сеанса пользователя (пользователей)

врядли это возможно, но вопрос интересный
6 kn
 
10.09.12
12:46
там у задач есть Дата Напоминания ,есть константа ИнтервалПроверкиНапоминанийВСекундах и подключен обработчик ожидания
В установленное время задача всплывает у пользователя
7 mvgfirst
 
10.09.12
12:55
(6) Опрос задачать через "ОбработчикОжидания" - возможно и выход - но уж очень какой-то кривой.
Особенно потому что, ожидаемое поведение системы таково,
1. Пользователь нажимает кнопку "Зарегистрировать заявку" (прикладная кнопка специально созданная на раб. столе конкретного пользователя)
2. Система (неоткрывая никаких вспомогательных окон типа списка БП или формы БП) создает, записывае, стартует БП
3. Если по карте маршрута БП идет "Задача пользователя" и по адресации этой задачи получается что текущий пользователь имеет возможность выполнить задачу то сразу же (в понятиях пользователя "мгновенно") должна открыться форма задачи закрепленная за этим шагом БП

Если настроить обработчик ожидания (хотя в УФ лично я этот механизм еще не тестировал) то возможны задержки между нажатием кнопки и открытием формы документа, при этом пользователь получит управление "в свои руки" и будет иметь возможность нажать кнопку еще раз (ошибочно полагая что "эта глючная 1С-ка опять тупит!!!") тем самым запустит еще один экземпляр процесса
8 mvgfirst
 
10.09.12
12:58
(5) Именно так, согласно адресации да еще и форму того документа который связан с конкретной задачей конкреного шага конкретного БП

Поэтому и ищу механизм с помощью которого это можно решить универсально.

Хотя сам факт отсутствия события "ПриИнтерактивнойАктивации" - у задачи и у точки маршурта в Управляемых Формах как бы намекает ... что Бизнес процессы разработчики универсально плариновали использовать только в Обычных Формах.
Для УФ уже даже на этом этапе (открытие формы при активации пользователем задачи) приходится дорисовывать костыли в каждой форме списка задач (сколько я их себе придумал - столько раз эти костыли нужно незабыть перетащить в новую форму)
9 mvgfirst
 
10.09.12
13:02
(6) Хотя надо полагать решение с опросом списка задач на предмет "годных к исполнению в данный момент" - реализовать придется хотя бы для того что бы у других пользователей задача всплыла.
Хотя если подумать - это будет несколько нелогично (ну или скажем так - неожидаемо для пользователя). Сидит себе пользователь "никого не трогает, морда красная" - а тут бац! И посыпались окна открываться потому что какой-то умный менагер поставил его в исполнители сразу в 20 активных БП ))))
10 kn
 
10.09.12
13:11
Если менеджер нажимает какую-то кнопку и стартует БП, то можно получить запросом задачи по этому БП с исполнителем данный менеджер и потом вывести форму задачи или нет?
11 mvgfirst
 
10.09.12
13:17
(10) Можно - но я так понимаю, это решение когда код вызова такого запроса нужно прописывать на каждой кнопке где будет стартовать какой-либо процесс?

Хочется как-то универсально (автоматически) что-ли, один раз где-то описав механику получить решение работающее в любом месте запуска процесса

Опять же, дело не только в старте процесса - открывать окно следующей задачи если она по адресации принадлежит тому же пользоателю - так же ожидаемое поведение как и открытие формы при старте БП.

Т.е. я так понимаю процедуру открытия следующей формы нужно будет прописывать в каждую процедуру "ПриВыполнении" каждого шага БП?

Я или запутался, или мозги не соображают после бессонной ночи!

Помогите разобраться таки в алгоритме работы...
12 mvgfirst
 
10.09.12
13:21
(10) В догонку вопрос:
По нажатию кнопки выполняем запрос к списку задач по исполнителю который, по идее, получит все активные задачи по текущему исполнителю. И для того что бы открыть нужную нужно получить ссылку на БП который стартовал именно по этой кнопке. А у меня сегодня всю ночь почему то не получилось получить ссылку в клиентской процедуре на созданный в серверной процедуре БП. В чем может быть проблема? БП как то надо по особенному возвращать ссылку на БП из серверных процедур?
13 kn
 
10.09.12
13:26
в запросе по задачам в ГДЕ нужно сразу наложить условие на БП
14 kn
 
10.09.12
13:28
сделай для всех через обработчик ожидания(6), а для автора ДатуНапоминания не заполняй, а делай как в(10)+(13)
15 mvgfirst
 
10.09.12
13:44
(13) пока это единственная идея - производящая впечатление работоспособной.

Вопрос остается октрытым: На форме рабочего стола, кнопка - на кнопке вызов функции модуля формы с директиврой &НаСервере, в этой функции создается экземпляр объекта БП, записывается и стартует, из функции возвращаю ссылку на созданный БП.
В результате в процедуре которая вызвала функцию создания БП (она с директивой &НаКлиенте) не могу получить доступ ни к реквизитам БП ни как таковой ссылке на сам БП. Т.е. данные таки возвращаются - но это не ссылка на БП а стуктура.

Я что-то делаю не так? Может возвращаему ссылку надо "обернуть" в какой то вызов функции?
16 mvgfirst
 
10.09.12
13:50
Делал вот так:

&НаСервере
Функция СоздатьНовыйПроцесс()
   _НовыйПроцесс = БизнесПроцессы.РегистрацияЗаявки.СоздатьБизнесПроцесс();
   _НовыйПроцесс.Дата = ТекущаяДата();
   _НовыйПроцесс.Записать();
   _НовыйПроцесс.Старт();
   Возврат _НовыйПроцесс.Ссылка;    
КонецФункции

&НаКлиенте
Процедура ЗарегистрироватьЗаявку(Команда)

   НовыйПроцесс = СоздатьНовыйПроцесс();
   // РегистрацияЗаявки - реквизит БП (ссылка на документ)
   ФормаРегистрации = НовыйПроцесс.РегистрацияЗаявки.ПолучитьФорму("ФормаЭлемента");
   ФормаРегистрации.Открыть();
КонецПроцедуры

При попытке получить форму говорит нет такого метода "ПолучитьФорму" в отладчике не показывает даже что за тип данных "РегистрацияЗаявки" Хотя до момента возврата в отладчике видно и структуру БП и вложенных в него реквизитов
17 kn
 
10.09.12
13:59
можешь посмортеть тип НовыйПроцесс
поставив точку останова  на
ФормаРегистрации = НовыйПроцесс.РегистрацияЗаявки.ПолучитьФорму("ФормаЭлемента");
это же ссылка на БизнесПроцессы.РегистрацияЗаявки
зачем еще писать НовыйПроцесс.РегистрацияЗаявки или нет?
18 mvgfirst
 
10.09.12
14:01
(17) в этом месте у меня отладчик показыает что это не ссылка на БП - а структура ((( Потому и не может получить доступ к реквизиту "РегистрацияЗаявки"
До 4-х утра сегодня боролся - так и не понял кто на косячил - я или платформа 1С

Если у кого-то подобный код работает исправно - буду признателен на указание конкретного места где я ошибся.
19 kn
 
10.09.12
14:34
может посмотрть как напрмер работают в УТ11 с БП
20 mvgfirst
 
10.09.12
14:50
(19) Наверно придется скачать - варианты кончились
Смотрел Документооборот - и или плохо смотрел или одно из двух ))) Но такую задачу там не обнаружил
21 Lexusss
 
10.09.12
16:41
Основная проблема - генерация задач происходит на сервере, а вывести форму ты хочешь на клиенте. При этом платформа передает на клиента только информацию для обновления списков по тому объекту, который непосредственно записывается/изменяется.
С другой стороны, принудительное обновление список задач на клиенте при старте БП было бы не идеальным решением, т.к. весьма вероятна (и даже более типична) ситуация, когда БП стартуется с задачи кому нить другому. В этом случае происходил бы не рациональный перезапрос списка задач текущего пользователя.
У себя в документообороте для решения такой проблемы я применил следующий метод. Он прошел суровую проверку и множественные оптимизации для организации онлайн работы сотен пользователей.
В форме всех БП:
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
   Если ПараметрыЗаписи.Свойство("Старт") И ПараметрыЗаписи.Старт Тогда
       Оповестить("БизнесПроцессСтартован", Объект.Ссылка);
   КонецЕсли;
КонецПроцедуры

Форма списка задач подхватывает это событие и смотрит, не выплыли ли связанные с этим новые задачи. Проверка идет в привилегированном режиме на сервере, чтобы не накладывать 100километровый RLS. При выявлении оных - вызываются методы их активации.

Открытие форм в управляемом режиме выполняется методом глобального контекста, например
ОткрытьФорму("БизнесПроцесс.РегистрацияЗаявки.ФормаОбъекта", Новый Структура("Ключ", СсылкаНаБП))
22 mvgfirst
 
10.09.12
17:14
(21) Спасибо за методу. В принципе я думал об оповещении - но думал не с того конца и все не мог понять как можно вызвать оповещение из серверной процедуры... Но таки легче оповещать, это более правильно ложится на мое понимание естественного порядка вещей в конфигурации!!!!
23 mvgfirst
 
14.09.12
01:34
Я походу все-таки что-то недопонимаю.

Есть форма на рабочем столе. На форме кнопка "Запустить БП"
По кнопке вызываю функцию с директивой "НаСервере"
Задача функции создать БП, сохранить и запустить.
Объясните как вернуть из этой функции ссылку на БП? Так что бы в вызывавшей процедуре это была действительно ссылка на созданный и запущенный БП?
24 mvgfirst
 
14.09.12
04:08
Идею с оповещениями протестировал! Рабочая, но к сожалению не универсальная - т.к. нужно в каждом месте где вызываешь функцию создания и старта бизнес-процесса нужно прописывать "Оповестить"
Хотя в общей картине костылей которые приходится себе добавлять для успешной работы - это нормальное явление.
25 Armando
 
14.09.12
10:21
Покажи обработчик команды, и функцию, которая стартует БП
26 Lexusss
 
14.09.12
12:07
(24) Без возвращение информации о старте ВРУЧНУЮ на клиент вообще ничего не получится. Т.к. клиент совершенно не догадывается, что там натворил сервер у себя в базе.
27 mvgfirst
 
14.09.12
13:06
(26) Это я понял, просто я в принципе не собираюсь пользоваться формами какого либо из создаваемых БП. Под каждый шаг БП если требуется действие пользователя оно будет подкреплено соответствующим документом. Собственно говоря даже для страта БП будет или кнопка - или какой-то из документов будет запускать БП при проведении себя )))

Поэтому и хотелось некий такой метод где-то в общих определить, что бы при каждом старте БП он отрабатывал одинаково и показывал пользователю форму задачи (или документа под нее подложенного)
28 mvgfirst
 
14.09.12
13:07
(26) Хотя чисто концептуально не придумал еще что делать - если пользователю "прилетит" одновременно больше 1 задачи, т.е. или по процессу так положено, или же процесс расспаралелился и после выполнения шага с автоматической обработкой ветка опять смокнулась на одном и том же пользователе.

Что открывать сразу несоколько форм?
29 kochurovg
 
14.09.12
13:19
(16) в УФ на клиенте форму надо открывать :
    ОткрытьФорму("БизнесПроцес.РегистарцияЗаявки.Форма.ФормаЭлемента",Новый Структура("Ключ",НовыйПроцесс));
30 mvgfirst
 
14.09.12
13:52
(29) возможно и так и нужно, только в том примере мне нужно было открыть не форму бизнес-процесса а документа, являющегося реквизитом в этом бизнес процессе и проблема была в том что я не мог получить ссылку на документ из ссылки на созданный БП. Возможно делал что-то не так.