; Voorbereiding voor montage en verpakken van gemonteerde Tandembox laden ; De gezaagde bodems en rug worden ingescand in de volgorde dat zij op de kar geplaatst worden. ; Er wordt een lijst gemaakt per kar. ; Deze lijst wordt dan doorgegeven naar dit programma die dan de verdere verwerking doet. ; - Lijst met onderdelen, fronten voor binnenladen, verpakkingkarton ; - later : Transfer order voor de ontbrekende onderdelen #include BL.Derde.KlantSpecifiek #include BL.Derde.LevSpecifiek #include vhLib.Macro #define PrepKeys $LB("MON","LOS","BULK","BIN","RUGB","VPK","VPZ") #define PrepKeysFrontOnly $LB("BIN") #define PrepKeysBulkOnly $LB("BULK") #define PrepTranslate $LB("Montage","Losse onderdelen V1","Losse onderdelen BULK","Front binnenlade","Rug BEUK","Omvouwkarton","Zijwanden") #define PrepKeyPageBreak $LB("BULK","BIN","VPK") HADTBXPrep New Arr ;Do AddToelevering(.Arr,268464) Do AddToelevering(.Arr,260660) Do Print(.Arr,"Toelevering : "_259603,,"BULK") Quit PrintToelevering(TOENr,Dev, BatchID = "") New Arr #dim Batch As APPS.Halux.common.Batch = "" Do AddToelevering(.Arr,TOENr) #dim SubTitle = "Toelevering : "_TOENr If (BatchID'="") { Set Batch = ##class(APPS.ApplicatieContext).Instance().GeefProductieAPI().GeefBatchService().GeefBatch(BatchID) Set SubTitle = "Lijn:" _Batch.GeefLijn() _" Batch : " _BatchID _" " _SubTitle } Do Print(.Arr, SubTitle, .Dev,"BULK", Batch) Quit AddFabKey(Arr,GlobRef) New FabKey,TOENr,TLNr,Qty,PRNr Set FabKey="" For Set FabKey=$O(@GlobRef@(FabKey)) Quit:FabKey="" Do . Set TOENr=$P(FabKey,";") . Set TLNr=^TO("IU",TOENr,$P(FabKey,";",2)) . Set Qty=$P(^KTO(6332,TOENr,TLNr),D,3) . Set PRNr=$P(^KTO(6332,TOENr,TLNr),D,2) . Do Add(.Arr,TOENr,PRNr,Qty) Quit AddToelevering(Arr,TOENr) New TLNr,PRNr,Qty Set TLNr=100 For Set TLNr=$O(^KTO(6332,TOENr,TLNr)) Quit:TLNr="" Do . Set PRNr=$P(^KTO(6332,TOENr,TLNr),D,2) . Set Qty=$P(^KTO(6332,TOENr,TLNr),D,3) . Quit:PRNr'?4.7N||'$L($P($G(^KPR(PRNr,"G")),D,1)) . Do Add(.Arr,TOENr,PRNr,Qty) . ;w PRNr," ",$P(^KPR(PRNr,0),D),! Quit ; Toevoegen van een scankey (Toelevering+Dossier) ; Arr via .Local doorgeven ; Opgelet : Volgorde is belangrijk AddScanKey(Arr,ScanKey,Qty) New Dossier,PRNr Set Dossier=$E(ScanKey,7,99) Set PRNr=$G(^KPR3("T",Dossier)) Quit:PRNr'?4.7N ; Ongeldig product Do Add(.Arr,$E(TOENr,1,6),PRNr,Qty) Quit ; Toevoegen van een product aan de array ; De Arr is opgebouwd als Arr(VolgNr)=$LB(Toelevering,Product,Aantal) ; Opgelet : Volgorde is belangrijk Add(Arr,TOENr,PRNr,Qty) Set Arr($I(Arr))=$LB(TOENr,PRNr,Qty) Quit ; Toevoegen van de product array ; Via Arr via .Local doorgeven ; De Arr is opgebouwd als Arr(VolgNr)=$LB(Toelevering,Product,Aantal) ; KarCode is een string met de naam/nummer van de kar ; Dev is optioneel, indien niet mee gegeven dan wordt dit gevraagd (TELNET) Print(Arr,SubTitel,Dev,PrepOnly,Batch="") New I,FabrPrepList,FrontOnly,PLD,MemTOENr,Groep,Lijst Set FabrPrepList=$S($L($G(PrepOnly)):$LB(PrepOnly),1:$$$PrepKeys) Set FrontOnly=$G(PrepOnly)="BIN" ; Groeperen Kill Groep Set Groep=0 For I=1:1:$LL(FabrPrepList) Do . Do Groep($LI(FabrPrepList,I),.Arr,.Groep,FrontOnly) Quit:$D(Groep)=1 ; Niets af te drukken ; Converteren naar lijst Kill Lijst For I=1:1:$LL(FabrPrepList) Do . Do Convert($LI(FabrPrepList,I),.Groep,.Lijst,Batch) ;zw Lijst ; Afdrukken Do INIT^vhLISTO("HADTBX","FABRPREP",.PLD) Set PLD("HALUX")="" Kill MemTOENr Set PLD(5)=78 Set PLD(10)="CBLIJST^"_$ZN Set PLD(11)="HALUX Tandembox - voorbereiding"_D_$G(SubTitel) Do PRINT^OUTPUT(.PLD,"P","S") Quit CBLIJST(Ref) New Profiel,Fmt,Rec,ScheidingsCode,TOENr,MemTOENr Quit:$L(Ref)=1 "" ; Header,Footer Set Rec=@Ref Set ScheidingsCode=$P(Rec,D) If ScheidingsCode="" Do . Set TOENr=$P(Rec,D,10) . If $D(MemTOENr),TOENr'="" Do . . If MemTOENr'="",MemTOENr'=TOENr Do . . . Set Fmt=$S(FrontOnly:"PB\;1",1:"BR\;1") ; Verschillende toelevering dus break . . Else Do . . .Set Fmt=";1" ; Standaard lijn . . Set MemTOENr=TOENr . Else Do . . Set Fmt=";1" ; Standaard lijn Else Do . If ScheidingsCode="BULK"!$G(FrontOnly) Set MemTOENr="" . Else Kill MemTOENr . Set Fmt=$S($P(Rec,D,2)="":"PB\",1:"BR\") ; Blanko lijn of pagebreak . Set Fmt=Fmt_";2\BL" ; Afdruk code en extra blanko lijn Quit Fmt ///; 1 : Scheidingscode ; 2 : IdentNr ; 3 : KortTekst ; 4 : Qty ; 5 : NettoDim ; 6 : IsWerkVloer ; 10 : TOENr ; 11 : DossierID ; 12 : Qty ; 13 : NettoDim Convert(FabrPrep,Groep,Lijst,Batch) New SortKey1,SortKey2,Cnt,Reverse,EindFormat,HalfFormat,SubLijnNr Quit:$D(Groep(FabrPrep))<10 ; Geen subnodes Set Lijst($I(Lijst))=FabrPrep_D_D_"*** "_$LI($$$PrepTranslate,$LF($$$PrepKeys,FabrPrep))_" ***" Set:$LF($$$PrepKeyPageBreak,FabrPrep)&&(Lijst>1) $Piece(Lijst(Lijst),D,2)="" Set (SortKey1,SortKey2)="" Set Cnt=0 For Set SortKey1=$O(Groep(FabrPrep,SortKey1)) Quit:SortKey1="" Do . Set:Cnt Lijst($I(Lijst))="" . Set Cnt=Cnt+1 . Set Reverse=$LI(Groep(FabrPrep,SortKey1),1)="E" . Set:Reverse EindFormat=$$EindFormat(Groep(FabrPrep,SortKey1)) . Set:'Reverse HalfFormat=$$HalfFormat(Groep(FabrPrep,SortKey1)) . Set SubLijnNr = 1 . For Set SortKey2=$O(Groep(FabrPrep,SortKey1,SortKey2)) Quit:SortKey2="" Do . . Set:'Reverse EindFormat=$$EindFormat(Groep(FabrPrep,SortKey1,SortKey2)) . . If (('Reverse) && (SubLijnNr > 1)) { . . Set $Piece(EindFormat,D,6) = "" . . Set $Piece(EindFormat,D,7) = "" . . } . . Set:Reverse HalfFormat=$$HalfFormat(Groep(FabrPrep,SortKey1,SortKey2)) . . ; 1 : Scheidingscode . . ; 2 : IdentNr . . ; 3 : KortTekst . . ; 4 : Qty . . ; 5 : NettoDim . . ; 6 : IsWerkVloer . . Set KortTekst = $Piece(HalfFormat,"\",2) . . If ($Extract($Piece(EindFormat,"\",6),1,8) = "Geleider") { . . Set $Piece(HalfFormat,"\",2) = $Extract(KortTekst,1,8)_"ŞB"_$Extract(KortTekst,9,9)_"Şb"_$Extract(KortTekst,10,*) ;Bij het aanpassen van deze Korttekst (voor een geleider) moet ook gecontroleerd worden of de methode 'PickGepasteGeleiders' nog steeds . . } ;goed uitgevoerd wordt. Deze methode gebruikt namelijk deze aangepaste string. Ook methode ZetKorttekstVoorAndereSoortGeleider . . If ($Extract($Piece(EindFormat,"\",6),1,6) = "Reling") && ($Extract(KortTekst,10,10)="F") { . . Set $Piece(HalfFormat,"\",2) = $Extract(KortTekst,1,9)_"ŞB"_$Extract(KortTekst,10,10)_"Şb"_$Extract(KortTekst,11,*) . . } . . If (HalfFormat'="") { . . Set $Piece(Lijst($I(Lijst)),D,2)=HalfFormat ; Eerste steeds leeg . . ; 10 : TOENr . . ; 11 : DossierID . . ; 12 : Qty . . ; 13 : NettoDim . . Set $Piece(Lijst(Lijst),D,10)=EindFormat . . } . . Set:'Reverse HalfFormat="" . . Set:Reverse EindFormat="" . . Set SubLijnNr = SubLijnNr + 1 Do PickGepasteGeleiders(.Lijst, Cnt, Batch) Quit PickGepasteGeleiders(Lijst, LengteLijst, Batch) #dim ProdGroep As APPS.Halux.common.enu.ProductieGroep = Batch.GeefProductieGroep() #dim IsEenKorttekstVervangen As %Boolean = $$$False New SamengesteldeLijst If $$$Not(ProdGroep = ##class(APPS.Halux.common.enu.ProductieGroep).Stuk()) { ; Bij niet Stuk verpakkingen moeten type 500 & 550 geleiders gepickt worden uit een V16 verpakking en niet EP7 For ii = 2:1:LengteLijst*2 { If $$$Not(Lijst(ii) = "") { If ($Extract($Piece(Lijst(ii),"\",15),1,8) = "Geleider") { #dim Korttekst As %String = $Piece(Lijst(ii),"\",3) If ((##class(TECH.StringUtils).Contains(Korttekst,"EP7") && (##class(TECH.StringUtils).Contains(Korttekst,"576.500") || ##class(TECH.StringUtils).Contains(Korttekst,"576.550")))) { Set $Piece(Lijst(ii),"\",3) = $Extract(Korttekst,1,22)_"V16"_$Extract(Korttekst,26,*) Set IsEenKorttekstVervangen = $$$True } Do ZetKorttekstVoorAndereSoortGeleider(.Lijst,ii) } } } } else { ; Bij Stuk verpakking moet type 500 & 550 geleiders gepickt worden uit een EP7 verpakking en niet V16 For ii = 2:1:LengteLijst*2 { If $$$Not(Lijst(ii) = "") { If ($Extract($Piece(Lijst(ii),"\",15),1,8) = "Geleider") { #dim Korttekst As %String = $Piece(Lijst(ii),"\",3) If ((##class(TECH.StringUtils).Contains(Korttekst,"V16") && (##class(TECH.StringUtils).Contains(Korttekst,"576.500") || ##class(TECH.StringUtils).Contains(Korttekst,"576.550")))) { Set $Piece(Lijst(ii),"\",3) = $Extract(Korttekst,1,22)_"EP7"_$Extract(Korttekst,26,*) Set IsEenKorttekstVervangen = $$$True } Do ZetKorttekstVoorAndereSoortGeleider(.Lijst,ii) } } } } If IsEenKorttekstVervangen { #dim AantalGeleiderSamengenomen As %Integer = 0 Do NeemAantallenZelfdeGeleidersSamen(.Lijst, Cnt, .AantalGeleiderSamengenomen) If AantalGeleiderSamengenomen > 0 { Do VerwijderGewijzigdeLegeRegels(.Lijst, Cnt, .SamengesteldeLijst) For ii = 1:1:(LengteLijst*2)-(2*AantalGeleiderSamengenomen) { Set Lijst(ii) = SamengesteldeLijst(ii) ; Set Lijst = SamengesteldeLijst werkt niet } For yy = 0:1:(2*AantalGeleiderSamengenomen)-1 { Set Lijst((LengteLijst*2)-(yy)) = "" } } } Quit NeemAantallenZelfdeGeleidersSamen(Lijst, LengteLijst, IsEenGeleiderSamengenomen) For ii = 1:1:LengteLijst*2 { If $$$Not(Lijst(ii) = "") { If ($Extract($Piece(Lijst(ii),"\",15),1,8) = "Geleider") { #dim Korttekst As %String = $Piece(Lijst(ii),"\",3) For yy = ii+1:1:LengteLijst*2 { If $$$Not(Lijst(yy) = "") { If ($Extract($Piece(Lijst(ii),"\",15),1,8) = "Geleider") { #dim Korttekst2 As %String = $Piece(Lijst(yy),"\",3) If (Korttekst = Korttekst2) { Set $Piece(Lijst(ii),"\",4) = $Piece(Lijst(ii),"\",4) + $Piece(Lijst(yy),"\",4) ;Aantallen optellen Set Lijst(yy) = "" Set AantalGeleiderSamengenomen = AantalGeleiderSamengenomen + 1 } } } } } } } VerwijderGewijzigdeLegeRegels(Lijst, LengteLijst, NieuweLijst) Set NieuweLijst($Increment(NieuweLijst)) = Lijst(1) ;Tekst: ***Losse onderdelen BULK*** For ii = 2:2:LengteLijst*2 { If $$$Not(Lijst(ii) = "") { Set NieuweLijst($Increment(NieuweLijst)) = Lijst(ii) Set NieuweLijst($Increment(NieuweLijst)) = "" } } Quit ZetKorttekstVoorAndereSoortGeleider(Lijst, Index) #dim Korttekst As %String = $Piece(Lijst(Index),"\",3) If ((##class(TECH.StringUtils).Contains(Korttekst,"41K R+L EP6") && (##class(TECH.StringUtils).Contains(Korttekst,"578.5001")))) { //Korttekst aanpassen voor Product met korttekst 578.5001B41K R+L V20 ZN Set $Piece(Lijst(Index),"\",3) = $Extract(Korttekst,1,22)_"V20"_$Extract(Korttekst,26,*) } HalfFormat(List) New PRNr,Qty,NettoDim,IsWerkVloer,IdentNr,KortTekst Set PRNr=$LI(List,2) Set Qty=$LG(List,3) Set NettoDim=$LG(List,4) Set IsWerkVloer=$LG(List,5) Set IdentNr=$P($G(^KPR(PRNr,2)),D,25) Set KortTekst=$P($G(^KPR(PRNr,0),"*onbekend "_PRNr_"*"),D) Quit IdentNr_D_KortTekst_D_Qty_D_NettoDim_D_IsWerkVloer EindFormat(List) New PRNr,Qty,NettoDim,TOENr,DossierID,isInkorten,BasisType,Kleur Set PRNr=$LG(List,2) Set Qty=$LG(List,3) Set NettoDim=$LG(List,4) Set TOENr=$LG(List,5) Set isInkorten=$LG(List,6) Set BasisType = ##class(BL.Legacy.HADTBXPrep).GeefLeesbaarBasisType($LG(List,7))_$$EindFormatGeleiderTechnologie(List) Set Kleur = ##class(BL.Legacy.HADTBXPrep).GeefLeesbaarKleur($LG(List,8),$LG(List,7)) Set DossierID=$S(PRNr?4.7N:$P($G(^KPR(PRNr,"G")),D,1),1:"") Quit TOENr_D_DossierID_D_Qty_D_NettoDim_D_isInkorten_D_BasisType_D_Kleur EindFormatGeleiderTechnologie(List) Quit:($LG(List,9)) "" Set GeleiderTechnologie = $Case($LG(List,9), "B":"BLUMOTION", "T":"TIP-ON", "TOB":"TOB", "Z":"zonder", :"") ; TOB voluit : TIP-ON BLUMOTION Quit:(GeleiderTechnologie="") "" Quit ", "_GeleiderTechnologie ; MONT,LOS : Sortering op KorttekstHalfFabr+NettoDim,Toelev+DossierEindProd ; LOSBULK : Sortering op Toelev+KortTekstHalfFabr+NettoDim,DossierEindProd ; BIN, VPK : Sortering op ZaagVolgNr, KortTekstHalfFabr (omgekeerde gegevens hoger node eindprod, lagere node halffabr) Groep(FabrPrep,Arr,Groep,FrontOnly) New ZaagVolgNr,TOENr,EindPRNr,DossierID,Qty,isBulk,BSKey,BSRec,FabrPrep2,HalfPRNr,NettoDim,HalfQty,BSKeyVoorTBXBouwsteen New isWerkVloer,SortKey1,SortKey2,Data1,Data2, Inkorten,API,Product,IsTandemboxLade,IsLadeVanSpaceTowerProduct,ProductTypeApi Set ProductTypeApi = ##class(DOM.DomeinContext).Instance().GeefProductTypeAPI() Set ZaagVolgNr="" For Set ZaagVolgNr=$O(Arr(ZaagVolgNr)) Quit:ZaagVolgNr="" Do . Set TOENr=$LG(Arr(ZaagVolgNr),1) . Set EindPRNr=$LG(Arr(ZaagVolgNr),2) . Set DossierID=$P($G(^KPR(EindPRNr,"G")),D,1) . Quit:DossierID="" . Set Qty=$LG(Arr(ZaagVolgNr),3) . Set isBulk=$$isBulk(EindPRNr) . Do BuildPRBSCache(EindPRNr,.PRBS) . Set API = ##class(DOM.DomeinContext).Instance().GeefProductAPI() . Set Product = API.GeefProduct(EindPRNr) . Set IsTandemboxLade = (($IsObject(Product) && Product.%Extends("DOM.PM.TBXProduct.TBXLade"))) . Set IsLadeVanSpaceTowerProduct = ($$$NodeHasSubNodes(^PRBS("IP",EindPRNr))) && (ProductTypeApi.IsLadeVanSpaceTowerProduct(EindPRNr)) . . Set BSKey="" . For Set BSKey=$O(PRBS(BSKey)) Quit:BSKey="" Do . . Quit:(BSKey?1(1"PRASMSTRK.001",1"PRASM.001",1"PRASMROL.001",1"PRTUSASMROL.001",1"PRASMROLSPLI.001",1"PRASMROLSPRE.001")) ; Matten niet in lijst opnemen . . Quit:(BSKey?1(1"PRTOBSTG.001",1"PRTOBSTGSTD.001")) ; TOB Stangen niet in lijst opnemen . . Quit:(BSKey?1(1"PRTOBADP.001")) ; TOB koppelstukken niet in lijst opnemen . . Set BSRec=PRBS(BSKey) . . Set FabrPrep2=$P(BSRec,D,19) . . Set:isBulk&&(FabrPrep2="LOS") FabrPrep2="BULK" . . Quit:FabrPrep'=FabrPrep2 . . Quit:$P(BSRec,D,3)'="H" . . Set HalfPRNr=$P(BSRec,D) . . Quit:HalfPRNr'?4.7N . . Quit:$$CheckLosDedecker^MRPRES(TOENr,EindPRNr,BSRec) ; losse onderdelen worden door DeDecker als Proforma besteld - PV 04/03/2010 . . Set NettoDim=$P($G(PRBS(BSKey,"D")),D) ; Netto dimensie . . Set HalfQty=$P(BSRec,D,2) . . Set Inkorten = "" . . If (IsTandemboxLade) Do . . . // kijk voor in te korten zaken . . . Set Inkorten=$$isInkorten(Product,BSKey,.InkortDim,.PRBS) . . . If Inkorten,$G(InkortDim) Set NettoDim=InkortDim . . . If BSKey?1(1"PROVL.001") Do . . . . Set NettoDim=Product.GeefOpvullijstLengte() . . . . . . // Eventueel hoeveelheden verdubbelen bij V1 verpakkingen . . . Set HalfQty = $$bepaalHoeveelheid(Product,BSKey,HalfQty) . . . . If (FabrPrep="MON")||(FabrPrep="LOS")||(FabrPrep="BULK")||(FabrPrep="VPZ")||((FabrPrep="BIN")&&$G(FrontOnly)&&0) Do . . . Set isWerkVloer=$$isWerkVloer(HalfPRNr) . . . If ((FabrPrep="MON")||(FabrPrep="LOS"))&&isWerkVloer Quit . . . If ($$$StartsWith(BSKey,"PRBXKG.") && (NettoDim '= "")) { . . . Set NettoDim = Product.GeefZijwandHoogte() _ ":" _ NettoDim . . . } . . . Set SortKey1=$S(FabrPrep="BULK"!FrontOnly:TOENr_";", 1:"")_$$GeefSorteersleutelVoorBouwsteen(BSKey,HalfPRNr, NettoDim) . . . Set SortKey2=$S(FabrPrep="VPZ":"*",1:TOENr_";"_DossierID) . . . . . . Set BSKeyVoorTBXBouwsteen = BSKey . . . Set:((IsLadeVanSpaceTowerProduct) && ($E(BSKey,1,5)="KIND.")) BSKeyVoorTBXBouwsteen = $Replace(BSKey,"KIND.","KIND.SPT.") . . . . . . Set Data1=$G(Groep(FabrPrep,SortKey1),$LB("H",HalfPRNr,,NettoDim)) . . . ;If FabrPrep="BULK" Set $LI(Data1,5)='isWerkVloer . . . Set $LI(Data1,5)='isWerkVloer . . . Set $LI(Data1,3)=$LG(Data1,3)+(HalfQty*Qty) . . . Set Groep(FabrPrep,SortKey1)=Data1 . . . . . . Set Data2=$G(Groep(FabrPrep,SortKey1,SortKey2),$LB("E",EindPRNr,,NettoDim,TOENr)) . . . Set $LI(Data2,3)=$LG(Data2,3)+(Qty) . . . Set $LI(Data2,6)=Inkorten . . . Set $LI(Data2,7)=$$GeefBasisTypeVoorTBXBouwsteen(BSKeyVoorTBXBouwsteen,HalfPRNr) . . . Set $LI(Data2,8)=$$GeefKleurCodeVoorTBXBouwsteen(BSKeyVoorTBXBouwsteen,HalfPRNr) . . . Set $LI(Data2,9)=$$GeefGeleiderTechnologie(HalfPRNr, Product) . . . Set Groep(FabrPrep,SortKey1,SortKey2)=$S(FabrPrep="VPZ":"",1:Data2) . . . . . Else If (FabrPrep="BIN")||(FabrPrep="VPK")||(FabrPrep="RUGB") Do . . . Quit:(FabrPrep="VPK")&&(BSKey'["PRVPOD") ; Alleen omvouw karton bij verpakking . . . Set SortKey1=(1000+ZaagVolgNr)_";"_DossierID . . . If FabrPrep="BIN" Set SortKey1=TOENr_";"_DossierID . . . Set SortKey2=$$SORTKEY^PRODUKT(HalfPRNr) . . . . . . Set Data1=$G(Groep(FabrPrep,SortKey1),$LB("E",EindPRNr,Qty,,TOENr)) . . . Set Groep(FabrPrep,SortKey1)=Data1 . . . . . . Set Data2=$G(Groep(FabrPrep,SortKey1,SortKey2),$LB("H",HalfPRNr,,NettoDim)) . . . Set $LI(Data1,5)='$$isWerkVloer(HalfPRNr) . . . . . . Set $LI(Data2,3)=$LG(Data2,3)+(HalfQty*Qty) . . . Set Groep(FabrPrep,SortKey1,SortKey2)=Data2 Quit GeefGeleiderTechnologie(HalfPRNr, MoederProduct) New GeleiderTechnologie Set GeleiderTechnologie = "" Set BasisType = $LG(##class(Prod.Kenmerk.DataDefinitie).Get("TB",HalfPRNr,"BasisType")) If (BasisType = "CP") { Set GeleiderTechnologie = $LG(##class(Prod.Kenmerk.DataDefinitie).Get("TB",HalfPRNr,"Opties")) } Quit GeleiderTechnologie GeefBasisTypeVoorTBXBouwsteen(BSKey,HalfPRNr) New BasisType Set BasisType=$LG(##class(Prod.Kenmerk.DataDefinitie).Get("TB",HalfPRNr,"BasisType")) If (BSKey="PRRL_TussenReling.001") { Set BasisType="RLTUS" ; BasisType overschrijven, want kan afkomstig zijn van gewone reling (="RL") } If (BSKey="PRAKLI.001") { Set BasisType="AK" ; BasisType overschrijven, is bij sommige producten niet ingevuld. } If (BSKey="PRXPOSK.001") { Set BasisType="STEUNK" } If ($E(BSKey,1,9)="KIND.SPT.") { Set BasisType="SPCTWRX" } Quit BasisType GeefKleurCodeVoorTBXBouwsteen(BSKey,HalfPRNr) New KleurCode,HalffabOpties Set KleurCode=$LG(##class(Prod.Kenmerk.DataDefinitie).Get("TB",HalfPRNr,"Kleur")) If (BSKey="PRAKLI.001")||(BSKey="PRAKRE.001") { Set KleurCode="" ; KleurCode niet tonen bij afdekkappen Set HalffabOpties=$LG(##class(Prod.Kenmerk.DataDefinitie).Get("TB",HalfPRNr,"Opties")) ; ... tenzij specifieke waarde ingvuld in kenmerk TB||Opties If $L(HalffabOpties) { Set KleurCode=HalffabOpties } } Quit (KleurCode) GeefSorteersleutelVoorBouwsteen(BSKey,HalfPRNr,NettoDim) New SortKey, BasisType, Design Set SortKey=$$SORTKEY^PRODUKT(HalfPRNr) #dim BasisType As %String = ##class(BL.Legacy.HADTBXPrep).GeefLeesbaarBasisType($$GeefBasisTypeVoorTBXBouwsteen(BSKey,HalfPRNr)) Set SortKey = $$GeefSorteerSleutelVoorBasisType(BasisType,HalfPRNr)_"\"_SortKey If ($$$StartsWith(BSKey,"PRRL_"))||($$$StartsWith(BSKey,"PRRLRE_")) { Set $P(SortKey,"/",1)=$P(SortKey,"/",1)_"/"_"PRRL_"_$P(BSKey,"_",2,99) ; Aan de eerste piece van de SortKey wordt de BSKey toegevoegd. } If ( $$$StartsWith(BSKey,"PRAKLI."))||($$$StartsWith(BSKey,"PRAKRE.") // Afdekkappen || $$$StartsWith(BSKey,"PRRL_") || $$$StartsWith(BSKey,"PRRLRE_") // Relingen || $$$StartsWith(BSKey,"PRBXK") // Boxcover, boxcap, inschuifelement ) { // Groeperen per design en per kleur #dim Design As %String = $LG(##class(Prod.Kenmerk.DataDefinitie).Get("TB",HalfPRNr,"Design")) Set $P(SortKey,"\",2)=$$GeefSorteerSleutelVoorDesign(Design)_$$FormatForSort($$GeefKleurCodeVoorTBXBouwsteen(BSKey,HalfPRNr))_$P(SortKey,"\",2) } Quit SortKey_";"_NettoDim FormatForSort(String) New Result, Padding Set Padding = " " Set Result = $E($ZSTRIP(String,"<>WCP"),1,$L(Padding)) Set $E(Padding,1,$L(Result)) = Result Quit Padding GeefSorteerSleutelVoorBasisType(BasisType,HalfPRNr) Quit $$FormatForSort($$GeefSorteerVolgordeVoorBasisType(BasisType,HalfPRNr)_BasisType) GeefSorteerVolgordeVoorBasisType(BasisType,HalfPRNr) New Volgorde, Opties #dim Volgorde As %String = $Case(BasisType, "Bodemsteun" : "01", "Frontbevestiging" : "02", "Steun K-zijkant" : "03", "Afdekkap" : "04", "Frontstab." : "05", "Frontadapter" : "05", "Adapter antaro" : "05", "Opvullijst" : "05", "Corpusprofiel" : "10", "Geleider" : "10", "TOB set" : "12", "TOB stanghouder" : "14", "TOB bodemstabilisering" : "14", "Reling" : "20", "Relingadapter" : "21", "Tss.reling" : "22", "Enkelw.boxside" : "30", "Dubbelw.boxside" : "31", "Gl.boxside set" : "32", "Boxcap" : "33", "Pos.profiel" : "34", "Boxcover" : "35", "Inschuifelem." : "40", "Houder.set inschf" : "41", "Stab.set" : "42", "DWV" : "50", "DWVH" : "51", : "00" ) If (BasisType = "Corpusprofiel") || (BasisType = "Geleider") { #dim Opties As %String= $LG(##class(Prod.Kenmerk.DataDefinitie).Get("TB",HalfPRNr,"Opties")) Set:(Opties="T") Volgorde = "11" } Quit Volgorde GeefSorteerSleutelVoorDesign(Design) Quit $$FormatForSort($$GeefSorteerVolgordeVoorDesign(Design)_Design) GeefSorteerVolgordeVoorDesign(Design) Quit $Case(Design, "S" : "01", "F" : "02", "A" : "03", "I" : "04", : "00" ) BuildPRBSCache(MPRNr,PRBS) Kill PRBS Merge PRBS=^PRBS("BS",MPRNr) Set API = ##class(DOM.DomeinContext).Instance().GeefProductAPI() Set Tandembox = API.GeefProduct(MPRNr) If ($IsObject(Tandembox) && Tandembox.%Extends("DOM.PM.TBXProduct.TBXLade")) Do . // Afdekkappen . If '$D(PRBS("PRAKLI.001")) Do ; Er zijn geen separate afdekkappen, dus toevoegen . . ;Toevoegen AFDEKKAP ZAA.xxx . . If '$LG(##class(Prod.Kenmerk.DataDefinitie).Get("TBX",MPRNr,"NMAK")) Do ; Niet meeleveren afdekkap . . . If (Tandembox.GeefZijkantDesign() = ##class(DOM.PM.enu.TBXZijkantDesign).A()) Do . . . . Set Kleur=$LG(##class(Prod.Kenmerk.DataDefinitie).Get("TBX",MPRNr,"KL")) ; Kleur lade . . . . Set HPRNr=$CASE(Kleur,"SW":472015,"BZ":471997,"IN":472252,:478609) . . . . Set BSRec=HPRNr_"\2\H" ; ZAA 532 en ZAA5329 (inox) . . . . Set $P(BSRec,D,19)="LOS" . . . . Set PRBS("PRAKLI.001")=BSRec . . . Else If (Tandembox.GeefZijkantDesign() = ##class(DOM.PM.enu.TBXZijkantDesign).F()) Do . . . . Set BSRec="61101\2\H" ; ZAA 430C . . . . Set $P(BSRec,D,19)="LOS" . . . . Set PRBS("PRAKLI.001")=BSRec . . . Else Do ; standard . . . . Set BSRec="472251\2\H" ; ZAA 330C.BT (nieuwe rechthoekige afdekkap met Blum ingedrukt . . . . Set $P(BSRec,D,19)="LOS" . . . . Set PRBS("PRAKLI.001")=BSRec . . . . ;Set BSRec="24665\1\H" ; ZAA 230N LI . . . . ;Set $P(BSRec,D,19)="LOS" . . . . ;Set PRBS("PRAKLI.001")=BSRec . . . . ;Set BSRec="24666\1\H" ; ZAA 230N RE . . . . ;Set $P(BSRec,D,19)="LOS" . . . . ;Set PRBS("PRAKRE.001")=BSRec . . // Toevoegen STEUN K-ZARGE T54.3300 . If $D(PRBS("PRLALI.001"))&&'$D(PRBS("PRLARE.001")) Do ; Linkse zonder rechtse -> V1 . . If ($LG(##class(Prod.Kenmerk.DataDefinitie).Get("TBX",MPRNr,"ZW"))="K")&&($LG(##class(Prod.Kenmerk.DataDefinitie).Get("TBX",MPRNr,"LT"))="L") Do . . . Set BSRec="126100\2\H" ;T54.3300 . . . Set $P(BSRec,D,19)="LOS" . . . Set PRBS("PRXPOSK.001")=BSRec . . If ($D(PRBS("PRRL.001"))) Do . . Do BuildPRBSCacheVoorRelingen(Tandembox,.PRBS) ; + BasisType van "PRRL_TussenReling.001" nog wijzigen naar "RLTUS" --> BasisType in $LI(Data2,7) overriden . Quit BuildPRBSCacheVoorRelingen(Tandembox,PRBS) ; PRBS als .local // Reling in nieuwe PRBSCache-node steken Merge PRBS("PRRL_BovensteReling.001")=PRBS("PRRL.001") Set $P(PRBS("PRRL_BovensteReling.001"),"\",2)=Tandembox.GeefAantalBovenRelingen() If ($D(PRBS("PRRLADAPT.001"))) { If (Tandembox.BevatTussenRelingAdapter()) { // TussenReling info zit in PRRL-bouwsteen Merge PRBS("PRRL_TussenReling.001")=PRBS("PRRL.001") Set $P(PRBS("PRRL_TussenReling.001"),"\",1)=Tandembox.GeefTussenReling().GeefPRNr() Set $P(PRBS("PRRL_TussenReling.001"),"\",2)=Tandembox.GeefAantalTussenRelingen() // RelingAdapter in nieuwe PRBSCache-node steken Merge PRBS("PRRL_RelingAdapter.001")=PRBS("PRRLADAPT.001") } Else { // TussenReling info zit in PRRLADAPT-bouwsteen Merge PRBS("PRRL_TussenReling.001")=PRBS("PRRLADAPT.001") } } Kill PRBS("PRRLADAPT.001") Kill PRBS("PRRL.001") If ($D(PRBS("PRRLRE.001"))) { // De rechtse reling in nieuwe PRBSCache-node steken Merge PRBS("PRRLRE_BovensteReling.001")=PRBS("PRRLRE.001") Set $P(PRBS("PRRLRE_BovensteReling.001"),"\",2)=Tandembox.GeefAantalBovenRelingen() If Tandembox.GeefAantalTussenRelingen() // Voorlopig zijn er geen laden in dit geval: rechtse reling is er enkel voor Antaro // en er zijn (nog) geen Antaro-laden met tussenrelingen. { Merge PRBS("PRRLRE_TussenReling.001")=PRBS("PRRLRE.001") Set $P(PRBS("PRRLRE_TussenReling.001"),"\",2)=Tandembox.GeefAantalTussenRelingen() } Kill PRBS("PRRLRE.001") } Quit ; Verpakking = K:Kist,P:Pallet, C:CommissieZonderOnderdelen of O:CommisieMetOnderdelen, A:VHossZonderOnderdelen of B:VHossMetOnderdelen, Y:ProboxZonderOnderdelen of X:ProboxMetOnderdelen isBulk(PRNr) Quit "S;Z"'[$LG(##class(Prod.Kenmerk.DataDefinitie).Get("TBX",PRNr,"VERPAK")) ; Niet stuksverpakt met of zonder onderdelen ; Nakijken of het halffabr in voorraad op de werkvloer ligt isWerkVloer(PRNr) New Rec15,Rec2 Set Rec15=$G(^KPR(PRNr,15)) Set Rec2=^KPR(PRNr,2) If '+$P(Rec2,D,15) Quit 1 ; Alle voorraad op de werkvloer ;If $P(Rec15,D,11)="W" Quit 1 If $P(Rec15,D,5)'="" Quit 1 ; Er wordt voorraad gehouden op de werkvloer, de goederen liggen ook in het automatisch mag Quit 0 ; Er wordt geen voorraad gehouden op de werkvloer alleen degene die nodig zijn voor productie ; Nakijken of er moet ingekort worden ; InkortDim als .Local oproepen ; PRBS als .Local oproepen isInkorten(TandemBox,BSKey,InkortDim,PRBS) New Found,HFPRNr Set InkortDim="" If ((BSKey["PRSB.")&&'$D(PRBS("PRSS.001")))||(BSKey["PRSS.") Do Quit 1 ; stabilisator set of stabilisator stang (laatste alleen voor laden bredere dan 1200 . Set InkortDim=$LG(##class(Prod.Kenmerk.DataDefinitie).Get("TBX",TandemBox.GeefPRNr(),"IB"))-86 ; Lengte berekenen van de stabilisator stang Else If BSKey["PRRL_BovensteReling" Do Quit Found . Set Found = TandemBox.BevatInTeKortenReling() . If Found Do . . Set InkortDim = ##class(DOM.PM.Maatwerk.TBX.HalffabrikaatUtils).GeefRelingLengteNaInkorten(TandemBox.GeefPRNr(),TandemBox.GeefReling().GeefPRNr()) Else If (BSKey["PRRL_TussenReling") Do Quit Found . Set Found = TandemBox.BevatInTeKortenReling() . If Found Do . . Set InkortDim = ##class(DOM.PM.Maatwerk.TBX.HalffabrikaatUtils).GeefRelingLengteNaInkorten(TandemBox.GeefPRNr(),TandemBox.GeefTussenReling().GeefPRNr()) Else If (BSKey["PRBXKG.")||(BSKey["PRBXKGSTRK.") Do Quit Found ; boxsideglas . Set Found = TandemBox.BevatInTeKortenZijkantGlas() . If Found Do . . Set InkortDim = ##class(DOM.PM.Maatwerk.TBX.HalffabrikaatUtils).GeefLengteVanInschuifElementZijkant(TandemBox.GeefPRNr()) Quit 0 bepaalHoeveelheid(TandemBox,BSKey,BouwsteenHoeveelheid) Set Hoeveelheid = BouwsteenHoeveelheid If (BSKey["PRBXKG.")||(BSKey["PRBXKGSTRK.") { // Voor boxkapglas is de hoeveelheid te picken glazen altijd 2, onafhankelijk van wat in de bouwsteen staat Set Hoeveelheid = 2 } Quit Hoeveelheid