Bloquons l'enregistrement d'une commande

Dans cet exemple nous voyons comment empêcher l’enregistrement d’une commande pour un client insolvable. Vu qu’il s’agit d’un système radical, nous allons diviser la procédure en deux scripts.

Le premier donnera une alarme à la sélection du client, tandis que le deuxième ne permettra pas d’enregistrer la commande si le client ou la condition d’impayé ne sont pas changés.

Groupe ScriptÉvénement
FicheValeur Changée

Comme nous avons déjà dit, le premier script sert pour informer l’utilisateur que le client sélectionné pour la commande est bloqué et cela servira pour éviter de créer la commande complète et découvrir seulement à la fin qu’il n’est pas possible l’enregistrer.

if datafield.name() == "gguid_customer" then
        t = database.getsql("SELECT insolvent FROM customers WHERE gguid='" .. datafield.getvalue()  .. "'")
        if t.countrows() > 0 then 
               rows = t.getrows()
               if  rows[1].getvalue("insolvent")  == 1 then
                       program.showerror("Attention the customer is insolvent. Could not save order!")
               end
        end
end

Nous interceptons quand le champ gguid_customer change. Cela est le champ de service du sous-tableau où il stocke le gguid de la sélection exécutée. Il est toujours mieux d’utiliser l’identifiant unique global gguid à la place du nom réel du client, cela permettra de le retrouver même si le nom est changé.

Nous lisons la valeur du champ Insolvent présent dans le tableau clients et vous affichons un message d’erreur si la valeur est un. Ce champ sera certainement un check sur la fiche du client.

Nous poursuivons avec le deuxième script qui va bloquer l’enregistrement de la commande.

Groupe ScriptÉvénement
FichePre-Enregistrement
t = database.getsql("SELECT insolvent FROM customers WHERE gguid='" ..  dataview.getvalue("gguid_customer")  .. "'")
if t.countrows() > 0 then
        rows = t.getrows()
        if  rows[1].getvalue("insolvent") == 1 then
               errorn.errocode = "E1"
               errorn.errormessage ="Attention the customer is insolvent. Could not save order!"
               do return end
        end
end

Comme vous pouvez noter cela est presque identique au premier, à l’exception de la valeur du gguid qui sera récupéré du dataview. La procédure est identique pour permettre de modifier l’état d’impayé du client. En effet on pourrait ouvrir la fiche de ce dernier et changer la valeur en gardant également la fiche de la commande ouverte.

La partie qui change est celle de la gestion de l’objet errorn. Son travail est de communiquer au logiciel les éventuelles erreurs. Dans ce cas nous forçons une erreur en saisissant un code, un message et en forçant la sortie du script.

Vu qu’il s’agit d’un pre-enregistrement, le logiciel sortira de la procédure Save de la fiche. Le code de l’erreur peut être n’importe quel vu quil nous permet d’identifier quelle partie du script l’a généré.