Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Valorisation d'inventaire selon la méthode FIFO

0000003213     -      27/03/2024

Mercator permet la valorisation d'inventaire selon la méthode FIFO (first in, first out = premier entré, premier sorti). Pour installer cette fonctionnalité, il faut ajouter cette colonne dans la table STOCK :

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

Ensuite, il est nécessaire d'effectuer une mise à jour de la base de données afin d'adapter certains triggers.

L'écran du signalétique des articles doit être adapté afin d'ajouter un Object de type FifoPrices. Cet objet permet de visualiser le résultat du recalcul FIFO pour l'article en cours. Il reprend :

  • la date prise en compte pour le recalcul (date "jusque")
  • les articles restant en stock avec 
    • la date du mouvement
    • la quantité
    • la valeur d'achat nette en devise de base du dossier
  • la quantité totale (qui doit correspondre à la quantité en stock)
  • le prix moyen pondéré des lignes présentées : somme ( q * prix ) / total q

Cet objet dispose d'un menu contextuel qui permet d'exporter ou de copier le contenu.


Le recalcul des informations FIFO ne s'effectue pas en temps réel. Il doit être déclenché manuellement via le menu "Mise à jour FIFO" du menu "Articles". Ce point de menu demande la date "jusque" déterminant le recalcul. Si un filtre est présent sur le signalétique des articles, celui-ci sera pris en compte et seuls les articles de ce filtre seront recalculés. Si aucun filtre n'est présent, le recalcul sera effectué pour l'ensemble des articles. Les articles non suivis en stock sont toujours exclus. La procédure de recalcul peut rencontrer des impossibilités : par exemple, des sorties supérieures aux entrées. De telles erreurs seront affichées dans un log en fin de procédure. Il faut noter que ce recalcul peut exiger un temps d'exécution très long.

Ce processus peut aussi être déclenché par code, éventuellement depuis une application externe :

Pour tous les articles :

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)
{
    // tenir compte des erreurs
}

Avec une condition sous la forme d'une clause where sur la table 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)
{
    // tenir compte des erreurs
}

 

Le calcul FIFO reparcourt l'ensemble des mouvements sur l'article recalculé, en tenant compte des hypothèses suivantes (qui peuvent induire un biais par rapport à la réalité) :

  • les mouvements sont séparés en entrées et sorties
  • seules les entrées donnent une valeur de prix affichée dans la colonne de droite de l'objet FifoPrices
  • un achat avec quantité négative est considéré comme une sortie. Sa valeur n'est pas prise en compte.
  • les entrées qui ne sont pas des achats sont valorisés au dernier prix d'achat antérieur
    • les entrées pures de stock via transfert de dépôt avec dépôt 1 vide avec quantité positive ou dépôt 2 vide avec q négative
    • les inventaires produisant une correction positive, si l'option "Prix / FIFO : tenir compte des prix des inventaires" est à NON
    • les ventes avec quantité négative
  • si l'option "Prix / FIFO : tenir compte des prix des inventaires" est à OUI, les inventaires produisant une correction positive sont traités comme des achats positifs. Leur prix est donc pris en compte.
  • la notion de dépôt n'est pas prise en compte. En conséquence, les transferts d'un dépôt vers un autre sont ignorés puisque tenant compte de cette dernière hypothèse, cela n'influe pas le prix.

Exclure certains mouvements

Il est possible d'exclure certaines lignes de ventes ou lignes d'achats de ce recalcul. Ceci est particulièrement nécessaire pour exclure les mouvements intercompany, où Mercator enregistre la même quantité vendue et la même quantité achetée à un prix intercompany spécifique. pour cela, il faut ajouter cette colonne dans LIGNES_V et/ou 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

Remarque importante : il est essentiel que cette fonctionnalité soit utilisée de façon judicieuse. A défaut, le résultat du calcul FIFO pourra être incorrect. Il est, par exemple, nécessaire que la somme des quantités cochées NO_FIFO soit nulle (somme des achats = somme des ventes). Ceci peut se vérifier par cette requête SQL :

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)

Deux rapports exploitant les informations FIFO sont mis à disposition :

Pour exécuter ces rapports, il est nécessaire de déclencher au préalable le recalcul FIFO selon une des méthodes décrite ci-dessus. (Lors de l'exécution du rapport, l'utilisateur ne doit plus sélectionner cette date). Il est donc nécessaire de veiller à ce que les articles repris dans ces rapports aient bien fait l'objet d'un recalcul FIFO à la même date.

Pour ces rapports : version minimale pour SQL Server = 2016