0 %RegisteredObject 0 BL.Prod.VoorraadTelling Soort scherm: Overzicht, Productdetail, Multiproduct %String lijst op sortkey %String 1 lijst op volgnr %String 1 lijst op volgnr: backup %String 1 lijst definitie %String 1 %Integer 1 $lb(PRNr,ProductNaam,VoorraadType,UitStock,ReservatieWerkvloer,StockWerkvloer,Tel,TelMin1,Hertelling,Terugname,aantalMP,KortTekst) 1 2 3 4 5 6 7 8 9 10 11 12 VoorraadTelling.txt 1 %RegisteredObject Toont de historiek van de tellingen. Deze Method is de opstartmethod van dit programma. Do ##class(CHUI.Prod.VoorraadTelling).StockLijst() 1 Scrollen in de lijst op het scherm Dat kan een productlijst, een detaillijst of een multiproductlijst zijn Past de tellers aan in het hoofdscherm VeldNaam:%String,VeldWaarde:%String,Aantal:%Numeric Controleert de hertelstatus als het scherm productdetail wordt gesloten 1 Product=:PRNr and Tellingen_TellingNr=0) . If TotaalTelling'=Stock Do ..mnToggleHertelling("I") Else If StatHertel="A" Do ..mnToggleHertelling("") ;als je iets invult dan wordt de status "aangevraagd" gewist ]]> opslaan van instellingen zodanig dat terug kan gegaan worden naar het bovenliggende programma RPLPROD herstellen van de instellingen 1 Write en Update van lijst SelLijn:%Numeric Invullen van de titel van een scherm SubTitel 1 Toont de scrolllijst met het overzicht van de voorraadtelling SelLijnOverzicht Bepaalt de tekst die overeenkomt met de verschillende beperkingen 1 Initialisatie van de lijst van de voorraadtelling 1 Lijst opbouwen om op het scherm te tonen: voorraadtelling 1 Product=:PRNr)) . . If AantalInSelZone=0&'$LF(oProd.Zones,SelZone) Set OK=0 . Set BasisType = $LG(##class(Prod.Kenmerk.DataDefinitie).Get("TB",PRNr,"BasisType")) . If vwBasistype'="" Quit:BasisType'=vwBasistype . ;Multiproduct instellen . If vwMP="MP" Quit:'+aantalMP . If vwMP="Z" Quit:+aantalMP . ;Voorraad instellen . if vwVoorraad="M" Quit:'+StockWerkvloer . if vwVoorraad="Z" Quit:+StockWerkvloer . Set ReservatieBefore=rs.Data("ReservatieBefore") . ;Hertelling instellen . If vwHertel="A" Quit:Hertelling'="A" . If vwHertel="I" Quit:Hertelling'="I" . If vwHertel="MH" Quit:Hertelling="" . If vwHertel="ZH" Quit:Hertelling'="" . ;Terugname instellen . If vwTerugname="M" Quit:Terugname="" . If vwTerugname="Z" Quit:Terugname'="" . ;Voorraadtype instellen . Set VoorraadType=..VoorraadType(PRNr,aantalMP) . If vwVoorraadtype="H" Quit:VoorraadType'="H" . If vwVoorraadtype="V" Quit:VoorraadType'="V" . If vwVoorraadtype="Z" Quit:VoorraadType'="" . ; selectie op tellingen . ; tellingen ophalen . . If vwGeteld="NG" Quit:AantalTellingen>0 . If vwGeteld="G" Quit:AantalTellingen'>0 . If +AantalTellingen Do . . Do ..OverzichtTellingen(PRNr,.Tel,.TelMin1) . Else Set (Tel,TelMin1)="" Kill Tel("TZ") . ;w PRNr," ",$G(Tel("TZ")),! r test . if vwToegevoegdeZone="T" Quit:'$D(Tel("TZ")) . If vwVerschil="M" Quit:(+StockWerkvloer=+Tel)!(+StockWerkvloer=+TelMin1&'+Tel) . if vwVerschil="Z" Quit:(+StockWerkvloer'=+Tel)!(+StockWerkvloer'=+TelMin1&'+Tel) . ;Selectie op hertelnummer . Set HertelNummers=oProd.HertelNummers . If +..blVoorraadTelling.HertelNr Quit:'$LF(HertelNummers,..blVoorraadTelling.HertelNr) . If vwHertelNr'="" Quit:'$LF(HertelNummers,vwHertelNr) . ;tellers instellen na toepassing van selectie . If Hertelling="I" Set Teller("HertelBeperk")=Teller("HertelBeperk")+1 . If +Terugname Set Teller("TerugBeperk")=Teller("TerugBeperk")+1 . Set ..Cache(..blVoorraadTelling.SortKey(PRNr)_"|"_ID)=$lb(PRNr,ProductNaam,VoorraadType,UitStock,ReservatieWerkvloer,StockWerkvloer,Tel,TelMin1,Hertelling,Terugname,aantalMP,KortTekst) ]]> Berekent het voorraadType PRNr:%Numeric,aantalMP:%Integer 1 %String Maakt een samenvatting van de tellingen 1 1 Do . . . Set Tel=Tel_"+" . . Else If $Piece(xTel,"\",2)>1 Do . . . Set Tel=Tel_"*" If ProductMaxTel="" Do . Set ProductMaxTelMin1="" Else Do . Set ProductMaxTelMin1=$O(^HULP(..%J,"Telling",ProductMaxTel),-1) If ProductMaxTelMin1="" Do . Set TelMin1="" Else Do . Set xTelMin1=$G(^HULP(..%J,"Telling",ProductMaxTelMin1)) . Set TelMin1=$P(xTelMin1,"\") . Set TelMin1=$S('+TelMin1:TelMin1,1:$$FN^vhRtn2(TelMin1,5,0,"+N")) ; formaat instellen van vorig telnummer . If TelMin1'="#####" Do . . If $Piece(xTelMin1,"\",3)>1 Do . . . Set TelMin1=TelMin1_"+" . . Else If $Piece(xTelMin1,"\",2)>1 Do . . . Set TelMin1=TelMin1_"*" ]]> Zoekt de stock van werkvloerstock en de werkvloerreservatie 1 Do ;stock ophalen van een gewoon product . Set xStock=$G(^PRSTOCK("D",PRNr)) . Set Stock=$Piece(xStock,"\",5) . Set Reservatie=$Piece(xStock,"\",6) Else Do ;stock ophalen van een multiproduct . Set mpID="",Stock=0,Reservatie=0 . For Do oProd.MultipleProducts.GetNext(.mpID) Quit:mpID="" Do ;alle subproducten aflopen . . Set PR1=oProd.MultipleProducts.GetAt(mpID).Product.ProductNr . . Quit:PR1'?4.7N . . Set xStock=$G(^PRSTOCK("D",PR1)) . . Set Stock=Stock+$Piece(xStock,"\",5) . . Set Reservatie=Reservatie+$Piece(xStock,"\",6) ]]> Record selecteren met een bepaalde ProductNr ProductNr:%Numeric 1 %Numeric ************************************ * Alles ivm detail van een product * ************************************ Berekent de laatste bewegingen van een artikel 1 1 Do ;als aantal=0 dan is het een gewoon product . Set (LaatstePlus,LaatsteMin,PlusGevonden,MinGevonden)=0 . Set VNR="" . For Set VNR=$O(^PRHIST(PRNr,VNR),-1) Quit:VNR=""!(PlusGevonden&MinGevonden) Do ;aflopen van de historiek . . Set xPRHIST=^PRHIST(PRNr,VNR) . . Set Datum=+$Piece(xPRHIST,"\"),Aantal=$Piece(xPRHIST,"\",2),Type=$Piece(xPRHIST,"\",4) . . Quit:Type'="H"&(Type'="T") . . Quit:(Aantal>0)&(Datum0 Do . . . Set LaatstePlus=Datum,PlusGevonden=1 . . Else If Aantal<0 Do . . . Set LaatsteMin=Datum,MinGevonden=1 Else Do ;als het aantal subproducten groter is dan 1, dan is het een multiproduct . Set rsMP=##class(%ResultSet).%New(..%ClassName(1)_":qMPLijst") . do rsMP.Execute(PRNr) ;aflopen van de subproducten . Set (LaatstePlus,LaatsteMin)=0 . For Quit:'rsMP.Next() Do . . Set PR1=rsMP.Data("element_key") . . Quit:'$D(^KPR(PR1)) . . Set VNR="",(PlusGevonden,MinGevonden)=0 ;aflopen van de historiek . . For Set VNR=$O(^PRHIST(PR1,VNR),-1) Quit:VNR=""!(PlusGevonden&MinGevonden) Do . . . Set xPRHIST=^PRHIST(PR1,VNR) . . . Set Datum=+$Piece(xPRHIST,"\"),Aantal=$Piece(xPRHIST,"\",2),Type=$Piece(xPRHIST,"\",4) . . . Quit:Type'="H" . . . Quit:(Aantal>0)&(Datum0 Do . . . . Set LaatstePlus=Datum,PlusGevonden=1 . . . Else If Aantal<0 DO . . . . Set LaatsteMin=Datum,MinGevonden=1 If LaatstePlus=0 Set LaatstePlus="" If LaatsteMin=0 Set LaatsteMin="" ]]> Initialisatie van het detail van een product 1 Lijst opbouwen om op het scherm te tonen: productdetail 1 " Do . &sql(Select Max(Tellingen_TellingNr) into :MaxHertel from Prod.VoorraadTelling_Tellingen where VoorraadTelling->Product->ProductNr=:PRNr) . If MaxHertel="" Set MaxHertel=0 Else If MaxHertel'?1.N Do . Set HertelNummers=oProduct.HertelNummers . If $LL(HertelNummers)=0 Do . . Set MaxHertel=0 . Else Set MaxHertel=$LI(HertelNummers,1) ;sorteren op basis van de zone en het tellingnr &sql(Select ID, Zones into:ProductID, :ZoneLijst from Prod.VoorraadTelling where Product=:PRNr) Set aantalMP=oProd.MultipleProducts.Count() Do ..InfoStock(PRNr,oProd,aantalMP,.Voorraad,.ReservatieWerkvloer) For i=1:1:$LL(ZoneLijst) Do . Set Zone=$LI(ZoneLijst,i) . Set ^HULP(..%J,"Zones",Zone)="" Set ProductNaam=$S($L(KortTekst)>29:$E(KortTekst,1,29)_".",1:KortTekst) Set rsTel=##class(%ResultSet).%New(..%ClassName(1)_":qTellingenLijst") Set Stop=0,SelZone=..blVoorraadTelling.Zone do rsTel.Execute(PRNr) ; invullen van de hulp-global : gesorteerd per zone en tellingnummer For Quit:'rsTel.Next() Do . ;sorteren op zone, tellingnr . ;sommatie per tellingnr . ;bepalen van het maximaal aantal tellingen per zone . Set ElementKey=rsTel.Data("element_key") . Set Zone=rsTel.Data("Tellingen_OpslagZone") . Set ToegevoegdeZone=rsTel.Data("Tellingen_ToegevoegdeOpslagZone") . Set Aantal=rsTel.Data("Tellingen_Aantal") . Set TellingNr=rsTel.Data("Tellingen_TellingNr") . Quit:TellingNr>MaxHertel . ;Quit:(MaxHertel-TellingNr)>3 . Set VNR=$O(^HULP(..%J,"Zones",Zone,TellingNr,""),-1)+1 . Set ^HULP(..%J,"Zones",Zone,TellingNr,VNR)=Aantal_"\"_ElementKey . Set ^HULP(..%J,"Zones",Zone,TellingNr)=$G(^HULP(..%J,"Zones",Zone,TellingNr))+Aantal . Set ^HULP(..%J,"Zones",Zone,"ToegevoegdeZone")=ToegevoegdeZone . Set ^HULP(..%J,"Telling",TellingNr)=$G(^HULP(..%J,"Telling",TellingNr))+Aantal . Set MaxLijnen=+$G(^HULP(..%J,"Zones",Zone,"MaxLijnen")) . If VNR>MaxLijnen Set ^HULP(..%J,"Zones",Zone,"MaxLijnen")=VNR I '$D(^HULP(..%J,"Telling",0)) Set ^HULP(..%J,"Telling",0)="" I '$D(^HULP(..%J,"Telling",MaxHertel)) Set ^HULP(..%J,"Telling",MaxHertel)="" Set AantLijnen=11 Set TelNr=MaxHertel+1 For i=1:1:4 Set TelNr=$O(^HULP(..%J,"Telling",TelNr),-1) Quit:TelNr="" Set ^HULP(..%J,"TelNr",i)=TelNr Set Zone="" For Set Zone=$O(^HULP(..%J,"Zones",Zone)) Quit:Zone="" Do . Set MaxLijnen=+$G(^HULP(..%J,"Zones",Zone,"MaxLijnen")) . Set ToegevoegdeZone=$G(^HULP(..%J,"Zones",Zone,"ToegevoegdeZone")) . Set TellingNr="" . For i=1:1:4 Set TellingNr=$O(^HULP(..%J,"Telling",TellingNr),-1) Quit:TellingNr="" Do . . Set TelMin1= $O(^HULP(..%J,"Zones",Zone,TellingNr),-1) . . Quit:TelMin1="" . . If '$D(^HULP(..%J,"Zones",Zone,TellingNr))&$D(^HULP(..%J,"Zones",Zone,TelMin1)) Do . . . If $D(^HULP(..%J,"Zones",Zone,TelMin1))#10=1 Do . . . . Set Aantal=^HULP(..%J,"Zones",Zone,TelMin1) . . . . Set ^HULP(..%J,"Zones",Zone,TellingNr,1)="["_Aantal_"]" . . . . Set ^HULP(..%J,"Telling",TellingNr)=$G(^HULP(..%J,"Telling",TellingNr))+Aantal . . . Else Do . . . . Set Aantalx=^HULP(..%J,"Zones",Zone,TelMin1,1) . . . . Set ^HULP(..%J,"Zones",Zone,TellingNr,1)=Aantalx . . . . Set ^HULP(..%J,"Telling",TellingNr)=$G(^HULP(..%J,"Telling",TellingNr))+$Tr(Aantal,"[]","") . ; invullen van ..Cache . For i=1:1:MaxLijnen Do . . Set (Tel,TelMin1,TelMin2,TelMin3)="" . . Set AantLijnen=AantLijnen+1 . . Set xTel=$G(^HULP(..%J,"Zones",Zone,MaxHertel,i)) . . Set ElementKey=$Piece(xTel,"\",2) . . Set txtZone=..blVoorraadTelling.ZoneTekst(Zone) . . If ToegevoegdeZone Set txtZone=txtZone_"*" . . ;opzoeken van vorige tellingen . . Set TelNr=^HULP(..%J,"TelNr",1) . . If TelNr'="" Set Tel=$P($G(^HULP(..%J,"Zones",Zone,TelNr,i)),"\") . . Set TelNr=$G(^HULP(..%J,"TelNr",2)) . . If TelNr'="" Set TelMin1=$P($G(^HULP(..%J,"Zones",Zone,TelNr,i)),"\") . . Set TelNr=$G(^HULP(..%J,"TelNr",3)) . . If TelNr'="" Set TelMin2=$P($G(^HULP(..%J,"Zones",Zone,TelNr,i)),"\") . . Set TelNr=$G(^HULP(..%J,"TelNr",4)) . . If TelNr'="" Set TelMin3=$P($G(^HULP(..%J,"Zones",Zone,TelNr,i)),"\") . . Set ..Cache(Zone_"|"_$J(i,2))=$LB(ElementKey,txtZone,Tel,TelMin1,TelMin2,TelMin3) . If MaxLijnen=0 Do . . Set AantLijnen=AantLijnen+1 . . Set ..Cache(Zone_"| 1")=$LB("",..blVoorraadTelling.ZoneTekst(Zone),"","","","") ;toevoegen van lijnen voor de defaultzones van een product If SelZone'="",'$D(^HULP(..%J,"Zones",SelZone)) Do ;als er geen telling is voor de getelde zone, dan wordt een lege lijn getoond . Set AantLijnen=AantLijnen+1 . Set txtZone=..blVoorraadTelling.ZoneTekst(SelZone) . If '$LF(ZoneLijst,SelZone) Set txtZone=txtZone_"*" . Set ..Cache(SelZone_"| 1")=$LB("",txtZone,"","","","") ;opvullen van de lijnen tot aan de footer For i=AantLijnen+1:1:22 Do . Set ..Cache("zz"_i)=$LB("","","","","","") ;instellen hoofding en voettekst (variabelen Hoofding en TotaalTekst) Set Hoofding="Zone | | | | |" Set TotaalTekst1="--------------------------------|----------|----------|----------|----------|" Set TotaalTekst2="Totaal | | | | |" Set TellingNr="" For i=1:1:4 Set TellingNr=$O(^HULP(..%J,"Telling",TellingNr),-1) Quit:TellingNr="" Do . Set Titel=$S(TellingNr>-1:"H"_TellingNr,1:"") . Set Titel=$J(Titel,7)_" " . Set $Piece(Hoofding,"|",i+1)=Titel ;instellen van een deel van de Hoofding . Set Totaal=$G(^HULP(..%J,"Telling",TellingNr)) . Set $Piece(TotaalTekst2,"|",i+1)=$J($S('+Totaal:Totaal,1:$$FN^vhRtn2(Totaal,10,2,"+N")),10) ;instellen van een deel van de Voettekst Set Voorraad=$S(Voorraad[".":$$FN^vhRtn2(Voorraad,23,2,"+N"),1:$$FN^vhRtn2(Voorraad,23,0,"+N")) Set $P(TotaalTekst2,"|")="Totaal"_$J(Voorraad,23)_" " Set TotaalTekst=TotaalTekst1_$C(13)_$C(10)_TotaalTekst2 Set AantLijnen=AantLijnen-11 If AantLijnen=0 Set AantLijnen=1 ;aantLijnen wordt gebruikt om voor Lijst("MAX") ]]> Invoegen van een extra hertelnummer in de correctiefasee 1 Record selecteren met een bepaalde Zone ActieveZone:%String 1 %Numeric ",1:$P(^RES("PRODUKT","PI","HFWVSUBMAG","D",Zone1),"`",2)) Set $Piece(ActieveZone," ")=Zone1 Set vnr="",Gevonden=0,LijnNr="" For Set vnr=$O(..Cache(vnr)) Quit:vnr=""!Gevonden Do ; aflopen van de cache en zoeken naar de eerste lijn met zone= actieve zone . Set LijnNr=LijnNr+1 . Set txtZone=$Tr($LG(..Cache(vnr),2),"*","") . If txtZone=ActieveZone Set SelLijn=LijnNr,Gevonden=1 Quit $G(SelLijn) ]]> ************************************ * Alles ivm een multiproduct * ************************************ Initialisatie van het detail van een multiproduct 1 Lijst opbouwen om op het scherm te tonen: multiproduct 1 voor verdelen van de stock en de getelde aantallen volgens de regel van 3 . Set aantSub=aantSub+1 . Set PR1=rsMP.Data("element_key") . Set Voorraad=$Piece($G(^PRSTOCK("D",PR1)),"\",5) ;huidige stock ophalen . Set NONActief=rsMP.Data("MultipleProducts_NONActief") . Set KortTekst=$Piece($G(^KPR(PR1,0)),"\") . Set ^HULP(..%J,"Product",PR1)=Voorraad . Set ^HULP(..%J,"Product",PR1,"KortTekst")=KortTekst . Set ^HULP(..%J,"Product")=$G(^HULP(..%J,"Product"))+Voorraad . If 'NONActief Do . . Set ^HULP(..%J,"ActiefProduct")=$G(^HULP(..%J,"ActiefProduct"))+Voorraad . . Set ^HULP(..%J,"ActiefProduct",PR1)="" . . If +Voorraad Set ^HULP(..%J,"Voorraad",Voorraad,PR1)="" . . Set aantProd=aantProd+1 ;opzoeken van de verschillende tellingen van het product ;sorteren op basis van het tellingnr Set rsTel=##class(%ResultSet).%New(..%ClassName(1)_":qTellingenLijst") do rsTel.Execute(PRNr) For Quit:'rsTel.Next() Do . Set Aantal=rsTel.Data("Tellingen_Aantal") . Quit:Aantal=0 . Set TellingNr=rsTel.Data("Tellingen_TellingNr") . Set ^HULP(..%J,"Telling",TellingNr)=$G(^HULP(..%J,"Telling",TellingNr))+Aantal Set LaatsteTelling=$O(^HULP(..%J,"Telling",""),-1) Set MaxHertel=^RES(..%ClassName(1),"OPT","MaxHertel") If LaatsteTelling=""!((MaxHertel-LaatsteTelling)>1) Do ;als bij de laatste telling het product niet geteld is, dan is de laatste kolom leeg . Set PR1="",TotTelling="" . For Set PR1=$O(^HULP(..%J,"Product",PR1)) Quit:PR1="" Do . . Set Voorraad=^HULP(..%J,"Product",PR1) . . Set KortTekst=^HULP(..%J,"Product",PR1,"KortTekst") . . Set BerekendeSubTelling=$S($D(^HULP(..%J,"ActiefProduct",PR1)):"",1:"N/A") . . Set ..Cache(PR1)=$LB(PR1,KortTekst,Voorraad,BerekendeSubTelling) Else Do ;als er een laatste telling is dan wordt het totaal verdeeld over de actieve subproducten . Set TotTelling=^HULP(..%J,"Telling",LaatsteTelling) . Set TotVoorraad=+$G(^HULP(..%J,"ActiefProduct")) . Set PR1="",TotTelling1=0 . If TotVoorraad=0 Do ;als de initiële voorraad 0 is dan wordt de telling gelijkmatig verdeeld . . Set DeelTelling=$J(TotTelling/aantProd,0,0) . . Set Verschil=TotTelling-(DeelTelling*aantProd) ;som van afronding doen kloppen . . Set PR1="",i=0 . . For Set PR1=$O(^HULP(..%J,"Product",PR1)) Quit:PR1="" Do . . . Set Voorraad=^HULP(..%J,"Product",PR1) . . . Set KortTekst=^HULP(..%J,"Product",PR1,"KortTekst") . . . If '$D(^HULP(..%J,"ActiefProduct",PR1)) Do . . . . Set ..Cache(PR1)=$LB(PR1,KortTekst,Voorraad,"N/A") ; als het niet een actief product is dan wordt "N/A" ingevuld bij de telling . . . Else Do . . . . Set i=i+1 . . . . Set BerekendeSubTelling=DeelTelling . . . . If Verschil>0&(i'>Verschil) Set BerekendeSubTelling=BerekendeSubTelling+1 ; 1 bijtellen om de afronding te doen kloppen . . . . If Verschil<0&((-i)'0&(i'>Verschil) Set BerekendeSubTelling=BerekendeSubTelling+1 ; 1 bijtellen om de afronding te doen kloppen . . . . If Verschil<0&((-i)' Instellingen van de beperkingen (vb: teruggave, hertelling, stock, ...) VeldNaam:%String,Titel:%String,Ypos:%String 1 Telt het aantal actieve subproducten van een multiproduct PRNr:%Numeric Product="_PRNr) do rs.Execute() Set Aantal=0 For Quit:'rs.Next() Do . If rs.Data("MultipleProducts_NONActief")'=1 Set Aantal=Aantal+1 Quit Aantal ]]> Zoekt de zones om een selectielijstje te tonen op het scherm toont een zonelijst + per zone staat het aantal producten met hertelstatus="I" ;Type ="Hertelling" => toont een zonelijst + per zone staat het aantal producten met die zone New LstZones1,txtZone,Zone,Hertelling,Aantal Kill LstZones Set Aantal=0 Set rs=##class(%ResultSet).%New(..%ClassName(1)_":qProductLijst") Do rs.Execute() For Quit:'rs.Next() Do ; aflopen van de producten . Set ID=rs.Data("ID") . Set oProduct=##class(DS.Prod.VoorraadTelling).%OpenId(ID) . Set Hertelling=oProduct.Hertelling . If Type="Afdruk" Quit:'AlleProducten&(Hertelling'="I") . Set Zones=oProduct.Zones . Quit:$ll(Zones)=0 . For i=1:1:$ll(Zones) Do . . Set Zone=$LG(Zones,i) . . If Zone'="" Set LstZones1(Zone)=$I(LstZones1(Zone)) ; bijhouden van het aantal producten per zone Set LstZones=$I(LstZones) Set Zone="" Set MaxLen=0 For Set Zone=$O(LstZones1(Zone)) Quit:Zone="" Do ; aflopen van de zones . Set Zone1=$Piece(Zone," ") Quit:Zone1="" . Set txtZone=$Piece($Get(^RES("PRODUKT","PI","HFWVSUBMAG","D",Zone1)),"`",2) . If txtZone="" Set txtZone="" . Set txtZone=txtZone_" "_$P(Zone," ",2,99) . Set LstZones(txtZone_".")=Zone_"`"_txtZone_"`"_LstZones1(Zone) . Set:$L(txtZone)>MaxLen MaxLen=$L(txtZone) ; bijhouden van de maximale lengte van de zonetekst Set Zone="" For Set Zone=$O(LstZones(Zone)) Quit:Zone="" Do ; concateneren van de Zoneomschrijving met het aantal producten in de zone . Set $P(LstZones(Zone),"`",2)=$P(LstZones(Zone),"`",2)_$J("",MaxLen+1-$L($P(LstZones(Zone),"`",2)))_$J($P(LstZones(Zone),"`",3),4) Quit:Type="Hertelling" Set LstZones("(Allen)")="Allen`Allen" Set LstZones("(Allen)_")="&S" ]]> Waarde Controleert of de status (hertelling of terugname) mag gewijzigd worden Vergelijkt de zone in het detailscherm met de geselecteerde zone in het hoofdscherm DetailZone,SelZone 1 ") Quit (DetailZone=SelZoneTekst) ;als detailzone en geselecteerde zone gelijk zijn, dan mag er iets gewijzigd worden ]]> Controleert of er aanpassingen toegelaten zijn in het detailscherm van een mulitproduct PRNr:%Numeric,NONActief,NieuweStatus:%Boolean Product=:PRNr) and ((MultipleProducts_NONActief=0) or (MultipleProducts_NONActief is null))) If NieuweStatus=1,(Aantal'>1) Quit 0 ; er moet minstens 1 actief subproduct zijn Quit 1 ]]> Menu: Import]]> Invullen van de getelde aantallen in de globals. Aanmaken van de creditnota voor de producten die gemarkeerd zijn met terugname Selecteer van de opslagzone en het hertelnummer 0 Set HertelLijst(VNR+1)="`Correctie" Set HertelNr=$$WILD^vhPOPUP("C;C","O1-","Selecteer het hertelnummer",.HertelLijst,HertelNr) ;tijdelijk opslaan van het hertelnummer in de business logic Set VoorwaardeLijst=..blVoorraadTelling.VoorwaardeLijst ; selectie van het hertelnummer wordt weggedaan uit de voorwaardelijst Set $LI(VoorwaardeLijst,10)="" Set ..blVoorraadTelling.VoorwaardeLijst=VoorwaardeLijst Do ..blVoorraadTelling.SetHertelNr(HertelNr) Set ..blVoorraadTelling.CorrectieNr=0 Do ..ToonVoorraadTelling("") ]]> SortKey Label voor Increment MaxHertel 1 verlaagt of verhoogt MaxHertel met 1 Delta Instellen van beperkingen Afdruk van alle producten Afdruk van een hertellijst Afdruk van een hertellijst van één of meerdere zones Drukt de volledige zones af Toont het detail van het product. Scherm voor de ingave van de getelde aantallen zo wordt de lock count niet groter dan 1 Do ADD^vhLock("VoorraadTellingD("_PRNr_")") If '%TC Do LDISP^vhLock(ProductNaam,"VoorraadTelling") Quit If '$D(..SequenceBak) Merge ..SequenceBak=..Sequence ; slaat de overzichtlijst op in "sequencebak" als de kopie nog niet bestaat If ..Modus="Overzicht" Set SelLijnOverzicht=Lijst("SELECT") ;opzoeken van de info voor het scherm "VOORRAADTELLING_DETAIL" Set oProduct=##class(DS.Prod.VoorraadTelling).%OpenId(PRNr) Set ProductID=PRNr Set StatHertel=oProduct.Hertelling Set Terugname=oProduct.Terugname Set KortTekst=$Piece($G(^KPR(PRNr,0)),"\") Set OMS1=$Piece($G(^KPR(PRNr,0)),"\",2) Set OMS2=$Piece($G(^KPR(PRNr,0)),"\",11) Set IdentNr=$Piece(^KPR(PRNr,2),"\",25) Do ..FetchProductDetail(PRNr,.ProductID,.AantLijnen) Do ..BerekenLaatsteBeweging(ProductID,aantalMP,.LaatstePlus,.LaatsteMin) Set MaxHertel=^RES(..%ClassName(1),"OPT","MaxHertel") Set oProd=##class(DS.Prod.VoorraadTelling).%OpenId(ProductID) ;instellen van de tekst met de hertelnummers set HertelNummers=oProd.HertelNummers Set HertelTekst="" If $LL(HertelNummers)>0 Do . For i=1:1:$ll(HertelNummers) Set HertelTekst=HertelTekst_"H"_$LI(HertelNummers,i)_"," . Set HertelTekst=$E(HertelTekst,1,$l(HertelTekst)-1) ;opvullen van het vast gedeelte van het scherm Do ..WriteTitel("Productdetail") Do DISPLAY^vhScherm("VOORRAADTELLING_DETAIL","","","","","") ;opvullen van het scrolling-gedeelte van het scherm Do ..LijstProductDetail() Do ..Write() Set Lijst("SELECT")=..SelZone(..blVoorraadTelling.Zone) Do UPDATE^vhLIST(.Lijst) Set Lijst("MAX")=AantLijnen ]]> Voegt een product toe. Als het product al bestaat dan wordt het detail van het product geopend Product->ProductNr into :PR1 from Prod.VoorraadTelling_MultipleProducts where MultipleProducts_Product=:PRNr) . . Set PRNr=PR1 . . Set Lijst("SELECT")=..SelPRNr(PRNr) . . Do ..mnDetail() . Else Do ; als het product niet bestaat als hoofdproduct of als subproduct, dan wordt het product toegevoegd aan de voorraadlijst . . Do ..blVoorraadTelling.AddProduct(PRNr,1) . . Do ..ToonVoorraadTelling(SelLijnOverzicht) . . Set Lijst("SELECT")=..SelPRNr(PRNr) . . Do UPDATE^vhLIST(.Lijst) ]]> Toont het detail van een multiple product zo wordt de lock count niet groter dan 1 Do ADD^vhLock("VoorraadTellingD("_PRNr_")") If '%TC Do LDISP^vhLock(ProductNaam,"VoorraadTelling") Quit Set ProductNaam=$Piece($G(^KPR(PRNr,0)),"\") Set OMS1=$Piece($G(^KPR(PRNr,0)),"\",2) Set OMS2=$Piece($G(^KPR(PRNr,0)),"\",11) Do ..FetchMultiProduct(PRNr,.aantMP) Do ..WriteTitel("Detail Multiproduct") Do DISPLAY^vhScherm("VOORRAADTELLING_MP","","","","","") Do ..LijstMultiProduct() Do ..Write() Set Lijst("MAX")=aantMP ]]> Toont de productinfo over een artikel PRNr Toevoegen van het telresultaat VerplichteUpdate:%Boolean Product=:PRNr and Tellingen_OpslagZone=:Zone) Quit:MaxHertel>TelNr ;geen ingave als het hertelnummer kleiner is dan de hoogste waarde voor het artikel en de zone For Set Input=$$ASK^vhINP("Geef het aantal: ",40,"",,,,,,"E",) Quit:Input="-" Quit:$TR(Input,"+.","")?.N ;inlezen tot iets numeriek wordt ingevuld If Input'="" For i=1:1:$L(Input,"+") Do ;opsplitsen van alle getallen tussen de "+"-tekens . Set Aantal=$Piece(Input,"+",i) . Quit:$Tr(Aantal,".","")'?.N . If i'=1 Quit:'+Aantal&'+$G(VerplichteUpdate) . Do ..blVoorraadTelling.AddQty(TelNr,PRNr,Aantal) ; toevoegen telling . Set TellingGewijzigd=1 If TellingGewijzigd Do . Do ..chkHertelStatus() . If ..blVoorraadTelling.CorrectieNr>^RES("CHUI.Prod.VoorraadTelling","OPT","MaxHertel") Do ..blVoorraadTelling.IncrementMaxHertelNr(1) . Do ..mnDetail() Else Do WRITE^vhLIST(.Lijst) Set Input="" ]]> Wijzigen van het geteld aantal Product=:PRNr and Tellingen_OpslagZone=:Zone) Quit:MaxHertel>TelNr ;geen ingave als het hertelnummer kleiner is dan de hoogste waarde voor het artikel en de zone For Set Aantal=$$ASK^vhINP("Geef het aantal: ",10,TellingAantal,"Slechts één getal","meerdere getallen met + gescheiden zijn niet toegelaten",,,,"E","") Quit:Aantal="-" Quit:$TR(Aantal,"+.","")?.N ;inlezen tot iets numeriek wordt ingevuld If $Tr(Aantal,"-","")=""!(Aantal=TellingAantal) Do WRITE^vhLIST(.Lijst) Quit ; als het aantal leeg is of niets veranderd is, dan wordt het detailscherm opnieuw getoond Set ZoneCode=..blVoorraadTelling.Zone Set LijnWegDoen=0 If Aantal=0 Do . ;aantal tellijnen van een product en een hertelling in een bepaalde zone . &sql(Select Count(*) into :AantalLijnen from Prod.VoorraadTelling_Tellingen where (VoorraadTelling=:PRNr) and (Tellingen_TellingNr=:TelNr) and (Tellingen_OpslagZone=:ZoneCode)) . ;aantal 0-lijnen van een product en een hertelling in een bepaalde zone . &sql(Select Count(*) into :AantalNul from Prod.VoorraadTelling_Tellingen where (VoorraadTelling->Product=:PRNr) and (Tellingen_TellingNr=:TelNr) and (Tellingen_OpslagZone=:ZoneCode) and (Tellingen_Aantal=0)) . If AantalNul>0!(AantalLijnen>1) Do ; als 0 ingegeven wordt, dan wordt de lijn weggedaan tenzij er maar 1 0-lijn is . . Set LijnWegDoen=1 . . Set oProduct=##class(DS.Prod.VoorraadTelling).%OpenId(ProductID) . . Do oProduct.Tellingen.RemoveAt(ElementKey) . . Set Stat=oProduct.%Save() If 'LijnWegDoen Do ..blVoorraadTelling.WijzigQty(ProductID,ElementKey,Aantal) Do ..chkHertelStatus() Do ..mnDetail() ]]> Een telresultaat verwijderen Volgend of vorig product selecteren Increment:%Numeric ",+^RES("CHUI.Prod.VoorraadTelling","OPT","MaxHertel")>0,(StatHertel'="A") Do ..mnSelProduct(Increment) Quit Do ..mnDetail() ]]> Controleert of het menu Hertelling Invoegen mag geactiveerd worden " Quit 0 If ..Modus'="Productdetail" Quit 0 &sql(Select Max(Tellingen_TellingNr) into :MaxHertelProduct from Prod.VoorraadTelling_Tellingen where VoorraadTelling=:PRNr) If ..blVoorraadTelling.CorrectieNr>MaxHertelProduct Quit 0 ; je kan meer één keer een rij toevoegen Quit ..ZoneOK(Zone,..blVoorraadTelling.Zone) ]]> Invoegen van een hertelnummer Hertelling instellen of annuleren NieuweStatus:%String Terugname activeren of uitschakelen NieuweStatus:%Boolean Actief:%Boolean %SQLQuery KortTekst,LaatsteVerwerking,WerkVloerBefore,ReservatieBefore,Hertelling,Terugname from Prod.VoorraadTelling]]> %SQLQuery PRNr Product=:PRNr Group by Tellingen_TellingNr,Tellingen_OpslagZone]]> %SQLQuery PRNr Product=:PRNr]]> %SQLQuery PRNr Product->ProductNr=:PRNr]]> %Library.CacheStorage ^CHUI.Prod.VoorraadTellingD VoorraadTellingDefaultData ^CHUI.Prod.VoorraadTellingD ^CHUI.Prod.VoorraadTellingI ^CHUI.Prod.VoorraadTellingS listnode %%CLASSNAME