Странное поведение выборки в форме
Добавлено: 27 авг 2008, 20:09
Имеется отчет, в который в потоке приходит баркод матценности, мне небходимо распечатать операции с контрагентами по этой МЦ. При этом на момент формирования отчета накладные могут быть не проведены. Потому цепляемся за баркод и пишем следующую выборку:
в mcbark вытянут полученный из потока баркод МЦ. В этом случае в цикле по нескольким МЦ все отрабатывает. Стоит добавить в выборку строчку
выборка сбивается - работает только по ОДНОй, первой, МЦ, но столько раз, сколько МЦ приходит в потоке.
Вот полный код заготовки формы:
А вот результат выполнения:
Где я ошибаюсь? Ломаю голову второй день 
Код: Выделить всё
.create view l_spnakl as select * from katmc, spsopr, katsopr//, katorg
where ((
mcbark /== katmc.barkod
and 1 == spsopr.prmc
and katmc.nrec /== spsopr.cmcusl
and spsopr.csopr == katsopr.nrec
and katsopr.corg == katorg.nrec
))
and katsopr.desgr='3'
and instr(string(spsopr.vidsopr),'101,106,201')<>0
;
Код: Выделить всё
order by spsopr.dsopr
Вот полный код заготовки формы:
Код: Выделить всё
.linkform 'EngSklad_test' prototype is 'EngSklad'
.group 'AUN'
.nameinlist '(с) test'
.var
cena_nakl: double
summ_nakl: double
otgr_kol : double
otgr_sum : double
vozv_kol : double
vozv_sum : double
rekl_kol : double
rekl_sum : double
in_nds : word
dfirst : date
dlast : date
in_ost : double
mcbark : string
prihod : double
ostatok: double
.endvar
.create view l_spnakl as select * from katsopr, spsopr, katorg where ((
mcbark == katmc.barkod
and 1 == spsopr.prmc
and katmc.nrec == spsopr.cmcusl
and spsopr.csopr == katsopr.nrec
and katsopr.corg == katorg.nrec
))
and katsopr.desgr='3'
and instr(string(spsopr.vidsopr),'101,106,201')<>0
order by katmc.nrec, spsopr.dsopr
;
.fields
begper endper
barcode
l_spnakl.katmc.barkod l_spnakl.katsopr.vidsopr l_spnakl.katsopr.dsopr l_spnakl.katsopr.nsopr l_spnakl.spsopr.kolfact
.endfields
^ ^
.begin
dfirst:=strtodate(substr(begper,1,10),'DD/MM/YYYY');
dlast:=strtodate(substr(endper,1,10),'DD/MM/YYYY');
end.
.{
.{// цикл по МЦ
barcode = ^
.begin
otgr_kol :=0;
otgr_sum :=0;
vozv_kol :=0;
vozv_sum :=0;
rekl_kol :=0;
rekl_sum :=0;
in_ost :=0; prihod:=0; ostatok:=0;
mcbark:=trim(barcode);
end.
.{// цикл по операциям
.}
!моя обработка накладных
.{table 'l_spnakl'
@@@@@@@@@@@@ @@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@ &&&&&&&&&&
.} // по l_spnakl
.begin ostatok:=in_ost - otgr_kol + vozv_kol; end.
.}
.if DetSkl
.{ DetSklC CheckEnter
.}
.end
.}
.if engsklad01
.if DetOrg
.{ DetOrgC CheckEnter
.}
.end
.end
.endform
Код: Выделить всё
01/07/2008 г. 31/08/2008 г.
barcode = 000300000129
000300000129 101 11/06/2008 d00026 34945
000300000129 201 16/06/2008 L01924 30
000300000129 201 16/06/2008 L01918 3760
000300000129 201 16/06/2008 L01922 80
000300000129 201 16/06/2008 L01920 400
barcode = 000300000130
000300000129 101 11/06/2008 d00026 34945
000300000129 201 16/06/2008 L01924 30
000300000129 201 16/06/2008 L01918 3760
000300000129 201 16/06/2008 L01922 80
000300000129 201 16/06/2008 L01920 400
