EWORDS2 ;E'WMS Opbouw van een Consolidatie order [ 01/27/2003 9:34 AM ] ; BLDCONS(KLNr,MarkRef,CONSNr,VerzW,VerzDat,DOutTime,VerzZ,LevAdr,ChkBeletDone) ; Het order is gelockt door het oproepende programma ; @MarkRef bevat voor de verschillende Orders en OLUNrs het aantal (piece 1) voor het WMS en of er een BackOrder moet gekreeerd worden (piece 2). ; Het BackOrder mag een markering B dan is BOQty=OLQty-MarkedQty, of het mag het Backorder aantal zelf zijn. New ORDNr,OLNr,OLUNr,OLCnt,AutoCons,CredCnt,OLRec,Qty,BOQty,Sort,ManOpsl,BOLwk,Check,Rembours,MagHandeling Lock +^ORDW("D",CONSNr) ; Consolidatie hoofding Set:'VerzDat VerzDat=+$H Set CONSRec="" Set $P(CONSRec,D,1)=KLNr Set $P(CONSRec,D,2)=VerzW Set $P(CONSRec,D,3)=DOutTime Set $P(CONSRec,D,4)=VerzZ Set $P(CONSRec,D,5)=VerzDat Set $P(CONSRec,D,18)=$H ;Set $P(CONSRec,D,20)="W" ;Set $P(CONSRec,D,22)=$H Set ^ORDW("D",CONSNr)=CONSRec Set:$L($TR($G(LevAdr),D,"")) ^ORDW("D",CONSNr,"A")=LevAdr ; Set (ORDNr,OLUNr)="" Set (OLCnt,AutoCons,CredCnt)=0 For Set ORDNr=$O(@MarkRef@("A",ORDNr)) Quit:ORDNr="" Do .Lock +^KOD(KLNr,"F",ORDNr) .Kill ^ORDW("AUTO",ORDNr) .For Set OLUNr=$O(@MarkRef@("A",ORDNr,OLUNr)) Quit:OLUNr="" Do ..Set OLNr=^ORD("IU",ORDNr,OLUNr) ..Set OLRec=^KOD(KLNr,"F",ORDNr,OLNr) ..Set Qty=$P($G(@MarkRef@("A",ORDNr,OLUNr)),D) ..Quit:'Qty ..Set BOQty=$P(@MarkRef@("A",ORDNr,OLUNr),D,2) ..Set BOQty=$S(BOQty="B":$P(OLRec,D,3)-Qty,BOQty>0:BOQty,1:"") ..Set:$P(OLRec,D,3)>0&(BOQty<1) BOQty="" ; Picking ..Set:$P(OLRec,D,3)<0&(BOQty>-1) BOQty="" ; Terugname ..Set BOLwk=$P(@MarkRef@("A",ORDNr,OLUNr),D,4) ..Set OLCnt=OLCnt+1,ManOpsl=$$OPSLMAN^PRODUKT2($P(OLRec,D,2)),MagHandeling=$$MAGHANDEL^PRODUKT2($P(OLRec,D,2)) ..If Qty<0!($P(OLRec,D,14)["Z")!ManOpsl!'MagHandeling Do ; Terugname, ZONDER picking, opslag manueel, werkvloer of zonder magazijn handeling ...Do BLDAOL(KLNr,CONSNr,ORDNr,OLUNr,Qty) ...Set AutoCons=AutoCons+1 Set:Qty<0 CredCnt=CredCnt+1 ..Else Do ; Doorgeven aan WMS ...Do BLDOL(KLNr,CONSNr,ORDNr,OLUNr,Qty,BOQty,BOLwk) .Lock -^KOD(KLNr,"F",ORDNr) Set $P(^ORDW("D",CONSNr),D,6)=$S(CredCnt=OLCnt:"C",CredCnt:"G",1:"F") Set $P(^ORDW("D",CONSNr),D,25)=$G(QU(1)) ; opslaan wie bon effectief heeft doorgestuurd Set:OLCnt ^ORDW("IK",KLNr,CONSNr)="" If AutoCons Set ORDNr=$O(^ORDW("D",CONSNr,"D","")) If ORDNr,$D(^DynaUpdate(KLNr,ORDNr)) Do UITLEV(CONSNr,AutoCons=OLCnt,1) Quit ; Tijdelijk voor het aan maken van de leveringen van Dynalog update CW 23.10.07 If AutoCons Do ; Indien gemarkeerde lijnen zijn terugnames, ZONDER picking of opslag manueel .Set ChkBeletDone="C",Check=$$CHECK^EWORDS3(CONSNr,1),Rembours=$P(Check,D,2) .If 'Check!Rembours Set ChkBeletDone="B" Do BELET^EWORDS3(CONSNr,$S(AutoCons=OLCnt:"B",1:"")) Quit .Do UITLEV(CONSNr,AutoCons=OLCnt,1) ; Op bon zetten zonder de vraag te stellen .If AutoCons=OLCnt,$D(^KU1(CONSNr)) Do PRINTONE^DCPRINT("L",CONSNr) ; Eventueel de bon afdrukken Else Do CHKCONS(CONSNr,.ChkBeletDone) Set blOrderEvents=##class(BL.Flow.Order.OrderEvents).Instantiate() Set Status=blOrderEvents.ConsolidatieOpgesteld(CONSNr) If Status'=1 Do WARN^vhTXTPOP($$ParseStatus^vhLib(Status),"Fout bij invullen bakken voor aventosproducten") Lock -^ORDW("D",CONSNr) Quit BLDAOL(KLNr,CONSNr,ORDNr,OLUNr,Qty) ; Terugnames, zonder WMS en manueel krijgen onmiddellijk status afgewerkt. New OLNr,OLRec,PRNr,KPRNr,ZndSt,LinkPRNr Set OLNr=^ORD("IU",ORDNr,OLUNr) Set OLRec=^KOD(KLNr,"F",ORDNr,OLNr) Set PRNr=$P(OLRec,D,2) Set ZndSt=$P(OLRec,D,14)["Z" Set OLRec="" Set $P(OLRec,D,1)=PRNr Set $P(OLRec,D,2)="A" ; Status : Afgewerkt Set:ZndSt $P(OLRec,D,3)="z" ; Errorcode = z bij zonder stockaanpassing Set:Qty<0 $P(OLRec,D,3)="t" ;Errorcode = t bij terugname Set $P(OLRec,D,4)=Qty Set ^ORDW("D",CONSNr,"D",ORDNr,OLUNr)=OLRec Set ^ORDW("IO",ORDNr,OLUNr)=CONSNr ; If $D(^PRLINK("D",PRNr)) Do ; Opslitsen in kindproducten .Set KPRNr="" .For Set KPRNr=$O(^PRLINK("D",PRNr,KPRNr)) Quit:KPRNr="" Do . . Set LinkQty=$P(^PRLINK("D",PRNr,KPRNr),D) . . Set LinkPRNr=$$SingleKind(KPRNr) . . Do BLDASUB(CONSNr,ORDNr,OLUNr,LinkPRNr,Qty*LinkQty,KPRNr) Else Do .Do BLDASUB(CONSNr,ORDNr,OLUNr,PRNr,Qty) Quit SingleKind(MPRNr) ; SOPR producten NEw BSKey,Cnt,BSRec,LinkPRNr Set BSKey="" Set Cnt=0 For Set BSKey=$O(^PRBS("BS",MPRNr,BSKey)) Quit:BSKey="" Do . Set BSRec=^PRBS("BS",MPRNr,BSKey) . Quit:$P(BSRec,"\",3)'="K" . Set Cnt=Cnt+1 . Set LinkPRNr=$P(BSRec,"\",1) Quit:Cnt=1 LinkPRNr Quit MPRNr BLDASUB(CONSNr,ORDNr,OLUNr,PRNr,Qty,MoederPRNr) ; opbouw van een suborderlijn onmiddellijk status afgewerkt. New SubRec,SubOLNr,C,PRRec,Txt Set SubOLNr=$O(^ORDW("D",CONSNr,"D",ORDNr,OLUNr,""),-1) Set SubOLNr=SubOLNr\100+1*100 Set SubRec="" Set $P(SubRec,D,1)=PRNr Set $P(SubRec,D,2)="A" ; Status = Afgewerkt Set $P(SubRec,D,3)=Qty If $G(MoederPRNr)'=""&&(MoederPRNr'=PRNr) Set $P(SubRec,D,16)=$G(MoederPRNr) Set:$$OPSLZONE^PRODUKT2(PRNr)=9 $P(SubRec,D,4)=Qty ; Werkvloerprodukt Set ^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SubOLNr)=SubRec Quit BLDOL(KLNr,CONSNr,ORDNr,OLUNr,Qty,BOQty,BOLwk) ; Verwerken van een orderlijn met eventuele opslitsing in verschillende kindproducten New OLNr,OLRec,PRNr,KPRNr,ManOpsl,ManChk,LinkPRNr Set OLNr=^ORD("IU",ORDNr,OLUNr) ; Misschien veranderd door BACKORD, daarom terug ophalen Set OLRec=^KOD(KLNr,"F",ORDNr,OLNr) Set PRNr=$P(OLRec,D,2) If 'PRNr Do ERROR^EWLOG("NOPROD") Quit ;Opbouw OL in ORDW Set OLRec="" Set $P(OLRec,D,1)=PRNr Set $P(OLRec,D,4)=Qty Set $P(OLRec,D,6)=BOQty Set $P(OLRec,D,7)=$S(BOLwk?5N:BOLwk,1:$$INTDATE^vhDTyp(BOLwk,"DW")) Set ^ORDW("D",CONSNr,"D",ORDNr,OLUNr)=OLRec Set ^ORDW("IO",ORDNr,OLUNr)=CONSNr ; If $D(^PRLINK("D",PRNr)) Do ; Opslitsen in kindproducten .Set KPRNr="" .Set ManChk=1 .For Set KPRNr=$O(^PRLINK("D",PRNr,KPRNr)) Quit:KPRNr="" Do .. Set LinkQty=$P(^PRLINK("D",PRNr,KPRNr),D) .. Set LinkPRNr=$$SingleKind(KPRNr) .. Set ManOpsl=$$OPSLMAN^PRODUKT2(KPRNr) .. Set:'ManOpsl ManChk=0 .. Do:ManOpsl BLDASUB(CONSNr,ORDNr,OLUNr,LinkPRNr,Qty*LinkQty,KPRNr) .. Do:'ManOpsl BLDSUB(CONSNr,ORDNr,OLUNr,LinkPRNr,Qty*LinkQty,KPRNr) .If ManChk Do ..Set OLRec=^ORDW("D",CONSNr,"D",ORDNr,OLUNr) ..Set $P(OLRec,D,2)="A" ..Set $P(OLRec,D,5)=$P(OLRec,D,4) ..Set AutoCons=AutoCons+1 ; onthouden dat er een automatische lijn is ..Set ^ORDW("D",CONSNr,"D",ORDNr,OLUNr)=OLRec .Do ADDRES^PRODUKT4(PRNr,Qty) ; Moederproduct reservatie ! Else Do .Do BLDSUB(CONSNr,ORDNr,OLUNr,PRNr,Qty) Quit BLDSUB(CONSNr,ORDNr,OLUNr,PRNr,Qty,MoederPRNr) ; opbouw van een suborderlijn New SubRec,SubOLNr,C,PRRec,Txt Set SubOLNr=$O(^ORDW("D",CONSNr,"D",ORDNr,OLUNr,""),-1) Set SubOLNr=SubOLNr\100+1*100 Set SubRec="" Set $P(SubRec,D,1)=PRNr Set $P(SubRec,D,3)=Qty If $G(MoederPRNr)'=""&&(MoederPRNr'=PRNr) Set $P(SubRec,D,16)=$G(MoederPRNr) Set ^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SubOLNr)=SubRec Do ADDRES^PRODUKT4(PRNr,Qty) Quit UITLEV(CONSNr,All,NoAsk) If All Do .Set $P(^ORDW("D",CONSNr),D,20)="C" .Do BON^EWBON(CONSNr,$G(NoAsk)) ; Op bon zetten manueel door de gebruiker Else Do .Set $P(^ORDW("D",CONSNr),D,20)="" ; Niet volledig dus partieel afgewerkt Quit CHKCONS(CONSNr,ChkBeletDone) New CONSRec,OLRec,SubRec,ORDNr,OLUNr,SubOLNr,OLUStat,SubStat,Check,Rembours Set ORDNr=$O(^ORDW("D",CONSNr,"D","")) ;Set IsOrga=$$ISORGAL^FLOW("O",ORDNr) ;M:IsOrga ^PVORDW(CONSNr,$O(^PVORDW(CONSNr,""),-1)+1)=^ORDW("D",CONSNr) Set (ORDNr,OLUStat)="" For Set ORDNr=$O(^ORDW("D",CONSNr,"D",ORDNr)) Quit:ORDNr="" Do Quit:OLUStat'="A" ; Stop bij de eerstevolgende niet afgewerkte order(lijn) . Set OLUNr="" . For Set OLUNr=$O(^ORDW("D",CONSNr,"D",ORDNr,OLUNr)) Quit:OLUNr="" Do Quit:OLUStat'="A" ; Stop bij de eerstvolgende niet afgewerkte orderlijn .. Set (SubOLNr,SubStat)="" .. For Set SubOLNr=$O(^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SubOLNr)) Quit:SubOLNr="" Do Quit:SubStat'="A" ; Stop bij de eerstvolgende niet afgewerkte sublijn ... Set SubStat=$P(^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SubOLNr),D,2) .. Set:SubStat="A" $P(^ORDW("D",CONSNr,"D",ORDNr,OLUNr),D,2)="A" ; Overerving, alle sublijnen zijn Afgewerkt .. Set OLUStat=$P(^ORDW("D",CONSNr,"D",ORDNr,OLUNr),D,2) ;M:IsOrga ^PVORDW(CONSNr,$O(^PVORDW(CONSNr,""),-1)+1)=^ORDW("D",CONSNr) If OLUStat="A" Do ; Alle orderlijnen zijn afgewerkt, niet naar WMS onmiddellijk op bon . Set ChkBeletDone="C",Check=$$CHECK^EWORDS3(CONSNr,1),Rembours=$P(Check,D,2) . If 'Check!Rembours Set ChkBeletDone="B" Do BELET^EWORDS3(CONSNr,"B") Quit . Do UITLEV(CONSNr,1) ;M:IsOrga ^PVORDW(CONSNr,$O(^PVORDW(CONSNr,""),-1)+1)=^ORDW("D",CONSNr) Quit ; Errormeldingen NOPROD ;"Geen product gedefinieerd in :"_ORDNr_";"_OLUNr NOSEND ;"Order kan niet worden doorgestuurd omwille van status :"_ORDNr_";"_$P(^ORD(KLNr,"F",ORDNr,1),D,30)