#include vhLib.Macro #include %Prod.Product #include %occErrors #define DelimGroepSort ";" ; Opties : multiple van C; H; P of backwards 1 en 0 ;C : Creatie van product ;P : met prijswijziging ;H : Creatie van halffabr (bouwstenen) ;M : Modify BS (in combinatie met optie "H") : aanpassen van enkele halffabr, dus niet alle BS, maar slechts lijst van DataItems (hard-coded) - enkel op bestaande producten, "met Prijsaanpassing" wordt AFgeraden! ;1 : backwards compatible komt overeen met : C;H;P ;0 of leeg: backwards compatible komt overeen met : C;H KPRCreate ; parameters = (GenPRNr,QtyStaffel,Opties,NoSa) #define NodePL "PL" ;d WLIP^vhDBG(97,"KPRCreate (GAData.Product) ... "_$$$LCVT($LB(GenPRNr,QtyStaffel,Opties,NoSa))) ;d:($IsObject(..TemplateTmp)) WL^vhDBG("KPRCreate SchaduwActief: "_..TemplateTmp.SchaduwActief_$S(..TemplateTmp.SchaduwActief:" SchaduwProduct id="_..TemplateTmp.SchaduwProduct.%Id(),1:"")) Set:($G(Opties,0)=0) Opties="C;H" Set:$G(Opties) Opties="C;H;P" If ..MetaStruct.Code="KAD" Do . Do KPRCreateKAD(.GenPRNr,.QtyStaffel,.Opties,.NoSa) Else Do . Do KPRCreateCommon(.GenPRNr,.QtyStaffel,.Opties,.NoSa) Quit KPRCreateCommon(GenPRNr,QtyStaffel,Opties,NoSa) New D,Q,U,NewRec,NewPRNr,LEVNr,IsStock,ModPRNr Set D="\",Q="K",U=";" ;d:($G(MApplication)) WLIP^vhDBG(97,"KPRCreate "_MApplication.GetClientIP()) ;q:($G(MApplication))&&(MApplication.GetClientIP()="192.168.1.97") ;d:($G(MApplication)) WLIP^vhDBG(97,"KPRCreate continues "_MApplication.GetClientIP()) Do:($D(..LookUp($$$NodePL))<10) ..BuildLookUp($LB("PL")) ;Do:('($$$aHasSubNodes(..LookUp($$$NodePL)))) ..BuildLookUp($LB("PL")) Set ModPRNr=..ProductGetObjectId() ; Nieuw of Wijzigen van product Set:(ModPRNr'?4.7N) ModPRNr="" If $G(GenPRNr)'?4.7N Do ; Defaulting . Set GenPRNr=..GenerischPRNr() ; Fill ^KPR nodes If Opties["C" Do . Lock:(ModPRNr) +^KPR(ModPRNr) . Do:(ModPRNr) DELIND^PRODUKT2(ModPRNr) ; Added by WimV on 19/04/2010 . Do kpcCOPY(GenPRNr,ModPRNr,.NewRec) . Do:('ModPRNr) kpcCLEAN(GenPRNr,,.NewRec) ; Alleen bij nieuwe product . Do kpcFILL(.NewRec,Opties["P") . Do kpcSAVE(.NewRec) . Set NewPRNr=..ProductGetObjectId() . Do RECALC^PRODUKT2(NewPRNr) . Do BLDIND^PRODUKT2(NewPRNr) ; Added by WimV on 19/04/2010 . Lock:(ModPRNr) -^KPR(ModPRNr) ; Fill ^HADPR en ^PRBS nodes Do:Opties["H" kpcHALFFAB() ;If $G(^KLPUTZ("AS")) Do kpcCalcSchaduwPrijs(ModPRNr) Quit kpcCalcSchaduwPrijs(PRNr) Quit:'$D(^PRBS("BS",PRNr)) Do CTRONE^PRBSC(PRNr,"S","S",1) Quit KPRCreateKAD(GenPRNr,QtyStaffel,Opties,NoSa) ; Alleen QtyStaffel is nodig, GenPRNr en MetPrijs worden niet gebruikt. ;d WL^vhDBG("... sub KAD KPRCreate ... "_$$$LCVT($LB(GenPRNr,QtyStaffel,Opties,NoSa))) New D,Q,U,NewRec,LEVNr,IsStock Set D="\",Q="K",U=";" Do:('($$$aHasSubNodes(..LookUp($$$NodePL)))) ..BuildLookUp($LB("PL")) ; Fill ^PRBS nodes Do:Opties["H" kpcHALFFAB(0) ; 0 = skip ^HADPR Quit kpcHALFFAB(blnHADPR) Set blnHADPR=$G(blnHADPR,1) #define DEP "DEP" #define MEERWAARDELABELS ";PRBDHO;PRBDHZ;PRRUGHS;PRVPCP;PRVPZW;PRVPOD;PRVULSTUK;PRVULPAL;" // Last modified by WimV on 22/06/2011 ; #define lbHFToModifyLabelsPREV $LB("PRASM","PRASMSTRK","PRASMROL","PRASMROLSPLI","PRASMROLSPRE","PRTUSASMROL") ; #define lbHFToModifyLabelsPREV $LB("PRFRHLI","PRFRHRE","PRFRHV1","PRFRHKAPLI","PRFRHKAPRE","PRFRHREL") ; #define lbHFToModifyLabelsPREV $LB("PRRUGLI","PRRUGRE","PRRUGSPBINLI","PRRUGSPBINRE") ; #define lbHFToModifyLabelsPREV $LB("PRDWV","PRDWVSPLI","PRDWVSPRE","PRDWVH") #define lbHFToModifyLabels $LB("PRBXKA","PRBXKARE") New Rec,PRNr,HFPRNr,Rec,Key,Rec2,ProgLabel,ClassName,Qty,MetaTag,KostPlaats,VersieNrPRBS New DItem,Label,iG,iS,iI,Groep,KostVolgNr,MatVolgNr,arTree,SortNr,BSNode,InputWaarde,ErrorMsg New blnModifySomeHF,lbHFToModifyLabels Set PRNr=..ProductGetObjectId() Quit:(PRNr'?4.7N) Set VersieNrPRBS=$P($G(^PRBS("BS",PRNr),"\\1.0.0"),"\",3) ; Steeds controleren in de normale versie (niet in de schaduw) Do:(VersieNrPRBS="")&&($IsObject($G(MApplication))) MApplication.MessageBox("KPRCreate: Bouwstenen (PRBS) worden niet aangepast. VersieNr="_VersieNrPRBS) Quit:(VersieNrPRBS="") Set blnModifySomeHF=(Opties["M") ; Added by WimV on 09/06/2010 Set:(blnModifySomeHF) lbHFToModifyLabels=$$$lbHFToModifyLabels Set BSNode=$S($G(NoSa)="S":"BSS",1:"BS") ;d WL^vhDBG("NoSa="_NoSa_" BSNode="_BSNode) Do:('blnModifySomeHF) DELOBJ^PRBS(PRNr,.NoSa) ; ,blnKillHADPR=(blnHADPR=1) Do:(blnModifySomeHF) DELOBJPARTIAL(PRNr,NoSa,lbHFToModifyLabels) If blnHADPR Do . Set Rec=$G(^KPR(PRNr,"G")) ; G-node overnemen van afgeleid product . Kill ^HADPR("P",PRNr) . Merge ^HADPR("P",PRNr,"G")=Rec . // BasisParameters = invullen Prod.Kenmerken Set sc=$$$OK Set ProgLabel="" For Set ProgLabel=$O(..LookUp($$$NodePL,ProgLabel)) Quit:(ProgLabel="") Do Quit:($$$ISERR(sc)) . Set InputWaarde=..LookUp($$$NodePL,ProgLabel) . Set:(blnHADPR) ^HADPR("P",PRNr,"BP",ProgLabel)=InputWaarde ; Basis Parameters . If InputWaarde="" Do . . Set scDelete=##class(Prod.Kenmerk.DataDefinitie).DeleteKM(..MetaStruct.Code,PRNr,ProgLabel) . . Set sc=$$$OK . Else Do . . Set scAdd=##class(Prod.Kenmerk.DataDefinitie).Set(..MetaStruct.Code,PRNr,ProgLabel,InputWaarde) . . Set:(..MetaStruct.Code?1(1"TBX")) sc=$G(scAdd) ; modified by WimV on 06/09/2011 --> alleen voor TBX mag een error gethrowed worden. If $$$ISERR(sc) { // Aanmaken van de kenmerken is mislukt Set ErrorMsg="KPRCreate: Kenmerk "_ProgLabel_" met waarde "_$G(InputWaarde)_" failed; "_$$ParseStatus^vhLib(sc) Do ##class(vhLib.Logger).%New("Maatwerk").Error("KPRCreate",ErrorMsg) Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.BaseException).%New(##class(TECH.enu.ExceptionCode).SaveFailed(),ErrorMsg)) } ; Halffabrikaten en kosten Set (KostVolgNr,MatVolgNr)=0 Set SortNr=$S(blnModifySomeHF:200, 1:0) ; als blnModifySomeHF, dan moeten de gewijzigde BS in de ADMIN achteraan getoond worden. Set ProdKey=$$kpcCountExpr("PROD") Set KostKey=$$kpcCountExpr("KOST") Set ^PRBS(BSNode,PRNr)=$S(..MetaStruct.Code="KAD":"E\KAD", 1:"E\TBX") ; "E\TBX" Set $P(^PRBS(BSNode,PRNr),"\",3)="v"_..TemplateVersion ;d WL^vhDBG("PRBS()="_$G(^PRBS(BSNode,PRNr))) Merge arTree=..arTree For iG=ProdKey,KostKey Do ;groepnummers 2 en 3 . Set iS="" . For Set iS=$O(arTree($$$DEP,iG,iS)) Quit:(iS="") Do . . Set iI="" . . Set Groep=arTree($$$DEP,iG,iS).Code . . For Set iI=$O(arTree($$$DEP,iG,iS,iI)) Quit:(iI="") Do . . . Set DItem=arTree($$$DEP,iG,iS,iI) . . . Quit:'DItem.IsActief() . . . If DItem.MetaItem.%Extends("Prod.GAMeta.ItemPR") Do ; halffabrikaat . . . . Quit:(blnModifySomeHF)&&($LF(lbHFToModifyLabels,DItem.Label)=0) ; Added by WimV on 09/06/2010 . . . . Do kpcHALFFABPR . . . . ;w "BS aangepast voor :"_DItem.Label,! . . . Else If iG=KostKey Do ; laatste subnode is deze van de verwerkingkost . . . . Quit:(blnModifySomeHF) ; Added by WimV on 09/06/2010 . . . . Do kpcHALFFABVW . . . . . . ; Do:($$$MultiFabrTekst) xmwExtraItemTekst Do BLDIND^PRBS(PRNr,.NoSa) Quit kpcHALFFABVW ; Verwerkingstijd en kost // Enkel de ^PRBS nodes worden ingevuld New TijdKost,TijdPlanning,KostPrijs,Kost,BSKey,Rec,MatPrijs,Oms Set TijdKost=..Cumuls("TijdKost",iG,iS,iI) Set TijdPlanning=..Cumuls("TijdWerk",iG,iS,iI) Set KostPrijs=..Cumuls("KPrijs",iG,iS,iI) Set KostPlaats=DItem.Autos.GetAt("KostPlaats") Set Oms=DItem.Autos.GetAt("Oms") Set:(KostPlaats="") KostPlaats="-" If '$D(KostPlaats(KostPlaats)) Do ; cache voor de kost van kostplaats . New KostObj . Set KostObj=##class(Prod.GAMeta.BT.KostPlaats).%OpenId(KostPlaats) . Set KostPlaats(KostPlaats)=$S($IsObject(KostObj):KostObj.Kost(),1:0) ; KostObj.Kost() Set Kost=$J(TijdKost*$G(KostPlaats(KostPlaats))/3600,0,4) Set MatPrijs=$S(+Kost=0:KostPrijs,KostPrijs>Kost:KostPrijs-Kost,1:"") ; een deel is voor materiaal Set lbMatK="" If MatPrijs Do . Set lbMatK=$$kpcGetMatKostList(QtyStaffel) . Set:(lbMatK="") lbMatK=$LB($LB(MatPrijs)) ; Backward compatible (old system) . ;d WL^vhDBG("KPC-KostMat : MatPrijs="_$J(MatPrijs,0,2)_" - lbMatK="_$$$LCVT(lbMatK)) For i=1:1:$LL(lbMatK) Do . Set MatVolgNr=MatVolgNr+1 . Set BSKey="MAT."_$E(1000+MatVolgNr,2,4) . Set Rec="" . Set $P(Rec,"\",2)=1 . Set $P(Rec,"\",3)="S" ; Surplus . Set $P(Rec,"\",4)=$LI($LI(lbMatK,i),1) ; MatPrijs . Set $P(Rec,"\",9)=$LG($LI(lbMatK,i),2) ; KostMatID . Set SortNr=SortNr+1 . Set $P(Rec,"\",10)=SortNr . Set $P(Rec,"\",11)=Groep . Set $P(Rec,"\",13)=Oms . Set $P(Rec,"\",16)=1 ; Meerwaarde . Set ^PRBS(BSNode,PRNr,BSKey)=Rec ; Halffabricaten If Kost Do . Set MatVolgNr=MatVolgNr+1 . Set BSKey="KST."_$E(1000+MatVolgNr,2,4) . Set Rec="" . Set $P(Rec,"\",2)=1 . Set $P(Rec,"\",3)="T" . Set $P(Rec,"\",7)=TijdPlanning . Set $P(Rec,"\",8)=TijdKost . Set $P(Rec,"\",9)=KostPlaats . Set SortNr=SortNr+1 . Set $P(Rec,"\",10)=SortNr . Set $P(Rec,"\",11)=Groep . Set $P(Rec,"\",13)=Oms . Set $P(Rec,"\",16)=1 ; Meerwaarde . Set ^PRBS(BSNode,PRNr,BSKey)=Rec ; Halffabricaten Quit kpcGetMatKostList(Staffel) ; Quit $LB($LB(MatKost01,MKostID01), $LB(MatKost02,MKostID02), ...) Quit DItem.Parameters.GetAt("lbMatKost") kpcHALFFABPR ; Producten New Rec,Rec2,BSKey,MetaTag,GroepAndSort Set Label=DItem.Label Quit:(Label="") Set HFPRNr=DItem.Get("PRNr") Quit:(HFPRNr="") Set Qty=DItem.Get("Qty") Quit:'Qty Set Rec=HFPRNr_"\"_Qty_"\"_"H" Set SortNr=SortNr+1 Set $P(Rec,"\",10)=SortNr Set $P(Rec,"\",11)=Groep Set Oms=$$kpcGetLangTekst(DItem) ;Set lbOms=$LB($$kpcGetLangTekst(DItem)) Set:(Oms="") Oms=DItem.Autos.GetAt("Oms") Set $P(Rec,"\",13)=Oms Set:(..MetaStruct.Code?1(1"TBX")) $P(Rec,"\",16)=$S($$$MEERWAARDELABELS[(";"_Label_";"):1,1:"") ; meerwaarde Set GroepAndSort=$$kpcGetDispGroepSort(DItem) Set $P(Rec,"\",18)=$P(GroepAndSort,$$$DelimGroepSort,1) ; DItem.EvalTemplAuto("FabrGroep") Set $P(Rec,"\",19)=DItem.EvalTemplAuto("FabrPrep") Set $P(Rec,"\",21)=$P(GroepAndSort,$$$DelimGroepSort,2) Set (MetaTag,Rec2)="" ;If DItem.MetaItem.%ClassName()["ItemPR1DIM" Do ; dimensie (lengte) afhankelijk If DItem.MetaItem.%Extends("Prod.GAMeta.ItemPR1DIM") Do ; dimensie (lengte) afhankelijk . Set MetaTag="PR1DIM" ; MetaTag . Set $P(Rec2,"\",1)=DItem.Get("DimHF") . Set $P(Rec2,"\",2)=DItem.Get("DimHFBrut") . Set $P(Rec2,"\",3)=DItem.Get("DimHFUitval") Set BSKey=Label_".001" If 1 Do . ; Opslag in PRBS . Set ^PRBS(BSNode,PRNr,BSKey)=Rec ; Halffabrikaten . Set:($L(MetaTag)) ^PRBS(BSNode,PRNr,BSKey,"D")=Rec2 ; Halffabrikaten - dimensie afhankelijk van de METATAG . ;Set ^PRBS("IP",HFPRNr,PRNr,BSKey)=$P(Rec,"\",3) ; Index Quit /// Gedeeltelijk verwijderen van de bouwstenen : /// alleen deze die aangegeven zijn in lbHFToModifyLabels. /// Naar analogie van DELOBJ^PRBS(PRNr,.NoSa) /// Added by WimV on 09/06/2010 DELOBJPARTIAL(PRNr,NoSaLijst,lbHFToModifyLabels) ; Verwijderen bouwsteen (zonder locking) #define StartsWith(%s,%ss) ($P(%s,%ss,1)="") New NoSa,BSNode,I,J,label Quit:(lbHFToModifyLabels="") Set:$G(NoSaLijst)="" NoSaLijst="N;S" For I=1:1:$L(NoSaLijst,";") Do . Set NoSa=$P(NoSaLijst,";",I) . Set BSNode=$S($G(NoSa)="S":"BSS",1:"BS") . Do DELIND^PRBS(PRNr,.NoSa) . For J=1:1:$LL(lbHFToModifyLabels) Do . . Set label=$LI(lbHFToModifyLabels,J) . . Kill ^PRBS(BSNode,PRNr,label) . . Kill ^PRBS(BSNode,PRNr,label_".001") ; eg. "PRASMROL.001" Quit kpcGetLangTekst(DItem) #define IsValidPR(%v) (%v?2.6N) New lbTekst,LangTekst,PRNr If DItem.Autos.IsDefined("FabrTekst") Do Quit LangTekst . Set lbTekst=DItem.EvalTemplAuto("FabrTekst") . Set LangTekst=$S(lbTekst="":"", $$$IsList(lbTekst):$LG(lbTekst,2), 1:lbTekst) ; Else Set PRNr=DItem.Get("PRNr") Quit:('$$$IsValidPR(PRNr)) "["_DItem.Label_"]" Quit:(DItem.IsFixed("PRNr")) "### "_DItem.MetaItem.GetLangTekst(PRNr,DItem,1)_" ###" Quit:('DItem.Autos.IsDefined("FabrOms")) DItem.MetaItem.GetLangTekst(PRNr,DItem,1) Do XMLBuildArrayInvers^Prod.GAMeta.Item.tmpDev2(DItem) Quit DItem.EvalTemplAuto("FabrOms") ; FabrOms kan (lees: zal meestal) de exec "Meta.GetOmsViaKenm()" bevatten kpcGetDispGroepSort(DItem) ; Groep Sort - order for display #define Delim ";" New lbTekst,GroepAndSort,SortGroep,SortNr If DItem.Autos.IsDefined("FabrTekst") Do . Set lbTekst=DItem.EvalTemplAuto("FabrTekst") . Set GroepAndSort=$S(($L(lbTekst))&&($$$IsList(lbTekst)):$LG(lbTekst,1), 1:"") Else Do . Set GroepAndSort=$P(DItem.EvalTemplAuto("FabrGroep"),"\",1) ;Set SortGroep=$P(GroepAndSort,$$$Delim,1) ;Set SortNr=$P(GroepAndSort,$$$Delim,2) Quit GroepAndSort kpcFILL(NewRec,MetPrijs) New KortT,KPrijs,Taal,List,LT,I,Node,Piece Do ..DossierDefine(GenPRNr) Set KortT=..KortTekst() Set KPrijs=$$kpcPrijs() Set $P(NewRec(0),"\")=KortT For Taal="N","F","D","E","R" Do . Set:Taal="N" List="0.2,0.11,6.1,6.2,6.3,6.4,6.5,6.6,6.7,6.8,6.9,6.10" . Set:Taal="F" List="1.22,3.21,8.1,8.2,8.3,8.4,8.5,8.6,8.7,8.8,8.9,8.10" . Set:Taal="D" List="2.2,3.23,10.1,10.2,10.3,10.4,10.5,10.6,10.7,10.8,10.9,10.10" . Set:Taal="E" List="2.1,3.22,12.1,12.2,12.3,12.4,12.5,12.6,12.7,12.8,12.9,12.10" . Set:Taal="R" List="4.1,4.2,4.3,5.1,5.2,5.3,4.4,4.5,4.6,4.7,4.8,4.9,4.10" ; Leveranciersreferentie . . ; Clear all pieces from List (Added by WimV on 28/09/2010) . For I=1:1:$L(List,",") Do . . Set Node=$P($P(List,",",I),".",1) . . Set Piece=$P($P(List,",",I),".",2) . . Set $P(NewRec(Node),"\",Piece)="" . . ; Build LangTekst and fill it into the pieces from List . Do ..LangTekst($S(Taal="R":"N",1:Taal),.LT,Taal) . For I=1:1:LT Do . . Set Node=$P($P(List,",",I),".",1) . . Set Piece=$P($P(List,",",I),".",2) . . Set:$L($G(LT(I))) $P(NewRec(Node),"\",Piece)=LT(I) Set $P(NewRec(1),"\",13)=..Gewicht("B") Set NewRec("G")="" Set $P(NewRec("G"),"\",1)=..Dossier Set:(MetPrijs) $P(NewRec("G"),"\",12)=KPrijs ; Aankoopprijs Set $P(NewRec("G"),"\",11)=$J($G(..Cumuls("KPrijs",$$kpcCountExpr("KOST"))),0,4) ; aankoopprijs van de werkuren Set $P(NewRec("G"),"\",16)=$J($G(..Cumuls("TijdWerk")),0,1) ; tijd van de werkuren Set $P(NewRec("G"),"\",15)=$J($G(..Cumuls("TijdKost")),0,1) ; tijd voor kostprijs Set $P(NewRec("G"),"\",13)=..%Id() Set $P(NewRec("G"),"\",14)=..Val("Staffel") ; Leveranciers node Set $P(NewRec("J"),"\",6)=..Val("Staffel") ; Min. bestelhoeveelheid Set:(MetPrijs) $P(NewRec("J"),"\",19)=KPrijs ; Aankoopprijs Quit kpcPrijs() Quit $J(..Cumuls("KPrijs"),0,2) kpcCountExpr(CodeGR) ; Convert Child Expression to $LB() en geef het volgnr van de opgeven code New sExpr,tmpLB,i Set sExpr=..MetaStruct.ChildExpr Set tmpLB="" For i=1:1:$L(sExpr,"+") Set tmpLB=tmpLB_$LB($P(sExpr,"+",i)) Quit $LF(tmpLB,CodeGR) kpcCOPY(GenPRNr,FromPRNr,NewRec) ; NewRec via .Local Do FETCHPR^UTILI($S('$G(FromPRNr):GenPRNr,1:FromPRNr),"NewRec") Set $P(NewRec(0),"\",3)=GenPRNr Quit kpcCLEAN(GenPRNr,FromPRNr,NewRec) ; Newrec via .Local Set $P(NewRec(0),"\",6)="" ; Ligging Set $P(NewRec(0),"\",12,14)="\\" ; Beginstock,FysStock Set $P(NewRec(0),"\",16)="" ; Laatste beweging Set $P(NewRec(0),"\",17)="" ; Bestelling Set $P(NewRec(0),"\",20)="" ; Schaduwkorttekst Set $P(NewRec(0),"\",21)="" ; Schaduw sectie Set $P(NewRec(1),"\",9)="" ; Inventaris fysstock Set $P(NewRec(1),"\",20)=$G(IsStock) ; Stock/niet stock Set $P(NewRec(1),"\",21)="" ; Gem Weekverkoop Set $P(NewRec(1),"\",23)="" ; Gewogen gem. weekverkoop Set $P(NewRec(2),"\",3)="" ; Schad PPL ;Set $P(NewRec(2),"\",4)="" ; Schad Korting ;Set $P(NewRec(2),"\",5)="" ; Schad Vork ;Set $P(NewRec(2),"\",6)="" ; Schad Winst ;Set $P(NewRec(2),"\",7)="" ; Schad Cif Set $P(NewRec(2),"\",9)="" ; Reservatie Set $P(NewRec(2),"\",25)=8_$E($P(NewRec(2),"\",25),2,99) ; Identnummer Set $P(NewRec(0),"\",2)="" ; Omschrijving N1 Set $P(NewRec(0),"\",11)="" ; Omschrijving N2 Set $P(NewRec(1),"\",22)="" ; Omschrijving F1 Set $P(NewRec(2),"\",25)="" ; Identnummer Set $P(NewRec(3),"\",21)="" ; Omschrijving F2 Set $P(NewRec("J"),"\",3)="" ; Leveranciersref ;Set $P(NewRec("J"),"\",24)=50 ; DB% Set $P(NewRec("J"),"\",10)=20 ; KSDB% Set $P(NewRec("J"),"\",19)="" ; Aankoopprijs Set $P(NewRec("J"),"\",25)="" ; Lijstprijs Quit kpcSAVE(NewRec) ; NewRec via .Local New IdentNr,I ; toegevoegd door WV Set PRNr=..ProductGetObjectId() If PRNr'?4.7N Do . Set PRNr=$$NEXTID^PRODUKT(1) Set IdentNr=$$IDENTNR^PRODUKT(PRNr,"9") Set $P(NewRec(2),"\",25)=IdentNr For I=0:1:13 Set:$D(NewRec(I)) ^KPR(PRNr,I)=NewRec(I) Set:($D(NewRec("G"))) ^KPR(PRNr,"G")=NewRec("G") ; Generische node Set ^KPR(PRNr,"I")="" Set ^KPR(PRNr,"I1")=NewRec("I") Set ^KPR(PRNr,"J")="" Set ^KPR(PRNr,"J"_$P(NewRec("J"),"\"))=NewRec("J") Do:(..ProductGetObjectId()'=PRNr) ..ProductSetObjectId(PRNr) ;Do RECALC^PRODUKT2(PRNr) ;Do BLDIND^PRODUKT2(PRNr) ;Do ZEND^EWPR(PRNr) Quit // ========================================================================================= // // ========================================================================================= // // ========================================================================================= // KortTekst() ; Params : geen; > return : string New Txt,Dossier Quit:(..MetaStruct.Code="TBX") $$ktxTBX Quit:(..MetaStruct.Code="GRP") $$ktxGRP Quit:(..MetaStruct.Code="TLM") $$ktxTLM Quit:(..MetaStruct.Code="ASM") $$ktxASM Quit "" ktxASM() #define ASMStruct(%type) $CASE(%type, "Z":"R", "G":"N", "R":"P", :"") #define ASMKleurK(%type) $CASE(%type, "Z":"S", "G":"ANTR", "R":"ROT", :"") New Type,LD,ND,NB,Verpak Set Type=..Val("ASM") Set LD=..Val("LD") Set ND=..Val("ND") Set NB=..Val("NB") Set Verpak=..Val("VERPAK") Set Dossier=..Dossier Set Txt="MAT.M" Set $E(Txt,6)=$$$ASMStruct(Type) Set $E(Txt,$S($L(Dossier)>3:8, 1:9))=Dossier ; Set $E(Txt,8,11)=$J(Dossier,4) Set $E(Txt,12)=""_$J(LD,3)_"X"_$J(NB,4,0) Set $E(Txt,22)=$J($$$ASMKleurK(Type),4) Quit Txt ktxTLM() New Design,Lengte,Afwerking Set Design="" Set Lengte=..Val("LP") ; Numeriek Set Afwerking="EV1" Set Dossier=..Dossier Set Txt="ETL.M" Set $E(Txt,$S($L(Dossier)>3:7, 1:8))=Dossier Set $E(Txt,12)="L:"_$J(Lengte,4,0)_" "_$S(..Val("AS")="RB":"RH", 1:"") Set $E(Txt,21)="" Set $E(Txt,22)=$J(Afwerking,4) Quit Txt ktxTBX() New RugHoogte,LadeType,FrontBev,DraagKracht,Pro,DesignCode,Diepte,Breedte,Glijder Set RugHoogte=..Val("RH") ; N,M,C,K,B,D Set LadeType=..Val("LT") ; Numeriek Set FrontBev=..Val("FB") ; Set FrontBev=$S(LadeType="B":"Z",1:FrontBev) Set DraagKracht=..Val("DK") ; 30,50,80,25,20 Set Pro=..Val("PRO") Set DesignCode=$S(..Val("DC")="S":"/",1:..Val("DC")) ; S,F,B,... Set Diepte=..Val("LD") ; Numeriek Set Breedte=..Val("IB")\1 ; Numeriek Set Glijder=$S(DraagKracht=20:8,DraagKracht=30:8,DraagKracht=50:9,DraagKracht=65:6,DraagKracht=80:7,1:"I") ;Set:(DesignCode="B") Glijder="B" Set Dossier=..Dossier Set Txt="TB"_Glijder_RugHoogte_DesignCode_FrontBev_"." Set $E(Txt,$S($L(Dossier)=5:7,1:8))=Dossier Set $E(Txt,12)=Diepte_"x"_Breedte Set:(..Val("VERPAK")'="S") $E(Txt,20)=..Val("VERPAK") Set:(..Val("KLAS")="SP" ) $E(Txt,20)="SP" Set:(..Val("KLAS")="SP2") $E(Txt,20)="S2" Set:(..Val("KLAS")="SY" ) $E(Txt,20)="SI" ; Added by WimV on 16/05/2011 Set:(..Val("KLAS")="SY2") $E(Txt,20)="S2" ; Added by WimV on 08/08/2011 Set $E(Txt,22)=##class(Prod.GAMeta.BT.TBAbstract).KortTekstCodeClass("Prod.GAMeta.BT.TBLadeKleur",..Val("KL")) Set $E(Txt,24)=$E(..Val("KB"),1,2) ;d WL^vhDBG("KortTekst="_Txt) If ..Val("KLAS")="B" Do ; BuroBOX . Set $E(Txt,1,3)="BBL" . Set $E(Txt,4)=$S(..Val("BHM")>0:"H",1:"L") ; Hangmap boring Quit Txt ktxGRP() New Design,Lengte,Afwerking Set Design=..Val("DS") ; ALFA,BETA,DELTA,OMEGA Set Lengte=..Val("LG") ; Numeriek Set Afwerking=..Val("AFW") ; ALU, ... Set Dossier=..Dossier Set Txt=$S($E(Design)="K":"KLR."_$E(Design,2,3),1:"SGR."_$E(Design,1,2)) Set $E(Txt,$S($L(Dossier)>3:7, 1:8))=Dossier Set $E(Txt,12)=$E(Design,1,5)_$J(Lengte,4,0) Set $E(Txt,21)="" Set $E(Txt,22)=$J(Afwerking,4) ; ##class(Prod.GAMeta.BT.TBAbstract).KortTekstCodeClass("Prod.GAMeta.BT.TBLadeKleur",..Val("KL")) Quit Txt LangTekst ;Parameters (Taal,Oms,Optie) ; Oms als .local doorgeven New Txt If (..MetaStruct.Code="TBX") Do ltxTBX Quit If (..MetaStruct.Code="GRP") Do ltxGRP Quit If (..MetaStruct.Code="TLM") Do ltxTLM Quit If (..MetaStruct.Code="ASM") Do ltxASM Quit Quit ltxASM ; Oms via .Local New Type,WD,Afm,Optie,DItem,PRNr,GroepID Set Type=..Val("ASM") Set WD=..Val("WD") Kill Oms Set Oms=1 ; Ophalen PRNr van de mat Set PRNr="" If PRNr'?4.7N Do . Set DItem=..LookUp("IL","PRASM") . Set PRNr=DItem.Eval("PRNr","PRASM",,0) . Set GroepID=DItem.Eval("KenmGrp") If PRNr'?4.7N Do . Set DItem=..LookUp("IL","PRASMSTRK") . Set PRNr=DItem.Eval("PRNr","PRASMSTRK",,0) . Set GroepID=DItem.Eval("KenmGrp") If PRNr'?4.7N Do . Set DItem=..LookUp("IL","PRASMROL") . Set PRNr=DItem.Eval("PRNr","PRASMROL",,0) . Set GroepID=DItem.Eval("KenmGrp") ; Type mat Set Optie="" Set:(PRNr?4.7N) Optie=$LG(##class(Prod.Kenmerk.DataDefinitie).Get("TB",PRNr,"Opties"),1) ; Get AGO type Set Txt=##class(Res.Vertaling).GetVertaling("TB","LT-ASM-Type"_Type_$S($L(Optie):"_"_Optie,1:""),"O",Taal,,1) Do AddLT(Taal,.Oms,.Txt) ; Afmetingen Set Afm=..Val("ND")_" x "_..Val("NB")_"mm" Set Txt=##class(Res.Vertaling).GetVertaling("TB","LT-ASM-NETTOAFM","O",Taal,,1)_" : "_Afm Do AddLT(Taal,.Oms,.Txt,,1) Set Txt=##class(Res.Vertaling).GetVertaling("TB","LT-ASM-LD","O",Taal,,1)_": "_(..Val("LD"))_"mm" If $G(Optie)'["R" Do . If WD="N" Do .. ; Netto breedte: no text . Else Do .. Set Txt=Txt_", "_##class(Res.Vertaling).GetVertaling("TB","LT-ASM-CB","O",Taal,,1)_":"_..Val("CB") .. Set:(WD'="B") Txt=Txt_", "_##class(Res.Vertaling).GetVertaling("TB","LT-ASM-WDkort","O",Taal,,1)_":"_WD Do AddLT(Taal,.Oms,.Txt,,1) Quit ltxTLM ; Oms via .Local New Design,Lengte Kill Oms Set Oms=1 Set Txt=##class(Res.Vertaling).GetVertaling("TB","LT-TLM-TL","O",Taal,,1) Set Txt=Txt_"; "_##class(Res.PI.Abstract).TaalAfhOmsClass("Prod.GAMeta.BT.TLMAfdekScherm",..Val("AS"),Taal) Do AddLT(Taal,.Oms,.Txt) ; Afmeting Set Lengte="L:"_..Val("LP")_"mm" Set Txt=Lengte Do AddLT(Taal,.Oms,.Txt) Set Txt=##class(Res.Vertaling).GetVertaling("TB","LT-TLM-LAMP","O",Taal,,1) For LampLabel="QTY1008","QTY1013","QTY1014","QTY1021","QTY1028","QTY1035" Do . Quit:'..Val(LampLabel) . Set Txt=Txt_..Val(LampLabel)_"x"_+$E(LampLabel,6,7)_"W" . Do AddLT(Taal,.Oms,.Txt) Set Txt=##class(Res.Vertaling).GetVertaling("TB","LT-TLM-ZIJKANT","O",Taal,,1)_" 1:" Set Txt=Txt_##class(Res.PI.Abstract).TaalAfhOmsClass("Prod.GAMeta.BT.TLMUitgang",..Val("UL"),Taal) Do AddLT(Taal,.Oms,.Txt) Set Txt=##class(Res.Vertaling).GetVertaling("TB","LT-TLM-ZIJKANT","O",Taal,,1)_" 2:" Set Txt=Txt_##class(Res.PI.Abstract).TaalAfhOmsClass("Prod.GAMeta.BT.TLMUitgang",..Val("UR"),Taal) ;Set Txt="Snoeruitgang:"_..Val("SN") Do AddLT(Taal,.Oms,.Txt) Quit ltxTBX ; Oms via .Local New DraagKracht,Diepte,Breedte,DC,SifonQty ; toegevoegd door WV Kill Oms Set Oms=1 Set DC=..Val("DC") ;d WLIP^vhDBG(97,"ltxTBX - DC="_DC) Set Txt=##class(Res.PI.Abstract).TaalAfhOmsClass("Prod.GAMeta.BT.LadeCode",..Val("LC"),Taal) Do AddLT(Taal,.Oms,.Txt,.Optie) ; Afmeting Set Diepte=$S(Taal="F":"P",1:"D")_":"_..Val("LD") Set Breedte=$S(Taal="F":"L",Taal="E":"W",1:"B")_":"_..Val("IB") Set Txt=Diepte_"x"_Breedte Do AddLT(Taal,.Oms,.Txt,.Optie) ; Spoelbaklade If ..Val("KLAS")?1(1"SP",1"SP2",1"SY") Do . Set SifonQty=..Val("SYQTY") . Set Txt=##class(Res.Vertaling).GetVertaling("TB","LT-SPOPEN"_$S(SifonQty>1:"_"_SifonQty_"sifon",1:""),"O",Taal,,1)_" "_..Val("SPBR")_"mm" . Do AddLT(Taal,.Oms,.Txt,.Optie) Else If ..Val("KLAS")?1(1"SY2") Do . Set SifonQty=..Val("SYQTY") . Set Txt=##class(Res.Vertaling).GetVertaling("TB","LT-SPOPEN","O",Taal,,1)_" "_..Val("SPBR1")_"mm"_$S(SifonQty=2:" "_..Val("SPBR2")_"mm",1:"") . Do AddLT(Taal,.Oms,.Txt,.Optie) ; Draagkracht 30,50,80,25 als Profiel niet meenemen is true If (..Val("NMCP"))&&(..Val("DK")'?1(1"30",1"50")) Do . Set Txt=..Val("DK")_"kg" . Do AddLT(Taal,.Oms,.Txt,.Optie) ; Bodem kleur If $E(..Val("MATKL"))="K" Do ;Klant . Set Txt=##class(Res.PI.Abstract).TaalAfhOmsClass("Prod.GAMeta.BT.PlaatMat",..Val("MATKL"),Taal) . Do AddLT(Taal,.Oms,.Txt,.Optie) Else Do . Set Txt=##class(Prod.GAMeta.BT.TBBodemKleur).TaalAfhOmsClass("",..Val("KB"),Taal,,,DC) . Do AddLT(Taal,.Oms,.Txt,.Optie) Set:..Val("KLAS")="SP" Txt=##class(Prod.GAMeta.BT.TBSPZijkant).TaalAfhOmsClass("",..Val("SPZK"),Taal,,,DC) Do AddLT(Taal,.Oms,.Txt,.Optie) ; Design Set:$L(..Val("KL")) Txt=##class(Prod.GAMeta.BT.TBLadeKleur).TaalAfhOmsClass("",..Val("KL"),Taal,,,DC) Do AddLT(Taal,.Oms,.Txt,.Optie) Set:..Val("DC")'="S" Txt=##class(Prod.GAMeta.BT.TBDesignCode).TaalAfhOmsClass("",..Val("DC"),Taal,,,DC) Do AddLT(Taal,.Oms,.Txt,.Optie) ; Set Txt=##class(Res.Vertaling).GetVertaling("TB","LT-MONTLADE","O",Taal,,1) Do AddLT(Taal,.Oms,.Txt,.Optie,1) ; Stalen rug Set:..Val("isSR") Txt=##class(Prod.GAMeta.BT.TBStalenRug).TaalAfhOmsClass("",..Val("SR"),Taal,,,DC) Do AddLT(Taal,.Oms,.Txt,.Optie) ;Corpusprofiel + draagkracht If '..Val("NMCP") Do ;corpus profiel meeleveren . Set Txt=##class(Prod.GAMeta.BT.TBGlijderType).TaalAfhOmsClass("",..Val("GT"),Taal,,,DC)_" "_..Val("DK")_"kg" ; draagkracht . Do AddLT(Taal,.Oms,.Txt,.Optie) ; Blumotion Set:((..Val("BM")'="I")||('..Val("NMCP")))&&(..Val("BM")'="Z") Txt=##class(Prod.GAMeta.BT.TBBlumotion).TaalAfhOmsClass("",..Val("BM"),Taal,,,DC) Do AddLT(Taal,.Oms,.Txt,.Optie) ; BoxSide If (..Val("BS")'="ZR") && ((..Val("BS")'?1(1"B"1.E,1"CAP",1"COV"))||('..Val("NMBS"))) && (($E(..Val("BS"),2)'="R")||('..Val("NMRL"))) Do . Set Txt=##class(Prod.GAMeta.BT.TBBoxSide).TaalAfhOmsClass("",..Val("BS"),Taal,,,DC) . Set:(..Val("BS")?1(1"COV",1"BG")) Txt=Txt_" "_##class(Prod.GAMeta.BT.TBVulstukKleur).TaalAfhOmsClass("",..Val("KV"),Taal,,,DC) . Do AddLT(Taal,.Oms,.Txt,.Optie) ; Stabilisator Set:..Val("SB") Txt=##class(Prod.GAMeta.BT.TBStabilisator).TaalAfhOmsClass("",..Val("SB"),Taal,,DC) Do AddLT(Taal,.Oms,.Txt,.Optie) ; Frontbevestiging Set:'..Val("NMFB")&&(..Val("FB")'="Z") Txt=##class(Prod.GAMeta.BT.TBFBevestiging).TaalAfhOmsClass("",..Val("FB"),Taal,,1,DC) Do AddLT(Taal,.Oms,.Txt,.Optie) ; Antislipmat Set Txt=##class(Prod.GAMeta.BT.TBMat).TaalAfhOmsClass("",..Val("ASM"),Taal,,1,DC) Do AddLT(Taal,.Oms,.Txt,.Optie) ; FrontSteun Set Txt=##class(Prod.GAMeta.BT.TBFrontSteun).TaalAfhOmsClass("",..Val("FS"),Taal,,1,DC) Do AddLT(Taal,.Oms,.Txt,.Optie) ; afdekkappen Set:'..Val("NMAK") Txt=##class(Res.Vertaling).GetVertaling("TB","LT-AFDEKKAP","O",Taal,,1) Do AddLT(Taal,.Oms,.Txt,.Optie) ; Opvullijst If '..Val("NMOVL")&&((..Val("OPVLL")=25)||(..Val("OPVLR")=25)) Do . Set Txt=##class(Res.Vertaling).GetVertaling("TB",$S((..Val("OPVLL")=25)&&(..Val("OPVLR")=25):"LT-OPVULLIJSTEN",1:"LT-OPVULLIJST"),"O",Taal,,1) . Do AddLT(Taal,.Oms,.Txt,.Optie) ; Dwarstukjes If ..Val("KLAS")="SP",'..Val("NMSPDL") Do . Set Txt=##class(Res.Vertaling).GetVertaling("TB","LT-TUSSCHOT","O",Taal,,1) . Do AddLT(Taal,.Oms,.Txt,.Optie) ; Dwarsverdelingen Set Txt=##class(Prod.GAMeta.BT.TBDwarsVerdeling).TaalAfhOmsClass("",..Val("DWV"),Taal,,1,DC) Do AddLT(Taal,.Oms,.Txt,.Optie) ; Boring voor bureaulade If ..Val("KLAS")="B",..Val("BHM") Do . Set Txt=##class(Prod.GAMeta.BT.TBHangMap).TaalAfhOmsClass("",..Val("BHM"),Taal,,1,DC) . Do AddLT(Taal,.Oms,.Txt,.Optie) ; Greep Binnenlade If (..Val("LT")="B")&&(..Val("BGRP")'?1(1"X",1"Z",1"H")) Do . Set Txt=##class(Prod.GAMeta.BT.TBBinnenGreep).TaalAfhOmsClass("",..Val("BGRP"),Taal,,1,DC) . Set:(..Val("BGRP")="V") Txt=Txt_" "_##class(Prod.GAMeta.BT.TBVulstukKleur).TaalAfhOmsClass("",..Val("KV"),Taal,,,DC) . Do AddLT(Taal,.Oms,.Txt,.Optie) ; Verlaagde rug Set Txt=##class(Prod.GAMeta.BT.TBRugStukVerlaagd).TaalAfhOmsClass("",..Val("RSTL"),Taal,,1,DC) Do AddLT(Taal,.Oms,.Txt,.Optie) ; Onderdelen Special Set Txt=##class(Prod.GAMeta.BT.TBOndSpecial).TaalAfhOmsClass("",..Val("ODSP"),Taal,,1,DC) Set:($L(Txt)) Txt="*** "_Txt_" ***" Do AddLT(Taal,.Oms,.Txt,.Optie) ; Verpakking If $G(Optie)="R","Z;S"[..Val("VERPAK") Do ; verpakkingskode en lengte van overdoos bijvoegen bij lev.ref. . New DItem,PRNr,Dimensie,KenmObj . Set DItem=..LookUp("IL","PRVPOD") . Set PRNr=DItem.Eval("PRNr") . Quit:PRNr'?4.7N . ;Set Dimensie=##class(Prod.Kenmerk.DataDefinitie).%OpenId(PRNr_"||TB||Opties").Waarden.GetAt(1) . Set KenmObj=##class(Prod.Kenmerk.DataDefinitie).%OpenId(PRNr_"||TB||Opties") . Quit:'$isObject(KenmObj) . Set Dimensie=KenmObj.Waarden.GetAt(1) . Set Txt="omvouwkarton "_Dimensie_" "_DItem.Eval("DimHF")_"mm" . Do AddLT(Taal,.Oms,.Txt,.Optie,1) Else Do . Set Txt=##class(Res.PI.Abstract).TaalAfhOmsClass("Prod.GAMeta.BT.Verpakking",..Val("VERPAK"),Taal) . Do AddLT(Taal,.Oms,.Txt,.Optie,1) Quit ltxGRP ; Oms via .Local New Design,Lengte Kill Oms Set Oms=1 Set Oms(1)="" Set Txt=##class(Res.PI.Abstract).TaalAfhOmsClass("Prod.GAMeta.BT.GRPDesign",..Val("DS"),Taal) Do AddLT(Taal,.Oms,.Txt,.Optie) ; Afmeting ;Set Lengte=$S(Taal="F":"L",Taal="E":"L",1:"L")_":"_..Val("LG") Set Lengte="L:"_..Val("LG") Set Txt=Lengte Do AddLT(Taal,.Oms,.Txt,.Optie) ; Zaaglengte bij leveranciersreferentie If $G(Optie)["R" Do . Set Txt="Zaaglengte:"_..Val("LZ") . Do AddLT(Taal,.Oms,.Txt,.Optie) Quit AddLT(Taal,Oms,Txt,Optie,NewLine) ; Oms en Txt via .Local ; Optie= R (= lev. ref) of leeg New MaxLen,Lengte Quit:Txt="" Set MaxLen=$S(Oms=1:$S($G(Optie)="R":44,1:26),1:44) Set:$G(NewLine) Oms=$I(Oms) ;Write MaxLen," ",$L(Txt)," ",Txt,! If ($L($G(Oms(Oms)))+$L(Txt)+$S($L($G(Oms(Oms))):1,1:0))>MaxLen Do ; Kan er niet meer bij . If $L(Txt)>MaxLen Do ; splitsen van txt over meerdere lijnen .. Set Lengte=$L($G(Oms(Oms))) .. If Lengte*2>MaxLen Set Oms=Oms+1 ; Minder dan de helft van maxlen nog vrij daarom Nieuw veld anders append .. Set Lengte=$L($G(Oms(Oms))) .. Set Txt1=$E(Txt,1,MaxLen-Lengte) .. If Txt1'[" ",$L($G(Oms(Oms))) Do ; Onvoldoende vrije ruimte om te splitsen op woorden ... Set Oms=$I(Oms) ... Set Lengte=0 ... Set Txt1=$E(Txt,1,MaxLen) .. If $E(Txt,$L(Txt1)+1)=" " Set Txt1=Txt1_" " ; woord delimiter was er juist afgevallen .. Set Txt1=$P(Txt1," ",1,$L(Txt1," ")-1) .. ;Write "woord",Txt1,! .. Set:$L($G(Oms(Oms))) Oms(Oms)=$G(Oms(Oms))_";" .. Set Oms(Oms)=$G(Oms(Oms))_Txt1 .. Set Txt=$E(Txt,$L(Txt1)+1,999) .. Set:$E(Txt)=" " $E(Txt)="" .. ;Set:$E(Oms(Oms),$L(Oms(Oms)))=" " $E(Oms(Oms),$L(Oms(Oms)))="" .. Set Oms=$I(Oms) .. Set Oms(Oms)=Txt . Else Do ; txt kan volledig in nieuw veld .. Set Oms=$I(Oms) .. Set Oms(Oms)=Txt Else Do ; append . Set Oms(Oms)=$G(Oms(Oms))_$S($L($G(Oms(Oms))):";",1:"")_Txt Set Txt="" Quit