Страница 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, есть еще сообщение 'Отменить типовую хозяйственную операцию по документу?', не подскажите как ее обработать?