Страница 1 из 1

Почему нет цикла?

Добавлено: 18 фев 2010, 13:18
sildae
Почему-то нет цикла в таблице tnakl, показывается только последняя запись накладной. Запрос сам по себе работает.
.create view tnakl
from basedoc
where
((aa==Basedoc.nrec
and
spsopr.cmcusl==katmc.nrec
and
katsopr.nrec==spsopr.csopr
and
stepdoc.nrec==katsopr.CSTEPDOC
and
basedoc.nrec==stepdoc.CBASEDOC
))
and
vid=spsopr.vidsopr
;
.create view tt
from limtmp
;
.fields
Клиент
Начало_периода
Конец_периода
Дата_остатка Сумма_остатка2
.endfields
.{
Клиент @@@@@@@@@@@@@@@@@@@@@@@@ За период: ^ по ^
@@@@@@@@@@ Вх.ост &'&&&&&&&&&&&&&.&&

.{
.begin
delete all limtmp;
end.
.begin
aa:=comp(Нрек_счета);
vid:=word(202);
end.
.{table 'tnakl'
.begin
c_mc:=tnakl.spsopr.cmcusl;
if (tt.getfirst limtmp where ((c_mc==limtmp.ckatmc))<>tsok) then begin
insert limtmp
set
limtmp.namemc:=tnakl.katmc.name,
limtmp.barkod:=tnakl.katmc.barkod,
limtmp.dsumlimit:=tnakl.spsopr.kolfact,
limtmp.ckatmc:=tnakl.spsopr.cmcusl,
limtmp.LASTUSER:=tnakl.katmc.tnved;
end;
else
update current limtmp set limtmp.dsumlimit:=limtmp.dsumlimit+tnakl.spsopr.kolfact;
end.
.} // tnakl

Заранее спасибо!

Добавлено: 18 фев 2010, 14:21
Maverick
по сути у вас цикл по главной таблице вьюхи - basedoc
нужно организовать цикл по всем узлам, включая spsopr

попробуйте так

Код: Выделить всё

.create view tnakl
from basedoc
where
((aa==Basedoc.nrec and
basedoc.nrec==stepdoc.CBASEDOC and
stepdoc.nrec==katsopr.CSTEPDOC and
katsopr.nrec==spsopr.csopr and
word (202) == spsopr.vidsopr (noindex) and // в любом случае будет быстрее чем фильтр
spsopr.cmcusl==katmc.nrec and
katmc.nrec == limtmp.ckatmc
));

.fields
Клиент
Начало_периода
Конец_периода
Дата_остатка Сумма_остатка2
.endfields
.{
Клиент @@@@@@@@@@@@@@@@@@@@@@@@ За период: ^ по ^
@@@@@@@@@@ Вх.ост &'&&&&&&&&&&&&&.&&

.{
.begin
delete all limtmp;
end.
.begin
aa:=comp(Нрек_счета);
end.
.{table 'tnakl.basedoc'
.{table 'tnakl.stepdoc'
.{table 'tnakl.katsopr'
.{table 'tnakl.spsopr'
.begin
c_mc:=tnakl.spsopr.cmcusl;
if (tnakl.getfirst limtmp where ((c_mc==limtmp.ckatmc))<>tsok) then begin
insert limtmp
set
limtmp.namemc:=tnakl.katmc.name,
limtmp.barkod:=tnakl.katmc.barkod,
limtmp.dsumlimit:=tnakl.spsopr.kolfact,
limtmp.ckatmc:=tnakl.spsopr.cmcusl,
limtmp.LASTUSER:=tnakl.katmc.tnved;
end;
else
update current limtmp set limtmp.dsumlimit:=limtmp.dsumlimit+tnakl.spsopr.kolfact;
end.
.} //spsopr
.} //katsopr
.} //stepdoc
.} //basedoc

Добавлено: 18 фев 2010, 17:09
sildae
Спасибо, все получилось!