Blocchiamo il salvataggio di un ordine

In questo esempio vedremo come impedire il salvataggio di un ordine per un cliente insolvente. Visto che si tratta di un sistema molto drastico, divideremo la procedura in due script.

Il primo darà un allarme alla selezione del cliente, mentre il secondo non permetterà di salvare l’ordine se non viene cambiato il cliente o la condizione di insoluto.

Gruppo ScriptEvento
SchedaValore Cambiato

Come detto, il primo script servirà per informare l’utente che il cliente selezionato per l’ordine ha un blocco e questo servirà per evitare di creare l’ordine completo e scoprire soltanto alla fine che non è possibile salvarlo.

if datafield.name() == "gguid_cliente" then
        t = database.getsql("SELECT insolvente FROM clienti WHERE gguid='" .. datafield.getvalue()  .. "'")
        if t.countrows() > 0 then 
               righe = t.getrows()
               if  righe[1].getvalue("insolvente")  == 1 then
                       program.showerror("Attenzione il cliente è insolvente. Impossibile salvare l'ordine!")
               end
        end
end

Intercettiamo quando il campo gguid_cliente cambia. Questo è il campo di servizio della sotto tabella dove archivia il gguid della selezione eseguita. È sempre meglio usare l’identificativo univoco globale gguid al posto del nome effettivo del cliente, questo permette di rintracciarlo anche se il nome viene cambiato.

Leggiamo il valore del campo Insolvente presente all’interno della tabella clienti e visualizziamo un messaggio di errore se il valore è uno. Quasi sicuramente questo campo sarà un check sulla scheda del cliente.

Procediamo con il secondo script che bloccherà il salvataggio dell’ordine.

Gruppo ScriptEvento
SchedaPre Salvataggio
t = database.getsql("SELECT insolvente FROM clienti WHERE gguid='" ..  dataview.getvalue("gguid_cliente")  .. "'")
if t.countrows() > 0 then
        righe = t.getrows()
        if  righe[1].getvalue("insolvente") == 1 then
               errorn.errocode = "E1"
               errorn.errormessage ="Attenzione il cliente è insolvente. Impossibile salvare l'ordine!"
               do return end
        end
end

Come si può notare questo è praticamente identico al primo, ad eccezione del valore del gguid che sarà recuperato dal dataview. La procedura è identica per consentire di poter modificare lo stato di insoluto del cliente. Potremmo infatti aprire la scheda di quest’ultimo e cambiare il valore mantenendo anche la scheda dell’ordine aperta.

La parte che cambia è la gestione dell’oggetto errorn. Il suo lavoro è quello di comunicare al programma eventuali errori. In questo caso siamo noi a forzare un errore inserendo un codice, un messaggio e forzando l’uscita dallo script.

Visto che si tratta del pre-salvataggio, il programma uscirà dalla procedura Salva della scheda. Il codice dell’errore può essere qualsiasi visto che serve a noi per identificare quale parte dello script lo ha generato.