Страница 1 из 1
					
				Как переписать табличное событие
				Добавлено: 05 мар 2013, 14:14
				 Unique
				Народ, подскажите пожалуйста, как можно у галактического интерфейса переписать табличное событие. Нужно обработать событие cmDelOnProtect у интерфейса soprhoz с учетом выделенных инсертом записей (PickVip).
			 
			
					
				Re: Как переписать табличное событие
				Добавлено: 05 мар 2013, 15:03
				 RAJAH
				alter interface, не?
			 
			
					
				Re: Как переписать табличное событие
				Добавлено: 06 мар 2013, 08:59
				 Unique
				Переписываю обоработку события cmDelOnProtect в tableevent для того, чтобы можно было обработать записи, выделенные инсертом (в pickVip), но обработка tableevent не работает. Работает обработчик cmDelOnProtect handleevent интерфейса, и это событие срабатывает после обработки выделенных инсертом записей. Как можно обработать выделенные инсертом записи?????
Вот мой alter:
#component "F_SOPRHOZ"
alter interface SoprHoz;
create view
as select soprhoz.nrec
 from
 soprhoz
where
((
    pickVip.pickrec == soprhoz.nrec
))
;
tableEvent
cmDelOnProtect:
{
 message('table.cmDelOnProtect');
 if curtable = #soprhoz then message('table soprhoz');
 if (inherited :: handleevent(cmDelOnProtect)<>heOK) then abort;
}
end; // tableevent
//------  interface -------------
handleevent
cmDelOnProtect:
{
 _loop PickVip
    message(pickVip.pickRec  + '--' + soprhoz.nrec);
 message('interface.cmDelOnProtect');
 if (inherited :: handleevent(cmDelOnProtect)<>heOK) then abort;
}
end
end.
			 
			
					
				Re: Как переписать табличное событие
				Добавлено: 06 мар 2013, 10:16
				 Unique
				сделала синоним для soprhoz - кажется заработало.
только теперь вопрос - куда сохраняются нреки выделенных записей?????????? pickVip - пустой.
			 
			
					
				Re: Как переписать табличное событие
				Добавлено: 06 мар 2013, 10:33
				 RAJAH
				Unique писал(а):pickVip - пустой.
Как узнали?
 
			
					
				Re: Как переписать табличное событие
				Добавлено: 06 мар 2013, 11:48
				 Den
				Unique писал(а):Переписываю обоработку события cmDelOnProtect в tableevent для того, чтобы можно было обработать записи, выделенные инсертом (в pickVip), но обработка tableevent не работает. Работает обработчик cmDelOnProtect handleevent интерфейса, и это событие срабатывает после обработки выделенных инсертом записей. Как можно обработать выделенные инсертом записи?????
Конечно не работает  cmDelOnProtect - это не табличное событие. 
насколько помню там пометка идет посредством объекта recMarker а выбранные записи еще к тому же хранятся во времянке SelNums
 
			
					
				Re: Как переписать табличное событие
				Добавлено: 06 мар 2013, 11:57
				 Unique
				насчет pickvip - подсказали (со слов доброжелателя так было в старых исходниках)
			 
			
					
				Re: Как переписать табличное событие
				Добавлено: 06 мар 2013, 12:01
				 Unique
				
Конечно не работает cmDelOnProtect - это не табличное событие. 
насколько помню там пометка идет посредством объекта recMarker а выбранные записи еще к тому же хранятся во времянке SelNumsDen 
а где нужно обработать cmDelOnProtect?
 
			
					
				Re: Как переписать табличное событие
				Добавлено: 07 мар 2013, 18:23
				 Den
				Unique писал(а):
а где нужно обработать cmDelOnProtect?
cmDelOnProtect - согласно документации , окошковое событие. По хорошему, его описывают в обработчике окна именно, а не tableevent(или HE Panel-и)
Я заглянул в soprhoz немного...там не все так просто. Видимо как то исторически оно описано в панели и в HE Interfaсe делают ему stop и это накладывает некоторые особенности поведения (точнее, быстрее всего это баги...). 
Вообщем словиться хоть как то вот так примерно
Код: Выделить всё
alter interface soprhoz;
Panel panSoprHoz
 Table SoprHoz;
  handleevent
  cmDelOnProtect:{
                   Message('CmDelOnProtect PANEL recinmarker='+IMarker(pMarker).Count+'|'+recordsintable(tnSelNums));
                   inherited :: handleevent(CmDelOnProtect)
                 }
 end;
end;
handleevent
  CmDelOnProtect:{
                           }
end;
end.
Но уверенности что правильно при этом все будет работать что то нет
 
			
					
				Re: Как переписать табличное событие
				Добавлено: 11 мар 2013, 08:12
				 Unique
				спасибо за ответ.
Еще такой вопрос: при пометке нескольких записей и попытке отвязать ТХО выходит сообщение "Будьте ОСОБЕННО внимательны! " + #13 + "Выделена группа записей" + #13 + "Выполнить операцию по всем выделенным?"  - да/нет. Это сообщение похоже обрабатывается в cmDelOnProtect? Мне нужно выполнить определенные действия, если на это сообщение ответят утвердительно. Это возможно?
			 
			
					
				Re: Как переписать табличное событие
				Добавлено: 11 мар 2013, 10:33
				 Den
				Код: Выделить всё
....
overload 
  Function CanDelOnProtect: boolean;  
end;
...
Function CanDelOnProtect: boolean;  
{
  Result := False;
  if (IMarker(pMarker).Count <> 0)
  { // если есть пометка, то текущую запись не анализируем
    if (message('Будьте ОСОБЕННО внимательны!'#13 +
                'Выделена группа записей.'#13#13 +
                'Выполнить операцию по всем выделенным?', YesNo + Confirmation) = Yes)
    {
      Result := True;
    }
    // права дроступа на групповые записи обрабатываются в самих функциях
    Exit;
  }
  if ((iPermission.wProtect = cgProt_Date) and (CurField = #ShowHozOpName))
    Result := true; // Можно отвязывать ТХО в закрытом периоде
  else
    Result := CanEditSoprHoz(cgMessage);
}
...
 
			
					
				Re: Как переписать табличное событие
				Добавлено: 12 мар 2013, 12:19
				 Unique
				спасибо, очень помогли!  
 
 
Может еще подскажете как лучше работать с маркером. Для обработки выбранных записей я создаю маркер и импортирую в него выбранные записи (  IMarker(pMarker).ExportTo() ). Но экспорт по времени идет очень долго. Может можно по-другому обработать выбранные записи?
 
			
					
				Re: Как переписать табличное событие
				Добавлено: 19 мар 2013, 08:24
				 Unique
				Den, есть еще сообщение 'Отменить типовую хозяйственную операцию по документу?', не подскажите как ее обработать?