есть броуз, отображающий таблицу в памяти
Для строк, у которых поле1 = 1 необходимо запретить ввод значения в Поле2, при этом, если Поле1 <> 1 - иметь возможность вводить в Поле2 значение.
Нашел стандартный интерфейс "Текущее наличие МЦ по разрезам" (GetTekSaldoParty_Release)
Идею я понял следующим образом:
поле делаем Protect
Попытку ввода значения отлавливаем событием cmOpenSearch. При этом проверяем условие, и если значение ввести можно - запрашиваем его у пользователя через диалог.
Проблема в том, что если в стандартном интерфейсе при вводе в запрещенных строках вообще ничего не происходит, в моем возникает строка поиска и происходит перепозиционирование на подходящую строку, если такая находится.
В своем интерфейсе написал следующим образом:
Код: Выделить всё
BROWSE B1 ('');
Show at(,8,,);
TABLE mtTPRICE
FIELDS
{Font = {Color = if (mtTPRICE.Prodano > 0, ColorGray, 0)}};
mtTPRICE.SKATMC 'Объект недвижимости' :[20], SKIP;
mtTPRICE.PRICE 'Цена 1':[, '\0p[|-]366`666`666`667'], PROTECT, lessNull;
mtTPRICE.PRICE2 'Цена 2':[, '\0p[|-]366`666`666`667'], PROTECT, lessNull;
END;
handleevent
cmOpenSearch:{
if mtTPRICE.Prodano=1
{
! message('1');
exit;
}
! message('2');
var newPMC:double;
newPMC:=0;
case CurField of
#mtTPRICE.PRICE:{
if RunDialog(NewPriceMC, newPMC) <> cmCancel
{
update current mtTPRICE set price:=newPMC;
}
RescanPanel(#mtTPRICE);
}
#mtTPRICE.PRICE2:{
if RunDialog(NewPriceMC, newPMC) <> cmCancel
{
update current mtTPRICE set price2:=newPMC;
}
RescanPanel(#mtTPRICE);
}
end;
}
end;