#include BL.Derde.KlantSpecifiek #include BL.Derde.LevSpecifiek ; Kastklanten = Luma;Ilwa #define KastKlanten ";1000;5023;1213;3814;1390;1387;1966;4073;" HATBXLean ;Halux tandembox Lean New %TC,In,LD,Input,TOENr,Selected,BatchNr,Batch,OldBatch,Batches,Laden,Tijden,MarkToe,ProdGrpBatch Set BatchNr="",(Laden,Tijden)=0, ProdGrpBatch="" Do DISPLAY^vhScherm("HATBXLEAN") For Do Quit:'$L(BatchNr) Quit:$G(Input)="CANC" . Kill LD,Selected,Batch,OldBatch,Batches,Laden,Tijden,MarkToe . Do INIT^vhLIST("HATBXLEAN","BATCH",.LD),WRITE^vhLIST(.LD) . For Set BatchNr=$O(^HATBX("B",BatchNr)) Quit:BatchNr="" Do:$$BatchActief(BatchNr) . . For In=1:1 Set TOENr=$G(^HATBX("B",BatchNr,In)) Quit:'TOENr Set Batches(TOENr,BatchNr)="" . Set BatchNr=$S($G(Input)="NB":"N",1:$$SelectBatchNr()) . Do:$L(BatchNr) . . Do FETCH(BatchNr) . . Do DISPLAY^vhScherm("HATBXLEAN",,,,"BATCHNR;TOTLADEN;TOTTIJD;PRODGRP") . . Set %TC=1 . . Do:BatchNr'="N" ADD^vhLock("^HATBX(""B"",BatchNr)") ; lock bij bestaande niet bij nieuw . . If %TC Do . . . Do WRITE^vhLIST(.LD) . . . For Set Input=$$SCROLL^vhLIST(.LD) Do If "\CANC\NB\SB\"[(D_Input_D) Do SAVE Quit ;:Input="CANC" . . . . If Input="COM" Set Input="" Do CALL^vhMenu("HATBXLEAN") . . . . Do EXEC^vhMenu("HATBXLEAN",.Input) . . . Do REMOVE^vhLock("^HATBX(""B"",BatchNr)") . . Else Do LDISP^vhLock("^HATBX(""B"",BatchNr)","Batch") Quit ; FETCH(BatchNr) ; de data wordt opgeslagen in 4 locals ; Batch = lijst met toelevering ; Laden = aantal laden per toelevering ; Tijden = verwerkingstijd per toelevering ; MarkToe = ladetypes per toelevering Merge Batch=^HATBX("B",BatchNr),OldBatch=Batch Set (Laden,Tijden)=0 For In=1:1 Set TOENr=$G(Batch(In)) Quit:'TOENr Do . Set Selected(TOENr)="",Laden(TOENr)=$$Laden(TOENr),Laden=Laden+Laden(TOENr),Tijden(TOENr)=$$Tijd(TOENr),Tijden=Tijden+Tijden(TOENr) . Set MarkToe(TOENr)=$$MarkToe(TOENr) . Set ProdGrp=$P(MarkToe(TOENr),"\",4) . Set ProdGrpBatch=$$Unie(.ProdGrpBatch,ProdGrp) . Kill Batches(TOENr,BatchNr) Quit ; NIEUW New DERDENr,LDOld Set DERDENr("N")=1,DERDENr("L")=$$$LevHalux ; Toeleveringen Halux Merge LDOld=LD Set ($P(LD("POS"),";",3),$P(LD("POS"),";",6),$P(LD("SET"),";",3))=18,LD("SELECT")=LD("MAX") Do WRITE^vhLIST(.LD) For Do STORE^vhTERMINA() Set TOENr=$$SELECT^FLOW("KTO","KTO1",1,.Selected,.DERDENr) Do REFRESH^vhTERMINA() Quit:'TOENr Do . Quit:'$$ChkTOENr(TOENr,.Selected,.Batches) ; Gekozen nummer mag niet opgenomen worden . Set Selected(TOENr)="",Laden(TOENr)=$$Laden(TOENr),Laden=Laden+Laden(TOENr),Tijden(TOENr)=$$Tijd(TOENr),Tijden=Tijden+Tijden(TOENr) . Set ProdGrpBatch=$$Unie(.ProdGrpBatch,$P(MarkToe(TOENr),"\",4)) . Do DISPLAY^vhScherm("HATBXLEAN",,,,"TOTLADEN;TOTTIJD;PRODGRP") . Do NIEUW^vhLISTE(.LD,TOENr) Set LD("POS")=LDOld("POS"),LD("SET")=LDOld("SET") Do WRITE^vhLIST(.LD) Quit ; ; Verwijder een lijn VERWIJDER If LD("SELECT"),$D(Batch(LD("SELECT"))) Do . Set TOENr=Batch(LD("SELECT")),Laden=Laden-Laden(TOENr),Tijden=Tijden-Tijden(TOENr) . Kill Selected(TOENr),Laden(TOENr),Tijden(TOENr),MarkToe(TOENr) . Do DELETE^vhLISTE(.LD) . Do DISPLAY^vhScherm("HATBXLEAN",,,,"TOTLADEN;TOTTIJD;PRODGRP") Quit Unie(List1,List2) For I=1:1:$L($G(List2)) Do . Set:$G(List1)'[$E(List2,I) List1=$G(List1)_$E(List2,I) Quit List1 ; SelectBatchNr() New BatchNr,zb Set BatchNr="",BatchNr(1)="N` Nieuw" For Set BatchNr=$O(^HATBX("B",BatchNr),-1) Quit:BatchNr="" Set:$$BatchActief(BatchNr) BatchNr($O(BatchNr(""),-1)+1)=BatchNr_"`"_$J($S($P($G(^HATBX("B",BatchNr)),"\",3)="0":"",$P($G(^HATBX("B",BatchNr)),"\",3):"+",1:$E($P($G(^HATBX("B",BatchNr)),"\",3),1,2)),2)_" "_$$FMTDT^vhLib.DataTypes($P(^HATBX("B",BatchNr),"\")) Set BatchNr="N" Set:$O(BatchNr(1)) BatchNr=$$WILD^vhPOPUP("C;C","-1KO","Batch",.BatchNr) ; popup alleen als er batchen bestaan Quit BatchNr ; SAVE b "s+" New In,TxtPop,Save Set TxtPop=$S(BatchNr:"gewijzigde",1:"nieuwe") For In=1:1 Quit:'$D(Batch(In)) Quit:'$D(OldBatch(In)) Quit:Batch(In)'=OldBatch(In) If '$D(Batch(In)),'$D(OldBatch(In)) Set TxtPop="" Do:$L(TxtPop) . Set Save=1 ; Bevestiging kortgesloten ;$$^vhTXTPOP("HATBXLEAN","BATCH","",TxtPop) ; Bevestiging voor het opslaan . Set:Save="A" Input="" . Quit:'Save . Set:BatchNr="N" BatchNr=$Increment(^HATBX("B")) . Kill ^HATBX("B",BatchNr) . Quit:'$O(Batch("")) . Set ^HATBX("B",BatchNr)=$H . Set $P(^HATBX("B",BatchNr),"\",3)=$G(ProdGrpBatch) ; ProductieGroep . Merge ^HATBX("B",BatchNr)=Batch Quit ; ChkTOENr(TOENr,Selected,Batches) New ChkTOENr Set ChkTOENr='$D(Selected(TOENr)) ; Nummer reeds gekozen? Set:ChkTOENr ChkTOENr=$$ChkBatch(TOENr,.Batches) ; Gekozen nummer opgenomen in andere batch? Do:ChkTOENr ; Is het gekozen nummer een tandembox . Set ChkTOENr=$$ISTBX^FLOWCHK("T",TOENr) . Quit:ChkTOENr . Do WARN^vhTXTPOP("Toelevering "_$$EXTNUM^vhLib.DataTypes(TOENr,0,".",0)_" bevat geen tandembox!","") Set:ChkTOENr ChkTOENr=$$Afgewerkt(TOENr) Set MarkToe(TOENr)=$$MarkToe(TOENr) Set ProdGrp=$P(MarkToe(TOENr),"\",4) If $L(ProdGrp)>1 Do WARN^vhTXTPOP("Toelevering "_$$EXTNUM^vhLib.DataTypes(TOENr,0,".",0)_" bevat meerdere productie wijzen : "_ProdGrp_"!","") If ProdGrp'=$G(ProdGrpBatch)&&($G(ProdGrpBatch)'="") Do . Do WARN^vhTXTPOP("Toelevering "_$$EXTNUM^vhLib.DataTypes(TOENr,0,".",0)_" kan niet worden toegevoegd,~ verschillende productiegroep : "_ProdGrp_"!","") . Set ChkTOENr=0 Quit ChkTOENr ; ; Nazicht of een toelevering in een andere batch is opgenomen ChkBatch(TOENr,Batches) New BatchOk,BatchNr,BatchDate Set BatchOk='$D(Batches(TOENr)) Do:'BatchOk . Set BatchNr=$O(Batches(TOENr,""),-1),BatchDate=^HATBX("B",BatchNr) . Set BatchOk=$$^vhTXTPOP("HATBXLEAN","CHKBATCH","",$$EXTNUM^vhLib.DataTypes(TOENr,0,".",0),$$FMTDT^vhLib.DataTypes(BatchDate)_" ("_BatchNr_")") Quit BatchOk ; ; Bereken van het aantal laden Laden(TOENr) New R,Laden,TLNr,TLUNr,PRNr,Aantal Set Laden=0,TLNr=100 For Set TLNr=$O(^KTO($$$LevHalux,TOENr,TLNr)) Quit:TLNr="" Do . Set R=^KTO($$$LevHalux,TOENr,TLNr),PRNr=$P(R,D,2),Aantal=$P(R,D,3),TLUNr=$P(R,D,15) . Quit:'PRNr . Quit:'$$ISTBX^PRODUKT2(PRNr) . Set Laden=Laden+Aantal Quit Laden ; ; Zijn alle laden afgewerkt Afgewerkt(TOENr) New R,Afgewerkt,NietAfgewerkt,TLNr,TLUNr,PRNr,Aantal,FabKey,Count,MaxCount Set Afgewerkt=1,TLNr=100 For Set TLNr=$O(^KTO($$$LevHalux,TOENr,TLNr)) Quit:TLNr="" Do . Set R=^KTO($$$LevHalux,TOENr,TLNr),PRNr=$P(R,D,2),Aantal=$P(R,D,3),TLUNr=$P(R,D,15) . Quit:'PRNr . Quit:'$$ISTBX^PRODUKT2(PRNr) . Set FabKey=$$FABKEYT^HADOPV(TOENr,TLUNr) . Set:$P($G(^HADPR("F",FabKey,"K")),D,3)'="A" NietAfgewerkt(TLNr)=$P(^KPR(PRNr,0),D)_$J(Aantal,14) Set TLNr="",Count=0,MaxCount=15 For Set TLNr=$O(NietAfgewerkt(TLNr)) Quit:TLNr="" Set Count=Count+1 If Count>MaxCount Do . For Count=Count:-1:MaxCount Set TLNr=$O(NietAfgewerkt(TLNr),-1) Kill NietAfgewerkt(TLNr) . Set NietAfgewerkt(TLNr)="..." Set:$D(NietAfgewerkt) NietAfgewerkt="NietAfgewerkt",Afgewerkt=$$^vhTXTPOP("HATBXLEAN","AFGEWERKT","",$$EXTNUM^vhLib.DataTypes(TOENr,0,".",0)) Quit Afgewerkt ; ; Berekenen van de planningtijd Tijd(TOENr) New R,Tijd,TLNr,PRNr,Kost Set Tijd=0,TLNr=100 For Set TLNr=$O(^KTO($$$LevHalux,TOENr,TLNr)) Quit:TLNr="" Do . Set R=^KTO($$$LevHalux,TOENr,TLNr),PRNr=$P(R,D,2) . Quit:'PRNr . Quit:'$$ISTBX^PRODUKT2(PRNr) . Set Kost="KST" . For Set Kost=$O(^PRBS("BS",PRNr,Kost)) Quit:$E(Kost,1,3)'="KST" Do . . Set R=^PRBS("BS",PRNr,Kost) . . Set:$P(R,D,11)="ZABO" Tijd=Tijd+$P(R,D,8) Quit $J(Tijd/120,0,1) ; Defineren van de verschillende ladetypes van een toelevering MarkToe(TOENr) ; wordt opgeroepen door HATBXLean NEw TLUNr,HasSP,HasBA,HasPro,KLNr,TLUNr,PRNr,LRec,DC,Klas,VERPAK,Cache Set TLUNr=100 Set (HasSP,HasBA,HasPro,ProdGrp)="" Set KLNr=$P($G(^KTO($$$LevHalux,TOENr,1)),"\",8) For Set TLUNr=$O(^KTO($$$LevHalux,TOENr,TLUNr)) Quit:TLUNr="" Do . Set LRec=$G(^KTO($$$LevHalux,TOENr,TLUNr)) . Set PRNr=$P(LRec,D,2) . Quit:PRNr'?4.7N . Quit:$D(Cache(PRNr)) ; Reeds getest (belangrijk voor PRO+ klanten) . Quit:$P(LRec,D,3)<1 . Quit:'$$ISTBX^PRODUKT2(PRNr) . Set Klas=$LG(##class(Prod.Kenmerk.DataDefinitie).Get("TBX",PRNr,"KLAS")) . Set:Klas["SP" HasSP="SP" . Set DC=$LG(##class(Prod.Kenmerk.DataDefinitie).Get("TBX",PRNr,"DC")) . Set:DC="B" HasBA="BA" . Set:DC?1(1"L",1"A") HasBA="INT" . Set VERPAK=$LG(##class(Prod.Kenmerk.DataDefinitie).Get("TBX",PRNr,"VERPAK")) . Set:((VERPAK="A")||(VERPAK="B"))&&'$F($$$KastKlanten,";"_KLNr_";") VERPAK="P" . Set:'((VERPAK="Z")||(VERPAK="S"))&&(HasPro'[VERPAK) HasPro=HasPro_VERPAK . ;Productiegroep wordt afgeleid van de verpakking . Set:((VERPAK="A")||(VERPAK="B"))&&(ProdGrp'["A") ProdGrp=ProdGrp_"A" . Set:(VERPAK="+")&&(ProdGrp'["+") ProdGrp=ProdGrp_"+" . Set:VERPAK?1(1"O",1"P",1"C")&&(ProdGrp'["P") ProdGrp=ProdGrp_"P" . Set:VERPAK?1(1"S",1"Z")&&(ProdGrp'["S") ProdGrp=ProdGrp_"S" ; Spoelbak \ Baliko \ VerpakkingPro \ ProductieGroep Quit HasSP_"\"_HasBA_"\"_HasPro_"\"_ProdGrp ProdGrp(PRNr,KLNr) Set VERPAK=$LG(##class(Prod.Kenmerk.DataDefinitie).Get("TBX",PRNr,"VERPAK")) Set ProdGrp="" Set:((VERPAK="A")||(VERPAK="B"))&&$F($$$KastKlanten,";"_KLNr_";") ProdGrp="A" Set:((VERPAK="A")||(VERPAK="B"))&&'$F($$$KastKlanten,";"_KLNr_";") ProdGrp="P" Quit ProdGrp ; Test of de toelevering(en) voor ProPlus zijn of niet of dat er een mengvorm is ; 1 = ProPlus ; 0 = Geen ProPlus ; -1 = mengvorm IsProPlusOLD() Set TOENr="" Set IsPro=0 For In=1:1 Set TOENr=$G(Batch(In)) Quit:'TOENr Do . Set Pro=$P($$MarkToe(TOENr),"\",4) . Set:'IsPro IsPro=Pro["+" . If IsPro&&(Pro'="+") Set IsPro=-1 Quit IsPro PRINT Do SAVE Do DISPLAY^vhScherm("HATBXLEAN",,,,"BATCHNR") New zb,Opties,Lijst If $G(ProdGrpBatch)="" Do . Do WARN^vhTXTPOP("Geen productiegroep gedefinieerd") If $L($G(ProdGrpBatch))>1 Do . Do WARN^vhTXTPOP("Batch bevat zowel ProPlus als andere verpakkingen,~ de lijsten kunnen niet aangemaakt worden") Else If ProdGrpBatch="A" Do ; Kast . Set Opties=$$PI^vhPOPUP("C;C","-1MO","","HATBXLEAN","PRINTKAST","Z;E;F;O;R;D;S;M;L;K;T") . Do:zb'="CANC" VerwerkKast(BatchNr,$TR(Opties,";","")) Else Do ; ProdGrpBatch = "P" of "S" , pallet of stuks verpakt . Set Opties=$$PI^vhPOPUP("C;C","-1MO","","HATBXLEAN","PRINT","Z;E;L;F;O;M;R;S;K;T"_$S($$BevatSFS():";P",1:"")) . Do:zb'="CANC" VerwerkV1(BatchNr,$TR(Opties,";","")) Quit BevatSFS() New In,TOENr,IsSFS Set IsSFS=0 For In=1:1 Set TOENr=$G(Batch(In)) Quit:'TOENr Do Quit:IsSFS . Set IsSFS=$P($G(^KTO($$$LevHalux,TOENr,1)),"\",8)=$$$KlantSFS Quit IsSFS VerwerkProPlus(BatchID,Opties) New QtyLade,QtyEmpty,QtyVHoss,QtyFront,QtyZaag,QtySpoelbak Set Tekst="" Set bl=##class(BL.PPS.TBX.Sequencer).Instantiate() Do bl.Init(BatchID,"+") If (Opties["O")||'bl.ExistSequence() Do . Do bl.BldVHossSequence(.QtyLade, .QtyEmpty, .QtyVHoss, .SkippedTekst) ; als eerste optimalisatie aanmaken . Set Tekst=Tekst_"~Aantal laden : "_$G(QtyLade) . Set Tekst=Tekst_"~Aantal lege vakken : "_$G(QtyEmpty) . Set:$G(QtyLade)+$G(QtyEmpty) Tekst=Tekst_"~Bezettingsgraad : "_$J($G(QtyLade)/($G(QtyLade)+$G(QtyEmpty))*100,0,2)_"%" . Set Tekst=Tekst_"~Aantal VHossen : "_$G(QtyVHoss) If Opties'="O" Do . Set bl=##class(BL.PPS.TBX.DocsProPlus).%New() . Do bl.Init(BatchID,"+") . Do bl.PrintDocs(Opties, .QtyFront, .QtyZaag, .QtySpoelbak) . Set:$L(Tekst) Tekst=Tekst_"~" . Set:Opties["Z" Tekst=Tekst_"~Aantal zagen bodems: "_$G(QtyZaag) . Set:Opties["F" Tekst=Tekst_"~Aantal fronten : "_$G(QtyFront) . Set:Opties["S" Tekst=Tekst_"~Aantal spoelbakken : "_$G(QtySpoelbak) Do:$L(Tekst)>2 WARN^vhTXTPOP($E(Tekst,2,999),"Overzicht") Do:$L($G(SkippedTekst)) WARN^vhTXTPOP($$REPLACE^vhRtn1(SkippedTekst,">CR<","~"),"Producten die niet werden toegevoegd") Quit VerwerkKast(BatchID,Opties) New QtyLade,QtyEmpty,QtyVHoss,QtyFront,QtyZaag,QtySpoelbak Set Tekst="" Set bl=##class(BL.PPS.TBX.Sequencer).Instantiate(0) Do bl.Init(BatchID,"A") If (Opties["S")||'bl.ExistSequence() Do . Do bl.BldVHossSequence(.QtyLade, .QtyEmpty, .QtyVHoss, .SkippedTekst) ; als eerste optimalisatie aanmaken . Set Tekst=Tekst_"~Aantal laden : "_$G(QtyLade) . Set Tekst=Tekst_"~Aantal lege vakken : "_$G(QtyEmpty) . Set:$G(QtyLade)+$G(QtyEmpty) Tekst=Tekst_"~Bezettingsgraad : "_$J($G(QtyLade)/($G(QtyLade)+$G(QtyEmpty))*100,0,2)_"%" . Set Tekst=Tekst_"~Aantal VHossen : "_$G(QtyVHoss) If (Opties'="S")&&(Opties'="D") Do . Set bl=##class(BL.PPS.TBX.DocsV1).%New() . Do bl.Init(BatchID,"A") . Do bl.PrintDocs(Opties, .QtyFront, .QtyMatten) . Set:$L(Tekst) Tekst=Tekst_"~" . Set:Opties["F" Tekst=Tekst_"~Aantal fronten : "_$G(QtyFront) . Set:Opties["M" Tekst=Tekst_"~Aantal matten : "_$G(QtyMatten) If Opties["D" Do ; alleen nog de VHoss documenten . Set bl=##class(BL.PPS.TBX.DocsProPlus).%New() . Do bl.Init(BatchID,"A") . Do bl.PrintDocs("D") Do:$L(Tekst)>2 WARN^vhTXTPOP($E(Tekst,2,999),"Overzicht") Do:$L($G(SkippedTekst)) WARN^vhTXTPOP($$REPLACE^vhRtn1(SkippedTekst,">CR<","~"),"Producten die niet werden toegevoegd") Quit ;d VerwerkV1^HATBXLean(2132,$tr("Z;E;L;F;O;M;R;S;K",";")) VerwerkV1(BatchID,Opties) New QtyLade,QtyFront,QtySpeolbak,QtyMatten Set Tekst="" Set bl=##class(BL.PPS.TBX.Sequencer).Instantiate() Do bl.Init(BatchID,ProdGrpBatch) If (Opties["S")||'bl.ExistSequence() Do . Do bl.BldLeanV1Sequence(.QtyLade) ; als eerste optimalisatie aanmaken . Set Tekst=Tekst_"~Aantal laden : "_$G(QtyLade) If Opties'="S" Do . Set bl=##class(BL.PPS.TBX.DocsV1).%New() . Do bl.Init(BatchID,ProdGrpBatch) . Do bl.PrintDocs(Opties, .QtyFront, .QtyMatten) . Set:$L(Tekst) Tekst=Tekst_"~" . Set:Opties["F" Tekst=Tekst_"~Aantal fronten : "_$G(QtyFront) . ;Set Tekst=Tekst_"~Aantal spoelbakken : "_$G(QtySpoelbak) . Set:Opties["M" Tekst=Tekst_"~Aantal matten : "_$G(QtyMatten) Do:$L(Tekst)>2 WARN^vhTXTPOP($E(Tekst,2,999),"Overzicht") Quit ; Is een batch nog actief (bevat deze nog bestaande toeleveringen)? BatchActief(BatchNr) New In,BatchActief,TOENr Set BatchActief='$P($G(^HATBX("B",BatchNr),"/1"),D,2) ; reeds op non-actief Do:BatchActief . Set TOENr="" . For In=1:1 Set TOENr=$G(^HATBX("B",BatchNr,In)) Quit:TOENr="" Quit:$D(^KTO($$$LevHalux,TOENr)) . Set BatchActief=''TOENr . Set:'BatchActief $P(^HATBX("B",BatchNr),D,2)=$H ; op non-actief gezet Quit BatchActief ; Nachtelijke job voor het opkuisen van ^HATBX("B") Night New bl,BatchNr Set Q="K" Do ^cA604 Set BatchNr="" For Set BatchNr=$O(^HATBX("B",BatchNr)) Quit:BatchNr="" Do . Do DeleteOldBatch(BatchNr) Set bl=##class(BL.PPS.TBX.Sequencer).Instantiate() Do bl.DeleteOldBatches() ; mocht er in de sequence global batches achtergebleven zijn dan deze ook verwijderen Quit DeleteOldBatch(BatchNr) New Date Quit:$$BatchActief(BatchNr) ; De batch is nog actief Set Date=$P($G(^HATBX("B",BatchNr),"/1"),D,2) Quit:$$CALCDATE^vhLib.DataTypes(Date,"M",1)'<$H ; De batch is nog geen maand inactief Do DelObj(BatchNr) Quit DelObj(BatchID) New bl Kill ^HATBX("B",BatchID) Set bl=##class(BL.PPS.TBX.Sequencer).Instantiate() Do bl.Init(BatchID), bl.DeleteBatch() Quit ;