Inseriamo i calcoli
In questo capitolo aggiungeremo al nostro ordine dei calcoli che dovrà eseguire automaticamente. L’obbiettivo è quello di calcolare il prezzo in base alla quantità di ogni articolo che sarà inserito e il prezzo totale dell’ordine.
Per prima cosa dovremo creare i campi che conterranno i valori calcolati all’interno delle varie tabelle. Una regola importante da ricordare è che ogni calcolo che eseguiremo dovrà avere un campo dove inserire il risultato, questo servirà per poter controllare ogni singolo passaggio calcolato dal programma.
Creiamo un campo di tipo valuta e con nome “Prezzo” all’interno della tabella Articoli.
Creiamo un campo di tipo Numero decimale e con nome “Qta” all’interno della tabella ordini_rows: sarà il campo che contiene la quantità dell’articolo da ordinare.
Creiamo un campo di tipo Valuta e con nome “Prezzo” all’interno della tabella ordini_rows.
Creiamo un campo di tipo valuta e con nome “Prezzo totale” all’interno della tabella ordini_rows.
Terminati i campi dovresti trovare in una situazione di questo tipo:
Modifichiamo ora il campo codice della tabella ordini_rows in modo che, quando sceglieremo un articolo, venga compilato anche il prezzo. Diamo quindi doppio click sul campo e impostiamo gli abbinamenti aggiungendo il prezzo.
Una volta impostati gli abbinamenti, clicca su Ok e salva le modifiche eseguite sul campo.
Dopo aver creato i campi possiamo inserire i nostri conti. Visto che i calcoli sono legati alle tabelle dovremo modificare ordini_rows e poi Ordini.
Andiamo nella pagina tabelle, diamo doppio click su ordini_rows e premiamo su Imposta nel parametro Espressioni di calcolo.
Aggiungiamo una nuova riga e, nella colonna di sinistra, selezioniamo il campo Prezzo totale, ossia quello che conterrà il risultato, mentre nella colonna di destra scriviamo [prezzo] * [qta]. È importante scrivere esattamente in questo modo perché le parentesi quadre informano il programma che quelli sono campi e quindi dovrà recuperare il loro attuale valore prima di eseguire l’operazione.
Diamo Ok, salviamo e proviamo subito a fare un nuovo ordine.
Si può vedere che sono presenti i nuovi campi che abbiamo creato all’interno di ordini_rows.
Aggiungiamo una riga e inseriamo dei valori dentro Qta e Prezzo per vedere calcolato in automatico il Prezzo totale. È possibile anche scrivere un valore all’interno del Prezzo totale poichè il campo è editabile, ma verrà cambiato automaticamente appena uno dei campi richiamati dall’espressione verrà modificato.
Ricorda che le espressioni vengono eseguite nell’ordine in cui sono state inserite e vengono ricalcolate tutte appena un campo da loro richiamato viene modificato.
Ora inseriamo il campo Prezzo totale sull’ordine seguendo un’altra strada: inseriamo il campo direttamente dall’editor dello schema.
Apriamo lo schema di default della tabella Ordini, apriamo il menu Azioni, selezioniamo Crea campo e per finire selezioniamo la voce Dettaglio inferiore destro.
Fatto questo, creiamo il campo di tipo Valuta e di nome Prezzo totale. Salviamo il campo, salviamo lo schema e chiudiamo.
Ora andiamo a inserire il calcolo all’interno della tabella Ordini. Come si può vedere nella colonna di destra si trovano i campi sia di ordini che di ordini_rows perché è possibile eseguire calcoli recuperando valori dalle tabelle aggiuntive.
Aggiungiamo la riga e selezioniamo sulla colonna di destra il campo Prezzo totale, mentre diamo un click sulla voce Prezzo totale di ordini_rows all’interno della tabella di destra.
L’espressione ha un formato particolare: dice al programma di recuperare la somma del campo Prezzo totale, infatti non è possibile recuperare un valore di una specifica riga da una tabella aggiuntiva, ma, in questo caso, soltanto la somma della colonna.
Se devi recuperare il valore di una riga specifica occorrerà inserire uno script LUA che eseguirà il calcolo.
Come sempre diamo Ok, salviamo e proviamo il nostro ordine.
Da questo momento, aggiungendo più righe e inserendo i valori sulle colonne della Quantità e del Prezzo, vedremo il Prezzo totale dell’ordine di volta in volta ricalcolato.