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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Unique
Постоянный гость
Сообщения: 91
Зарегистрирован: 07 дек 2005, 10:10
Контактная информация:

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

Сообщение Unique »

Народ, подскажите пожалуйста, как можно у галактического интерфейса переписать табличное событие. Нужно обработать событие cmDelOnProtect у интерфейса soprhoz с учетом выделенных инсертом записей (PickVip).
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

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

Сообщение RAJAH »

alter interface, не?
Unique
Постоянный гость
Сообщения: 91
Зарегистрирован: 07 дек 2005, 10:10
Контактная информация:

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

Сообщение 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.
Unique
Постоянный гость
Сообщения: 91
Зарегистрирован: 07 дек 2005, 10:10
Контактная информация:

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

Сообщение Unique »

сделала синоним для soprhoz - кажется заработало.
только теперь вопрос - куда сохраняются нреки выделенных записей?????????? pickVip - пустой.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

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

Сообщение RAJAH »

Unique писал(а):pickVip - пустой.
Как узнали?
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение Den »

Unique писал(а):Переписываю обоработку события cmDelOnProtect в tableevent для того, чтобы можно было обработать записи, выделенные инсертом (в pickVip), но обработка tableevent не работает. Работает обработчик cmDelOnProtect handleevent интерфейса, и это событие срабатывает после обработки выделенных инсертом записей. Как можно обработать выделенные инсертом записи?????
Конечно не работает cmDelOnProtect - это не табличное событие.
насколько помню там пометка идет посредством объекта recMarker а выбранные записи еще к тому же хранятся во времянке SelNums
Unique
Постоянный гость
Сообщения: 91
Зарегистрирован: 07 дек 2005, 10:10
Контактная информация:

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

Сообщение Unique »

насчет pickvip - подсказали (со слов доброжелателя так было в старых исходниках)
Unique
Постоянный гость
Сообщения: 91
Зарегистрирован: 07 дек 2005, 10:10
Контактная информация:

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

Сообщение Unique »

Конечно не работает cmDelOnProtect - это не табличное событие.
насколько помню там пометка идет посредством объекта recMarker а выбранные записи еще к тому же хранятся во времянке SelNumsDen
а где нужно обработать cmDelOnProtect?
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение 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.
Но уверенности что правильно при этом все будет работать что то нет
Unique
Постоянный гость
Сообщения: 91
Зарегистрирован: 07 дек 2005, 10:10
Контактная информация:

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

Сообщение Unique »

спасибо за ответ.
Еще такой вопрос: при пометке нескольких записей и попытке отвязать ТХО выходит сообщение "Будьте ОСОБЕННО внимательны! " + #13 + "Выделена группа записей" + #13 + "Выполнить операцию по всем выделенным?" - да/нет. Это сообщение похоже обрабатывается в cmDelOnProtect? Мне нужно выполнить определенные действия, если на это сообщение ответят утвердительно. Это возможно?
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение 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);
}
...
Unique
Постоянный гость
Сообщения: 91
Зарегистрирован: 07 дек 2005, 10:10
Контактная информация:

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

Сообщение Unique »

спасибо, очень помогли! :smile:
Может еще подскажете как лучше работать с маркером. Для обработки выбранных записей я создаю маркер и импортирую в него выбранные записи ( IMarker(pMarker).ExportTo() ). Но экспорт по времени идет очень долго. Может можно по-другому обработать выбранные записи?
Unique
Постоянный гость
Сообщения: 91
Зарегистрирован: 07 дек 2005, 10:10
Контактная информация:

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

Сообщение Unique »

Den, есть еще сообщение 'Отменить типовую хозяйственную операцию по документу?', не подскажите как ее обработать?
Ответить