Страница 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
спасибо, очень помогли! :smile:
Может еще подскажете как лучше работать с маркером. Для обработки выбранных записей я создаю маркер и импортирую в него выбранные записи ( IMarker(pMarker).ExportTo() ). Но экспорт по времени идет очень долго. Может можно по-другому обработать выбранные записи?

Re: Как переписать табличное событие

Добавлено: 19 мар 2013, 08:24
Unique
Den, есть еще сообщение 'Отменить типовую хозяйственную операцию по документу?', не подскажите как ее обработать?