Voorraadwaardering volgens de FIFO-methode

0000003213     -      27-03-2024

Mercator maakt het mogelijk om voorraad te waarderen volgens de FIFO-methode (first in, first out = eerste erin, eerste eruit). Om deze functionaliteit te installeren, moet u deze kolom toevoegen aan de tabel STOCK :

alter table STOCK add S_FIFO varchar(MAX) not null default ''

Daarna is het nodig om een update van de database uit te voeren om bepaalde triggers aan te passen.

Het scherm van de artikelkenmerken moet worden aangepast om een Object van het type FifoPrices toe te voegen. Dit object maakt het mogelijk om het resultaat van de FIFO-herberekening voor het huidige artikel te visualiseren. Het bevat:

  • de datum die wordt gebruikt voor de herberekening (einddatum)
  • de resterende artikelen in voorraad met 
    • de datum van de beweging
    • de hoeveelheid
    • de netto aankoopprijs in de basisvaluta van het dossier
  • de totale hoeveelheid (die moet overeenstemmen met de hoeveelheid in voorraad)
  • het gewogen gemiddelde prijs van de weergegeven regels:  som ( q * prijs ) / totaal q

Dit object heeft een contextmenu waarmee u de inhoud kunt exporteren of kopiëren.


De herberekening van FIFO-informatie gebeurt niet in realtime. Het moet handmatig worden gestart via het menu "FIFO update" in het "Artikels" menu. Dit menu-item vraagt naar de "tot" datum die de herberekening bepaalt. Als er een filter aanwezig is op de beschrijving van het artikel, dan wordt hiermee rekening gehouden en worden alleen de artikels in deze filter herberekend. Als er geen filter actief is, wordt de herberekening uitgevoerd voor alle artikels. Artikels die niet op voorraad zijn, worden altijd uitgesloten. De herberekeningsprocedure kan bepaalde problemen tegenkomen, bijvoorbeeld outputs die groter zijn dan de input. Dergelijke fouten worden weergegeven in een log aan het einde van de procedure. Merk op dat deze herberekening erg lang kan duren.

Dit proces kan ook worden gestart door middel van code, mogelijk vanuit een externe applicatie :

Voor alle artikels :

Zoom
MercatorUi.Sig.SigStock sigStock = (MercatorUi.Sig.SigStock)MercatorUi.Sig._SigsStatic.SigByModule(MercatorUi.Sig._SigEnum.STOCK);
DateTime date = DateTime.Today;
sigStock.FifoUpdate(date, out StringBuilder errors);
if (errors.Length > 0)
{
    // rekening houden met fouten
}

Met een voorwaarde in de vorm van een where-clausule op de tabel STOCK :

Zoom
MercatorUi.Sig.SigStock sigStock = (MercatorUi.Sig.SigStock)MercatorUi.Sig._SigsStatic.SigByModule(MercatorUi.Sig._SigEnum.STOCK);
DateTime date = DateTime.Today;
sigStock.FifoUpdate(date, "stock.s_condition = '...'", out StringBuilder errors);
if (errors.Length > 0)
{
    // rekening houden met fouten
}

 

De FIFO-berekening doorloopt alle bewegingen van het herberekende artikel, rekening houdend met de volgende veronderstellingen (die kunnen leiden tot een vertekening ten opzichte van de werkelijkheid) :

  • De bewegingen worden gescheiden in inputs en outputs
  • Alleen de inkomsten geven een prijswaarde weer in de rechterkolom van het FifoPrices-object
  • Een aankoop met een negatieve hoeveelheid wordt beschouwd als een uitgave. De waarde ervan wordt niet in aanmerking genomen.
  • Inkomsten die geen aankopen zijn, worden gewaardeerd tegen de laatste eerdere aankoopprijs
    • pure voorraadboekingen via magazijnoverboeking met leeg magazijn 1 met positieve hoeveelheid of leeg magazijn 2 met negatieve q
    • voorraden die een positieve correct opleveren, als de optie "Prijs / FIFO: rekening houden met voorraadprijzen" is ingesteld op NEE
    • verkopen met een negatieve hoeveelheid
  • Als de optie "Prijs / FIFO : rekening houden met voorraadprijzen" is ingesteld op JA, worden voorraden die een positieve correctie produceren behandeld als positieve aankoop. Er wordt dus rekening gehouden met hun prijs.
  • Er wordt geen rekening gehouden met het begrip depot. Bijgevolg worden overboekingen van het ene depot naar het andere genegeerd, aangezien dit geen invloed heeft op de prijs.

Uitsluiten van bepaalde bewegingen

Het is mogelijk om bepaalde verkoop- of aankoopregels uit deze herberekening uit te sluiten. Dit is met name nodig om intercompany bewegingen uit te sluiten, waar Mercator dezelfde hoeveelheid verkocht en dezelfde hoeveelheid gekocht registreert tegen een specifieke intercompany prijs. Hiervoor moet u deze kolom toevoegen aan LIGNES_V en/of LIGNES_A.

alter table LIGNES_V add NO_FIFO bit not null default 0
alter table LIGNES_A add NO_FIFO bit not null default 0

Belangrijke opmerking : het is essentieel dat deze functionaliteit verstandig wordt gebruikt. Als dit niet het geval is, kan het resultaat van de FIFO-berekening onjuist zijn. Het is bijvoorbeeld noodzakelijk dat de som van de aangevinkte NO_FIFO hoeveelheden nul zijn (som van aankopen = som van verkopen). Dit kan worden gecontroleerd met de volgende SQL-query :

select t.id_article,sum(t.tot_v) as tot_v,sum(t.tot_a) as tot_a from 
(
select id_article,isnull(sum(q),0) as tot_v,0 as tot_a from LIGNES_V where (id_article is not null) and (no_fifo=1) group by id_article
union all
select id_article,0 as tot_v,isnull(sum(q),0) as tot_a from LIGNES_A where (id_article is not null) and (no_fifo=1) group by id_article
) t
group by t.id_article
having sum(t.tot_v) <> sum(t.tot_a)

Twee rapporten die gebruik maken van FIFO-informatie zijn beschikbaar gesteld:

Om deze rapporten uit te voeren, moet eerst de FIFO herberekening worden uitgevoerd via een van de hierboven beschreven methoden. (Wanneer het rapport wordt uitgevoerd, moet de gebruiker deze datum niet meer selecteren). Het is daarom noodzakelijk om ervoor te zorgen dat de artikels in deze rapporten op dezelfde datum een FIFO herberekening hebben ondergaan.

Voor deze rapporten: minimale versie voor SQL Server = 2016