Имя: Пароль:
1C
1С v8
Поможите по бизнес-процессу...
0 mikecool
 
19.03.13
12:34
Есть БП, в первой точке стартует задача
В задаче три реквизита адресации: исполнитель, группа пользователей, подразделение
Адресация указана в регистр сведений с измерениями: исполнитель, группа пользователей, подразделение
В РС три записи:
Вася Группа1 Подразделение1
Петя Группа1 Подразделение1
Иван Группа1 Подразделение1
У точки, в которой стартует задача, стоит признак "Групповая"
в процедуре ПриСозданииЗадач пишу:
Для Каждого Задача Из ФормируемыеЗадачи Цикл
       
   Задача.ГруппаПользователей = Группа1;
   Задача.Подразделение = Подразделение1;

КонецЦикла;
однако в ФормируемыеЗадачи - всего одна задача. Почему она только одна?
Может стоит обратить внимание на событие ПередСозданиемЗадач? но там тоже есть массив ФормируемыеЗадачи, что немного смущает...
1 mikecool
 
19.03.13
12:38
а в ПередСозданиемЗадач массив еще пуст (
2 mikecool
 
19.03.13
12:39
"Почему она только одна? " - может ли это быть оттого, что у ТочкаМаршрутаБизнесПроцесса не заполнены соответствующие реквизиты?
3 vvp91
 
19.03.13
12:39
>>> (0) Может стоит обратить внимание на событие ПередСозданиемЗадач?

Да, стоит обратить внимание: в обработчике ПередСозданиемЗадач сказать СтандартнаяОбработка = Ложь;
4 mikecool
 
19.03.13
12:41
(3) не, мне как раз не хочется отказываться от стандартной обработки
5 mikecool
 
19.03.13
12:42
щас попробую достучаться до бизнес процесса в ПередСозданиемЗадач и установить параметры точке
6 vvp91
 
19.03.13
12:46
>>>(4) не, мне как раз не хочется отказываться от стандартной обработки

Процитирую 2 издание профразработки (Радченко):
"Если в точке маршрута установлен признак Групповая, бизнес-процесс отбирает в регистре сведений, ответственном  за  адресацию,  все  записи,  соответствующие  установленным  в  данной  точке  реквизитам  адресации,  и  для  каждой  из них формирует свою задачу.
...
Если при создании собственного массива задач в параметр процедуры Стандартная обработка не записать значение  Ложь,  то  созданный  массив  очистится  и  заполнится  задачами, исходя из поведения системы по умолчанию (так, как если бы этот обработчик определен не был)."

Таким образом стандартное поведение определяет только одну точку адресации и генерирует только одну задачу.
Хочешь много задач? Генерируй по своему и ставь Ложь в СтандартнаяОбработка или же разбирайся, почему определяется только одна точка адресации.
7 mikecool
 
19.03.13
12:48
(6) ага, понятненько...
щас проверю единственный момент - укажу в перед созданием задач параметры точки маршрута и таки посмотрю на стандартное поведение )) интересно
8 mikecool
 
19.03.13
13:03
(6) "Если в точке маршрута установлен признак Групповая, бизнес-процесс отбирает в регистре сведений, ответственном  за  адресацию,  все  записи,  соответствующие  установленным  в  данной  точке  реквизитам  адресации,  и  для  каждой  из них формирует свою задачу. " - у меня получается так, что у точки маршрута не заполнены реквизиты адресации
вот как они должны заполняться - я чета хз ((
9 mikecool
 
19.03.13
13:13
по ссылке http://chistov.spb.ru/publ/5-1-0-6
данные для задач из регистра адресации берутся в случае, если указана адресация у точки в конфигураторе
а мне надоть указать ее динамиськи, как это сделать?
10 mikecool
 
19.03.13
13:26
почитал, что эти свойства фик установить для точки
но также вычитал, что в передсозданиемзадач уже должен быть список формируемых задач, а у меня он пуст (
чяднт?
11 vvp91
 
19.03.13
13:32
(8) вот как они должны заполняться - я чета хз ((
"При отметке свойства Групповая в данной точке будет создаваться столько задач, сколько записей в регистре сведений, ответственном за адресацию, будет найдено с установленными значениями реквизитов адресации."
Нужно:
* или в конфигураторе явно задать реквизит адресации, по которому система найдет записи в регистре адресации;
* или в обработчике ПередСозданиемЗадач генерировать задачи в массив ФормируемыеЗадачи с указание исполнителя и отключить стандартную обработку.

(9) а мне надоть указать ее динамиськи, как это сделать?
Генерируй задачи самостоятельно, отключай стандартную обработку.

(10) чяднт?
Ты ожидаешь, что групповая точка действия, у которой не настроены реквизиты адресации, создаст автоматом множество задач.
Нет, система выстрелит обработчиками точки действия, но не создаст ни одной задачи.
12 mikecool
 
19.03.13
13:34
(11) "Ты ожидаешь, что групповая точка действия, у которой не настроены реквизиты адресации, создаст автоматом множество задач." я просто не понимаю, почему я не могу установить реквизиты адресации динамически и далее передать управление системе для автоматического формирования задач ((
13 mikecool
 
19.03.13
13:34
+12 свойства есть, но указать их можно только на этапе конфигурирования, имхо - как то это неправильно
14 vvp91
 
19.03.13
13:40
>>>(12) ...почему я не могу установить реквизиты адресации динамически...
Ну не можешь ты исполнением кода установить значение свойства адресации на точку действия бизнес-процесса, поскольку точки действия конфигурируются при разработке. По-крайне мере, мне таких возможностей не известно.
Ты можешь создать задачу в данной точке действия, для которой задать исполнителя (адресацию) динамически. Создание задач делать в обработчике ПередСозданиемЗадач.
15 mikecool
 
19.03.13
13:47
(14) спасибо. я смирился и рисую задачи программно на основании регистра адресации 0
16 mikecool
 
19.03.13
15:47
продолжу тему
в ПередСозданиемЗадач точки-действие создал задачу, привязал к БП, указал задаче точку маршрута, сохранил
но БП не останавливается и ждет выполнение, а идет на слетующую точку
я что-то забыл указать?

создаю так:
Процедура ПередСозданиемЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, СтандартнаяОбработка)
   
   СтандартнаяОбработка = Ложь;
   НоваяЗадача = Задачи.МояЗадача.СоздатьЗадачу();
   НоваяЗадача.Наименование = ТочкаМаршрутаБизнесПроцесса.НаименованиеЗадачи;
   НоваяЗадача.Дата = ТекущаяДата();
   НоваяЗадача.Подразделение = Ссылка.Подразделение;
   НоваяЗадача.ГруппаПользователей = Нужнач группа;
   НоваяЗадача.БизнесПроцесс = Ссылка;
   НоваяЗадача.Комментарий = "Утверждение.";
   НоваяЗадача.СсылкаНаДокумент = Ссылка.Документ;
   НоваяЗадача.ТочкаМаршрута = ТочкаМаршрутаБизнесПроцесса;
   НоваяЗадача.Записать();
   
КонецПроцедуры
17 vvp91
 
19.03.13
15:55
>>>(16) я что-то забыл указать?

ФормируемыеЗадачи.Добавить(НоваяЗадача);
18 vvp91
 
19.03.13
15:57
>>> (16) НоваяЗадача.Записать();

И, кстати, записывать здесь задачу НЕ нужно. Ее нужно просто добавить в массив формируемых задач.
19 mikecool
 
19.03.13
15:58
(18) вот жеж ) спасибо
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший