Привет !
Возникла необходимость подправить галактический интерфейс, а именно, отобразить в 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, но результат тот же.. :`( %
			
			
									
						
										
						как быть тут...
Модераторы: m0p3e, edward_K, Модераторы
Re: как быть тут...
При надатии клавиши Del на поле не корневой таблицы происходит обнуление поля связки, в данном случае KatSopr.NRec. Кстати, DelOnProtect для этого и сделан. Тебе надо перехватить это событие и в нем полю attrval.vstring присвоить пустую строку, после чего вызвать Update для attrval. Ну или удалить эту запись совсем. Зависит от того что тебе нужно. Или не обрабатывать клавишу Del совсем (убрать ее из status-line). Но сделать обработчик на Update все равно придется сделать, если хочешь менять поля внешних аттрибутов.
			
			
									
						
										
						- 
				Den
- Местный житель
- Сообщения: 1847
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: как быть тут...
При нажатии клавиши Del происходит обнуление поля связки.Но по всей видимости, транзакция (с последующим update) происходит только при смене позиции - Cmcheckfield.Если я перехватил событие и обработал его по своему, но не внес коррективы во второе, то происходит по всей видимости стандартная обработка Cmcheckfield.Где бы ее найти только(стандартную обработку), что там написано, и почему все равно выдается первой сообщение, ведь он не должен знать, что katsopr.nrec меняется..в моем случае. ??? ???
			
			
									
						
										
						Re: как быть тут...
Может малой кровью? Конфигуратором?
			
			
									
						
										
						- 
				Den
- Местный житель
- Сообщения: 1847
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: как быть тут...
Да, с атрибутом вроде получается, но хотелось бы понять до конца где неувязка в первом варианте..