Mettre à jour le nom du client dans les documents

Dans cet exemple vous allez voir comment en quelques lignes il est possible de mettre à jour rapidement les données à l’intérieur de notre base de données.

Groupe ScriptÉvénement
ProgrammeAction sur Programme

Comme vous savez, les tableaux sont reliés entre eux à travers le champ spécial SubTable, cela permet de sélectionner une ligne de valeurs à partir d’un tableau différent de celui géré par la fiche actuelle. Le choix de cette ligne permet de remplir automatiquement les champs souhaités. Puisque c’est une copie de données et pas d’un lien, si, par exemple, vous changez le nom du client dans sa fiche, il resterait néanmoins l’ancien à l’intérieur des documents où il est rappelé. Grâce à ce script on peut réaligner les noms à l’intérieur du document.

Pour utiliser ce script il est nécessaire de le traiter comme une action sur le logiciel, en vous permettant ainsi de le lancer directement quand vous voulez.

table_rows  = database.getsql("SELECT * FROM names")
nrows = table_rows.countrows()
rows = table_rows.getrows()

D’abord nous créons le tableau des nominatifs où sont insérés nos client en récupérant les lignes et leur nombre.

for i = 1,nrows do
        gguid = rows[i].getvalue("gguid")
        name = rows[i].getvalue("name")
        database.setsql("UPDATE invoices set customer='" .. name .. "' WHERE gguid_name='" .. gguid .. "'")
end

Dans ce cycle nous récupérons le gguid du nominatif et son nom pour le réinsérer dans les factures que l’utilisent, Pour qu’il soit actualisé.

Le système est certainement très rapide, mais il présent quelques problèmes.

Le premier est que, en écrivant la query sql de cette façon, si le nom du client avait à l’intérieur un sommet, il créerait une erreur. Pour le gérer nous vous rappelons qu’il suffit de les doubler ou utiliser la fonction convap comme dans cet exemple:

"update invoices set customers='" ... utility.convap(name) .. "' where ...."

Le deuxième problème est que, si c’est une base de données Cloud les modifications effectuées ne seraient pas synchronisées. La synchronisation en effet est basée sur d’autres valeurs et fonctions.

Si vous voulez effectuer la synchronisation, ce système serait quand même faux, car après la mise à jour des données, il ne serait plus possible de contrôler celles qui ont été modifiées. Cela signifierait de renvoyer tous les clients vers le serveur bien qu’aucune modification ne leur ait été apportée.

S’il est nécessaire d’effectuer une synchronisation de données il y a toujours deux étapes à faire à travers les scripts.

database.setsql(UPDATE invoices SET tid=" .. tostring(utility.tid()) .. " WHERE gguid_name='" .. gname .. "'")

D’abors il faut mettre à jour le tid avec la date actuelle parce qu’il s’agit du calendrier de la ligne de données.

Le logiciel dans la phase de synchronisation vérifie quelles lignes ont été mises à jour depuis la dernière fois et n’envoie que celles-ci.

table_rows = database.getsql("SELECT * FROM invoices WHERE gguid_name=' " .. gname .. "'")
nrows = table_rows.countrows()
rows  = table_rows.getrows()
for i = 1,nrows do
        database.addsyncbox("invoices",rows[i].getvalue("gguid"))
end 

La deuxième opération en réalité est effectuée seulement s’il faut utiliser le script même sur les appareils mobiles. Ceux-ci, en effet, ont un système de synchronisation qui classe les données à envoyer d’une façon légèrement différente.

Dans cette partie du script sont récupérées toutes les lignes des facture qu’utilise notre client et elles sont marquées pour être envoyées à la synchronisation avec la commande addsyncbox.

Dernière note: rappelez-vous que comme filtre c’est toujours une bonne règle d’ajouter “and eli=0” pour éviter de récupérer les données que actuellement sont à la corbeille.