Créer un historique des coûts pour les articles

Dans cet exemple je vais vous montrer comment créer un historique des coûts des articles achetés et de cette façon pour chaque article vous pourrez analyser son évolution.

Groupe ScriptÉvénement
FicheAprès Enregistrement

Ce script peur être inséré sur l’événement d’après-enregistrement de l’article. Il est nécessaire de changer ou réaliser les champs qui se différencient de votre base de données et de créer un tableau Coûtsarticles.

cost_table = database.getsql("SELECT * FROM cost_items WHERE gguidp='" ..
dataview.getvalue("gguid") .. "' ORDER by data DESC")

D’abord nous créons un objet cost_table en récupérant toutes les lignes de cost_items et nous vérifions que la valeur du champ gguidp correspond à la valeur du gguid de l’article actuel.

Il est possible aussi de chercher toutes le lignes avec les codes articles égaux à l’actuel, ça dépend de comment les tableaux ont été construits. Toutefois si vous décidez de changer de code, le lien avec les coûts sera automatiquement perdu. Au contraire, utiliser le gguid garantit que, en changeant toutes les données de l’article, aucun historique de coûts soit perdu.

Veuillez noter que la chaîne sql ordonne de manière descendante les lignes des coûts, de cette façon vous pouvez être sûr que la première ligne correspond au dernier coût enregistré.

Vote    = false
nr = cost_table.countrows()
rows = cost_table.getrows()

Nous créons une variable Vote que nous utiliserons pour vérifier d’il faut enregistrer le cout de l’article ou pas. Après nous extrayons également le nombre de lignes et les lignes elles-mêmes de cost_table.

if nr == 0 then
        vote = true
else
        -- I proceed to check the current values
        cost = rows[1].getvalue("cost")
        if cost ~= dataview.getvalue("cost") then
               vote = true
        end
end

Si le nombre de lignes est égal à zéro et donc les coûts n’ont jamais été enregistrés, alors nous définissons la variable Vote à True.

S’il y a des lignes il faut extrapoler le coût de la première ligne qui qui contiendra la dernière valeur enregistrée, car ceux-ci sont ordonnés de manière descendante.

Si le coût est différent de l’article actuel, nous définissons la variable Vote à True.

if vote == true then
        gridcost = dataview.getatable("cost_items")
        row = gridcost.adddatarow()
        row.setvalue("gguidp",dataview.getvalue("gguid"))
        row.setvalue("date",utilitygetnow())
        row.setvalue("ind",database.getind("cost_items"))
        row.setvalue("cost",dataview.getvalue("cost"))
        row.save()
end

Si Vote est égal à True, nous procédons à enregistrer les valeurs. D’abord nous ajoutons une nouvelle ligne à gridcost, c’est-à-dire le tableau supplémentaire dans la fiche de l’article. Après nous définissons le gguidp au gguid de l’article pour le trouver à la prochaine recherche, sélectionnons la date actuelle, l’indice ligne et la valeur de coût. Enfin nous enregistrons la ligne.

Ayant utilisé le gguidp pour garder la relation, il sera possible d’utiliser le tableau cost_items comme tableau supplémentaire pour avoir à disposition dans la fiche de l’article tout son historique.