Страница 1 из 1

как быть тут...

Добавлено: 16 май 2002, 22:18
Den
Привет !
Возникла необходимость подправить галактический интерфейс, а именно, отобразить в browse значения внешних атрибутов...
Было :
.....
From
KatSopr(KATSOPR02),
KatOrg(ReadOnly),
Synonym KatOrg KatOrg2(ReadOnly),
KlVal(ReadOnly),
UserTune(ReadOnly)
Where
((
TypeSoprIndKontr == KatSopr.VidSopr and
KatSopr.cOrgBase == KatOrg.NRec and
KatSopr.cValut == KlVal.NRec and
UserName == UserTune.OwnName
))
..
Browse
Panel pnKatSopr
table KatSopr;
Browse brKatSopr
table KatSopr
fields
KatOrg.Name
KatSopr.dSopr
KatSopr.Summa
KatSopr.SumVal
KlVal.SimvolV
VidDolg 'Вид долга' ('Вид задолженос
end; // browse
...

Добавил я в подцепки
...
and katsopr.nrec==attrval.crec
and 1109==attrval.wtable
and attrval.cattrnam==attrnam.nrec
and (1109=attrnam.WTABLE
and 'Группы ДО'=locase(attrnam.name))
...
в browse
..
attrval.VSTRING
..
Ну и в обработчике событий в событии Cmpick
следующее :
{
#attrval.vstring:
{
if (Runinterface(Getgrdo,cc1,nazv)<>Cmcancel)
then
{
if getfirst attrval=tsok
then
{
if attrval.vstring<>nazv
{
update current attrval
set
attrval.vstring:=nazv;
}
}
else
{
insert attrval set
attrval.wtable :=1109,
attrval.crec :=katsopr.nrec,
attrval.cattrnam:=40019E0E77E80747h,
attrval.vstring :=nazv;
}
Rescanpanel(#katsopr);
}

Все ничего, но по нажатию delete, если стоишь в поле attrval.vstring, и при дальнейшей смене позиции валятся ошибки :

1.Попытка записи недопустимого значения в таблицу 1109 (katsopr) (nrec=0).Операция отменена.
2. Код ошибки 203 табл 1109..

Может кто даст совет из-за чего такая штука происходит.
Может из-за того, что корневая таблица katsopr, и невозможно по delete удалить запись из attrval таким образом ??
Описал событие отдельно для attrval.vstring cmDelonprotect, но результат тот же.. :`( %

Re: как быть тут...

Добавлено: 17 май 2002, 13:02
khlybov
При надатии клавиши Del на поле не корневой таблицы происходит обнуление поля связки, в данном случае KatSopr.NRec. Кстати, DelOnProtect для этого и сделан. Тебе надо перехватить это событие и в нем полю attrval.vstring присвоить пустую строку, после чего вызвать Update для attrval. Ну или удалить эту запись совсем. Зависит от того что тебе нужно. Или не обрабатывать клавишу Del совсем (убрать ее из status-line). Но сделать обработчик на Update все равно придется сделать, если хочешь менять поля внешних аттрибутов.

Re: как быть тут...

Добавлено: 17 май 2002, 14:59
Den
При нажатии клавиши Del происходит обнуление поля связки.Но по всей видимости, транзакция (с последующим update) происходит только при смене позиции - Cmcheckfield.Если я перехватил событие и обработал его по своему, но не внес коррективы во второе, то происходит по всей видимости стандартная обработка Cmcheckfield.Где бы ее найти только(стандартную обработку), что там написано, и почему все равно выдается первой сообщение, ведь он не должен знать, что katsopr.nrec меняется..в моем случае. ??? ???

Re: как быть тут...

Добавлено: 17 май 2002, 15:51
m0p3e
Может малой кровью? Конфигуратором?

Re: как быть тут...

Добавлено: 17 май 2002, 17:14
Den
Да, с атрибутом вроде получается, но хотелось бы понять до конца где неувязка в первом варианте..