Как использовать Order by в Vip
Добавлено: 12 окт 2004, 12:08
Здравствуйте все! Может будете любезны, подскажите чего-нибудь человеку. Проблема такая. Пишу интерфейс, таблица содержит много записей, но некоторые из них имеют одинаковые значения полей (год, месяц, номер наряда, подразделение). Мне их надо сгруппировать по этим полям и отобразить уже сгруппированные. Пробую использовать Order by в логической таблице, но не получается - таблица выходит пустой, хотя в обычном SQL запрос отрабатывает правильно.
Вот текст интерфейса:
#include galnet.inc
end;
Interface ReestrVirab 'Выбор нарядов' DoAccept,EscClose,cyan;
show at (2,2,120,25);
// Таблица нарядов (только заголовки, без показа работ)
Table Struct TNarayd
( nRec : comp
,tnNarayd : String
,tMonth : Integer
,tYear : Integer
,tcPodr : comp
,tPodrName : String
,tFIO : String
,tSmena : Integer
,tNBrig : String
,tCBrig : Comp
,tcPerson : comp
)
with index
( TableNr = nRec,
TableNar = tnNarayd,
TablecPodr =tcPodr,
TablecPer = tcPerson
) ;
var nmonth, monthold,r: Integer;
var NYear, yearold, smena, smenaold: Integer;
var numnar, NamePodr,numold: String;
var nrecpodr,cpodrold: Comp;
rnarayd, rvirab: Integer;
Create view t1
As select *
From Virab, katpodr, katmc, brigad, normtmr, lschet, persons
WHERE ((
//root==virab.nrec and
virab.cmc == katmc.nrec and
virab.cpodr ==katpodr.nrec and
virab.cBrig == Brigad.nrec and
virab.cto == normtmr.nrec and
virab.cperson ==persons.nrec
)) Order by virab.year, virab.month, virab.nnarayd;
//если Order стоит, то таблица пустая получается, если убрать, то не группируются
create view t2 as select * from tnarayd;
handleevent
CmInit:
{
if getfirst virab= tsOK
{
monthold:=0;
yearold:=0;
numold:='';
cpodrOld:=0;
smenaold:=0;
_loop virab
{
if ((t1.virab.month<>monthold) or (t1.virab.year<>yearold) or (t1.virab.nnarayd<>numold) or
(t1.virab.cpodr<>cpodrold))
{
monthold:=t1.virab.month;
yearold:=t1.virab.year;
numold:=t1.virab.nnarayd;
cpodrOld:=t1.virab.cpodr;
Insert tnarayd set tnarayd.tnnarayd:=t1.virab.nnarayd, tnarayd.tmonth:=t1.virab.month, tnarayd.tsmena:=Integer(t1.virab.nsmena),
tnarayd.tyear:=t1.virab.year, tnarayd.tcpodr:=t1.virab.cpodr, tnarayd.tPodrname:=t1.katpodr.name,
tnarayd.tcbrig:=t1.virab.cbrig;
}
getnext virab;
};
};
getfirst tnarayd;
RescanPanel(#TNarayd);
};
end;
Panel P1;
screen vibgr
show at(1,20,,);
BUTTONS
cmgNew; cmgRed;
<<
<.Новый наряд.> <.Редактировать.>
>>
end;//screen
Browse BVirab show at(1,1,,19);
table TNarayd;
Fields
TNarayd.tyear 'Год':[4], Protect;
TNarayd.tmonth 'Месяц': [2], Protect;
TNarayd.tPodrname 'Подразделение': [40], Protect;
Tnarayd.tSmena 'Смена':[5], Protect;
TNarayd.tNNarayd 'Наряд' :[10], Protect;
TNarayd.tNBrig 'Бригада':[19], Protect;
TNarayd.tFIO 'Исполнитель':[40], Protect;
end;
handleevent
cmPick :
{
}
cmgNew:
{ nmonth:=0; nyear:=0; numnar:='';nrecpodr:=0; NamePodr:='';
RunInterface('GetNaraydParam',nmonth,nyear,numnar, nrecpodr, NamePodr, smena);
If (nmonth<>0) and (nyear<>0) and (numnar<>'')
{
Insert TNarayd set tnarayd.tnnarayd:=numnar, tnarayd.tmonth:=nmonth,
tnarayd.tyear:=nyear, tnarayd.tcpodr:=nrecpodr, tnarayd.tpodrname:=NamePOdr, tnarayd.tsmena:=smena;
Insert Virab set Virab.nnarayd:=numnar, Virab.month:=nmonth,
Virab.year:=nyear, Virab.cpodr:=nrecpodr, virab.nsmena:=String(smena)};
RescanPanel(#TNarayd);
}
cmDefault:
{ReReadRecord;
}
cmgRed:
{
RunInterface('Virab',tnarayd.tnnarayd,tnarayd.tmonth,tnarayd.tyear,tnarayd.tcpodr,String(tnarayd.tsmena));
RescanPanel(#TNarayd);
}
cmCheckField:
{
}
end; // HandleEvent
end;// panel
end. // interface
Почему не работает Order by?????? ???
Вот текст интерфейса:
#include galnet.inc
end;
Interface ReestrVirab 'Выбор нарядов' DoAccept,EscClose,cyan;
show at (2,2,120,25);
// Таблица нарядов (только заголовки, без показа работ)
Table Struct TNarayd
( nRec : comp
,tnNarayd : String
,tMonth : Integer
,tYear : Integer
,tcPodr : comp
,tPodrName : String
,tFIO : String
,tSmena : Integer
,tNBrig : String
,tCBrig : Comp
,tcPerson : comp
)
with index
( TableNr = nRec,
TableNar = tnNarayd,
TablecPodr =tcPodr,
TablecPer = tcPerson
) ;
var nmonth, monthold,r: Integer;
var NYear, yearold, smena, smenaold: Integer;
var numnar, NamePodr,numold: String;
var nrecpodr,cpodrold: Comp;
rnarayd, rvirab: Integer;
Create view t1
As select *
From Virab, katpodr, katmc, brigad, normtmr, lschet, persons
WHERE ((
//root==virab.nrec and
virab.cmc == katmc.nrec and
virab.cpodr ==katpodr.nrec and
virab.cBrig == Brigad.nrec and
virab.cto == normtmr.nrec and
virab.cperson ==persons.nrec
)) Order by virab.year, virab.month, virab.nnarayd;
//если Order стоит, то таблица пустая получается, если убрать, то не группируются
create view t2 as select * from tnarayd;
handleevent
CmInit:
{
if getfirst virab= tsOK
{
monthold:=0;
yearold:=0;
numold:='';
cpodrOld:=0;
smenaold:=0;
_loop virab
{
if ((t1.virab.month<>monthold) or (t1.virab.year<>yearold) or (t1.virab.nnarayd<>numold) or
(t1.virab.cpodr<>cpodrold))
{
monthold:=t1.virab.month;
yearold:=t1.virab.year;
numold:=t1.virab.nnarayd;
cpodrOld:=t1.virab.cpodr;
Insert tnarayd set tnarayd.tnnarayd:=t1.virab.nnarayd, tnarayd.tmonth:=t1.virab.month, tnarayd.tsmena:=Integer(t1.virab.nsmena),
tnarayd.tyear:=t1.virab.year, tnarayd.tcpodr:=t1.virab.cpodr, tnarayd.tPodrname:=t1.katpodr.name,
tnarayd.tcbrig:=t1.virab.cbrig;
}
getnext virab;
};
};
getfirst tnarayd;
RescanPanel(#TNarayd);
};
end;
Panel P1;
screen vibgr
show at(1,20,,);
BUTTONS
cmgNew; cmgRed;
<<
<.Новый наряд.> <.Редактировать.>
>>
end;//screen
Browse BVirab show at(1,1,,19);
table TNarayd;
Fields
TNarayd.tyear 'Год':[4], Protect;
TNarayd.tmonth 'Месяц': [2], Protect;
TNarayd.tPodrname 'Подразделение': [40], Protect;
Tnarayd.tSmena 'Смена':[5], Protect;
TNarayd.tNNarayd 'Наряд' :[10], Protect;
TNarayd.tNBrig 'Бригада':[19], Protect;
TNarayd.tFIO 'Исполнитель':[40], Protect;
end;
handleevent
cmPick :
{
}
cmgNew:
{ nmonth:=0; nyear:=0; numnar:='';nrecpodr:=0; NamePodr:='';
RunInterface('GetNaraydParam',nmonth,nyear,numnar, nrecpodr, NamePodr, smena);
If (nmonth<>0) and (nyear<>0) and (numnar<>'')
{
Insert TNarayd set tnarayd.tnnarayd:=numnar, tnarayd.tmonth:=nmonth,
tnarayd.tyear:=nyear, tnarayd.tcpodr:=nrecpodr, tnarayd.tpodrname:=NamePOdr, tnarayd.tsmena:=smena;
Insert Virab set Virab.nnarayd:=numnar, Virab.month:=nmonth,
Virab.year:=nyear, Virab.cpodr:=nrecpodr, virab.nsmena:=String(smena)};
RescanPanel(#TNarayd);
}
cmDefault:
{ReReadRecord;
}
cmgRed:
{
RunInterface('Virab',tnarayd.tnnarayd,tnarayd.tmonth,tnarayd.tyear,tnarayd.tcpodr,String(tnarayd.tsmena));
RescanPanel(#TNarayd);
}
cmCheckField:
{
}
end; // HandleEvent
end;// panel
end. // interface
Почему не работает Order by?????? ???