Aggiornare il nome del cliente dentro ai documenti

In questo esempio vedremo come in poche righe si possano aggiornare rapidamente i dati all’interno del nostro database.

Gruppo ScriptEvento
ProgrammaAzione su Programma

Come sapete, le tabelle sono collegate tra loro attraverso il campo speciale Sotto tabella, questo permette di selezionare una riga di valori da una tabella diversa da quella gestita dalla scheda attuale. La scelta di questa riga permette poi di compilare automaticamente i campi voluti. Poiché si tratta di una copia dei dati e non di un collegamento, se si cambiasse ad esempio il nome del cliente dalla sua scheda, rimarrebbe comunque quello vecchio all’interno dei documenti dove viene richiamato. Grazie a questo script potremo riallineare i nomi dentro al documento.

Per utilizzare questo script è necessario trattarlo come un’azione sul programma, permettendoci così di lanciarlo direttamente quando vogliamo.

Tabella = database.getsql("SELECT * FROM nominativi")
nrighe  = tabella.countrows()
righe   = tabella.getrows()

Per prima cosa creiamo la tabella nominativi dove sono inseriti i nostri clienti recuperando le righe e il loro numero.

for i = 1,nrighe do
        gguid = righe[i].getvalue("gguid")
        nome = righe[i].getvalue("nominativo")
        database.setsql("UPDATE fatture set cliente='" .. nome .. "' WHERE gguid_nominativo='" .. gguid .. "'")
end

In questo ciclo recuperiamo il gguid del nominativo e il suo nome per poterlo reinserire all’interno delle fatture che lo utilizzano, in modo tale che vanga aggiornato.

Il sistema è sicuramente molto veloce, ma presenta alcuni problemi.

Il primo è che, scrivendo la query sql in questo modo, se il nome del cliente avesse all’interno un apice, genererebbe un errore. Per gestirlo ricordiamo che è sufficiente raddoppiarli o utilizzare la funzione convap come in questo esempio:

"update fatture set cliente='" ... utility.convap(nome) .. "' where ...."

Il secondo problema è che se si trattasse di un database Cloud le modifiche eseguite non verrebbero sincronizzate. La sincronizzazione infatti si basa su altri valori e funzioni.

Se si volesse eseguire la sincronizzazione, questo sistema sarebbe comunque sbagliato perché dopo l’aggiornamento dei dati non sarebbe più possibile controllare quali sono stati modificati. Questo significherebbe rinviare tutti i clienti al server nonostante non siano state eseguite modifiche su di loro.

Se occorre effettuare una sincronizzazione dei dati ci sono sempre due passaggi da fare attraverso gli script.

database.setsql("UPDATE fatture SET tid=" .. tostring(utility.tid()) .. " WHERE gguid_nominativo='" .. gnominativo .. "'")

Per prima cosa bisogna aggiornare il tid con la data attuale perché si tratta del registro temporale della riga dati.

Il programma nella fase di sincronizzazione controlla quali righe sono state aggiornate dall’ultima volta e invia solo quelle.

tabella = database.getsql("SELECT * FROM fatture WHERE gguid_nominativo=' " .. gnominativo .. "'")
nrighe = tabella.countrows()
righe = tabella.getrows()
for i = 1,nrighe do
        database.addsyncbox("fatture",righe[i].getvalue("gguid"))
end 

La seconda operazione in realtà viene eseguita solo se occorre utilizzare lo script anche sui dispositivi mobili. Questi, infatti, hanno un sistema di sincronizzazione che classifica i dati da inviare in un modo leggermente diverso.

In questa parte dello script vengono recuperate tutte le righe delle fatture che utilizza il nostro cliente e vengono marcate per essere spedite alla sincronizzazione con il comando addsyncbox.

Ultima nota: ricordatevi che come filtro è sempre una buona norma aggiungere “and eli=0” per evitare di recuperare i dati che attualmente sono cestinati.