FLOWORD7 ;Order [ 09/25/2003 10:44 AM ] #include BL.Derde.LevSpecifiek #include BL.Derde.KlantSpecifiek ; OrderLijnIsGeblokkeerd(InventTransId) Quit '##class(AXdata.Dynamics.SalesLineStatus.SalesOrderLineStatusRepository).%New().IsVrijVoorUpdateViaAxInventTransId(InventTransId) ; BUILDBGR(KLNr,AutoMb,OrdRef,PRNr,EDIORDNr,OrdTyp,FBRef) New R,Next,ORDNr,Aantal,LevTerm,Munt,BtwReg,NetBrut,LevVw,Land,VerzW,StockUpd New Text,BlockId,AfdrFakt Set OrdRef=$G(OrdRef),OrdTyp=$G(OrdTyp) Set R=^KKL(^KK1(KLNr),0),Land=$P(R,D,8),Munt=$P(R,D,11),BtwReg=$P(R,D,15) Set R=^KKL(^KK1(KLNr),2),NetBrut=$P(R,D,5),VerzW=$P(R,D,16) Set R=^KKL(^KK1(KLNr),3),LevVw=$P(R,D,3) Set:$$ISVERS6^vhRtn1() Land=$$LAND^vhRtn1(Land) Set:Land="" Land=$$FADEF^vhRtn1(3) Set:Munt="" Munt=$$FADEF^vhRtn1() Set Next="" Set ORDNr=$$GETNUM^FLOW("KOD","KO1",OrdTyp) Do ADD^vhLock("^KOD(KLNr,""F"",ORDNr)") Set ^KOD(KLNr,"F",ORDNr,0)=101 Set R="",$P(R,D,36)="",$P(R,D,2)=DT,$P(R,D,3)=OrdRef,$P(R,D,6)=KLNr,$P(R,D,7)=VerzW,$P(R,D,14)=$S(BtwReg:"",1:1) Set $P(R,D,18)=Munt,$P(R,D,21)=LevVw,$P(R,D,25)=$E(OrdTyp),$P(R,D,27)=NetBrut Set:$E(OrdTyp)="P" $P(R,D,29)=$E(OrdTyp,2) Set ^KOD(KLNr,"F",ORDNr,1)=R Set R="",$P(R,D,36)="",^KOD(KLNr,"F",ORDNr,2)=R,^KOD(KLNr,"F",ORDNr,3)=R Set Next="" For Set Next=$O(PRNr(Next)) Quit:Next="" Do .Set R=PRNr(Next),PRNr=$P(R,D) .If PRNr Do ..Set Aantal=$P(R,D,2),LevTerm=$P(R,D,3),StockUpd=$P(R,D,5) ..Set StockUpd=$S(StockUpd:"",StockUpd=0:"Z",1:StockUpd) ..Do BLDPRODL(KLNr,ORDNr,PRNr,Aantal,LevTerm,,StockUpd) .Else Do ..Set Text=$P(R,D,2),BlockId=$P(R,D,3),AfdrFakt=$P(R,D,4) ..Do BLDTEXTL(KLNr,ORDNr,Text,BlockId,AfdrFakt) Do CLOSE(KLNr,ORDNr) Do REMOVE^vhLock("^KOD(KLNr,""F"",ORDNr)") Quit ; BLDPRODL(KLNr,ORDNr,PRNr,Aantal,LevTerm,Prijs,StockUpd) New R,Munt,Eenheid,LijstPr,Korting1,Korting2,NEenheid New Land,Rekening,BtwReg,BtwKode,NetBrut Set R=^KOD(KLNr,"F",ORDNr,1),BtwReg=$P(R,D,14),NetBrut=$P(R,D,27) Set R=^KPR(PRNr,0),BtwKode=$P(R,D,5),Rekening=$P(R,D,10) Set R=^KKL(^KK1(KLNr),0),Land=$$LAND^vhRtn1($P(R,D,8)) Set:BtwReg BtwKode=0 Set:"\\B\BE\KE\"'[(D_Land_D) BtwKode=0 Set:Rekening="" Rekening=$$GBREK^FLOW(Land) Set:$E(Rekening,$L(Rekening))'=" " Rekening=Rekening_" " Set:LevTerm="" LevTerm=$$LEVWK^PRODUKT4(PRNr,KLNr,1) Set R=$$KLANTPR^KPRIJS(KLNr,PRNr) Set Prijs=$P(R,D),Munt=$P(R,D,2),LijstPr=$P(R,D,4),Korting1=$P(R,D,5),Korting2=$P(R,D,6),Eenheid=$P(R,D,10),NEenheid=$P(R,D,11) Set R="",$P(R,D,36)="",($P(R,D),$P(R,D,11))=Rekening,$P(R,D,2)=PRNr,$P(R,D,3)=Aantal,$P(R,D,6)=Prijs Set $P(R,D,7)=Korting1_"#"_Korting2,$P(R,D,8)=BtwKode Set ($P(R,D,9),$P(R,D,10),$P(R,D,16))=$J(Prijs*Aantal/NEenheid,0,##class(APPS.VKP.OrderlijnPrijsBepaler).GeefAantalDecimalen()) Set:NetBrut $P(R,D,6)=LijstPr,$P(R,D,16)=$J(LijstPr*Aantal/NEenheid,0,##class(APPS.VKP.OrderlijnPrijsBepaler).GeefAantalDecimalen()) Set $P(R,D,12)="L",$P(R,D,14)=$G(StockUpd),$P(R,D,17)="KF0",$P(R,D,21)=Eenheid,$P(R,D,22)=Munt,$P(R,D,24)=1,$P(R,D,25)=LevTerm Do INSERT^FLOWORD2(R,"E",,0) Quit ; BLDTEXTL(KLNr,ORDNr,Text,BlockId,AfdrFakt) New R Set R="",$P(R,D,36)="",$P(R,D,5)=Text,$P(R,D,17)="KF11#"_$G(AfdrFakt) Set:'BlockId BlockId=$P(R,D,18) Set:'$P(BlockId,";") $P(BlockId,";")=$P($H,";",2) Set:$P(BlockId,";",2,4)="" BlockId=$P(BlockId,";")_";T;;O" If $P($P(R,D,17),"#",2) Set:$P(BlockId,";",4)'["B" BlockId=BlockId_"B" Set:$P(BlockId,";",4)'["F" BlockId=BlockId_"F" Set $P(R,D,18)=BlockId Do INSERT^FLOWORD2(R,"E",,0) Quit ; CLOSE(KLNr,ORDNr) New R,Closed,OLNr,PRNr,TOENr Set R=^KOD(KLNr,"F",ORDNr,1),Closed=$P(R,D,22) Do:'Closed .Do SORT^FLOWORD(KLNr,ORDNr) .Do PORTKODE(KLNr,ORDNr) .Do BLDTOE(KLNr,ORDNr) .Do SPLMUNT(KLNr,ORDNr) .Do SPLTORD(KLNr,ORDNr) .Do SPLMAXL(KLNr,ORDNr) .Set OLNr=100,TOENr="" .For Set OLNr=$O(^KOD(KLNr,"F",ORDNr,OLNr)) Quit:OLNr="" Do Quit:TOENr ..Set R=^KOD(KLNr,"F",ORDNr,OLNr),PRNr=$P(R,D,2) ..Quit:'PRNr ..Set TOENr=$P(R,D,27) .Set R=^KOD(KLNr,"F",ORDNr,1),$P(R,D,22)=$S(TOENr:2,1:1) .Set ^KOD(KLNr,"F",ORDNr,1)=R .Set (^KO1(ORDNr,"F"),^KOB(ORDNr,"F"))=KLNr_D,^KO2("F",KLNr,ORDNr)="" .Do ##class(DOM.VKP.event.OrderEventRaiser).RaiseOrderGemaaktEvent(ORDNr) Quit ; ; Opzoeken en invullen of een order onderhevig is aan port PORTKODE(KLNr,ORDNr) New R,PortKode,PRNr,OLNr,LevVw,PBedrag,PLand,PPort,KlKey,KLand Set R=^KOD(KLNr,"F",ORDNr,1),LevVw=$P(R,D,21),PortKode="" Set PPort=^KBA(153,LevVw_" ","P",0) If PPort="" ; Nooit port Else If PPort=1 Set PortKode=1 ; Altijd port Else If PPort=2 Do ; Port indien het netto bedrag te klein is .Set PBedrag=^KBA(153,LevVw_" ","B",0) .Set:$$NETTO(KLNr,ORDNr)<$P(PBedrag,";",$L(PBedrag,";")) PortKode=1 Else Do .Set PLand=^KBA(153,LevVw_" ","L",0) .Set R=^KOD(KLNr,"F",ORDNr,3),KLand=$P(R,D,8) .Set:KLand="" KlKey=^KK1(KLNr),R=^KKL(KlKey,0),KLand=$P(R,D,8) .Quit:KLand'=PLand .If PPort=3 Set PortKode=1 ; Port voor een bepaald land .Else Do ; Port voor een bepaald land indien het netto bedrag te klein is ..Set:$$NETTO(KLNr,ORDNr)<$P(PBedrag,";",$L(PBedrag,";")) PortKode=1 Set OLNr=100 For Set OLNr=$O(^KOD(KLNr,"F",ORDNr,OLNr)) Quit:OLNr="" Do .Set R=^KOD(KLNr,"F",ORDNr,OLNr),PRNr=$P(R,D,2) .If PRNr Set $P(R,D,24)=PortKode,^KOD(KLNr,"F",ORDNr,OLNr)=R Quit ; NETTO(KLNr,ORDNr) New R,Netto,LevVw,OLNr,PMunt,PPar,LMunt,LPar Set R=^KOD(KLNr,"F",ORDNr,1),LevVw=$P(R,D,21) Set PMunt=^KBA(153,LevVw_" ","M",0) Set PPar=$$MUNT^vhRtn1(PMunt,,12),Netto=0,OLNr=100 For Set OLNr=$O(^KOD(KLNr,"F",ORDNr,OLNr)) Quit:OLNr="" Do .Set R=^KOD(KLNr,"F",ORDNr,OLNr),PRNr=$P(R,D,2) .If PRNr Set LMunt=$P(R,D,22),LPar=$$MUNT^vhRtn1(LMunt,,12),Netto=Netto+($P(R,D,9)*LPar/PPar) Set:Netto<0 Netto=-Netto Quit Netto ; BLDTOE(KLNr,ORDNr) New R,OLNr,PRNr,LEVNr,TOENr,TLNr,LijnKode,LijnTyp,BlockId,OrdToe,StockUpd,LinkType,Aantal,OLevWk,TLevWk New NoSa,IsStock,FysStock,InToelev,InOrder,MinBestH,LevTerm,GenPRNr,GrootVp,PrMunt,CorLevT,RALKleur New ToeMunt,OrdDat,ToeRef,KlKey,KlNaam,LevKey,NettoPr,BrutoPr,Netto,Bruto,Korting1,Korting2,GrOrde,TOELijnNr New InventTransId,OorsprongKetting Set OLNr=100 For Set OLNr=$O(^KOD(KLNr,"F",ORDNr,OLNr)) Quit:OLNr="" Do .Set R=^KOD(KLNr,"F",ORDNr,OLNr),PRNr=$P(R,D,2),Aantal=$P(R,D,3),InventTransId=$P(R,D,55) .Set OLevWk=$P(R,D,29) Set:OLevWk="" OLevWk=$P(R,D,25) .Set LijnKode=$P(R,D,17),BlockId=$P(R,D,18),TOENr=$P(R,D,27),TOELijnNr=$P(R,D,28) .Quit:TOENr .Quit:(TOELijnNr="KOM") .Set LijnTyp=$P(LijnKode,"#"),LijnTyp=$S(LijnTyp="KF0":"P",LijnTyp="KF1925":"M",LijnTyp="KF11":"T",PRNr:"P",1:"") .If LijnTyp="P" Do ..Set StockUpd=$P(R,D,14)'["S" Set:StockUpd StockUpd=$P(R,D,14)'["Z" ..Quit:'StockUpd ..Set R=^KPR(PRNr,0),FysStock=$P(R,D,14),InBest=$P(R,D,17),LinkType=$P(R,D,23) ..Quit:LinkType="S" ; Stockbeweging over kinderen ..Set R=^KPR(PRNr,1),IsStock=$P(R,D,20),R=^KPR(PRNr,2),InOrder=$P(R,D,9) ..Set R=^KPR(PRNr,$O(^KPR(PRNr,"J"))),LEVNr=$P(R,D),MinBestH=$P(R,D,6),PrMunt=$P(R,D,17) ..Quit:((InventTransId'="")&&($$OrderLijnIsGeblokkeerd(InventTransId))) ..Quit:((LEVNr'=$$$LevHalux)||IsStock) ..Set LevTerm=$P(R,D,7),GrootVp=$P(R,D,16) Set:'GrootVp GrootVp=1 ..If IsStock Quit:$$CALCDATE^vhLib.DataTypes(,"W")+(LevTerm+1*7)>OLevWk ..Set OrdToe("P",LEVNr)=PrMunt,OrdToe("P",LEVNr,OLNr)="" .Else If LijnTyp="T",$P(BlockId,";",4)["T" Set OrdToe("T",OLNr)="" Set LEVNr="" Set R=^KOD(KLNr,"F",ORDNr,1),OrdDat=$P(R,D,2),OorsprongKetting=$P(R,D,59) Set KlKey=^KK1(KLNr),R=^KKL(KlKey,0),KlNaam=$P(R,D,2),ToeRef="KOMM. "_$E(KlNaam,1,19) For Set LEVNr=$O(OrdToe("P",LEVNr)) Quit:LEVNr="" Do .Set LevKey=^KL1(LEVNr),R=^KLE(LevKey,2),CorLevT=$P(R,D,16),NoSa="" Set:$P(R,D,3) NoSa="S" .Set TOENr=$$GETNUM^FLOW("KTO","KTO1"),ToeMunt=OrdToe("P",LEVNr) .Do ADD^vhLock("^KTO(LEVNr,TOENr)") .Set R="",$P(R,D,26)="",$P(R,D,2)=OrdDat,$P(R,D,3)=ToeRef,$P(R,D,6)=LEVNr .Set $P(R,D,7)=ORDNr,$P(R,D,8)=KLNr,$P(R,D,18)=ToeMunt,$P(R,D,22)=2,$P(R,D,27)=OorsprongKetting .Set ^KTO(LEVNr,TOENr,1)=R,^KTO(LEVNr,TOENr,0)=101 .Set OLNr="" ; Produktlijnen verwerken .; KCA, hier gezet, want INSERT^FLOWTOE2 triggert event die KTO1 gebruikt. Faalde bij testen. Ofwel is de controle op bestaat toelevering niet juist en moet deze controleren in KTO ipv KTO1 .Set (^KTO1(TOENr),^KTOB(TOENr))=LEVNr_D .For Set OLNr=$O(OrdToe("P",LEVNr,OLNr)) Quit:OLNr="" Do ..New KodR,LevPrR,ToeR,Counter ..Set KodR=^KOD(KLNr,"F",ORDNr,OLNr),PRNr=$P(KodR,D,2),Aantal=$P(KodR,D,3),RALKleur=$P(KodR,D,4) ..Set OLevWk=$P(KodR,D,29) Set:OLevWk="" OLevWk=$P(KodR,D,25) ..Set LevPrR=$$LEVPR^KPRIJS(LEVNr,PRNr,NoSa),NettoPr=$P(LevPrR,D),GrOrde=$P(LevPrR,D,3),NGrOrde=$P(LevPrR,D,11) ..Set BrutoPr=$P(LevPrR,D,4),Korting1=$P(LevPrR,D,5),Korting2=$P(LevPrR,D,6) ..Set Netto=$J(NettoPr*Aantal/NGrOrde,0,##class(APPS.VKP.OrderlijnPrijsBepaler).GeefAantalDecimalen()) ..Set Bruto=$J(BrutoPr*Aantal/NGrOrde,0,##class(APPS.VKP.OrderlijnPrijsBepaler).GeefAantalDecimalen()) ..Set TLevWk=$$EXTDATE^vhLib.DataTypes($$CALCDATE^vhLib.DataTypes(OLevWk,"W",-1-CorLevT),"DW") ..Set R="",$P(R,D,26)="",$P(R,D,2)=PRNr,$P(R,D,3)=Aantal,$P(R,D,4)=RALKleur,$P(R,D,6)=BrutoPr ..Set $P(R,D,7)=Korting1_"#"_Korting2,($P(R,D,9),$P(R,D,10))=Netto,$P(R,D,12)="L",$P(R,D,16)=Bruto ..Set $P(R,D,17)="KTRPL",$P(R,D,21)=GrOrde,$P(R,D,22)=ToeMunt,$P(R,D,25)=TLevWk,$P(R,D,27,28)=ORDNr_D_OLNr ..For Counter=55:1:$L(KodR,D) Set $P(R,D,Counter)=$P(KodR,D,Counter) ..Do ...New TLNr ...Set TLNr=TOENr ...Do INSERT^FLOWTOE2(R,"E",,0) ...Set TLNr=$O(^KTO(LEVNr,TOENr,""),-1),R=^KOD(KLNr,"F",ORDNr,OLNr),$P(R,D,27,28)=TOENr_D_TLNr,^KOD(KLNr,"F",ORDNr,OLNr)=R .Set OLNr="" ; Eventueel teksten toevoegen .For Set OLNr=$O(OrdToe("T",OLNr)) Quit:OLNr="" Do ..Set R=^KOD(KLNr,"F",ORDNr,OLNr),$P(R,D,15)="",$P(R,D,17)="KTO11" ..Set $P(R,D,5)=$$REPLACE5^vhRtn1($P(R,D,5),"Groep ","Gruppe","groep ","gruppe","GROEP ","GRUPPE") ..Set $P(R,D,5)=$$REPLACE5^vhRtn1($P(R,D,5),"stuks","stück","stuk","stück") ..Set $P(R,D,5)=$$REPLACE5^vhRtn1($P(R,D,5),"gelijksluitend","gleichschliessend") ..Set $P(R,D,5)=$$REPLACE5^vhRtn1($P(R,D,5),"GELIJKSLUITEND","GLEICHSCHLIESSEND") ..Set $P(R,D,5)=$$REPLACE5^vhRtn1($P(R,D,5),"verschillend sluitend","verschieden schliessend") ..Set $P(R,D,5)=$$REPLACE5^vhRtn1($P(R,D,5),"VERSCHILLEND SLUITEND","VERSCHIEDEN SCHLIESSEND") ..Do ...New TLNr ...Set TLNr=TOENr ...Do INSERT^FLOWTOE2(R,"E",,0) .Set (^KTO1(TOENr),^KTOB(TOENr))=LEVNr_D,^KTO2(LEVNr,TOENr)="" Set:LEVNr=5005 ^BLBeri("Z",TOENr)=LEVNr_D .Do ##class(DOM.AKP.event.ToeleveringEventRaiser).RaiseToeleveringGemaaktEvent(TOENr) .Do REMOVE^vhLock("^KTO(LEVNr,TOENr)") Quit ; SPLMUNT(KLNr,ORDNr) New R,OrdMunt,LijnMunt,OLNr,Munten,TORDNr Set R=^KOD(KLNr,"F",ORDNr,1),OrdMunt=$P(R,D,18) Do:OrdMunt="MTL" ; Opsplitsen volgens munt .Set Munten="",OLNr=100 .For Set OLNr=$O(^KOD(KLNr,"F",ORDNr,OLNr)) Quit:OLNr="" Do ..Set R=^KOD(KLNr,"F",ORDNr,OLNr),LijnMunt=$P(R,D,22) ..Quit:LijnMunt="" ..Set:Munten_D'[(D_LijnMunt_D) Munten=Munten_D_LijnMunt .Set $E(Munten)="" .Set OrdMunt=$P(Munten,D),Munten=$P(Munten,D,2,99) .Set R=^KOD(KLNr,"F",ORDNr,1),$P(R,D,18)=OrdMunt,^KOD(KLNr,"F",ORDNr,1)=R .For Set OrdMunt=$P(Munten,D),Munten=$P(Munten,D,2,99) Quit:OrdMunt="" Do ..Set TORDNr=$$GETNUM^FLOW("KOD","KO1") ..Do ADD^vhLock("^KOD(KLNr,""F"",TORDNr)") ..Set ^KOD(KLNr,"F",TORDNr,0)=101 ..For I=1:1:3 Set R=^KOD(KLNr,"F",ORDNr,I) Set:I=1 $P(R,D,18)=OrdMunt Set ^KOD(KLNr,"F",TORDNr,I)=R ..Set OLNr=100 ..For Set OLNr=$O(^KOD(KLNr,"F",ORDNr,OLNr)) Quit:OLNr="" Do ...Set R=^KOD(KLNr,"F",ORDNr,OLNr) ...Do:$P(R,D,22)=OrdMunt MOVELINE(KLNr,ORDNr,OLNr,TORDNr) ..Do CLOSE(KLNr,TORDNr) ..Do REMOVE^vhLock("^KOD(KLNr,""F"",TORDNr)") Quit ; ; Opsplitsen transfertorders per werkvloersubmagazijn SPLTORD(KLNr,ORDNr) New R,OLNr,PRNr,WVSubMag,TORDNr,TOENr,TLNr,LEVNr Set R=^KOD(KLNr,"F",ORDNr,1) Do:$P(R,D,25)="T" .Set OLNr=100 .For Set OLNr=$O(^KOD(KLNr,"F",ORDNr,OLNr)) Quit:OLNr="" Do ..Set R=^KOD(KLNr,"F",ORDNr,OLNr),PRNr=$P(R,D,2) ..Quit:'PRNr ..If $L($G(FBRef)),$L($G(@FBRef)) Set WVSubMag=@FBRef ..Else Set WVSubMag=$$GetVerzendCode^MRPRES(PRNr) Set:WVSubMag="" WVSubMag="~" ..Set WVSubMag(WVSubMag,OLNr)="" .Set WVSubMag=$O(WVSubMag("")) .If $O(WVSubMag(WVSubMag))'="" Do ; meer dan een ..For Set WVSubMag=$O(WVSubMag(WVSubMag)) Quit:WVSubMag="" Do ...Set TORDNr=$$GETNUM^FLOW("KOD","KO1") ...Do ADD^vhLock("^KOD(KLNr,""F"",TORDNr)") ...Set ^KOD(KLNr,"F",TORDNr,0)=101 ...For I=1:1:3 Do ; copieren en aanpassen van verzendwijze ....Set R=^KOD(KLNr,"F",ORDNr,I) Set:I=1 $P(R,D,7)=$$GetVerzWFromSubMag(WVSubMag) ....Set ^KOD(KLNr,"F",TORDNr,I)=R ...Set OLNr=100 ...For Set OLNr=$O(WVSubMag(WVSubMag,OLNr)) Quit:OLNr="" Do MOVELINE(KLNr,ORDNr,OLNr,TORDNr) ...Do CLOSE(KLNr,TORDNr) ...Do REMOVE^vhLock("^KOD(KLNr,""F"",TORDNr)") .; oorspronkelijk order aanpassen .Set R=^KOD(KLNr,"F",ORDNr,1),WVSubMag=$O(WVSubMag("")) .Set $P(R,D,7)=$$GetVerzWFromSubMag(WVSubMag),^KOD(KLNr,"F",ORDNr,1)=R Quit ; GetVerzWFromSubMag(WVSubMag) New VerzendW Set VerzendW="TH"_$S(WVSubMag?1N:WVSubMag,WVSubMag?1(1"A",1"B",1"C",1"D",1"E",1"F",1"G",1"L",1"M",1"N",1"O",1"P",1"R",1"S",1"T",1"U",1"V",1"X",1"Y",1"W"):WVSubMag,1:"") Quit VerzendW ; Maximum lijnen per order (default 99) SPLMAXL(KLNr,ORDNr,MaxLines) New R,OLNr,LCount,TORDNr Set MaxLines=$G(MaxLines,99) Set LCount=0,OLNr=100 For Set OLNr=$O(^KOD(KLNr,"F",ORDNr,OLNr)) Quit:OLNr="" Set LCount=LCount+1 Do:LCount>MaxLines .Set TORDNr=$$GETNUM^FLOW("KOD","KO1") .Do ADD^vhLock("^KOD(KLNr,""F"",TORDNr)") .Set ^KOD(KLNr,"F",TORDNr,0)=101 .For I=1:1:3 Set ^KOD(KLNr,"F",TORDNr,I)=^KOD(KLNr,"F",ORDNr,I) .Set LCount=0,OLNr=100 .For Set OLNr=$O(^KOD(KLNr,"F",ORDNr,OLNr)) Quit:OLNr="" Do ..Set LCount=LCount+1 ..Quit:LCount'>MaxLines ..Do MOVELINE(KLNr,ORDNr,OLNr,TORDNr) .Do CLOSE(KLNr,TORDNr) .Do REMOVE^vhLock("^KOD(KLNr,""F"",TORDNr)") Quit ; ; Overhevelen van een orderlijn naar een ander order MOVELINE(KLNr,FORDNr,OLNr,TORDNr,Block) New R,T,PRNr,OUnikLNr,NUnikLNr,LijnKode,LijnTyp,LEVNr,TOENr,TLNr,BlockId Set Block=$G(Block,1),R=^KOD(KLNr,"F",FORDNr,OLNr),PRNr=$P(R,D,2),OUnikLNr=$P(R,D,15) Set LijnKode=$P(R,D,17),BlockId=$P(R,D,18),TOENr=$P(R,D,27),TLNr=$P(R,D,28) Set LijnTyp=$P(LijnKode,"#"),LijnTyp=$S(LijnTyp="KF0":"P",LijnTyp="KF1925":"M",LijnTyp="KF11":"T",PRNr:"P",1:"") If LijnTyp="T",Block Do ; Opzoeken van de eerste lijn of het eventueel gelinkte produkt van het tekstblok .If $P(BlockId,";",2)="P" Set OLNr=^ORD("IU",FORDNr,$P(BlockId,";",3)) .Else Do ..For Set OLNr=$O(^KOD(KLNr,"F",FORDNr,OLNr),-1) Quit:OLNr<100 Do Quit:$P($P(R,D,18),";")'=$P(BlockId,";") ...Set R=^KOD(KLNr,"F",FORDNr,OLNr) ..Set OLNr=$O(^KOD(KLNr,"F",FORDNr,OLNr)) .Set R=^KOD(KLNr,"F",FORDNr,OLNr),PRNr=$P(R,D,2),OUnikLNr=$P(R,D,15) .Set LijnKode=$P(R,D,17),BlockId=$P(R,D,18),TOENr=$P(R,D,27),TLNr=$P(R,D,28) .Set LijnTyp=$P(LijnKode,"#"),LijnTyp=$S(LijnTyp="KF0":"P",LijnTyp="KF1925":"M",LijnTyp="KF11":"T",1:"") Do:PRNr .Do KWNODE^FLOWORD2(KLNr,FORDNr,OLNr) .Do ProductOrderLijnAnnulatie^FLOWORD2(KLNr,FORDNr,OLNr) Kill ^KOD(KLNr,"F",FORDNr,OLNr) Set OLNr=^KOD(KLNr,"F",TORDNr,0),^KOD(KLNr,"F",TORDNr,0)=OLNr+1 Set NUnikLNr=$$UNIEKLNR^FLOWORD(KLNr,TORDNr),$P(R,D,15)=NUnikLNr,^KOD(KLNr,"F",TORDNr,OLNr)=R Do:PRNr .Do SWNODE^FLOWORD2(KLNr,TORDNr,OLNr) .Do ProductOrderLijnGemaakt^FLOWORD2(KLNr,TORDNr,OLNr) If TOENr,TLNr Do .Set R=^KTO1(TOENr),LEVNr=$P(R,D),R=^KTO(LEVNr,TOENr,TLNr) .Set $P(R,D,27)=TORDNr,$P(R,D,28)=OLNr,^KTO(LEVNr,TOENr,TLNr)=R If LijnTyp="P",Block Do ; Eventueel gelinkte tekst meenemen .Set OLNr=100 .For Set OLNr=$O(^KOD(KLNr,"F",FORDNr,OLNr)) Quit:OLNr="" Do ..Set R=^KOD(KLNr,"F",FORDNr,OLNr),T=$P(R,D,18) ..Quit:$P($P(R,D,17),"#")'="KF11"!($P(T,";",2)'="P")!($P(T,";",3)'=OUnikLNr) ..Set $P(T,";",3)=NUnikLNr,$P(R,D,18)=T,^KOD(KLNr,"F",FORDNr,OLNr)=R ..Do MOVELINE(KLNr,FORDNr,OLNr,TORDNr,0) If LijnTyp="T",Block Do ; Een volledig tekstblok overhevelen .Set OLNr=100 .For Set OLNr=$O(^KOD(KLNr,"F",FORDNr,OLNr)) Quit:OLNr="" Do ..Set R=^KOD(KLNr,"F",FORDNr,OLNr) ..Quit:$P($P(R,D,17),"#")'="KF11"!($P($P(R,D,18),";")'=$P(BlockId,";")) ..Do MOVELINE(KLNr,FORDNr,OLNr,TORDNr,0) Quit ; ; Controle voorraad van de bouwstenen bij het sluiten van een order BSControl(ORDNr) New R,KLNr,OLNr,OLUNr,PRNr,Aantal,Control,StockUpd,InventTransId,ConfigId,MaatwerkGenerischItemId Set KLNr=$P(^KO1(ORDNr,"F"),D),OLNr=100 Quit:KLNr=$$$KlantHalux ; Niet voor Halux For Set OLNr=$O(^KOD(KLNr,"F",ORDNr,OLNr)) Quit:OLNr="" Do . Set R=^KOD(KLNr,"F",ORDNr,OLNr),PRNr=$P(R,D,2),OLUNr=$P(R,D,15),InventTransId=$P(R,D,55),ConfigId=$P(R,D,56),MaatwerkGenerischItemId=$P(R,D,57) . Quit:((InventTransId'="")&&($$OrderLijnIsGeblokkeerd(InventTransId))) . Quit:($P(R,"\",28)'="") . Quit:'PRNr . Set StockUpd=$P(R,D,14)'["S" Set:StockUpd StockUpd=$P(R,D,14)'["Z" . Quit:'StockUpd . Set Aantal=$P(R,D,3) . Do FetchBSControl(PRNr,Aantal,.Control,ORDNr,OLUNr,,InventTransId,ConfigId,MaatwerkGenerischItemId) Do:$D(Control) . Do CalcBSControl(.Control) . Quit:'$D(Control("L")) . Do BewerkAxBSControl(.Control) . Do:$D(Control("T")) ToeLevBSControl(ORDNr,.Control) . Do:$D(Control("M")) MailBSControl(ORDNr,.Control) Quit ; Ophalen en cumuleren van de bouwstenen FetchBSControl(PRNr,Aantal,Control,ORDNr,OLUNr,InclVerpak,InventTransId,ConfigId,MaatwerkGenerischItemId) New R,BSKey,BSPRNr,BSAantal,IsStock,BSType,Dimensie,CumulAantal,LEVNr Set InclVerpak=$G(InclVerpak),BSKey="" For Set BSKey=$O(^PRBS("BS",PRNr,BSKey)) Quit:BSKey="" Do . Set R=^PRBS("BS",PRNr,BSKey) . Set BSPRNr=$P(R,D) . Quit:'BSPRNr . Set BSCode=$P(R,D,11) . Quit:( ("°INK"=BSCode) || ("°EXP"=BSCode) ) . Set BSAantal=$P(R,D,2),BSType=$P(R,D,3) . If 'InclVerpak,$$IsVerpakking^PRODUKT2(BSPRNr) Quit . Set Dimensie=$G(^PRBS("BS",PRNr,BSKey,"D")) . Set IsStock=$P(^KPR(BSPRNr,1),D,20) . If IsStock Do . . Set R=$G(Control("TK",BSPRNr)) . . If 'Dimensie Set $P(R,D)=$P(R,D)+(Aantal*BSAantal) . . Else Set $P(R,D)=$P(R,D)+$$TELMAGST^MRP(BSPRNr,Aantal*BSAantal,,$P(Dimensie,D),$P(Dimensie,D,2)) ; Bouwsteen met dimensie . . Set $P(R,D,2)=BSType . . Set Control("TK",BSPRNr)=R,Control("TK",BSPRNr,PRNr)="" . Else Do . . Set R=$G(Control("NS",BSPRNr)) . . If 'Dimensie Set CumulAantal=Aantal*BSAantal . . Else Set CumulAantal=$$TELMAGST^MRP(BSPRNr,Aantal*BSAantal,,$P(Dimensie,D),$P(Dimensie,D,2)) ; Bouwsteen met dimensie . . Set $P(Control("NS",BSPRNr,PRNr,ORDNr,OLUNr),D)=$P($G(Control("NS",BSPRNr,PRNr,ORDNr,OLUNr)),D)+CumulAantal . . Set $P(Control("NS",BSPRNr,PRNr,ORDNr,OLUNr),D,2)=$P(Control("NS",BSPRNr,PRNr,ORDNr,OLUNr),D,2)+1 . . Set $P(Control("NS",BSPRNr,PRNr,ORDNr,OLUNr),D,3)=InventTransId_D_ConfigId_D_MaatwerkGenerischItemId . . Set $P(R,D)=$P(R,D)+CumulAantal . . Set $P(R,D,2)=BSType . . If BSType="K" Set:$P(R,D,3)<$P(Control("NS",BSPRNr,PRNr,ORDNr,OLUNr),D,2) $P(R,D,3)=$P(Control("NS",BSPRNr,PRNr,ORDNr,OLUNr),D,2) ; Een op een ralatie? . . Set Control("NS",BSPRNr)=R,Control("NS",BSPRNr,PRNr)="" . Set LEVNr=$E($O(^KPR(BSPRNr,"J")),2,99) . Quit:(LEVNr'=$$$LevHalux)&&(LEVNr'=$$$LevVanHoecke) ; alleen verder uitdiepen indien het halffabrikaat een Halux of Van Hoecke product is . Do FetchBSControl(BSPRNr,(Aantal*BSAantal),.Control,ORDNr,OLUNr,InclVerpak,InventTransId,ConfigId,MaatwerkGenerischItemId) Quit ; Controle van de voorraad CalcBSControl(Control) New CType,BSPRNr,Aantal,SortKey,Count,objPrPrijs,Stock,WVStock,Reservatie,BSType,MPRNr Set Count=0 For CType="NS","TK" Do ; "NS" = niet stock, "TK" = Stock . ;Quit:CType="TK" ; Stock niet nodig VDR . Set BSPRNr="" . For Set BSPRNr=$O(Control(CType,BSPRNr)) Quit:BSPRNr="" Do . . Set SortKey=$$SORTKEY^PRODUKT(BSPRNr) . . Set R=Control(CType,BSPRNr) . . Set:$P(R,D)#1 $P(R,D)=$J($P(R,D)+.5,0,0),Control(CType,BSPRNr)=R . . Set Control("S",CType,SortKey)=BSPRNr_D_R . Set SortKey="" . Set:Count Count=Count+1,Control("L",Count)="&S" . For Set SortKey=$O(Control("S",CType,SortKey)) Quit:SortKey="" Do . . Set R=Control("S",CType,SortKey),BSPRNr=$P(R,D),Aantal=$P(R,D,2),BSType=$P(R,D,3) . . . . ; Berekening Stock . . ;Set Stock="##",$P(Stock,"#",2)=$$GETSTOCK^PRODUKT4(BSPRNr,"F")+$$GETBEST^PRODUKT4(BSPRNr,"T") . . Set Stock="##",$P(Stock,"#",2)=$$GETSTOCK^PRODUKT4(BSPRNr,"F")+$$GETBEST^PRODUKT4(BSPRNr,"S") ; Enkel de stocktoeleveringen bijtellen i.p.v. alle CW 05.05.10 . . Set:BSType="H" $P(Stock,"#",3)=$$CV2MAG^MRP(BSPRNr,$P($G(^PRSTOCK("D",BSPRNr)),D,5)) ; Indien halffabrikaat werkvloerstock bijoptellen . . Set $P(Stock,"#")=$P(Stock,"#",2)+$P(Stock,"#",3) . . . . ; Berekening Reservatie . . Set Reservatie="##",$P(Reservatie,"#",2)=$$GETRES^PRODUKT4(BSPRNr,"T") . . Do:BSType="H"!(BSType="K") ; Indien halffabrikaat werkvloerreservatie bijoptellen . . . Set $P(Reservatie,"#",3)=$P(Reservatie,"#",3)+$$CV2MAG^MRP(BSPRNr,$$VerkoopKinderen^PRODUKT4(BSPRNr)) . . Set $P(Reservatie,"#")=$P(Reservatie,"#",2)+$P(Reservatie,"#",3) . . . . Set $P(R,D,4)=Stock,$P(R,D,5)=Reservatie . . Set objPrPrijs=##class(Prod.ProductPrijs).%OpenId(BSPRNr) . . If ('$IsObject(objPrPrijs)) { Set objPrPrijs=##class(Prod.ProductPrijs).%OpenId(BSPRNr,0) } ; Concurrency=0 : No locks are used. . . If ('$IsObject(objPrPrijs)) { Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.ObjectExpectedException).%New("Kon geen prijs ophalen van halffabrikaat "_BSPRNr)) } . . Set $P(R,D,6)=objPrPrijs.MinimumBestelhoeveelheid,$P(R,D,7)=objPrPrijs.LeveringsTermijn . . Set $P(R,D,8)=objPrPrijs.Leverancier.Nummer,$P(R,D,9)=objPrPrijs.GrootVerpakking . . Set R=D_CType_D_R . . Set objPrPrijs="" . . Quit:'$$BSAdd2List(BSPRNr,Aantal,Stock,Reservatie) . . Set MPRNr="" . . For Set MPRNr=$O(Control(CType,BSPRNr,MPRNr)) Quit:MPRNr="" Set $P(R,D,12)=$P(R,D,12)+1 ; Bepalen van het aantal moeders . . Set Count=Count+1,Control("L",Count)=R Kill:$G(Control("L",Count))="&S" Control("L",Count) Quit ; Automatisch behandelen van de problemen. BewerkAxBSControl(Control) New I,R,List,Input,CType,BSPRNr,BSAantal,Stock,Reservatie,BestHoev,LevTerm,LEVNr,GrVerp,EenOpEenRel,PRNr,ORDNr,OLUNr,InventTransId,ConfigId,MaatwerkGenerischItemId For I=1:1 Set R=$G(Control("L",I)) Quit:R="" Do . Set CType=$P(R,D,2),BSPRNr=$P(R,D,3),BSAantal=$P(R,D,4),Stock=$P(R,D,6),Reservatie=$P(R,D,7),BestHoev=$P(R,D,8),LevTerm=$P(R,D,9),LEVNr=$P(R,D,10),GrVerp=$P(R,D,11) . If CType="NS" Do . . Set EenOpEenRel=$P(Control("NS",BSPRNr),D,3) . . Set PRNr = "" . . If EenOpEenRel Do . . . For Set PRNr=$O(Control("NS",BSPRNr,PRNr)) Quit:PRNr="" Do . . . . If EenOpEenRel Do ; Een op een relatie, GEEN controle op min bestelhoev en grootverpakking . . . . . Set ORDNr="" . . . . . For Set ORDNr=$O(Control("NS",BSPRNr,PRNr,ORDNr)) Quit:ORDNr="" Do . . . . . . Set OLUNr="" . . . . . . For Set OLUNr=$O(Control("NS",BSPRNr,PRNr,ORDNr,OLUNr)) Quit:OLUNr="" Do . . . . . . . Set BSAantal=$P(Control("NS",BSPRNr,PRNr,ORDNr,OLUNr),D) . . . . . . . Set InventTransId=$P(Control("NS",BSPRNr,PRNr,ORDNr,OLUNr),D,3) . . . . . . . Set ConfigId=$P(Control("NS",BSPRNr,PRNr,ORDNr,OLUNr),D,4) . . . . . . . Set MaatwerkGenerischItemId=$P(Control("NS",BSPRNr,PRNr,ORDNr,OLUNr),D,5) . . . . . . . Set Control("T",LEVNr,$O(Control("T",LEVNr,""),-1)+1)=BSPRNr_D_BSAantal_D_$$EXTDATE^vhLib.DataTypes($$CALCDATE^vhLib.DataTypes(,"W",LevTerm),"DW")_D_ORDNr_D_OLUNr_D_InventTransId_D_ConfigId_D_MaatwerkGenerischItemId . . . . Else Do . . . . . If BSAantal'>BestHoev Set BSAantal=BestHoev ; Controle op min bestelhoev en grootverpakking . . . . . Else If BSAantal'>GrVerp Set BSAantal=GrVerp . . . . . Else If BSAantal#GrVerp Set BSAantal=BSAantal+(GrVerp-(BSAantal#GrVerp)) . . . . . Set Control("T",LEVNr,$O(Control("T",LEVNr,""),-1)+1)=BSPRNr_D_BSAantal_D_$$EXTDATE^vhLib.DataTypes($$CALCDATE^vhLib.DataTypes(,"W",LevTerm),"DW") . Else . . Set Control("M",LEVNr,$O(Control("M",LEVNr,""),-1)+1)=BSPRNr_D_BSAantal_D_Stock_D_Reservatie Quit ; Aanmaken van de toeleveringen (niet-stock) ToeLevBSControl(ORDNr,Control) New R,KLNr,LEVNr,TOENr,PRNr,FBLocal,Data Set KLNr=$P(^KO1(ORDNr,"F"),D),LEVNr="" For Set LEVNr=$O(Control("T",LEVNr)) Quit:(LEVNr="")||(LEVNr'=$$$LevHalux) Do . Kill PRNr . Merge PRNr=Control("T",LEVNr) . Do BUILDOBJ^FLOWTOE(.PRNr,KLNr_" - "_ORDNr,1,,"FBLocal") . Set PRNr=$O(FBLocal("")) . Quit:'PRNr . Set R=FBLocal(PRNr),TOENr=$P(R,D,2) . Set R=^KTO(LEVNr,TOENr,1),$P(R,D,7,8)=ORDNr_D_KLNr,^KTO(LEVNr,TOENr,1)=R . Set PRNr="" . For Set PRNr=$O(FBLocal(PRNr)) Quit:PRNr="" Do . . Set Next="" . . For Set Next=$O(FBLocal(PRNr,"KomLink",Next)) Quit:Next="" Do . . . New TOENr,TLUNr,ORDNr,OLUNr . . . Set R=FBLocal(PRNr,"KomLink",Next),TOENr=$P(R,D),TLUNr=$P(R,D,2),ORDNr=$P(R,D,3),OLUNr=$P(R,D,4) . . . If TOENr,TLUNr,ORDNr,OLUNr Do SetKomLink(ORDNr,OLUNr,TOENr,TLUNr),RecalcToeLevWeek(ORDNr,OLUNr,TOENr,TLUNr) . Do SetDueOutProductieORD^FLOWHALUX(ORDNr,1) . Set Data("TextId")="Z" . Kill ^KTOB(TOENr) Quit ; Versturen van een mail naar VDR indien stockbreuk MailBSControl(ORDNr,Control) New R,KLNr,LEVNr,Count,From,To,Subject,Body,Status,BSPRNr,BSAantal,BSKortTxt Set (Body,LEVNr)="" For Set LEVNr=$O(Control("M",LEVNr)) Quit:LEVNr="" Do . Set Body=Body_$C(13)_$C(13)_"Leverancier: "_LEVNr_" "_$P(^KLE(^KL1(LEVNr),0),D,2)_$C(13),Count="" . For Set Count=$O(Control("M",LEVNr,Count)) Quit:Count="" Do . . Set R=Control("M",LEVNr,Count),BSPRNr=$P(R,D),BSAantal=$P(R,D,2),Stock=$P(R,D,3),Reservatie=$P(R,D,4),BSKortTxt=$P(^KPR(BSPRNr,0),D) . . Set Body=Body_$C(13)_" "_$S(Count=1:"Product: ",1:" ")_BSKortTxt_$$EXTNUM^vhLib.DataTypes(BSAantal,40-$L(BSKortTxt),".",0)_" (a)" . . Set Body=Body_$$EXTNUM^vhLib.DataTypes(Stock,10,".",0)_" (s)"_$$EXTNUM^vhLib.DataTypes(Reservatie,10,".",0)_" (r)" Do:$L(Body) . Set KLNr=$P(^KO1(ORDNr,"F"),D) . Set From=$$USERNAME^vhUSER(,"@"),To=$LB($$USERNAME^vhUSER(##class(TECH.Config.ConfigMgr).Instance().GetString("FLOWORD7_MailBSControle"),"@")),Subject="Order "_ORDNr_" voor "_$P(^KKL(^KK1(KLNr),0),D,2) . Set Body="Van volgende producten is er onvoldoende voorraad."_$C(13)_Body . Set Status=$$SendMiniMail^vhLib(From,To,Subject,Body) Quit ; Markeer voor toelevering (niet stock) of mail (stock) ModBSControl(Control,List,Toggle) New R,CType,BSPRNr,BSKortTxt,BSAantal,Stock,Reservatie,BestHoev,LevTerm,BSType,StOvKind,WildList,TxPtop Set R=Control("L",List("SELECT")),CType=$P(R,D,2) Do:$L(CType) . Set BSPRNr=$P(R,D,3),BSType=$P(R,D,5) . If $G(Toggle) Do . . Set Toggle=$S(BSType'="K":0,1:$$PermitToelev(BSPRNr)) . Else Do . . Do BSGetDetail(CType,BSPRNr,.WildList,10) . . Set WildList="WildList" . . Set BSAantal=$P(R,D,4),Stock=$P(R,D,6),Reservatie=$P(R,D,7),BestHoev=$P(R,D,8),LevTerm=$P(R,D,9) . . Set BSKortTxt=$P(^KPR(BSPRNr,0),D),BSKortTxt=BSKortTxt_$S(CType="TK":$J("",26-$L(BSKortTxt))_"*",1:"") . . Set R=$P(Stock,"#") . . If BSType="H" Set R=$P(Stock,"#",2) Set:$P(Stock,"#",3) R=R_" ("_$$EXTNUM^vhLib.DataTypes($P(Stock,"#",3),0,"+",0)_")" . . Set Stock=R,StOvKind=$P(^KPR(BSPRNr,0),D,23)="S" . . Set:StOvKind Stock=$C(177)_Stock . . Set Reservatie=$P(Reservatie,"#") . . Set TxPtop=$S(BSType'="K":"BSCLOSEA",$$PermitToelev(BSPRNr):"BSCLOSE",1:"BSCLOSEA") . . Set Toggle=$$^vhTXTPOP("FLOWORD",TxPtop,"","Markeer "_$S(CType="NS":"toelevering",1:"mail"),BSKortTxt,BSAantal,Stock,Reservatie,BestHoev,LevTerm) . Do:Toggle . . Set R=Control("L",List("SELECT")),$P(R,D)='$P(R,D) . . Set Control("L",List("SELECT"))=R . . Do ENABLE^vhLIST(.List,List("SELECT"),1) Quit ; Haal het detail der bouwstenen BSGetDetail(CType,BSPRNr,WildList,MaxCount) New MPRNr,Sort,WildPop Set MPRNr="" For Set MPRNr=$O(Control(CType,BSPRNr,MPRNr)) Quit:MPRNr="" Set SortKey=$$SORTKEY^PRODUKT(MPRNr),Sort(SortKey)=MPRNr Set SortKey="",Count=0 For Set SortKey=$O(Sort(SortKey)) Quit:SortKey="" Set MPRNr=Sort(SortKey),Count=Count+1,WildList(Count)=$P(^KPR(MPRNr,0),D) If $G(MaxCount) Quit:Count'$$INTDATE^vhLib.DataTypes(LevTToe,"DW") . Do KWNODE^FLOWTOE(LEVNr,TOENr,TLNr) . Set $P(^KTO(LEVNr,TOENr,TLNr),D,25)=NewLevTToe . Do BSSWNODE^FLOWTOE(LEVNr,TOENr,TLNr) . Do ProductToeleveringLijnGewijzigd^FLOWTOE2(LEVNr,TOENr,TLNr,##class(DOM.AKP.enu.ProductToeleveringLijnWijzigingType).Leverdatum()) Quit ; Leverweek toelevering op basis van leverdag order (cfr KFSO - sluiten order) CalcToeLevWeek(PRNr,LevTOrd) New R,LevTToe,TermijnAantal,TermijnType Set R=blLeveringsTermijn.GetLeverTermijn(PRNr),TermijnAantal=$LI(R),TermijnType=$LI(R,2) Set LevTToe=$$CALCDATE^vhLib.DataTypes(LevTOrd,TermijnType,-TermijnAantal) Set LevTToe=$$EXTDATE^vhLib.DataTypes(LevTToe,"DW") ; Levertermijn voor de toelevering Quit LevTToe ; Mag er een toelevering aangemaakt worden voor deze bouwsteen? PermitToelev(BSPRNr) New PermitToelev,IsHalux,IsStock Set IsHalux=$$ISHALUX^PRODUKT2(BSPRNr),IsStock=$P(^KPR(BSPRNr,1),D,20) Set PermitToelev=IsHalux Set:PermitToelev PermitToelev='IsStock Quit PermitToelev ; Toevoegoegen aan de lijst? BSAdd2List(BSPRNr,Aantal,Stock,Reservatie) New Add2List,IsHalux,IsStock Set Add2List=1,IsHalux=$$ISHALUX^PRODUKT2(BSPRNr),IsStock=$P(^KPR(BSPRNr,1),D,20) If 'IsHalux,Aantal<(Stock-Reservatie) Set Add2List=0 If IsHalux,IsStock,Aantal<(Stock-Reservatie) Set Add2List=0 ; Halux producten steeds toevoegen indien niet-stock, van stock producten de voorraad controleren Quit Add2List