BL.Derde.KlantSpecifiek,BL.Derde.LevSpecifiek,Prod.Product,vhLib.Macro
1
%RegisteredObject
0
Property pxDoc As BL.Prod.sub.pxVoorraadTelSettings;
30
BL.Prod.VoorraadTellingDoc
%Integer
%List
-99: telnummer na update van de stock en aanmaak van de kredietnota
-1 : telnummer na de import van de producten
0 : initiële telling
...: eigenlijke hertellingen
]]>
%Integer
Hertelnummer voor correcties op het einde
%Integer
Instelling van de sortkey
%String
1: basistype
2: hertelstatus
3: terugname
4: multiprod
5: voorraadtype
6: toegevoegde zone
7: voorraad
8: verschil
9: reeds geteld
10: hertelnummer
]]>
%List
Lijst met producten om af te drukken om de printer
%String
list
1
jobnr:%Numeric
Aanmaken van een tabel met de productgegevens. De oude tabel wordt gewist
%Numeric
Zoekt de verschillende productiezones van een product
Hoekkast, Keller, V1 en alle andere.
1
Toevoegen van een product aan de lijst
PRNr:%Numeric,ManueelToegevoegd:%Boolean
5) Do ;als de zone niet ingevuld is of het identnumer begint met een getal>5, dan worden producten niet gegroepeerd
. If 'ManueelToegevoegd Set ^HULP(..%J,"Prod",PRNr)=""
. Set xStock=$G(^PRSTOCK("D",PRNr))
. Set VoorraadWerkVloer=$Piece(xStock,"\",5)
. Set VoorraadReservatie=$Piece(xStock,"\",6)
. Do ..VulInfo(PRNr,VoorraadWerkVloer,VoorraadReservatie,ManueelToegevoegd)
Else Do
. Set IdentNr=$Piece(^KPR(PRNr,2),"\",25)
. Set Ident1=$E($Tr(IdentNr,".",""),2,8)
. Set (TotWerkVloer,TotReservatie)=0
. Set AantMP=0
. For i=0:1:5 Do ;berekenen van de voorraad en invullen van de producten van een multiproduct
. . Set IdentNummer=i_Ident1_" "
. . Set PR1=$Piece($G(^KPR2(IdentNummer)),"\")
. . Quit:PR1=""
. . If ManueelToegevoegd &sql(Select count(*) into :Aantal from Prod.VoorraadTelling where (Product->ProductNr)=:PR1) Quit:Aantal>0
. . If ManueelToegevoegd &sql(Select count(*) into :Aantal1 from Prod.VoorraadTelling_MultipleProducts where MultipleProducts_Product->ProductNr=:PR1) Quit:Aantal>0
. . Quit:$D(^HULP(..%J,"Prod",PR1)) ;als het product reeds in de lijst staat dat wordt het niet toegevoegd als een subproduct
. . Set ^HULP(..%J,"Prod",PR1)=""
. . Set xStock=$G(^PRSTOCK("D",PR1))
. . Set VoorraadWerkVloer=+$Piece(xStock,"\",5)
. . Set VoorraadReservatie=+$Piece(xStock,"\",6)
. . Do ..LaatsteWijziging(PR1,.LaatsteInvoer,.LaatsteVerwerking)
. . Quit:'+VoorraadWerkVloer&'+LaatsteInvoer&'+LaatsteVerwerking ; een product zonder stock en zonder bewegingen wordt niet toegevoegd
. . Set AantMP=AantMP+1
. . Set TotWerkVloer=TotWerkVloer+VoorraadWerkVloer
. . Set TotReservatie=TotReservatie+VoorraadReservatie
. . Set Lst(VoorraadWerkVloer,PR1)=""
. . Set Zone=$Piece($G(^KPR(PRNr,15)),"\",12)
. . Set Lst1(PR1)=VoorraadWerkVloer_"\"_LaatsteInvoer_"\"_LaatsteVerwerking
. If AantMP'>1 Do ; als er geen subproducten zijn dan is het hoofdgroduct geen multiProduct
. . Kill Lst,Lst1
. . Do ..VulInfo(PRNr,TotWerkVloer,TotReservatie,ManueelToegevoegd)
. Else Do
. . Set Voorraad=$O(Lst(""),-1)
. . Set PR1=$O(Lst(Voorraad,""))
. . Do ..VulInfo(PR1,TotWerkVloer,TotReservatie,ManueelToegevoegd,.Lst1)
]]>
Invullen van de eigenschappen in het productobject m.i.v. de multiproducts
1
MPLaatsteVerwerking) Set MPLaatsteVerwerking=LaatsteVerwerking
. . If +LaatsteInvoer,(LaatsteInvoer>MPLaatsteInvoer) Set MPLaatsteInvoer=LaatsteInvoer
. . Set oMP=##class(DS.Prod.VoorraadTellingMultiProd).%New()
. . Do oMP.ProductSetObjectId(PR1)
. . Set oMP.WerkVloerBefore=WerkVloerBefore
. . Do ..ZoekZone(PR1,.ZoneLst,.SubZoneLst) ;de zone van een subproduct wordt toegevoegd aan de zone van het hoofdproduct
. . Do oProd.MultipleProducts.SetAt(oMP,PR1)
. Set oProd.Zones=ZoneLst
. Set oProd.SubZones=SubZoneLst
. Set oProd.LaatsteInvoer=MPLaatsteInvoer ;de laatste invoer= de laaste invoer over alle subproducten
. Set oProd.LaatsteVerwerking=MPLaatsteVerwerking ;de laatste verwerking= de laatste verwerking van alle subproducten
Else Do
. ; invullen van de info van een gewoon product
. Do ..ZoekZone(PRNr,.ZoneLst,.SubZoneLst)
. Set oProd.Zones=ZoneLst
. Set oProd.SubZones=SubZoneLst
. Set Lst(PRNr)=""
. Do ..LaatsteWijziging(PRNr,.LaatsteInvoer,.LaatsteVerwerking)
. Set oProd.LaatsteInvoer=LaatsteInvoer
. Set oProd.LaatsteVerwerking=LaatsteVerwerking
Set Stat=oProd.%Save()
]]>
Zoekt de laatste invoer en de laatste verwerking van een product
1
LaatsteInvoer Set LaatsteInvoer=Datum
. Else If (Type="H")&&'VerwerkingGevonden Do
. . Set VerwerkingGevonden=1
. . If Datum>LaatsteVerwerking Set LaatsteVerwerking=Datum
If LaatsteInvoer=0 Set LaatsteInvoer=""
If LaatsteVerwerking=0 Set LaatsteVerwerking=""
]]>
ProductID,ElementKey:%Integer
Opslaan van de getelde stock in de global ^PRSTOCK en ^PRHIST.
Aanmaak van de terugnames
0
%Status
Reservatie) Do ;lijn toevoegen aan een kredietnota
. . . Set VNR=VNR+1
. . . Set KredietNota(VNR)=PRNr_"\"_(Reservatie-AantalGeteld)
. . . Set $Piece(KredietNota(VNR),"\",5)=1
. Else Do ..DetailMP(oProduct,AantalGeteld,.KredietNota)
If +VNR&&0 Do ; aanmaak van de kredietnota
. Do BUILDOBJ^FLOWORD3($$$KlantHalux,,"Orderreferentie",.KredietNota,,1,,"OrderNummer")
. Set x=$o(OrderNummer(""))
. Set CreditNR=$p(OrderNummer(x),"\",2)
. Set Resultaat=$S($G(Resultaat)="":"Creditnota "_CreditNR_" is aangemaakt:",1:Resultaat_"`Creditnota "_CreditNR_" is aangemaakt:")
. If VNR=1 Do
. . Set Resultaat=Resultaat_"1 productlijn"
. Else Set Resultaat=Resultaat_VNR_" productlijnen"
Set ^RES("CHUI.Prod.VoorraadTelling","OPT","MaxHertel")=-99
Quit $G(Resultaat)
]]>
Verdelen van de getelde voorraden over de subproducten van een product
1
0&(i'>Verschil) Set BerekendeSubTelling=BerekendeSubTelling+1
. . If Verschil<0&((-i)'0&(i'>Verschil) Set BerekendeSubTelling=BerekendeSubTelling+1
. . If Verschil<0&((-i)'
Toevoegen van een getelde hoeveelheid
TelNr:%Integer,PRNr:%Numeric,Aantal:%Numeric
%Status
Wijzigen van een getelde hoeveelheid
ProductID:%String,ElementKey:%Numeric,Aantal:%Numeric
%Status
Hertelstatus wijzigen
ProductID:%Numeric,HertelNr,StatHertel:%String
Terugnamestatus wijzigen
ProductID:%Numeric,StatTerugname:%Boolean
%Status
Activeren of desactiveren van een subproduct van een multiproduct
PRNr:%Numeric,ElementKey:%Numeric,Actief:%Boolean
%Status
Afdrukken van de tellingen van alle producten van één hertelling
Printer,HertelNr:%Numeric,ReeksZones:%String,AlleProducten:%Boolean
%Status
0
. . . Set Gebruiker=$$USERNAME^vhUSER(,1)
. . . Set DatumTijdstipIngave=$ZDATETIME($H,3,1,0)
. . . For i=1:1:$LL(Zones) Do
. . . . Set OpslagZone=$LG(Zones,i)
. . . . Set rsTelling=##class(DS.Prod.VoorraadTellingAantal).%New()
. . . . Set rsTelling.OpslagZone=..Zone
. . . . Set rsTelling.Aantal=0
. . . . Set rsTelling.Gebruiker=Gebruiker
. . . . Set rsTelling.DatumTijdstipIngave=DatumTijdstipIngave
. . . . Set rsTelling.TellingNr=HertelNr
. . . . Set IdKey=rs.Tellingen.GetPrevious(.ElementKey)
. . . . Do oVoorraadTelling.Tellingen.SetAt(rsTelling,ElementKey+1)
. . . Set Stat=oVoorraadTelling.%Save()
. . Quit:rsProd.Data("Hertelling")'="I"&'AlleProducten ; Alleen producten die moet herteld worden, worden afgedrukt
. . ;aanpassen van de hertelstatus
. . If $L($G(ReeksZones)) Quit:'..TelZoneOK(PRNr,Zones,ReeksZones)
. . Set oVoorraadTelling.Hertelling="A"
. . ;hertelnummer toevoegen aan de lijst
. . Set Nummers= oVoorraadTelling.HertelNummers
. . Set Pos=$LF(Nummers,HertelNr)
. . If Pos=0 Set Nummers=$LB(HertelNr)_Nummers
. . Set oVoorraadTelling.HertelNummers=Nummers
. . Set Stat=oVoorraadTelling.%Save()
. . For i=1:1:$LL(Zones) Do
. . . Set Zone=$LG(Zones,i)
. . . Set ^HULP(..%J,"Product",Zone,..SortKey(PRNr),PRNr)=""
. . ; opzoeken van de toegevoegde zones
. . Set rsTel=##class(%ResultSet).%New(..%ClassName(1)_":qResultaatTelling")
. . Do rsTel.Execute(PRNr)
. . For Quit:'rsTel.Next() Do
. . . Set TelNr=rsTel.Data("TelNr")
. . . Set Zone=rsTel.Data("Tellingen_OpslagZone")
. . . Quit:(HertelNr-TelNr)>1
. . . Set ^HULP(..%J,"Product",Zone,..SortKey(PRNr),PRNr)=""
; doorsturen van de afdruk per zone
Set sc=$$$OK
Set Zone="",Stop=0
For Set Zone=$O(^HULP(..%J,"Product",Zone)) Quit:Zone="" Quit:Stop Do
. Set ..pxDocList=##class(BL.Prod.VoorraadTelSettingsList).%New()
. Set pxDoc=##class(BL.Prod.sub.pxVoorraadTelSettings).%New()
. Set pxDoc.Zone=$S(Zone="-":"",1:Zone)
. Set pxDoc.ZoneOms=..ZoneTekst(Zone)
. Set pxDoc.TellingNr=HertelNr
. Set pxDoc.TellingOms=$S(HertelNr=0:"Initieel",1:"H"_HertelNr)
. Set pxDoc.Datum=AfdrukDatum
. Set Lijst=""
. Set SortKey=""
. For Set SortKey=$O(^HULP(..%J,"Product",Zone,SortKey)) Quit:SortKey="" Do
. . Set PRNr=""
. . For Set PRNr=$O(^HULP(..%J,"Product",Zone,SortKey,PRNr)) Quit:PRNr="" Do
. . . Set Lijst=Lijst_$LB(PRNr)
. Set pxDoc.Products=Lijst
. Set sc=..PrintOne(pxDoc,Printer)
. If $$$ISERR(sc) Set Stop=1
Quit sc
]]>
pxDoc,Printer
")_" "_pxDoc.TellingOms_".pdf"
Set FilePath=$$FULLPAD^vhDEV($$DIRUSER^vhDEV(),FileName)
Set:$$$ISOK(sc) sc=..blVoorraadtellingDoc.RenderAndFile(..pxDocList,FilePath)
Do ..pxDocList.Settings.Clear()
Quit sc
]]>
Controleert of er zones zijn die in beide lijsten staan
PRNr:%Numeric,Zones:%List,SelZones:%String
1
. If ";"_SelZones_";"[(";"_Zone_";") Set Gevonden=1
Quit Gevonden
]]>
Sorteersleutel berekenen
PRNr
Beperkingen:%List
Zone:%String
HertelNr
Zonetekst opzoeken
Zone:%String
%String
")
Set txtZone=txtZone_" "_$Piece(Zone," ",2,99)
If $E(txtZone,$L(txtZone))=" " Set txtZone=$E(txtZone,1,$L(txtZone)-1)
Quit txtZone
]]>
HertelNr van een product opzoeken
PRNr
" Do
. Set TelNr=..CorrectieNr
. If '+TelNr Do
. . &sql(Select Max(Tellingen_TellingNr) into :TelNr from Prod.VoorraadTelling_Tellingen where VoorraadTelling=:PRNr)
Quit TelNr
]]>
Export van een textbestand van alle producten met de getelde aantallen
Directory,FileName
PRNr,Week
Week ; LeverWeek ligt verder in de toekomst
. . . If FaktorH Do ; Als er geen KOM-link is, dus product is reeds gefabriceerd en de halffabr reeds in mindering gebracht
. . . . Set Aantal=$P(TLRec,"\",3)*(FaktorH)
. . . . Set TotaalH=TotaalH+Aantal
. . . . Set:$P($G(^HADPR("F",FabKey,"K")),"\",3)="A" TotaalK=TotaalK+Aantal ; Reeds productie klaar
. . . . Set:$P($G(^HADPR("F",FabKey,"A")),"\",3)="A" TotaalA=TotaalA+Aantal ; Reeds productie actief
; Totaal \ ActiefHalffabk \ KlaarGezetHalffabr
Quit $LB(TotaalH,TotaalA,TotaalK)
]]>
Ophalen van de 2 laatste tellingen
maxHertel veranderen
Delta
Overzicht producten
%SQLQuery
KortTekst from Prod.VoorraadTelling order by Product->KortTekst]]>
Overzicht van de tellingen per artikel en tellingnummer
%SQLQuery
PRNr
Product As PRNr, Tellingen_OpslagZone, Tellingen_ToegevoegdeOpslagZone, sum(Tellingen_Aantal) as Aantal , Tellingen_TellingNr as TelNr from Prod.VoorraadTelling_Tellingen
where VoorraadTelling->Product=:PRNr and (Tellingen_ToegevoegdeOpslagZone=1)
group by VoorraadTelling->Product, Tellingen_OpslagZone,Tellingen_TellingNr
order by VoorraadTelling->Product]]>
%Library.CacheStorage
^BL.Prod.VoorraadTellingD
VoorraadTellingDefaultData
^BL.Prod.VoorraadTellingD
^BL.Prod.VoorraadTellingI
^BL.Prod.VoorraadTellingS
listnode
%%CLASSNAME