ну здрасте, когда это я смеялась над вами?
по поводу * согласна с Игорем, не замечала я что то, что от нее тормозит, readonly использую, но иногда забываю (а использую потому как посоветовали - сказали так правильнее и быстрее). Чтоб разрешить вопрос все таки положу полностью фрмку (что было и как стало), дело в том что не я ее писала, мне пришлось корректировать чужую - получилось переписать почти полностью, посмотрите что стало со скоростью и зависит ли от количества записей в таблице и от * и от ридонли
и смеюсь ли я (мне было не смешно когда такая "простая" проблема у меня не получалась). По поводу "синонимы" - второй раз столкнулась с ними и когда сортировка не пошла - появился вопрос, а может это из-за них? вот и спросила.
Когда описывала задачу - старалась сделать ее максимально видимой, поэтому убрала все "лишнее" ИМХО... а видимо оно не лишнее
Итак, что было:
.form '12345'
.ard
.var
mc,otkuda,kuda:string;
d1,d2:date;
kol_vag:string;
kol_vag_mc,kol,kol_po_mc:double;
nrecmc:comp;
.endvar
.create view mc as select * from katmc where katmc.classgr = 55;
.create view zan as select * from katsopr,synonym katpodr otkuda,synonym katpodr kuda,spsopr
where (( word(600) == katsopr.vidsopr
and d1 <<= katsopr.dsopr
and d2 >>= katsopr.dsopr
and '123' == katsopr.descr
and katsopr.cpodrfrom == otkuda.nrec
and katsopr.cpodrto == kuda.nrec
and katsopr.nrec == spsopr.csopr))
and spsopr.cmcusl = nrecmc;
.fields
d1 d2 cur_date cur_time
mc kol_vag_mc kol_po_mc
.endfields
.[h skip
рисовать лень, типа поля: матценность / кол-во вагонов / кол-во,т
.]h
.begin d2:=cur_date; d1:=date(1,month(d2),year(d2));
rundialog(getinterval,d1,d2); end.
заголовок формы
за период с ^ по ^
^ ^
матценность / кол-во вагонов / кол-во,т
.{table mc
.begin kol_po_mc:=0; nrecmc := mc.katmc.nrec;
mc := mc.katmc.name; kol_vag_mc:=0;
end.
.{table zan
.begin
otkuda:=zan.otkuda.kod; kuda:=zan.kuda.kod;
if zan.katsopr.ccellval = comp(40016FA47F8F585Eh) then kol_vag:=zan.katsopr.nvagon else kol_vag:='';
kol:=zan.spsopr.kol; kol_po_mc:=kol_po_mc+kol;
kol_vag_mc:=kol_vag_mc+integer(kol_vag);
end.
.} //zan
.{?internal;(kol_po_mc<>0)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ &&&&&&&&& &'&&&&&&&&.&&&
.} // internal
.} // mc
.endform
за некрасивость названий переменных ответстенность с себя снимаю - не моя фрмка была
задача: вывести два поля склады - откуда и куда перемещали мц
вот что получилось в итоге:
.form '12345'
.ard
.var
mc,mcp,otkuda,kuda,otkudap,kudap:string;
d1,d2:date;
kol_vag:string;
kol_vag_mc,kolvag,kol_vag_mc1,kolvag1,kol_po_mc,kolmc,kol_po_mc1,kolmc1,kol:double;
nrecmc:comp;
k,m: boolean;
.endvar
.create view zan as select * from katmc,katsopr,synonym katpodr otkuda,synonym katpodr kuda,spsopr
where (( word(600) == katsopr.vidsopr
and d1 <<= katsopr.dsopr
and d2 >>= katsopr.dsopr
and '123' == katsopr.descr
and katsopr.cpodrfrom == otkuda.nrec
and katsopr.cpodrto == kuda.nrec
and katsopr.nrec == spsopr.csopr
and spsopr.cmcusl == katmc.nrec))
and katmc.classgr = 55
order by katmc.name,otkuda.kod,kuda.kod;
.fields
d1 d2 cur_date cur_time
mcp otkudap kudap kolvag1 kolmc1
mcp kolvag kolmc
mc otkuda kuda kol_vag_mc1 kol_po_mc1
mc kol_vag_mc kol_po_mc
.endfields
.[h skip
рисовать лень, типа поля: матценность / откуда / куда / кол-во вагонов / кол-во,т
.]h
.begin
d2:=cur_date; d1:=date(1,month(d2),year(d2));
rundialog(getinterval,d1,d2);
otkudap:=''; kuda:=''; kol_po_mc:=0; mcp:=''; kol_vag_mc:=0; kol_po_mc1:=0; kol_vag_mc1:=0;
end.
заголовок формы
за период с ^ по ^
^ ^
матценность / кол-во вагонов / кол-во,т
.{table zan
.begin
mc := zan.katmc.name;
kol:=zan.spsopr.kol;
if zan.katsopr.ccellval = comp(40016FA47F8F585Eh) then kol_vag:=zan.katsopr.nvagon else kol_vag:='';
if mc<>mcp then { m:=true; kolmc:=kol_po_mc; kol_po_mc:=kol; kolvag:=kol_vag_mc; kol_vag_mc:=integer(kol_vag); }
else { m:=false; kol_po_mc:=kol_po_mc+kol; kol_vag_mc:=kol_vag_mc+integer(kol_vag); }
otkuda:=zan.otkuda.kod; kuda:=zan.kuda.kod;
if otkuda<>otkudap or kuda<>kudap or mc<>mcp
then { k:=true; kolmc1:=kol_po_mc1; kol_po_mc1:=kol; kolvag1:=kol_vag_mc1; kol_vag_mc1:=integer(kol_vag); }
else { k:=false; kol_po_mc1:=kol_po_mc1+kol; kol_vag_mc1:=kol_vag_mc1+integer(kol_vag); }
end.
.{?internal;(k=true and otkudap<>'' and kuda<>'')
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @~@@@@@@@@@ @~@@@@@@@@@ &&&&&&&&&& &'&&&&&&&&.&&&
.}
.{?internal;(m=true) and mcp<>'')
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ &&&&&&&&&& &'&&&&&&&&.&&&
.}
.begin
otkudap:=otkuda; kudap:=kuda;
mcp:=mc;
end.
.}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @~@@@@@@@@@ @~@@@@@@@@@ &&&&&&&&&& &'&&&&&&&&.&&&
Итого по: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ &&&&&&&&&& &'&&&&&&&&.&&&
.endform
не знаю, сняла ли все вопросы ко мне... но постаралась
понимаю, что вам может показаться то, как я пишу - смешно и не красиво, но со временем научусь
и было приятно получить столько откликов пусть даже и не совсем в мою сторону ;D
отдельное спасибо человеку (думаю прочтет), который посоветовал мне так поступить - одну таблицу сделать, а не две
С уважением, Нина.