Интерфейс множественного выбора
Добавлено: 20 июн 2006, 17:39
Подскажите как обработать данные из интерфейса множественного выбора, созданного при помощи маркеров. Необходим отчет ARD, который выводил бы документы по нескольким дескрипторам. Сам интерфейс множественного выбора сделать получилось, а вот как дальше обработать полученные данные не могу понять.
Interface int_mnoj_akts_descr 'выбор дескриптора' cyan, doaccept;
show at(,,80,25)
var
d2:comp;
x2:word
mMc:longInt;
indexNo:longInt;
parameters d2,x2,mMc,indexNo;
create view v1 as select tuneval.strval
from tuneval (memory, autoload)
where ((cuser==x$users.atl_nrec))
and tuneval.obj=x$users.XU$USEROFFICE
and x$users.XU$USEROFFICE=x2
and d2=ctune and strval<>''
;
function Istrue : Boolean;
begin
Istrue:=SearchMarker(mMc,tuneval.nrec,indexNo);
end;
browse b1;
show at(,,,14)
fields
if (isTrue, '+',' ') '*':[1], Skip,{font={bold=Istrue}};
tuneval.strval 'Дескриптор':[5],protect,{font={bold=istrue}} ;
X$USERS.XU$LOGINNAME 'Логин пользователя':[30],protect,{font={bold=istrue}};
end;
Screen s1;
Show at(,15,,)
buttons
cmMarkRec;
cmMarkAll;
cmInvertMark;
cmUnmarkAll;
<<
<. Пометить .> <. Пометить все .> <. Инвертировать .> <. Снять пометки .>
>>
end;
handleevent
cmInit:{
mMc:=initmarker('Mc',8,10,10);
clearmarker(mMc);
}
cmMarkRec: {
InvertMarker(mMc, tuneval.nrec);
if ((GetNext tuneval) = tsOk) {};
Rereadrecord;
}
cmMarkall: {
PushPos(tntuneval);
_Loop tuneval{
Insertmarker(mMc, tuneval.nrec);
}
PopPos(tntuneval);
Rereadrecord;
}
cmInvertMark: {
Pushpos(tntuneval);
_Loop tuneval {
invertmarker(mMc, tuneval.nrec);
}
PopPos(tntuneval);
rereadrecord;
}
cmUnMarkAll: {
clearmarker(mMc);
rereadrecord;
}
cmDone:{
DoneMarker(mMc,'Mc')
}
end;
end.
Interface int_mnoj_akts_descr 'выбор дескриптора' cyan, doaccept;
show at(,,80,25)
var
d2:comp;
x2:word
mMc:longInt;
indexNo:longInt;
parameters d2,x2,mMc,indexNo;
create view v1 as select tuneval.strval
from tuneval (memory, autoload)
where ((cuser==x$users.atl_nrec))
and tuneval.obj=x$users.XU$USEROFFICE
and x$users.XU$USEROFFICE=x2
and d2=ctune and strval<>''
;
function Istrue : Boolean;
begin
Istrue:=SearchMarker(mMc,tuneval.nrec,indexNo);
end;
browse b1;
show at(,,,14)
fields
if (isTrue, '+',' ') '*':[1], Skip,{font={bold=Istrue}};
tuneval.strval 'Дескриптор':[5],protect,{font={bold=istrue}} ;
X$USERS.XU$LOGINNAME 'Логин пользователя':[30],protect,{font={bold=istrue}};
end;
Screen s1;
Show at(,15,,)
buttons
cmMarkRec;
cmMarkAll;
cmInvertMark;
cmUnmarkAll;
<<
<. Пометить .> <. Пометить все .> <. Инвертировать .> <. Снять пометки .>
>>
end;
handleevent
cmInit:{
mMc:=initmarker('Mc',8,10,10);
clearmarker(mMc);
}
cmMarkRec: {
InvertMarker(mMc, tuneval.nrec);
if ((GetNext tuneval) = tsOk) {};
Rereadrecord;
}
cmMarkall: {
PushPos(tntuneval);
_Loop tuneval{
Insertmarker(mMc, tuneval.nrec);
}
PopPos(tntuneval);
Rereadrecord;
}
cmInvertMark: {
Pushpos(tntuneval);
_Loop tuneval {
invertmarker(mMc, tuneval.nrec);
}
PopPos(tntuneval);
rereadrecord;
}
cmUnMarkAll: {
clearmarker(mMc);
rereadrecord;
}
cmDone:{
DoneMarker(mMc,'Mc')
}
end;
end.