Проблема с циклами
Добавлено: 27 июл 2015, 16:44
Помогите, пожалуйста...
Есть временная таблица
и две вьюхи
А дальше, я пытаюсь заполнить эту временную табличку данными из вьюх, если в отчет попадают данные из ViewVed, то заполняется времянка корректно с помощью такого кода для ViewVed
а такого кода для Vvod:
Если же получается, что ViewVed не возвращает никаких данных, то постоянно идет дублирование в таблице stzat. Вместо апдейт пытается инсертить, хотя по данным из мессаджей должно идти в апдейт.. В чем причина?:(
Есть временная таблица
Код: Выделить всё
table struct stzat //Временная таблица по статьям затрат
(
cstzat : comp,
namestzat : string,
kodstzat : string,
kolstzat : double,
sumstzat : double
)
with index ( ID00 = cstzat (unique));
Код: Выделить всё
Create View ViewVed
var
dfrom,dto:date;
NameMVZ,NameMOL:string;
Vyvod,Vyvod1 : word;
NrecMVZ,NrecMOL,NrecStzat: comp;
NameStzat,CodeStzat:string;
KolStzat,SumStzat:double;
bschet:string;
count_1: integer;
MarkPodr,MarkMol,indexno: longint;
// MarkPodrS,MarkMolS,indexnoS: longint;
as
select katsopr.name, katnazna.name,katnazna.nazcode,sklorder.norder,katmc.name,katmc.barkod,kated.name,katparty.name,groupmc.name,
sporder.kol,sporder.rsrprice, sporder.kol*sporder.rsrprice
from sklorder,katsopr,stzat,Rorder,mvz,
Pick,
Pick PickPodr, // wList = 11
Pick PickMol,
KatPodr KatPodrP (ReadOnly),
KatMol KatMolP (ReadOnly)
where
(( sklorder.cpodr== katpodr.nrec
and word(1) ==sklorder.sp
and sklorder.cmol==katmol.nrec
and dfrom<<=sklorder.dord
and dto>>=sklorder.dord
and word(1) ==sklorder.vidorder (noindex)
and sklorder.nrec== sporder.csklorder
and sporder.cmc==katmc.nrec
and katmc.nrec==catalpsd.crec
and 'Номенклатурный номер КИС ММК (СНБ)'/==catalpsd.name
and 102/==catalpsd.vidcatal
and katmc.nrec == exclassval.crec
and 1411 == exclassval.wtable
and 221 == exclassval.classcode
and exclassval.classcode == exclassname.classcode
and exclassval.cclassseg == exclassseg.nrec
and katmc.ced==kated.nrec
and sporder.cparty==katparty.nrec
and katmc.cgroupmc==groupmc.nrec
and sklorder.csopr ==katsopr.nrec
and katsopr.cnazna==katnazna.nrec
and word(11) == PickPodr.wList
and PickPodr.cRec == KatPodrP.Nrec
and word(8) == PickMol.wList
and PickMol.cRec == KatMolP.Nrec
))
and groupmc.name<>'Полуфабрикаты собственного пр-ва'
and groupmc.name<>'Полуфабрикаты собственного пр-ва (комплект)'
and groupmc.name<>'ГП'
and groupmc.name<>'ГП (комплект)'
and katnazna.nazcode<>'08.02'
and substr(katnazna.nazcode,1,2)<>'05'
and if(isValidall(tnkatparty), if (substr(KatParty.kod,17,1)<>'h', true,false), true)
and ((0= katsopr.ckatsopr and 504=katsopr.vidsopr)
or substr(katsopr.name,1,47) = 'Акт на списание сырья по накладной на приход ГП'
or substr(katsopr.name,1,47) = 'Акт на списание сырья по акту на оказание услуг'
or substr(katsopr.name,1,45) = 'Акт на списание сырья по межцеховой накладной' )
Condition on_AnyPodr as SearchMarker(MarkPodr, KatSopr.cPodrFrom ,IndexNo )
Condition on_AnyMol as SearchMarker(MarkMol, KatSopr.cMolFrom , IndexNo )
;
create view Vvod
var
MarkPodrS,MarkMolS,indexnoS: longint;
as select mbpmove.nom from mbpmove, stzat,mvz,Rorder,
Pick, exclassval exclassval1,exclassseg exclassseg1,exclassname exclassname1,
Pick PickPodrS, // wList = 11
Pick PickMolS,
KatPodr KatPodrPS (ReadOnly),
KatMol KatMolPS (ReadOnly)
Where
((
MbpMove.Nrec == MbpIn.cSopr and //MbpIn - спецификация накладной MbpMove
MbpMove.cPodrF == KatPodr.Nrec and
MbpMove.cMolF == KatMol.Nrec and
MbpIn.cMbp == KatMbp.Nrec and //подцепка к МЦ
KatMbp.cEd == KatEd.Nrec and //единицы измерения
KatMbp.cMc == KatMc.Nrec and
KatMbp.cGroupMc == GroupMc.Nrec and
KatMc.Nrec == KatParty.cMc and
//'SFO' == KatMbp.DESgR (noindex) and //'' - спецоснастка, SFO - спецодежда
word(4) == MbpMove.Status and //тип перемещения - ввод в эксплуатацию
ViewVed.dfrom <<= MbpMove.DMove and //дата по месяцу
ViewVed.dto >>= MbpMove.DMove and
word(0) << MbpIn.DateEksp (noindex)
and katmc.nrec==catalpsd.crec
and 'Номенклатурный номер КИС ММК (СНБ)'/==catalpsd.name
and 102/==catalpsd.vidcatal
and MbpIn.nrec == exclassval.crec
and 2001 == exclassval.wtable
and 78 == exclassval.classcode
and exclassval.cclassseg == exclassseg.nrec
and EXCLASSSEG.value==katnazna.nazcode
and katmc.nrec == exclassval1.crec
and 1411 == exclassval1.wtable
and 221 == exclassval1.classcode
and exclassval1.classcode == exclassname1.classcode
and exclassval1.cclassseg == exclassseg1.nrec
and word(11) == PickPodrS.wList
and PickPodrS.cRec == KatPodrPS.Nrec
and word( 8) == PickMolS.wList
and PickMolS.cRec == KatMolPS.Nrec
/*and word( 6700) == PickGr.wList
and PickGr.cRec == GroupMcP.Nrec*/
))
Condition on_AnyPodrS as SearchMarker(MarkPodrS, MbpMove.cPodrF ,IndexNoS )
Condition on_AnyMolS as SearchMarker(MarkMolS, MbpMove.cMolF , IndexNoS )
;
Код: Выделить всё
if (getfirst stzat where ((NrecStzat==stzat.cstzat))<>tsOk)
{insert into stzat set
stzat.cstzat:=NrecStzat,
stzat.namestzat:=NameStzat,
stzat.kodstzat:=CodeStzat,
stzat.kolstzat:= round(ViewVed.sporder.kol,3),
stzat.sumstzat:= round(ViewVed.sporder.kol*ViewVed.sporder.rsrprice,2);
}
else { update current stzat set
stzat.kolstzat:= stzat.kolstzat+round(ViewVed.sporder.kol,3),
stzat.sumstzat:= stzat.sumstzat+round(ViewVed.sporder.kol*ViewVed.sporder.rsrprice,2);
}
Код: Выделить всё
if (viewved.getfirst stzat where (( nazn1==stzat.cstzat))<>tsOk)
{ if (nazn1<>0) then
{viewved.insert into stzat set
stzat.cstzat:=nazn1,
stzat.namestzat:=nazn2,
stzat.kodstzat:=nazn3,
stzat.kolstzat:= kolst,
stzat.sumstzat:= sumst;
}
else
{ viewved.insert into stzat set
stzat.cstzat:=0,
stzat.namestzat:='Без статьи расхода',
stzat.kodstzat:='',
stzat.kolstzat:= kolst,
stzat.sumstzat:= sumst;
}
}
else { viewved.update current stzat set
stzat.kolstzat:= stzat.kolstzat+kolst,
stzat.sumstzat:= stzat.sumstzat+sumst;
}