EWORDSW ;E'WMS Doorsturen van een Consolidatie order naar het WMS [ 11/29/2003 8:10 AM ] #Include BL.Derde.Kennis #Include BL.Derde.KlantSpecifiek #include Prod.Product ; CLEARONE(CONSNr) If $G(CONSNr)="" Do .Read "CONSOLIDATIE NR : ",CONSNr Quit:CONSNr'?6N Quit:'$D(^ORDW("D",CONSNr)) Set ORDNr="" For Set ORDNr=$O(^ORDW("D",CONSNr,"D",ORDNr)) Quit:ORDNr="" Do . Set OLUNr="" . For Set OLUNr=$O(^ORDW("D",CONSNr,"D",ORDNr,OLUNr)) Quit:OLUNr="" Do . . Set SOLNr="" . . For Set SOLNr=$O(^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr)) Quit:SOLNr="" Do . . . Set Rec=^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr) . . . Set $P(Rec,D,2)="" . . . Set $P(Rec,D,4)="" . . . Set ^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr)=Rec . . Set Rec=^ORDW("D",CONSNr,"D",ORDNr,OLUNr) . . Set $P(Rec,D,2)="" . . Set $P(Rec,D,3)="" . . Set $P(Rec,D,5)="" . . Set ^ORDW("D",CONSNr,"D",ORDNr,OLUNr)=Rec . Set Rec=^ORDW("D",CONSNr) . Set $P(Rec,D,20)="" . Set $P(Rec,D,21)="" . Set ^ORDW("D",CONSNr)=Rec Kill ^ORDW("D",CONSNr,"S") Do SEND(CONSNr) Quit SENDALL New R,DOutDate,CONSNr,KLNr Set DOutDate=+$H Do DISPLAY^vhScherm("EWORDSW") If $G(^EWREC("P","NOSEND")) Do Quit:$G(^EWREC("P","NOSEND")) .Set R=$$ACTIVATE^EWRECS() .Do:'+$G(^EWREC("P","NOSEND")) DISPLAY^vhScherm("EWORDSW",,,,,1) Do FIELD^vhScherm("EWORDSW","DOUTDATE") Set FP=2201 Write @F,@F1 If %SC,$$^vhTXTPOP("EWORDSW","SENDALLWMS",,$$EXTDATE^vhLib.DataTypes(DOutDate))="Z" Do . Set FP=2201 . Write @F,@F1 . Write !,"Halux",! . Do ProcessAll(DOutDate,1,$$$KlantHalux) . Set FP=2201 . Write @F,@F1 . Write !,"Wachten ... " . H 20 . Write "Andere",! . Do ProcessAll(DOutDate,1) Quit ProcessAll(DOutDate,WithWrite,LimKLNr) New CONSNr,FP,KLNr,R Set CONSNr="",FP=1001 Write:$G(WithWrite) @F For Set CONSNr=$O(^ORDW("D",CONSNr)) Quit:CONSNr="" Do . Set R=^ORDW("D",CONSNr) . Set KLNr=$P(R,D,1) . If $G(LimKLNr),KLNr'=LimKLNr Quit . Quit:$P(R,D,20)'="" Quit:+$P(R,D,3)>DOutDate . Write:$G(WithWrite) $J(CONSNr,8) . Do SEND(CONSNr) Quit ; SEND(CONSNr) ; Opbouw van Consolidatie en doorsturen naar E'WMS ; Locals gekend tussen de verschillende routines ; DH,ORDCache New R,DH,ORDNr,OLNr,OLUNr,OLCnt,TerugCnt,OLRec,Qty,BOQty,ORDCache,Sort,VerzW,DOut,IsOrgal,IsTxtOrga,IsTxtTAORIndeling,IsTAORIndeling,IsComm,SoftV,IsKaderD,KenAnk,OBJTSender Quit:$G(^EWREC("P","NOSEND")) Lock +^ORDW("D",CONSNr) Set CONSRec=^ORDW("D",CONSNr),VerzW=$P(CONSRec,D,2),DOut=$P(CONSRec,D,3) Set lbBevat=$$Bevat(CONSNr) Set (IsTxtOrga,IsOrgal)=''$LF(lbBevat,"ORGALUX") ; Orgalux Set (IsTxtTAORIndeling,IsTAORIndeling)=''$LF(lbBevat,"TAORIndeling") Set IsComm=$S(IsOrgal:0,1:$$ISCOMM^FLOWCHK("L",CONSNr)) ; Commisie verpakking - txt bericht en markering vd verzendwijze Set IsKaderD=''$LF(lbBevat,"KADERD") ; ALU kaderdeur Set DH="" Set OLCnt=0 Set (ORDNr,OLUNr,SoftV)="" If $P(CONSRec,D,1)=$$$KlantHalux Do . Do SORTHALUX(CONSNr,lbBevat,.Sort) Else Do . Do SORT(CONSNr,.Sort) Do AanpassenDueOut(CONSNr,lbBevat) Set KenAnk=1 Set OBJTSender=##class(OBJTimpl.WMSOrder.ZendPicklijst).%New() ;OBJT For Set ORDNr=$O(Sort(ORDNr)) Quit:ORDNr="" Do . For Set OLUNr=$O(Sort(ORDNr,OLUNr)) Quit:OLUNr="" Do .. If 'DH Do ... Set IsAndereControleWijze = (IsOrgal || IsTAORIndeling) ... Do ORDCACHE(KLNr,CONSNr,ORDNr,IsAndereControleWijze,.ORDCache) ... Set DH=$$OPEN^EWRECS ; Alleen de eerste keer openen .. Do BLDOL(KLNr,CONSNr,ORDNr,OLUNr,lbBevat,.SoftV) .. Set OLCnt=OLCnt+1 . Do BLDTXT(KLNr,ORDNr,KenAnk) . Set KenAnk=0 If DH Do ; Er zijn er doorgestuurd . Do CLOSE^EWRECS(DH) Do OBJTSender.VerstuurPicklijnen() ;OBJT Set CONSRec=^ORDW("D",CONSNr) Set:$P(CONSRec,D,20)="" $P(CONSRec,D,20)="W" ; Alleen als nog niet is doorgestuurd, dit voor Terugnames en zonder WMS Set $P(CONSRec,D,22)=$H For I=1:1:$L(SoftV) Do ; Welke SoftwareVerwerking is er ingesteld .Set ^ORDW("D",CONSNr,"S",$E(SoftV,I))="W" Set ^ORDW("D",CONSNr)=CONSRec Set ^ORDW("IW",CONSNr)=SoftV Lock -^ORDW("D",CONSNr) Set blOrderEvents=##class(BL.Flow.Order.OrderEvents).Instantiate() Do blOrderEvents.ConsolidatieKlaarVoorPicking(CONSNr) Quit Bevat(CONSNr) Quit ##class(BL.Legacy.EWORDSW).Bevat(CONSNr) AanpassenDueOut(CONSNr,lbBevat) New Omz,OmzFakt,KLNr,DOut,SubMagazijnen,Verzendwijze,OldDOut ;Aanpassen van de DueOutTime volgens magazijn Set KLNr=$P(^ORDW("D",CONSNr),D) Set Omz=$P($G(^KKAAP(KLNr,0,0,0,0)),D) Set OmzFakt=$S(Omz>250000:100,Omz>25000:100,1:0) Set (OldDOut,DOut)=$P(^ORDW("D",CONSNr),D,3) Set SubMagazijnen=$$BepaalSubMagazijnen(CONSNr) Set Verzendwijze=$P($P($P(^ORDW("D",CONSNr),D,2),"`"),";") If Verzendwijze?1"AF"1E { Set $P(DOut,",",2)=1200 } ElseIf (Verzendwijze?1"OD"1N)&&(SubMagazijnen["E") { If Verzendwijze="OD1" Set $P(DOut,",",2)=21600 ; 6 uur If Verzendwijze="OD2" Set $P(DOut,",",2)=25200 ; 7 uur If Verzendwijze="OD3" Set $P(DOut,",",2)=28800 ; 8 uur If Verzendwijze="OD4" Set $P(DOut,",",2)=32400 ; 9 uur If Verzendwijze="OD5" Set $P(DOut,",",2)=36000 ; 10 uur } If ##class(DOM.DomeinContext).Instance().GeefProjectSettingsAPI().IsTranssmartActive() { If ((Verzendwijze="DI1")||(Verzendwijze="DD1")) ; DHL of VRD { Set PostCode=$P($G(^ORDW("D",CONSNr,"A")),"\",6) If (($E(PostCode,1,2)="NL") && ("1,7,8,9"[$E(PostCode,4))) || ($E(PostCode,1,1)="L") { Set $P(DOut,",",2)=$P(DOut,",",2)-(60*60) ; Een uur vroeger voor het hoge Noorden NL of Luxemburg } } } Set:OmzFakt>1 $P(DOut,",",2)=$P(DOut,",",2)-(4*60) ; Grote klanten worden voorgetrokken met 4 min. Set:$LF(lbBevat,"ORGALUX") $P(DOut,",",2)=$P(DOut,",",2)-(10*60) ; Orgalux orders voortrekken met 10 min. Set:$L(SubMagazijnen)=1 $P(DOut,",",2)=$P(DOut,",",2)-(5*60) ; picking uit slechts 1 submagazijn wordt voorgetrokken met 5 min Set:$$IsAlpnachOfHerzog(CONSNr) $P(DOut,",",2)=$P(DOut,",",2)-(20*60) ; picking voor AlpNach of Herzog (klant van SFS) wordt voorgetrokken met 20 min Do INFO^EWLOG($T(DUEOUT)) Set $P(^ORDW("D",CONSNr),D,3)=DOut ; sinds uglypicking actief is niet meer nodig Set:$P(DOut,",",2)<0 $P(^ORDW("D",CONSNr),D,3)=$P(DOut,",") ; PV 15-04-2011 - blijkbaar wordt soms de DueOut verlaagd met x min als deze dan op nul staat dan mag deze niet negatief gaan Quit IsAlpnachOfHerzog(CONSNr) Quit:$P($G(^ORDW("D",CONSNr)),"\",1)'=$$$KlantSFS 0 Set ORDNr=$O(^ORDW("D",CONSNr,"D")) Quit:ORDNr="" 0 Quit:'$D(^KOD($$$KlantSFS,"F",ORDNr)) 0 Set oOrder=##class(DOM.DomeinContext).Instance().GeefOrderAPI().GeefOrder(ORDNr) Quit:'$isObject(oOrder) 0 Quit $$IsAlpnach(CONSNr)||$$IsHerzog(CONSNr) IsAlpnach(CONSNr) Set Alpnach = ##class(DOM.PARTIJ.impl.LegacyPartijAPI).%New().VerwijderPrefixVanHandelKlantId(##class(DOM.VKP.enu.SfsKlant).Alpnach(), ##class(DOM.common.enu.Personality).SFS()) Quit (oOrder.GeefDocumentReferenties().CommissieReferentie["/"_Alpnach_"/") IsHerzog(CONSNr) Set Herzog = ##class(DOM.PARTIJ.impl.LegacyPartijAPI).%New().VerwijderPrefixVanHandelKlantId(##class(DOM.VKP.enu.SfsKlant).Herzog(), ##class(DOM.common.enu.Personality).SFS()) Quit (oOrder.GeefDocumentReferenties().CommissieReferentie["/"_Herzog_"/") BepaalSubMagazijnen(CONSNr) New ORDNr,OLUNr,SOLNr,Magazijnen,SOLRec,SoftV Set (ORDNr,OLUNr,SOLNr,Magazijnen)="" For Set ORDNr=$O(^ORDW("D",CONSNr,"D",ORDNr)) Quit:ORDNr="" Do . For Set OLUNr=$O(^ORDW("D",CONSNr,"D",ORDNr,OLUNr)) Quit:OLUNr="" Do . . For Set SOLNr=$O(^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr)) Quit:SOLNr="" Do . . . Set SOLRec=^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr) . . . Set SoftV=$P(SOLRec,"\",13) . . . Set:Magazijnen'[SoftV Magazijnen=Magazijnen_SoftV Quit Magazijnen SORTHALUX(CONSNr,lbBevat,Sort) New SortT1,SortT2,ORDNr,OLUNr,Gewicht,Aantal,OLRec,OLNr,PRNr,HG,SortKey,SortCnt,Omz,OmzFakt,DOut,DefMag,Mag,GroepSleutel,GroepVolume,FlowCntrlCnt,FlowCntrl Set KLNr=$P(^ORDW("D",CONSNr),D) Set blProdSelect=##class(BL.Prod.Select).Instantiate() Set (ORDNr,OLUNr,SOLNr)="" ; Eerste sortering: ; Someren van de gewichten per paar (groepsleutel) ; Binnen een groepsleutel per order For Set ORDNr=$O(^ORDW("D",CONSNr,"D",ORDNr)) Quit:ORDNr="" Do .For Set OLUNr=$O(^ORDW("D",CONSNr,"D",ORDNr,OLUNr)) Quit:OLUNr="" Do ..Set OLRec=^ORDW("D",CONSNr,"D",ORDNr,OLUNr) ..For Set SOLNr=$O(^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr)) Quit:SOLNr="" Do ...Set SOLRec=^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr) ...Set PRNr=$P(SOLRec,D,1) ...Set Aantal=$P(SOLRec,D,3) ...Set GroepSleutel=$LG(##class(Prod.Kenmerk.DataDefinitie).Get("OEI",PRNr,"Sleutel")) ...If GroepSleutel="" Set GroepSleutel="*" ...Set Verpak=$$$PRGet($$$GrootVerpakking) ...Set Verpak=Aantal\$S(Verpak:Verpak,1:1) ...If Verpak<1 Set Verpak=1 ...Set SoftV=$P(SOLRec,D,13) ...Set:SoftV'?1N SoftV=$$SOFTV(PRNr,KLNr,Aantal,lbBevat) ; Indien niet op voorhand gegroepeerd ...Set SortT1(SoftV,GroepSleutel)=$S(GroepSleutel="*":1,1:$G(SortT1(SoftV,GroepSleutel))+Verpak) ...Set SortT1(SoftV,GroepSleutel,ORDNr,OLUNr,PRNr)="" ; Tweede sortering: ; De hoofdgroep sorteren volgens volume Set (SoftV,GroepSleutel)="" For Set SoftV=$O(SortT1(SoftV)) Quit:SoftV="" Do . For Set GroepSleutel=$O(SortT1(SoftV,GroepSleutel)) Quit:GroepSleutel="" Do .. Set GroepVolume=SortT1(SoftV,GroepSleutel) .. Set SortT2(SoftV,GroepVolume,GroepSleutel)="" ; ;Opbouw van de sorteerlocal die kan gebruikt worden bij de verdere verwerking door SOLCACHE Kill Sort Set FlowCntrlCnt=100 Set (SoftV,GroepVolume,GroepSleutel,ORDNr,OLUNr)="" For Set SoftV=$O(SortT2(SoftV)) Quit:SoftV="" Do .Set SortCnt=200 .For Set GroepVolume=$O(SortT2(SoftV,GroepVolume),-1) Quit:GroepVolume="" Do ..For Set GroepSleutel=$O(SortT2(SoftV,GroepVolume,GroepSleutel)) Quit:GroepSleutel="" Do ...If GroepSleutel="*" Set FlowCntrl=900 ...Else Set FlowCntrl=$I(FlowCntrlCnt) ...Do ....For Set ORDNr=$O(SortT1(SoftV,GroepSleutel,ORDNr)) Quit:ORDNr="" Do .....For Set OLUNr=$O(SortT1(SoftV,GroepSleutel,ORDNr,OLUNr)) Quit:OLUNr="" Do ...... Set PRNr="" ...... For Set PRNr=$O(SortT1(SoftV,GroepSleutel,ORDNr,OLUNr,PRNr)) Quit:PRNr="" Do ....... Set Sort(ORDNr,OLUNr,PRNr)=FlowCntrl Quit SORT(CONSNr,Sort) New SortT1,SortT2,ORDNr,OLUNr,Gewicht,Aantal,OLRec,OLNr,PRNr,HG,SortKey,SortCnt,Omz,OmzFakt,DOut,DefMag,Mag,ProductID Set KLNr=$P(^ORDW("D",CONSNr),D) Set Omz=$P($G(^KKAAP(KLNr,0,0,0,0)),D) Set OmzFakt=$S(Omz>250000:100,Omz>25000:100,1:0) Set DOut=$P(^ORDW("D",CONSNr),D,3) If $P(DOut,",")=$P($H,","),$P(DOut,",",2)'>$P($H,",",2) Do . Set OmzFakt=0 ; Bij dringende bestellingen geen groepering Set (ORDNr,OLUNr,SOLNr)="" ; Eerste sortering: ; Someren van de gewichten per hoofdgroep ; Binnen een hoofdgroep worden de orderlijnen volgens klassificatie gezet. For Set ORDNr=$O(^ORDW("D",CONSNr,"D",ORDNr)) Quit:ORDNr="" Do .For Set OLUNr=$O(^ORDW("D",CONSNr,"D",ORDNr,OLUNr)) Quit:OLUNr="" Do ..Set OLRec=^ORDW("D",CONSNr,"D",ORDNr,OLUNr) ..Set ProductID = $Piece(OLRec,"\",1) ..Set lbBevat = $$Bevat(CONSNr) ..Set:('(($LL(lbBevat)=2)&&$LF(lbBevat,##class(BL.Legacy.enu.ProductBevatType).TaorIndeling())&&$LF(lbBevat,##class(BL.Legacy.enu.ProductBevatType).Orgalux()))) lbBevat = ##class(BL.Legacy.EWORDSW).GeefProductBevatTypeList(ProductID) ..Quit:$P(OLRec,D,2)'="" ; Reeds verwerkt (doorgestuurd), terugname, manueel of zonder WMS ..For Set SOLNr=$O(^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr)) Quit:SOLNr="" Do ...Set SOLRec=^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr) ...Set Aantal=$P(SOLRec,D,3) ...Set PRNr=$P(SOLRec,D,1) ...Set Gewicht=$P(^KPR(PRNr,1),D,13) ...Set Key=$O(^KPR(PRNr,"I")) ...Set HG=$S($E(Key)="I":$P(^KPR(PRNr,Key),D,1),1:"*") ...Set SoftV=$P(SOLRec,D,13) ...If SoftV'?1N Do ; Indien niet op voorhand gegroepeerd voor WMS .... Set SoftV=$$SOFTV(PRNr,KLNr,Aantal,lbBevat) .... Set $P(^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr),D,13)=SoftV ...Set SortT1(SoftV,HG)=$G(SortT1(SoftV,HG))+$S((SoftV="E")!(SoftV?1N):Gewicht*Aantal/1000,1:0) ; Alleen voor die van het automatisch mag. ...Set SortT1(SoftV,HG,$$SORTKEY^PRODUKT(PRNr),ORDNr,OLUNr)=PRNr ; Tweede sortering: ; De hoofdgroep sorteren volgens gewichtklasse Set (SoftV,HG)="" For Set SoftV=$O(SortT1(SoftV)) Quit:SoftV="" Do . For Set HG=$O(SortT1(SoftV,HG)) Quit:HG="" Do .. Set Gewicht=SortT1(SoftV,HG) .. Set Gewicht=$S(Gewicht'>10:10,Gewicht'>50:50,Gewicht'>100:100,Gewicht'>250:250,Gewicht'>500:500,1:99999) ; Afronden van het gewicht volgens gewichtklassen .. Set SortT2(SoftV,Gewicht,HG)="" ; ;Opbouw van de sorteerlocal die kan gebruikt worden bij de verdere verwerking door SOLCACHE Set FirstList="10480;10479;2538;90302;104752;82858;89510;89511;90263;9563;92264;76804;31577;10111;9913;19114;92491;71580;71581;89994;90267;55778;88893;19142;90265;9885;9886;82388;76364;76365;19134;10095;11544;19135;10096;11545;90308;19142;86104;89998;55774;" Kill Sort Set (SoftV,Gewicht,HG,SortKey,ORDNr,OLUNr)="" For Set SoftV=$O(SortT2(SoftV)) Quit:SoftV="" Do .Set SortCnt=200 .For Set Gewicht=$O(SortT2(SoftV,Gewicht),-1) Quit:Gewicht="" Do ..For Set HG=$O(SortT2(SoftV,Gewicht,HG)) Quit:HG="" Do ...Set SortCnt=SortCnt+99\100*100 ; Groeperen per HG ...For Set SortKey=$O(SortT1(SoftV,HG,SortKey)) Quit:SortKey="" Do ....For Set ORDNr=$O(SortT1(SoftV,HG,SortKey,ORDNr)) Quit:ORDNr="" Do .....For Set OLUNr=$O(SortT1(SoftV,HG,SortKey,ORDNr,OLUNr)) Quit:OLUNr="" Do ......Set SortCnt=SortCnt+1 ......Set PRNr=SortT1(SoftV,HG,SortKey,ORDNr,OLUNr) ......Set Sort(ORDNr,OLUNr,PRNr)=$S(FirstList[(";"_PRNr_";"):100,OmzFakt:SortCnt\OmzFakt*OmzFakt,1:200)_D_SoftV Quit SOFTV(PRNr, KLNr,Qty,lbProductTypesInConsolidatie ,Force=0) ; SoftwareVerwerking Quit ##class(BL.Legacy.EWORDSW).SOFTV(PRNr,KLNr,Qty,lbProductTypesInConsolidatie,Force) BLDOL(KLNr,CONSNr,ORDNr,OLUNr,lbBevat,SoftV) ; SoftV : via .Local ; Verwerken van een orderlijn met eventuele opslitsing in verschillende kindproducten New OLNr,OLRec,SubOLNr,SubRec,PRNr,KPRNr,OLCache,Txt,SOLSoftV,OLSoftV Do OLCACHE(KLNr,CONSNr,ORDNr,OLUNr,.OLCache) Set OLSoftV="" Set SubOLNr="" For Set SubOLNr=$O(^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SubOLNr)) Quit:SubOLNr="" Do . Set SubRec=^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SubOLNr) . Quit:$P(SubRec,D,2)'="" ; Reeds verwerkt (doorgestuurd), terugname, manueel of zonder WMS . Set SOLSoftV=$P($G(Sort(ORDNr,OLUNr,$P(SubRec,D,1))),D,2) . Set:SOLSoftV="" SOLSoftV=$$SOFTV($P(SubRec,D,1),$P(^ORDW("D",CONSNr),D,1),$P(SubRec,D,3),lbBevat) . If (SOLSoftV?1(1"E",1N,1"V")) Do ; voor EWMS ;OBJT .. Do SOLCACHE(CONSNr,ORDNr,OLUNr,SubOLNr,.C) .. Set C("SOFTV")=SOLSoftV ;OBJT .. Set $P(SubRec,D,11)=$G(C("SORTKODE")) . Set:OLSoftV'[SOLSoftV OLSoftV=OLSoftV_SOLSoftV ; Lijn . Set:SoftV'[SOLSoftV SoftV=SoftV_SOLSoftV ; Consolidatie . Set $P(SubRec,D,13)=SOLSoftV ;Verwerking Software . Set $P(SubRec,D,2)="W" ; Status = WMS . Set ^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SubOLNr)=SubRec . Kill Txt . Merge Txt=C("OLTEKST") . Set Txt=$O(Txt(""),-1) . Kill C("OLTEKST") . Do:(SOLSoftV?1(1"E",1N,1"V")) PUT(.C,"OLTEKST",.Txt) ; voor EWMS ;OBJT Set OLRec=^ORDW("D",CONSNr,"D",ORDNr,OLUNr) Set $P(OLRec,D,2)="W" Set $P(OLRec,D,8)=OLSoftV Set ^ORDW("D",CONSNr,"D",ORDNr,OLUNr)=OLRec Quit BLDTXT(KLNr,ORDNr,KenAnk) New R,OLNr,Txt,BlockId,C,Txt Set OLNr=100,Txt=0 For Set OLNr=$O(^KOD(KLNr,"F",ORDNr,OLNr)) Quit:OLNr="" Do .Set R=^KOD(KLNr,"F",ORDNr,OLNr) .Quit:$P($P(R,D,17),"#")'="KF11" .Set BlockId=$P(R,D,18) .Quit:$P(BlockId,";",2)="P" Quit:$P(BlockId,";",4)'["W" .Set Txt=Txt+1,Txt(Txt)=$P(R,D,5)_"~" Do:KenAnk KennisAnker(KLNr,,.Txt,1) Merge C=ORDCache Set C="O01" Set C("ORDNR")=ORDNr Do:Txt PUT(.C,"ORDTEKST",.Txt) Quit PUT(C,Ref,Txt) If $G(C("SOFTV"))="V" ;OBJT { Set C(Ref)=Txt Do OBJTSender.VoegtoePicklijn(.C) } Else { Do GETWRAP^vhBIGEDIT("Txt",40,.Txt,"G","~","") For Txt=1:1:Txt Set Txt(Txt)=$P(Txt(Txt),"`",5),Txt(Txt)=Txt(Txt)_$J("",40-$L(Txt(Txt))) For Txt=1:1:Txt Do .If Txt#4=1 Do ..If Txt>1 Do ...Do PUT^EWRECS(DH,"C") ...Set:$D(C("PRNR")) C("PRNR")="" Set:$D(C("MOEDERPRNR")) C("MOEDERPRNR")="" ...Set:$D(C("AANTAL")) C("AANTAL")="" ..Set C(Ref)="" .Set C(Ref)=C(Ref)_Txt(Txt) Do:Txt PUT^EWRECS(DH,"C") } Quit ORDCACHE(KLNr,CONSNr,ORDNr,IsAndereControleWijze,C) ; Opbouw van de cache voor de orderhoofding ; C wordt opgeroepen via .Local New KLId,ORDRec,AdrRec,Txt,VrzZone Kill C Set ORDRec=^KOD(KLNr,"F",ORDNr,1) Set ConsRec=^ORDW("D",CONSNr) Set C("CONSNR")=CONSNr Set C("KLNR")=KLNr Set KLId=^KK1(KLNr) Set C("KLNM")=$P(^KKL(KLId,0),D,2) Set C("LEVDAT")=$P(ConsRec,D,5) Set C("DUEOUTTIME")=$P(ConsRec,D,3) ;Set:$$DIFFTIME^vhLib.DataTypes($H,C("DUEOUTTIME"))'>0 C("DUEOUTTIME")=($P(C("DUEOUTTIME"),",")-1)_","_$P(C("DUEOUTTIME"),",",2) ; Bij afhaling de dueout nog vervroegen, hierdoor worden afhalingen die later dan 17:00 worden doorgestuurd toch nog voorgetrokken door EWMS Set C("VERZENDW")=$$VerzendWijzeCompact($P(ConsRec,D,2),IsAndereControleWijze) Set C("KLNM")=C("VERZENDW")_" "_C("KLNM") Set VrzZone=$P(ConsRec,D,4) Set:VrzZone'?6N VrzZone=$O(^RES("EWORDS","PI","VERZENDZONE","D","")) Set C("VERZENDZONE")=VrzZone Set C("TAAL")=$S($P(^KKL(KLId,0),D,9)="F":"F",1:"N") Set AdrRec=$G(^ORDW("D",CONSNr,"A")) If $P(AdrRec,D) Do ; Levadres in order .Set C("LEVADRNR")=$$LEVADRNR^KLANT(KLNr,ORDNr) Else Do ; Hoofdadres gebruiken .Set AdrRec=^KKL(KLId,0) .Set C("LEVADRNR")="" Set C("LEVADRNM")=$P(AdrRec,D,2) Set C("LEVADRTOENM")=$P(AdrRec,D,3) Set C("LEVADRSTR")=$P(AdrRec,D,5) Set C("LEVADRGEM")=$E($P(AdrRec,D,6)_" "_$P(AdrRec,D,7),1,30) If ";9365;2671;3814;"[(";"_KLNr_";") Do ; klant Haefele en 'New SobelWood' -> 1 order / 1 bon . Set C("LEVADRTOENM")=C("LEVADRSTR") . Set C("LEVADRSTR")=C("LEVADRGEM") . Set C("LEVADRGEM")=$$CommRef(KLNr,CONSNr) Set Txt="" If $P(ORDRec,D,16)'="" Set Txt=Txt_";Beloofd op "_$P(ORDRec,D,16) Set:Txt'="" C("ORDTEKST")=$E(Txt,2,999) Quit ; Indien meerdere referenties, dan niets afdrukken. CommRef(KLNr,BONNr) New CommRef,lbCommRef,FacSoort,BLNr,BonRec,ORDNr,OrdRec Set lbCommRef="" Set FacSoort=$$NODE^FLOWBON(BONNr) Set BLNr=100 For { Set BLNr=$O(^KUL(KLNr,FacSoort,BONNr,BLNr)) Quit:'BLNr Set BonRec=^KUL(KLNr,FacSoort,BONNr,BLNr) Continue:$P($P(BonRec,D,17),"#",1)'="KF5" ; Geen orderhoofding Set CommRef=$P(BonRec,D,20) Set:'$L($$UPTRIMAN^vhRtn1(CommRef)) CommRef="" Set:'$L(CommRef) CommRef=$P($P(BonRec,D,5),"- ",3,99) ; gewone referentie Set:CommRef?2N1P2N1P2N1" ".E CommRef=$E(CommRef,10,99) ; gewone referentie waarvan de datum verwijderd is Set:$L(CommRef) lbCommRef=lbCommRef_$LB(CommRef) } If '$LL(lbCommRef) { ; Nog in order Set ORDNr="" For { Set ORDNr=$O(^ORDW("D",BONNr,"D",ORDNr)) Quit:ORDNr="" Set OrdRec=$G(^KOD(KLNr,"F",ORDNr,1)) Set CommRef=$P(OrdRec,D,19) ; Commissiereferentie Set:'$L($$UPTRIMAN^vhRtn1(CommRef)) CommRef="" Set:'$L(CommRef) CommRef=$P(OrdRec,D,3) ; gewone referentie Set:CommRef?2N1P2N1P2N1" ".E CommRef=$E(CommRef,10,99) ; gewone referentie waarvan de datum verwijderd is Set:$L(CommRef) lbCommRef=lbCommRef_$LB(CommRef) } } Quit $S($LL(lbCommRef)=1:"Ref. "_$LI(lbCommRef),1:"") ; Voeg een plus-teken toe aan de verzendwijze-code, in geval van ORGALUX of TA'OR indelingen. ; Dat plusje moet men (Franky en Paul) zien bij controle van de goederen, omdat ze blijkbaar ; anders te werk gaan qua controle bij dit soort orders. VerzendWijzeCompact(VerzendW,IsAndereControleWijze) Quit:'$G(IsAndereControleWijze) VerzendW Set:$L(VerzendW)=3 $E(VerzendW,2)="" Set $E(VerzendW,3)="+" Quit VerzendW HeeftBonAndereControleWijze(CONSNr) Quit ($$ISORGAL^FLOWCHK("L",CONSNr) || $$HeeftTAORIndeling^FLOWCHK("L",CONSNr)) OLCACHE(KLNr,CONSNr,ORDNr,OLUNr,C) ; Opbouw van de cache voor de orderhoofding en orderlijn. ; C wordt opgeroepen via .Local ; Gebruikt de local ORDCache Kill C Merge C=ORDCache Set C("ORDNR")=ORDNr ; Op lijn nivo kunnen alleen de OLTeksten verwerkt worden Quit SOLCACHE(CONSNr,ORDNr,OLUNr,SubOLNr,C) ;Opbouw van de cache voor de suborderlijn ; C wordt opgeroepen via .Local ; Gebruikt de local OLCache ; IsTxtOrga, IsTxtTAORIndeling en IsComm zijn globaal gedefinieerd ; C("OLTEKST",1) is tekst die op de pickpost van het automatisch magazijn wordt getoond aan de picker. New SubRec,OLRec,PRNr,SoftV,MKortTekst,KKortTekst Set OLRec=^ORDW("D",CONSNr,"D",ORDNr,OLUNr) Set SubRec=^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SubOLNr) Kill C Merge C=OLCache Set PRNr=$P(SubRec,D,1) Set C="O01" Set C("OLNR")=OLUNr*100+(SubOLNr\100) Set C("OLSPLITSNR")=(SubOLNr#100) Set C("PRNR")=PRNr Set SoftV=$P(Sort(ORDNr,OLUNr,PRNr),D,2) Set C("CONSNR")=CONSNr_$S(SoftV?1N:SoftV,1:"") Set C("SORTKODE")=$P(Sort(ORDNr,OLUNr,PRNr),D,1) If $P(OLRec,D,1)'=PRNr Do ; Verschillende moeder en kind . Set C("MOEDERPRNR")=$P(OLRec,D,1) . ; controleren of het gaat over product 558.XXXXA ... S1 NI . Set MKortTekst=$P(^KPR($P(OLRec,D),0),D) . Quit:MKortTekst'?1"55"1(1"8",1"9")1"."4N1"A".E . Quit:MKortTekst'["S1" . Set KKortTekst=$P(^KPR(PRNr,0),D) . Quit:KKortTekst'?1"55"1(1"8",1"9").E . Quit:KKortTekst'["LI" . Set C("OLTEKST",1)="Corpusprofiel inpakken als V1" If IsTxtOrga Do . Set C("OLTEKST",1)="ORGALUX order, brengen naar INPAK" . Set IsTxtOrga=0 ; Slechts 1 keer Else If IsTxtTAORIndeling Do . Set C("OLTEKST",1)="TA'OR Indeling order, brengen naar INPAK" . Set IsTxtTAORIndeling=0 ; Slechts 1 keer Else If IsComm Do . Set C("OLTEKST",1)="COMMISSIE order, brengen naar INPAK" . Set IsComm=0 ; Slechts 1 keer Set C("AANTAL")=$P(SubRec,D,3) Set C("PALETID")=$$SELPAL^EWPAL($P(SubRec,D,1),ORDNr,OLUNr) Do GETTEXT(.C) Quit GETTEXT(C) New R,KLNr,ORDNr,OLUNr,OLUNr,OLNr,PRNr,BlockId,Quit,Cnt,Txt Set KLNr=$G(C("KLNR")),ORDNr=$G(C("ORDNR")),OLUNr=$G(C("OLNR"))\100,PRNr=$G(C("MOEDERPRNR")) Set:'PRNr PRNr=$G(C("PRNR")) If KLNr,ORDNr,OLUNr,PRNr Do .Set OLNr=$G(^ORD("IP",PRNr,ORDNr,OLUNr)) .Quit:'OLNr .Set R=^KOD(KLNr,"F",ORDNr,OLNr) .Quit:$P(R,D,2)'=PRNr .Set BlockId="",(Quit,Cnt)=0 Set:$D(C("OLTEKST",1)) Cnt=1 .For Set OLNr=$O(^KOD(KLNr,"F",ORDNr,OLNr)) Quit:OLNr="" Do Quit:Quit ..Set R=^KOD(KLNr,"F",ORDNr,OLNr) ..If $P($P(R,D,17),"#")'="KF11" Set Quit=1 Quit ..If $L(BlockId),BlockId'=$P(R,D,18) Set Quit=1 Quit ..Set BlockId=$P(R,D,18) ..Quit:$P(BlockId,";",2)'="P" Quit:$P(BlockId,";",4)'["W" ..Set Cnt=Cnt+1,C("OLTEKST",Cnt)=$P(R,D,5)_"~" .Do KennisAnker(KLNr,PRNr,.Txt,1) .If $G(Txt) For Txt=1:1:Txt Set Cnt=Cnt+1,C("OLTEKST",Cnt)=Txt(Txt)_"~" Quit KennisAnker(KLNr,PRNr,Local,InclGeneral) Set lbKenAnk=##class(BL.Derde.Kennis.Kennis).GetIDsToPopup(KLNr,.varErrStr,$LB($$$adMagazijnPicking),$S($G(PRNr):$LB(PRNr),1:""),$G(CUserId,$G(QU(1))),,,$G(InclGeneral)) If $LL(lbKenAnk) For Kill KenAnk Set KenAnk=$LI(lbKenAnk) Quit:KenAnk="" Do Quit:'$LL(lbKenAnk) . Set lbKenAnk=$LI(lbKenAnk,2,99) . Set ObjKenAnk=##class(Derde.Kennis.Kennis).%OpenId(KenAnk) . Quit:'$IsObject(ObjKenAnk) . Set KenAnk(1)=$TR(ObjKenAnk.Msg,$C(13,10)," ") . Quit:KenAnk(1)="" . Do GETWRAP^vhBIGEDIT("KenAnk",40,.KenAnk,"G","~","") . For I=1:1:KenAnk Set Local=$G(Local)+1,Local(Local)=$P(KenAnk(I),"`",5) . Set:$LL(lbKenAnk) Local(Local)=Local(Local)_"~" 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) UITLEV ;"Volledige terugname niet geimplementeerd "_KLNr_"; "_ORDNr) DUEOUT ;"Aanpassen DueOut "_$G(CONSNr)_"; "_$G(OldDOut)_"; "_$G(DOut)_"; "_$G(SubMagazijnen)_"; "_$G(Verzendwijze)