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