#include %VHMacro PRValidatePR() ; Parameters: DItem,ParamCheck="CheckPR" New okPR If ..Parameters.IsDefined(ParamCheck) Do . Set okPR=(''DItem.Eval(ParamCheck)) Else Do . ;Set okPR=(DItem.Get("PRNr")?2.6N) Quit . New PRNr . Set PRNr=DItem.Get("PRNr") . Set okPR=(PRNr?2.6N)&&(##class(Prod.Product).%ExistsId(PRNr)) Quit:('okPR) okPR ; Else If ..Code="PR1DIM" Do ; Check DimHF < PRLen . Set okPR=(DItem.Get("DimHF")'>DItem.Get("PRLen")) Quit okPR GetKenmVal() ; Parameters: KenmNaam,PRNr,KenmGrp ; Storage: ^Prod.Ken.DataDefinitieD(PRNr, "Groep||Kenm")=$LB($LB(KMWaarden)) Quit:($G(KenmNaam)="") "" New DItem Set DItem=Self Set:('$D(PRNr)) PRNr=DItem.Get("PRNr") Set:('$D(KenmGrp)) KenmGrp=DItem.Get("KenmGrp") Quit:(PRNr="") "" ; via Global value: (is afhankelijk van de Storage van het object) Quit $LG($LG($G(^Prod.Ken.DataDefinitieD(PRNr, KenmGrp_"||"_KenmNaam)),1),1) ; Geeft de eerste waarde (indien Multiple Values, dan mogelijk probleem!) // OF : ; via Object property: New DataDef,KMVal Set DataDef=##class(Prod.Kenmerk.DataDefinitie).%OpenId(PRNr_"||"_KenmGrp_"||"_KenmNaam) Quit:('DataDef) "" Set KMVal=DataDef.Waarden.GetNext("") ; Geeft de eerste waarde (indien Multiple Values, dan mogelijk probleem!) Do:(DataDef) DataDef.%Close() Quit KMVal PRGetPRLen() ; Parameters: PRNr,DItem Set:('$D(DItem)) DItem=Self Set:('$D(PRNr)) PRNr=DItem.Get("PRNr") Quit:('$IsValidNum(PRNr)) "" Quit ##class(Prod.Product).GetPropViaNr(PRNr,"HFNettoLengte") PRGetCifPPL() ; Parameters: PRNr,DItem Set:('$D(DItem)) DItem=Self Set:('$D(PRNr)) PRNr=DItem.Get("PRNr") Quit:('$IsValidNum(PRNr)) "" Quit ##class(Prod.Product).GetPropViaNr(PRNr,"CifPPL") ; +##class(Prod.Product).GetPropViaNr(PRNr,"CorFaktor") ; in commentaar gezet op 22/10/04 door WimV. PRGetGewicht() ; Parameters: Type,PRNr,DItem ;Waarde Type = {N;T;B} ; Netto;Tarra;Bruto Set:('$D(DItem)) DItem=Self Set:('$D(PRNr)) PRNr=DItem.Get("PRNr") Quit:('$IsValidNum(PRNr)) "" Quit ##class(Prod.Product).GetPropViaNr(PRNr,$P("NettoGewicht;TarraGewicht;BrutoGewicht",";",$F("NTB",Type)-1)) PRGetKortTekst() ; Parameters: PRNr,DItem Set:('$D(DItem)) DItem=Self Set:('$D(PRNr)) PRNr=DItem.Get("PRNr") Quit:(PRNr="") "" ;Quit ##class(Prod.Product).GetPropViaNr(PRNr,"KortTekst") New list,i For i=1:1:$L(PRNr,"\") Do ; multiple PRNr . Set $P(list,"\",i)=##class(Prod.Product).GetPropViaNr($P(PRNr,"\",i),"KortTekst") ; _" ["_$P(PRNr,"\",i)_"]" Quit list PRGetLangTekst() ; Parameters: PRNr,DItem,Verkort Set:('$D(DItem)) DItem=Self Set:('$D(PRNr)) PRNr=DItem.Get("PRNr") Quit:(PRNr="") "" New Prod,txt Set Prod=##class(Prod.Product).%OpenId(PRNr) Quit:('Prod) "" Set txt=Prod.OmschrijvingN1_" "_Prod.OmschrijvingN2 Do Prod.%Close() Do:(Verkort) gltOmsAfkort(.txt) Quit txt gltOmsAfkort(txt) #define TReplace(%f,%r) Set txt=$$REPLACE^vhRtn1(txt,%f,%r) #define TReplaceIF(%c,%f,%r) Set:(%c) txt=$$REPLACE^vhRtn1(txt,%f,%r) $$$TReplace(" "," ") ; DUBBELE Spaties verwijderen $$$TReplace("rugwandhouder voor houten rugwand","houder vr houten rug") $$$TReplace("Verhoogde houder","Hoge houder") $$$TReplace("boxside","Boxside") $$$TReplace("Stabilisator voor dubbelw. Boxside","Stabilisator") $$$TReplace("bij gebruik dubbele","bij dubbele") $$$TReplace("Verstelbare reling","reling") $$$TReplace("Intraboxkap","Afdekkap") $$$TReplace("Intra-tandembox","I/T-box") $$$TReplace("Intra/Tandembox","I/T-box") $$$TReplace("Tandem/Intrabox","T/I-box") $$$TReplace("Tandembox","T-box") $$$TReplace(" tandembox"," T-box") $$$TReplace("Intrabox","I-box") $$$TReplace(" intrabox"," I-box") $$$TReplace("Blumotion","BM") $$$TReplace(" voor "," vr ") $$$TReplace(" links"," LI") $$$TReplace(" rechts"," RE") $$$TReplace("+rechts","+RE") $$$TReplace("Verpakking","") $$$TReplace("symmetrisch","symm.") $$$TReplace("bedrukt","") $$$TReplace("PLUS","") Quit PRGetOmsViaKenm() ; Parameters: lbKMArgs,Delim,DItem,KenmGrp ; De variabele "MetaArray" niet declareren !!! Set:('$D(DItem)) DItem=Self Set:('$D(KenmGrp)) KenmGrp=DItem.Get("KenmGrp") Quit:($LL($G(lbKMArgs))=0) "" ; $LL() geeft een ERROR als lbKMArgs geen ListBuild is ! New arKenmEval,KenmLijst,txt,i,Kenm,KMVal,VTL Set KenmLijst=DItem.Eval("Kenm") Do gvkLBKenmToArray Set txt="" For i=1:1:$LL(lbKMArgs) Do . Set VTL=$$gvkVertaalKenm($LI(lbKMArgs,i)) . Quit:(VTL="") . Set txt=txt_$S(i>1:Delim,1:"")_VTL Quit txt gvkVertaalKenm(lbKMArg) #define MarkInvers(%v) ""_%v_"" #define DItemGetKenmVal DItem.MetaItem.GetKenmVal(Kenm,DItem.Get("PRNr"),DItem.Get("KenmGrp")) Set Kenm=$LG(lbKMArg,1) Quit:(Kenm="") $LG(lbKMArg,2) ; Else : Set KMVal=$S($LD(lbKMArg,2):$LI(lbKMArg,2), '$D(arKenmEval(Kenm)):$$$DItemGetKenmVal, 1:$G(arKenmEval(Kenm))) New MDef,RetVTL If $D(MetaArray(KenmGrp_"||"_Kenm)) Do . Set MDef=MetaArray(KenmGrp_"||"_Kenm) Else Do . Set MDef=##class(Prod.Kenmerk.MetaDefinitie).%OpenId(KenmGrp_"||"_Kenm) . Set MetaArray(KenmGrp_"||"_Kenm)=MDef Quit:('MDef) KMVal_" [?MetaDef:"_Kenm_"]" ; Else : Set RetVTL=MDef.VertaalItem(KMVal,.Taal,"K",1) Set:($G(%arInvers("DItem","FabrOms",Kenm))=1) RetVTL=$$$MarkInvers(RetVTL) ;Do MDef.%Close() Quit RetVTL gvkLBKenmToArray ; KenmLijst is een $LB() ==> omvormen tot een array For i=1:1:$LL(KenmLijst) Do . Set arKenmEval($LI($LI(KenmLijst,i),1))=$LI($LI(KenmLijst,i),2) Quit ; w $$PRGetProductViaKenm^Prod.GAMeta.Item.tmpDev ; (KenmGrp,Kenm,DItem) PRGetProductViaKenm() ; Parameters: KenmGrp,Kenm,DItem #define CompTypeDFL "E" #define KenmCombine "$COMB$" ;Quit "" ;Quit 87944 Set:('$D(DItem)) DItem=Self Set:('$D(KenmGrp)) KenmGrp=DItem.Get("KenmGrp") Set:('$D(Kenm)) Kenm=DItem.Get("Kenm") New ArPR,ArKenmAll,ArKenm,i,FirstPR,CompType,lbKenmCombine For i=2:1:$LL(Kenm) Do ; Beginnen bij tweede list-item, want eerste Kenm wordt gebruikt als startwaarde bij het opbouwen van SPAlle() array . Set CompType=$LG($LI(Kenm,i),3,$$$CompTypeDFL) . Set:(CompType="") CompType=$$$CompTypeDFL . Set ArKenmAll(CompType,$LI($LI(Kenm,i),1))=$LI($LI(Kenm,i),2) If $D(ArKenmAll("E",$$$KenmCombine)) Do . Merge ArKenmAll("KN1",$$$KenmCombine)=ArKenmAll("E",$$$KenmCombine) . Kill ArKenmAll("E",$$$KenmCombine) ; Lijst met PRNr's voorbereiden (?) Merge:($D(ArAllePR)) ArPr=ArAllePR(KenmGrp) ; Lijst beperken via Exacte match: Merge ArKenm=ArKenmAll($$$CompTypeDFL) Do gpnPRLijstViaKenmerk(KenmGrp,"ArPR",.ArKenm,0 ,$LG($LG(Kenm,1),1),$LG($LG(Kenm,1),2)) Kill ArKenm ; Lijst beperken via multiple: Merge ArKenm=ArKenmAll Kill ArKenm($$$CompTypeDFL) ; alles behalve Exaxte match Do:($D(ArKenm)) gpnPRLijstViaKenmerkMulti(KenmGrp,"ArPR",.ArKenm) Kill ArKenm ;d DItem.Product.TTrace($$ArrayToText^vhLib("ArKenm")) ;d DItem.Product.TTrace("VOOR:"_$$ArrayToText^vhLib("ArPR")) Do:($L($O(ArPR($O(ArPR("")))))) gnpBeperkViaActief ; meer dan één product gevonden Set FirstPR=$O(ArPR("")) Quit:(FirstPR="") "" Quit $S($O(ArPR(FirstPR))="":FirstPR, 1:"(MP)"_$$gpnMultiPRNr) gpnMultiPRNr() New pr,list Set (pr,list)="" For Set pr=$O(ArPR(pr)) Quit:(pr="") Set list=list_"\"_pr Set:($E(list,1)="\") $E(list,1)="" Quit list gnpBeperkViaActief ; Via het kenmerk "Actief" het juiste product zoeken New ArPRfull,ArKenm2 Merge ArPRfull=ArPR ;Set ArKenm2("Actief")=DItem.Product.KlantGetObjectId() Set ArKenm2("Actief")=$S($D(tmpKLNr):tmpKLNr, 1:DItem.Product.KlantGetObjectId()) Do gpnPRLijstViaKenmerk(KenmGrp,"ArPR",.ArKenm2,0) ;d DItem.Product.TTrace("NA klant:"_$$ArrayToText^vhLib("ArPR")) If '($$$aHasSubNodes(ArPR)) Do . Merge ArPR=ArPRfull . Set ArKenm2("Actief")="A" . Do gpnPRLijstViaKenmerk(KenmGrp,"ArPR",.ArKenm2,0) . ;d DItem.Product.TTrace("NA ALLE:"_$$ArrayToText^vhLib("ArPR")) Quit gpnPRLijstViaKenmerk(GroepID,Ref,KenmerkArray,IncludeUndefs,StartKenm,StartWaarde) New Kenm,i,objKenm ; Array opbouwen van alle producten Do:('$D(@Ref)) ##class(Prod.Kenmerk.DataIndex).SPAlle(GroepID,Ref,$G(StartKenm),$G(StartWaarde)) ; Array beperken voor ieder kenmerk van KenmerkArray Set Kenm="" For Set Kenm=$O(KenmerkArray(Kenm)) Quit:(Kenm="") Do . Set objKenm=##class(Prod.Kenmerk.MetaDefinitie).%OpenId(GroepID_"||"_Kenm) . ; - Beperking op waarde van de subnodes . Set i="" . For Set i=$O(KenmerkArray(Kenm,i)) Quit:(i="") Do gpnBeperk(KenmerkArray(Kenm,i)) . ; - Beperking op waarde van node (Kenm) . If ($$$aHasData(KenmerkArray(Kenm))) Do gpnBeperk(KenmerkArray(Kenm)) . Do:(objKenm) objKenm.%Close() Quit gpnBeperk(KWaarde) Do ##class(Prod.Kenmerk.DataIndex).SPBeperkExcl(GroepID,Kenm,KWaarde,Ref) Quit gpnPRLijstViaKenmerkMulti(GroepID,Ref,KenmerkArray) ; Loop through different types of MultiSelect/Beperk Quit:('$D(@Ref)) New Kenm,i,objKenm,CompType,tmpAr Set (CompType,Kenm)="" For Set CompType=$O(KenmerkArray(CompType)) Quit:(CompType="") Do . For Set Kenm=$O(KenmerkArray(CompType,Kenm)) Quit:(Kenm="") Do .. If (Kenm=$$$KenmCombine) Do Quit ... Set lbKenmCombine=$LB(Kenm,KenmerkArray(CompType,Kenm),CompType) ; $LI(Kenm,i) .. ; Else .. Set objKenm=##class(Prod.Kenmerk.MetaDefinitie).%OpenId(GroepID_"||"_Kenm) .. If ($$$aHasData(KenmerkArray(CompType,Kenm))) Do gpnBeperkMulti(KenmerkArray(CompType,Kenm)) .. Do:(objKenm) objKenm.%Close() Do:($L($G(lbKenmCombine))) gpnBeperkCombine Quit gpnBeperkCombine Do ##class(Prod.Kenmerk.DataIndex).SPBeperkMulti(.GroepID,$LI(lbKenmCombine,1),$LI(lbKenmCombine,2),.Ref,$LI(lbKenmCombine,3)) ;Do xxSPBeperkMulti(.GroepID,$LI(lbKenmCombine,1),$LI(lbKenmCombine,2),.Ref,$LI(lbKenmCombine,3)) Quit gpnBeperkMulti(KWaarde) Do ##class(Prod.Kenmerk.DataIndex).SPBeperkMulti(.GroepID,.Kenm,KWaarde,.Ref,.CompType) ;Do xxSPBeperkMulti(.GroepID,.Kenm,KWaarde,.Ref,.CompType) Quit ;Oproepen via: Do ##class(Prod.Kenmerk.DataIndex).SPBeperkMulti(Groep,Kenmerk,WaardeInput,Ref,CompareType) xxSPBeperkMulti(Groep,Kenmerk,WaardeInput,Ref,CompareType) xSPBeperkMulti Quit:($G(Kenmerk)="") If $G(WaardeInput)="" Kill @Ref Quit New PRNr,KenmID,indexID,lbWaarden,i,blnCrit Set KenmID="||"_Groep_"||"_Kenmerk If Kenmerk=$$$KenmCombine Do . Do bpmBeperkViaKenmCombine Else Do . Set PRNr="" . For Set PRNr=$O(@Ref@(PRNr)) Quit:(PRNr="") Kill:('$$bpmMatchCriteria) @Ref@(PRNr) Quit bpmBeperkViaKenmCombine New FCombi,j,iKM,lbKenm,arWdn,arFC,arFCX,lbCVal,Kenm,eval,tmpAr,m,k Do . Set FCombi=WaardeInput . Set lbKenm=$$bpmCombiGetKenm . Set FCombi=$$bpmTransformFCombi . Kill arFCX . Set PRNr="" . For Set PRNr=$O(@Ref@(PRNr)) Quit:(PRNr="") Do .. Do bpmCalcCombiValues . ;w $$$ArrayTT("arFCX"),! . Set LowestVal=$O(arFCX("")) . Quit:(LowestVal="") . Set PRNr="" . For Set PRNr=$O(@Ref@(PRNr)) Quit:(PRNr="") Kill:('$D(arFCX(LowestVal,PRNr))) @Ref@(PRNr) Quit bpmTransformFCombi() For j=1:1:$LL(lbKenm) Do . Set KenmID(j)="||"_Groep_"||"_$LG(lbKenm,j) . Set FCombi=$$$Replace(FCombi,"{"_$LG(lbKenm,j)_"}","($LI(lbCVal,"_j_"))") Set FCombi="Set eval="_FCombi Quit FCombi bpmCombiGetKenm() Quit:($F(FCombi,"{")=0) "" New tmpLB,p,q,km Set tmpLB="" Set (p,q)=0 For Set p=$F(FCombi,"{",p) Quit:(p=0) Do . Set q=q+1 . Set km=$P($P(FCombi,"{",q+1),"}") . Set:($L($$$Trim(km))&&('$LF(tmpLB,km))) tmpLB=tmpLB_$LB(km) Quit tmpLB bpmCalcCombiValuesX(FCombi,PRNr) ; d bpmCalcCombiValuesX^Prod.GAMeta.Item.tmpDev(fc,PRNr) Do bpmCalcCombiValues Quit bpmCalcCombiValues ; apply FCombi-function to all values from lbWaarden Kill arWdn,arFC Set arFC(1)="" For j=1:1:$LL(lbKenm) Do . Set arWdn(j)=$$bpmGetKemnWaarden(PRNr_KenmID(j)) ;w "km:"_j_" "_$LG(lbKenm,j)_" --> Wdn="_$$$LCVT(arWdn(j)),! . Kill tmpAr . Merge:($LL(arWdn(j))>1) tmpAr=arFC . ; In de eerste reeks uitbreiden met j-de kenmerk waarden . Set k="" . For Set k=$O(arFC(k)) Quit:(k="") Set $LI(arFC(k),j)=$LG(arWdn(j),1) . If $LL(arWdn(j))>1 Do .. For m=2:1:$LL(arWdn(j)) Do ... Set k="" ... For Set k=$O(tmpAr(k)) Quit:(k="") Set arFC($O(arFC(""),-1)+1)=tmpAr(k)_$LB($LG(arWdn(j),m)) ; Set $LI(arFC(k),j)=$LG(arWdn(j),m) ; arFC(j) : elke node bevat een $LB(Kenm1_Waarde, Kenm2_Waarde, ...) Quit:(arFC(1)="") ; Geen kenmerk/waarden aanwezig! Set j="" For Set j=$O(arFC(j)) Quit:(j="") Do . Set lbCVal=$G(arFC(j)) . Set eval="" . Xecute FCombi . Set:($L(eval)) arFCX(eval,PRNr)="" . ;Set:($L(eval)) arFCX(eval,PRNr,"TST")=arFC(j) Quit bpmCombineGetKenmX(FCombi) ; s lb=$$bpmCombineGetKenmX^Prod.GAMeta.Item.tmpDev(fc) w $$LCVT^vhLib(lb) // !!! Test routine to call directly from Terminal !!! // this is not used by the normal flow of the algoritme! Set lbKenm=$$bpmCombiGetKenm Set FCombi=$$bpmTransformFCombi Quit lbKenm bpmGetKemnWaarden(iID) Quit:(iID="") "" New lbWaarden &SQL(SELECT Waarden INTO :lbWaarden FROM Prod_Kenmerk.DataDefinitie WHERE ID = :iID) Quit $G(lbWaarden) bpmMatchCriteria() Set lbWaarden=$$bpmGetKemnWaarden(PRNr_KenmID) ; --> iID = 10560||TB||DraagKracht Quit:(lbWaarden="") 0 ; Quit:(...) IncludeUndefs Set blnCrit=0 Do @("bpmMatchCriteria"_CompareType) Quit blnCrit Quit ; 0 / 1 bpmMatchCriteriaGN ; Groter dan (of gelijk aan) --> Numeriek If $LF(lbWaarden,WaardeInput)>0 Quit 1 For i=1:1:$LL(lbWaarden) Set:($LG(lbWaarden,i)>WaardeInput) blnCrit=1 Quit bpmMatchCriteriaKN ; Kleiner dan (of gelijk aan) --> Numeriek If $LF(lbWaarden,WaardeInput)>0 Quit 1 For i=1:1:$LL(lbWaarden) Set:($LG(lbWaarden,i)0) blnCrit=1 Quit bpmMatchCriteriaE ; Exacte match For i=1:1:$LL(lbWaarden) Set:($LG(lbWaarden,i)=WaardeInput) blnCrit=1 Quit /* // Copy these lines into the Caché Terminal to test the "GetProductViaKenm()" method. s ClientIP="192.168.1.97" s KenmGrp="TB" Set Self="" Set tmpKLNr="" Set Kenm=$LB($LB("BasisType","LA"),$LB("tB",1),$LB("LiRe","LI"),$LB("Design","S"),$LB("Verpakking","I"),$LB("LadeDiepte",500),$LB("Kleur","MG"),$LB("DraagKracht",50),$LB("ZijwandHoogte","M")) For i=1:1:$LL(Kenm) Set arKM($LI($LI(Kenm,i),1))=$LI($LI(Kenm,i),2) zw arKM m arKM2=arKM s (Kenm,KM)="" f s KM=$O(arKM(KM)) q:KM="" s Kenm=Kenm_$LB($LB(KM,arKM(KM))) w $$LCVT^vhLib(Kenm) Set MItem=##class(Prod.GAMeta.ItemPR).%New() s PRNrs=MItem.GetProductViaKenm(KenmGrp,Kenm) w PRNrs s PRNr=$RE($P($RE($P(PRNrs,"\",1)),")PM(",1)) s pl=$P(PRNrs,"(MP)",2) w:($L(PRNr)) $$ArrayToText^vhLib($Na(^Prod.Ken.DataDefinitieD(PRNr))) s pKenm="TB||Kleur" s $LI(Kenm,4,4)="" s $LI(Kenm,3,3)="" s PRNrs=MItem.GetProductViaKenm(KenmGrp,Kenm) w PRNrs s PRNr=$RE($P($RE($P(PRNrs,"\",1)),")PM(",1)) s pl=$P(PRNrs,"(MP)",2) f i=1:1:$L(pl,"\") w:($L($G(pKenm))) $$ArrayToText^vhLib($Na(^Prod.Ken.DataDefinitieD($P(pl,"\",i),pKenm))),! r fc2 ($CASE({Kleur}, "MG":1, "WI":2,"IN":3, :5)*10000)+{DraagKracht} s CombCrit=$LB("$COMB$", fc2) s Kenm=Kenm_$LB(CombCrit) s PRNrs=MItem.GetProductViaKenm(KenmGrp,Kenm) w PRNrs s PRNr=$RE($P($RE($P(PRNrs,"\",1)),")PM(",1)) s pl=$P(PRNrs,"(MP)",2) s $LI(Kenm,7,7)=$LB($LI(Kenm,7),$LB("DraagKracht",28,"GN")) */ /* // Copy these lines into the Caché Terminal to test the "xxSPBeperkMulti()" method with $$$KenmCombine. s Groep="TB" r fc2 ($CASE({Kleur}, "MG":1, "WI":2,"Ix":3, :4)*10000)+{LadeDiepte} s fc=fc2 s lb=$$bpmCombineGetKenmX^Prod.GAMeta.Item.tmpDev(.fc) w $$LCVT^vhLib(lb) k arFCX d bpmCalcCombiValuesX^Prod.GAMeta.Item.tmpDev(fc,30786) zw arFCX */ ; class: Prod.GAMeta.EM.KostTijd CopyObject() ; Parameters: CopyMode #define InList(%v) $LF(lbCopyPropt,%v)>0 New NewKost,lbCopyPropt Do cpoGetProptList Set NewKost=##class(Prod.GAMeta.EM.KostTijd).%New() Set:($$$InList("A")) NewKost.AParam=..AParam Set:($$$InList("B")) NewKost.BParam=..BParam Do:($$$InList("KP")) NewKost.KostPlaatsSetObjectId(..KostPlaatsGetObjectId()) ;Set:($$$InList("KT")) NewKost.KostType=..KostType Set:($$$InList("Min")) NewKost.Min=..Min Set:($$$InList("M")) NewKost.Multiplicant=..Multiplicant Set:($$$InList("O")) NewKost.Omschrijving=..Omschrijving Set:($$$InList("R")) NewKost.Reductie=..Reductie Set:($$$InList("V")) NewKost.VolgNr=..VolgNr Quit NewKost cpoGetProptList ; CopyProptList bevat alle properties (per propt. één Char.), die moeten gekopieerd worden: ; volledige lijst is: "A;B:KP;KT;Mi;Mu;O;R;V" New CopyProptList,i If CopyMode="FullCopy" Do ; Copy alle properties . Set CopyProptList="A;B:KP;KT;Min;M;O;R;V" Else If CopyMode="Empty" Do ; Geen properties invullen . Set CopyProptList="" Else Do ; CopyMode is onbekend. . Set CopyProptList="" Set lbCopyPropt="" For i=1:1:$L(CopyProptList,";") Set lbCopyPropt=lbCopyPropt_$LB($P(CopyProptList,";",i)) Quit