EWORDF ;E'WMS Order feedback [ 11/29/2003 1:29 PM ] Q OL(C,IsUgly) ; Feedback van E'WMS/UGLY betreffende het orderpicken van een suborderlijn Set IsUgly=$G(IsUgly,0) ; Opgeroepen door EWRECR ; C wordt opgeroepen via .Local New CONSNr,ORDNr,OLUNr,SOLNr,OLUNr,Qty,SOLRec,AddSOL,SoftV Set CONSNr=C("CONSNR") If 'IsUgly Do ;Ugly versie wordt verderop ingevuld . Set SoftV="E" ; EWMS . Set:$L(CONSNr)=7 SoftV=$E(CONSNr,7),CONSNr=$E(CONSNr,1,6) ;indien komend van EWMS : Groepering splitsen Set:$G(C("SOFTV"))="V" SoftV="V" ;OBJT Set ORDNr=C("ORDNR") Set OLUNr=C("OLNR")\100 Set SOLNr=C("OLNR")#100*100+C("OLSPLITSNR") ;w !,$name(^ORDW("D",CONSNr,"D",ORDNr,OLUNr)),! ;w !,$name(^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr)),! If CONSNr,ORDNr,OLUNr,SOLNr,$D(^ORDW("D",CONSNr,"D",ORDNr,OLUNr)) Else Do ERROR^EWLOG($T(NOSUBOL)) Quit If $P(^ORDW("D",CONSNr),D,20)="B" Do Quit .Do ERROR^EWLOG($T(OPBONL)) Quit .Set $P(^ORDW("D",CONSNr),D,21)="e" .Set $P(^ORDW("D",CONSNr,"D",ORDNr,OLUNr),D,3)="e" Lock +^ORDW("D",CONSNr) Set Qty=C("DELTAUIT") Set SOLRec=$G(^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr)) If $G(^EWLOG("DEBUG"))=2 Write !,@FMTB,"C01:",CONSNr,";",ORDNr,";",OLUNr,";",SOLNr,@FMTb,!,SOLRec Set AddSOL=0 If SOLRec="" Do .New SOLNr2,SOLRec2 .For SOLNr2=SOLNr\100*100:1:SOLNr Quit:$P($G(^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr2)),D,2)=$S(IsUgly:"U",1:"W") .If SOLNr2=SOLNr Do ..Set SOLNr2=SOLNr\100*100 ; bepaal de hoofdlijn ..Set SOLRec=^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr2) ..Do ERROR^EWLOG($T(NOSOL)) .If C("FULLPARTIAL")'="P" Do ERROR^EWLOG($T(FULL)) .Set (SOLRec,SOLRec2)=^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr2) .Set $P(SOLRec,D,3)=Qty .Set $P(SOLRec2,D,3)=$P(SOLRec2,D,3)-Qty .If $G(^EWLOG("DEBUG"))=2 Write "SplitsLG",!,SOLNr2,"->",SOLRec2,!,SOLNr,"->",SOLRec .If $P(SOLRec2,D,3)<1 Do ERROR^EWLOG($T(QTYNEG)) Set $P(SOLRec2,D,2)="E" .Set AddSOL=1 .Set ^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr2)=SOLRec2 ; wordt de nieuwe hoofdlijn If C("STATUS")="PNOK" Do ; Orderlijn NOK: geen goederen voor dit orderlijn . If 'IsUgly,##class(EWMS.Inventory).GetQty($P(SOLRec,D,1),$LB(2,3,4))>0 Do ; WMS heeft een NOK gestuurd maar er voorraad in UGLY -> Lijn converteren naar UGLY picking . . Set SoftV="U" . . ; sublijn . . Set $P(SOLRec,D,13)=SoftV . . ; lijn . . Set OLRec=^ORDW("D",CONSNr,"D",ORDNr,OLUNr) . . Set:$P(OLRec,D,8)'[SoftV $P(OLRec,D,8)=$P(OLRec,D,8)_SoftV . . Set ^ORDW("D",CONSNr,"D",ORDNr,OLUNr)=OLRec . . ; Softv . . If $D(^ORDW("D",CONSNr,"S",SoftV)) Do ; SoftV bestaat reeds . . . Quit:"W,P"[^ORDW("D",CONSNr,"S",SoftV) ; Nog steeds openstaand . . . Set $P(^ORDW("D",CONSNr,"S",SoftV),D,1)="P" ; Terug openen . . Else Do ; bestond nog niet . . . Set ^ORDW("D",CONSNr,"S",SoftV)="W" ; wachtend . . . Set ^ORDW("IW",CONSNr)=$G(^ORDW("IW",CONSNr))_SoftV ; index aanpassen . . Do INFO^EWLOG($T(RESCHEDULE)) . Else Do ; niets te vinden in andere magazijnen -> negatieve afmelding . . Set $P(SOLRec,D,2)="E" . . Set $P(SOLRec,D,6)=C("DATUM") Else If C("STATUS")="POK" Do ; Orderlijn OK .If C("FULLPARTIAL")="P",'AddSOL Do ; Lijn gedeeltelijk afgewerkt ..New SOLRec2,SOLNr2 ..Set SOLRec2=SOLRec ..Set $P(SOLRec2,D,3)=$P(SOLRec,D,3)-Qty ; Resterend aantal ..If $G(^EWLOG("DEBUG"))=2 Write "SplitsP" ..If $P(SOLRec2,D,3)<1 Do ERROR^EWLOG($T(QTYNEG)) Set $P(SOLRec2,D,2)="E" ..For SOLNr2=SOLNr\100*100:1:SOLNr\100*100+99 Quit:'$D(^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr2)) ..Set ^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr2)=SOLRec2 ; Wachten op resterend aantal ..Set $P(SOLRec,D,3)=Qty ..If $G(^EWLOG("DEBUG"))=2 Write !,SOLNr2,"->",SOLRec2,!,SOLNr,"->",SOLRec .Set $P(SOLRec,D,2)=$S($P(SOLRec,D,3)'=Qty:"Q",1:"A") ; Qty verschillend of Afgewerkt .Set $P(SOLRec,D,4)=Qty .Set $P(SOLRec,D,5)=C("PALKLID") .Set $P(SOLRec,D,6)=C("DATUM") .Set $P(SOLRec,D,10)=C("SOURCEPALID") .Set $P(SOLRec,D,12)=C("USER") .Set $P(SOLRec,D,14)=$S(SoftV="V":"V",IsUgly:C("LOCMSTR"),1:$$FYSMAG($P(SOLRec,D,1),C("SOURCEPALID"),C("PALKLID"))) ;OBJT .Set $P(SOLRec,D,6)=C("DATUM") Set:SOLRec'="" ^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr)=SOLRec If $G(^EWLOG("DEBUG"))=2 Write !,SOLRec Set:(IsUgly) SoftV=$P(SOLRec,D,13) Do QTYSTAT(CONSNr,ORDNr,OLUNr,SoftV,IsUgly) ;Do PICKLOG^EWSTAT(C("SOURCEPALID"),C("DATUM")) Lock -^ORDW("D",CONSNr) Quit FYSMAG(PRNr,SPalId,DPalId) ; Bepalen in welk submagazijn de pallet stond ; Indien in EWPAL gedefinieer dan locatie nemen ; anders best-try New Mag,Locatie,DefMag Set Mag="" Quit:PRNr'?4.7N "" Set DefMag=$P($G(^KPR(PRNr,2)),D,15) If $L(SPalId) Do .Set:'$D(^EWPAL("D",PRNr,SPalId)) SPalId=$TR($J(SPalId,8)," ",0) .Quit:'$D(^EWPAL("D",PRNr,SPalId)) .Set Locatie=$P(^EWPAL("D",PRNr,SPalId),D,2) .Set Locatie=+$E(Locatie,1,3) .If Locatie>0,Locatie<5 Set Mag=$E("AULT",Locatie) If $L(DPalId)=8 Do ; Gissen volgens doelpallet .If $E(DPalId,1,3)=155 Set Mag="A1" ; Doelpallet begint met 1 dan Auto .If $E(DPalId,1,3)=156 Set Mag="A2" ; Doelpallet begint met 1 dan Auto .If Mag="",$E(DPalId)=2 Do .. Set Mag="U" ; Doelpallet begint met 2 dan Ugly .. If $D(^KPR(PRNr,"J6332")) Set Mag="T" ; Transit voor Halux .. If DefMag=3 Set Mag="L" ; Langgoed If Mag="" Do . If DefMag>0,DefMag<5 Set Mag=$E("AULT",DefMag) . If $D(^KPR(PRNr,"J6332")) Set Mag="T" ; Transit voor Halux . Set:$L(Mag) Mag=Mag Quit Mag QTYSTAT(CONSNr,ORDNr,OLUNr,SoftV,IsUgly) ; Cumulatie orderlijn en status Set IsUgly=$G(IsUgly,0) ; De aantallen van de suborderlijnen cumuleren en doorgeven aan de orderlijn, rekening houdend met moeder->kindproducten ; De status/errormelding van de suborderlijn propageren naar orderlijn en verder naar orderhoofding New SOLNr,Qty,MaxQty,MinQty,MPRNr,KPRNr,CONSRec,OLRec,SOLRec,KQty,KReqQty,SOLCnt,StatCnt,OLStat,FStat,EStat,OLEStat,OLFStat,KindFactor Set OLRec=^ORDW("D",CONSNr,"D",ORDNr,OLUNr) If $G(^EWLOG("DEBUG"))=2 Write !,OLRec Set SOLNr="" Set KPRNr="" Set OLStat="" Set SOLCnt=0 For Set SOLNr=$O(^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr)) Quit:SOLNr="" Do .Set SOLCnt=SOLCnt+1 .Set SOLRec=^ORDW("D",CONSNr,"D",ORDNr,OLUNr,SOLNr) .Set KPRNr=$P(SOLRec,D,1) .Set KQty(KPRNr)=$G(KQty(KPRNr))+$P(SOLRec,D,4 ) .;Set KReqQty(KPRNr)=$G(KReqQty(KPRNr))+$P(SOLRec,D,3) ; probleem met Moeder -> Kind -> SingleKind oplossen, aangepast PV 14/02/2012; .Set:$S(IsUgly:"U",1:"W")'[$P(SOLRec,D,2) StatCnt($P(SOLRec,D,2))=$G(StatCnt($P(SOLRec,D,2)))+1 Set $P(OLRec,D,2)=$S($G(StatCnt("A"))+$G(StatCnt("Q"))+$G(StatCnt("E"))=SOLCnt:"A",$D(StatCnt):"P",1:"W") Set $P(OLRec,D,3)=$S($G(StatCnt("E")):"E",$G(StatCnt("Q")):"Q",1:"") Set KPRNr="" Set MPRNr=$P(OLRec,D,1) Set MaxQty=-1,MinQty=999999999 For Set KPRNr=$O(KQty(KPRNr)) Quit:KPRNr="" Do . Set KindFactor=$$GetMoederKindFactorRecursief^PRBS(MPRNr,KPRNr) ; probleem met Moeder -> Kind -> SingleKind oplossen, aangepast PV 14/02/2012 . ;If KindFactor'>0&&$P(OLRec,D,4)>0 Do ; probleem met Moeder -> Kind -> SingleKind oplossen, aangepast PV 11/02/2012 . ;. Set KindFactor=$G(KReqQty(KPRNr))\$P(OLRec,D,4) . ;Set:'KindFactor KindFactor=1 . Quit:KindFactor'>0 . Set KQty=KQty(KPRNr)\KindFactor . Set:KQtyMaxQty MaxQty=KQty Set:MinQty=999999999 MinQty=0 Set:MaxQty=-1 MaxQty=0 If MinQty>0,$P(OLRec,D,3)="E" Set $P(OLRec,D,3)="Q" ;Als er een deel gepickt is dan "Q" ipv "E" If $P(OLRec,D,3)="Q",$P(OLRec,D,2)="A",MinQty'=MaxQty Set $P(OLRec,D,3)="K" Set $P(OLRec,D,5)=MinQty If $P(OLRec,D,4)'=$P(OLRec,D,5),$P(OLRec,D,2)="A",$P(OLRec,D,3)="" Set $P(OLRec,D,3)="Q" ; Indien volledig afgemeld en het aantal is verschillend en de foutstatus is leeg dan foutstatus ="Q" ;Verifiëren of producten die een chargenr vereisen volledig gekoppeld zijn If $P(OLRec,D,2)="A" Do . New Status . Set Status=##class(BL.ProdHist.ChargeTrace).ValidateORDW(CONSNr,ORDNr,OLUNr) . Set:(Status'="") $P(OLRec,D,3)="c" Set ^ORDW("D",CONSNr,"D",ORDNr,OLUNr)=OLRec If $G(^EWLOG("DEBUG"))=2 Write !,OLRec ; Propageren van de status naar orderhoofding Do PROPLIJN(CONSNr,SoftV,$P(OLRec,D,2),$P(OLRec,D,3)) Quit ; Propageren van de lijnstatus naar SOFTV en hoofdrecord PROPLIJN(CONSNr,SoftV,OLFStat,OLEStat) New SoftVRec,CONSRec,FStat,EStat,Eprio,OLEprio,HerZend,tempSoftV,Vzw ; propageren naar SoftV status Set SoftVRec=$G(^ORDW("D",CONSNr,"S",SoftV)) Set FStat=$P(SoftVRec,D,1) Set EStat=$P(SoftVRec,D,2) Set Eprio=$F("QEcem",EStat) Set OLEprio=$F("QEcem",OLEStat) Set:Eprio0 MaxTime=$P(SoftVRec,D,4) Set $P(CONSRec,D,21)=EStat ; Controle dat alle lijnen zijn afgemeld If All Do ; Alle SoftV gedeelte zijn afgewerkt Status="A" . Set (ORDNr,OLUNr)="" . Set OLStat="" . 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 Status=$P(OLRec,D,2) ... If Status'="A" Do .... Set OLStat=OLStat_";"_OLUNr .... Set $P(OLRec,D,2)="A" ; Forceer op afgewerkt .... Set $P(OLRec,D,3)="e" ; Systeemfout .... Set ^ORDW("D",CONSNr,"D",ORDNr,OLUNr)=OLRec . Set $P(CONSRec,D,20)="A" . Set $P(CONSRec,D,23)=MaxTime . If OLStat'="" Do .. Do ERROR^EWLOG($T(OLSTAT2)) .. Set $P(CONSRec,D,21)="e" ;Systeemfout . . Set ^ORDW("D",CONSNr)=CONSRec . If $G(^EWLOG("DEBUG"))=2 Write !,CONSRec . ;If "AF;EX"[$E($P(CONSRec,D,2),1,2) Do ; Bij Afhaling OV verwittigen .. ;Do MAILAFH($P(CONSRec,D),CONSNr,$P(CONSRec,D,21)) . Do OPBON^EWORDF2(CONSNr) ; Klaarzetten om enkele min. later op bon te zetten Else Set ^ORDW("D",CONSNr)=CONSRec Lock -^ORDW("D",CONSNr) Quit MAILAFH(KLNr,CONSNr,Status) ; Doorgeven van BON die klaar is voor afhaling New KLNm,Txt,Lnk,KlantID,Bestemmelingen,MailId Set KLNm=$P(^KKL(^KK1(KLNr),0),D,2) Set Txt=1,Txt(1)="Klant : "_KLNr_" "_KLNm Set Txt=2,Txt(2)="~Bon : "_CONSNr_" is klaar" Set:$L(Status) Txt=3,Txt(3)="~~Probleem : Error status "_Status_", dus zelf op bon zetten!" Set Lnk=1,Lnk(1)="KL\"_KLNr_"\R\L" Set:'$L(Status) Lnk=2,Lnk(2)="UL\"_CONSNr_"\P" #dim KlantID As %String = ##class(DOM.DomeinContext).Instance().GeefLegacyPartijAPI().GeefKlantPartijID(KLNr) Set Bestemmelingen = ##class(DOM.DomeinContext).Instance().GeefVerkoopAPI().GeefKlant(KlantID).GeefInterneVerantwoordelijkeEnBackups() Set MailId=$$SYSTEM^vhMAIL("KL",KLNr,"Afhaling",Bestemmelingen,.Txt,.Lnk,"U","A") Quit ; Errormeldingen NOSUBOL ;"Key's foutief :"_C("VOLGNR")_";"_C("CONSNR")_";"_C("ORDNR")_";"_C("OLNR")_";"_C("OLSPLITSNR") NOSOL ;"SOLRecord bestaat niet :"_C("VOLGNR")_";"_C("CONSNR")_";"_C("ORDNR")_";"_C("OLNR")_";"_C("OLSPLITSNR") NOSOFTV ;"SOFTV node bestaat niet :"_C("VOLGNR")_";"_C("CONSNR")_";"_C("SOFTV") OPBONL ;"Reeds op bon :"_C("VOLGNR")_";"_C("CONSNR")_";"_C("ORDNR")_";"_C("OLNR")_";"_C("OLSPLITSNR") OPBON ;"Reeds op bon :"_C("VOLGNR")_";"_C("CONSNR") NOKEY ;"Foutieve gegevens :"_C("VOLGNR")_";"_C("CONSNR")_";"_C("ORDNR")_";"_$G(C("OLNR")) PNOK ;"Splitsnr verschillend van nul en Status=PNOK :"_C("VOLGNR")_";"_C("CONSNR")_";"_C("ORDNR")_";"_C("OLNR")_";"_C("OLSPLITSNR") RESCHEDULE ;"Picking herzet van EWMS naar UGLY ("_$G(SoftV)_") :"_C("VOLGNR")_";"_C("CONSNR")_";"_C("ORDNR")_";"_C("OLNR")_";"_C("OLSPLITSNR") BADSTAT ;"SOL Status out of range :"_C("VOLGNR")_";"_C("CONSNR")_";"_C("ORDNR")_";"_C("OLNR")_";"_C("OLSPLITSNR")_";"_C("STATUS") OLSTAT ;"Statussen door elkaar:"_C("VOLGNR")_";"_C("CONSNR")_";"_C("ORDNR")_";"_C("OLNR")_";"_FStat_";"_OLFStat SVSTAT ;"SoftV statussen door elkaar:"_C("VOLGNR")_";"_C("CONSNR")_";"_SoftV_";"_C("ORDNR")_";"_C("OLNR")_";"_FStat_";"_OLFStat FULL ;"Full markering ontvangen terwijl er nog een lijn vrij staat :"_C("VOLGNR")_";"_C("CONSNR")_";"_C("ORDNR")_";"_C("OLNR")_";"_C("OLSPLITSNR")_";"_C("FULLPARTIAL")_";"_C("STATUS") QTYNEG ;"Bij opsplitsing negatief aantal :"_C("VOLGNR")_";"_C("CONSNR")_";"_C("ORDNR")_";"_C("OLNR")_";"_C("OLSPLITSNR") ORDCANC ;"Terugmelding voor CancelOrder. Het terugtrekken van een order wacht normaal op dit antwoord :"_C("VOLGNR")_";"_C("CONSNR")_";"_C("ORDNR")_";"_C("STATUS") ORDSTAT ;"De status in het order is foutief moet ""P"" zijn :"_C("VOLGNR")_";"_C("CONSNR")_";"_C("ORDNR")_";"_SoftV_";"_C("STATUS")_";"_ORDStat OLSTAT2 ;"De status van sommige orderlijnen zijn nog niet afgesloten :"_C("VOLGNR")_";"_C("CONSNR")_";"_C("ORDNR")_";"_OLStat NOCONS ;"Consolidatie bestaat niet :"_C("VOLGNR")_";"_C("CONSNR") VOORTREK ;"Consolidatie wordt vervroegd omdat een deel reeds gepickt wordt :"_C("VOLGNR")_";"_C("CONSNR")_";"_SoftV CLOCAL ;"C local : "_$$ArrayToText^vhLib("C",.C)