MOVIMENTI E PREZZI
Appurare che la tabella MOVIMENTI funzioni correttamente controllando carichi, scarichi e giacenza (NB rispetto agli esercizi precedenti, le quantità negative degli items in scarico sono state trasformate in quantità positive; l’espressione nella query Q_MOVIMENTIGIACENZA riporta quindi ora il segno “-” anziché il segno “+”). A questo punto affrontiamo la questione dei prezzi, un aspetto fondamentale per chi fa industria su EVE Online. Inseriamo due nuovi campi nella tabella MOVIMENTI, entrambi “valuta”: PREZZOACQUISTO e PREZZOVENDITA. Il primo è legato al campo CARICO (quando entra un item in magazzino indichiamo il prezzo unitario di acquisto); il secondo è legato al campo SCARICO (quando esce un item dal magazzino indichiamo il prezzo unitario di vendita). Assegnare i prezzi in tabella MOVIMENTI sembra, almeno in questa fase, la scelta più idonea. Il mercato di EVE Online infatti, con i prezzi che variano continuamente, suggerisce di non assegnare ad ogni item, utilizzando la relativa scheda in tabella ITEMS, un prezzo praticamente fisso. Creati i due nuovi campi, è necessario andare subito ad aggiungerli alla maschera M_MOVIMENTI e alla sottomaschera SM_MOVIMENTI, così che comprendano anche i costi di acquisto e vendita degli items (la sottomaschera SM_MOVIMENTI visualizza questi dati all’interno della maschera M_ITEMS2, mostrando lo storico carichi e scarichi e relativi prezzi per ogni singolo item; i due nuovi campi, in questo caso, vanno aggiunti nella query di origine dati della sottomaschera).
ACQUISTO E VENDITA
L’aggiunta alla tabella MOVIMENTI dei due campi “valuta” PREZZOACQUISTO e PREZZOVENDITA, consente di avere subito un riscontro su quanto acquistato, che entra in magazzino, e quanto venduto, che esce dal magazzino. Inserire in maschera M_MOVIMENTI due caselle di testo, impostandole con valore “Valuta”; nelle rispettive Origine Dati inserire le formule:
= [CARICO] * [PREZZOACQUISTO]
= [SCARICO] * [PREZZOVENDITA]
La prima casella di testo (TOTALE ACQUISTO) restituisce direttamente in maschera il totale acquistato (quantità di carico per prezzo unitario di acquisto); la seconda casella di testo (TOTALE VENDITA) restituisce in maschera il totale venduto (quantità di scarico per prezzo unitario di vendita). Due semplici calcoli per avere un quadro dettagliato dei movimenti e delle relative spese e ricavi (l’aggiunta di caselle di testo con formule va fatta anche nella sottomaschera SM_MOVIMENTI).
CAMPI CALCOLATI DA SOTTOMASCHERA A MASCHERA
L’aggiunta alla tabella MOVIMENTI dei due campi “valuta” PREZZOACQUISTO e PREZZOVENDITA, genera a questo punto la necessità di dover sapere, per ogni item, il prezzo medio a cui viene acquistato (e volendo il prezzo medio a cui viene venduto). Innanzitutto conviene creare una query apposita, così come fatto per la giacenza degli items (Q_MOVIMENTIGIACENZA). La nuova query, Q_MOVIMENTIMEDIAPREZZI, va realizzata prendendo dalla tabella MOVIMENTI i campi ID_ITEM, PREZZOACQUISTO e PREZZOVENDITA, e impostando “raggruppamento” sul primo e “media” sul secondo e terzo. Una query che restituisce il prezzo medio di acquisto e il prezzo medio di vendita degli items. Questo dato è bene visualizzarlo in maschera M_ITEMS2 (perché già mostra, in sottomaschera, tutti i movimenti e i prezzi di un determinato item). Proprio come fatto per la giacenza, è sufficiente trascinare la query Q_MOVIMENTIMEDIAPREZZI all’interno della maschera M_ITEMS2: viene creata una sottomaschera che mostra la media prezzi di acquisto e la media prezzi di vendita. Stavolta vediamo però anche un altra strada, una strada che mostra i dati in casella di testo, che non genera alcuna sottomaschera e il cui risultato finale è indubbiamente più elegante. Andare in visualizzazione struttura della maschera M_ITEMS2; allargare il piè di pagina della sottomaschera SM_MOVIMENTI ed aggiungere una casella di testo (che in questo caso si chiama Testo16); su Origine Controllo della casella di testo immettere il valore:
=Media([PREZZOACQUISTO])
Creare ora una casella di testo sulla maschera M_ITEMS2; il nome di questa casella di testo non ci interessa, ma è invece importante il nome della casella di testo inserita nella sottomaschera SM_MOVIMENTI. Su Origine Controllo della casella di testo creata sulla maschera M_ITEMS2 richiamare il valore della casella di testo creata in sottomaschera immettendo il valore
=[SM_MOVIMENTI]![Testo16]
Questa procedura prende il prezzo medio di acquisto dell’item in sottomaschera SM_MOVIMENTI e lo visualizza direttamente in maschera M_ITEMS2. Fare altrettanto con il prezzo medio di vendita, quindi impostare tutte le caselle di testo, sia in sottomaschera che in maschera, in valore “Valuta”. Con la stessa procedura delle caselle di testo nel piè di pagina della sottomaschera che passano dati a caselle di testo nella maschera, si può migliorare anche la visualizzazione della giacenza. Negli articoli precedenti il dato sulla giacenza degli items è stato riportato in maschera M_ITEMS2 trascinandoci una query (Q_MOVIMENTIGIACENZA) che automaticamente ha generato una sottomaschera (SM_MOVIMENTIGIACENZA). La procedura per la media dei prezzi di acquisto e di vendita degli items, come visto, non genera alcuna sottomaschera, rivelandosi così più elegante. Utilizziamo quindi la stessa procedura anche per il dato della giacenza. Attenzione però; come già visto in fase di query, la giacenza si ottiene in due passaggi: prima bisogna sommare tutti i carichi e tutti gli scarichi, poi calcolare la differenza. In piè di pagina della sottomaschera SM_MOVIMENTI vanno quindi create 3 nuove caselle di testo: la prima (Testo22) esegue la somma dei carichi, la seconda (Testo24) esegue la somma degli scarichi, la terza (Testo 26) esegue la differenza tra i due valori. In maschera M_ITEMS2 va creata una nuova casella di testo per richiamare la giacenza dalla casella Testo26. Rispettivamente, in Origine Controllo delle 4 caselle di testo vanno inseriti i seguenti valori:
= Somma ([CARICO])
= Somma ([SCARICO])
= [Testo22] – [Testo24]
= [SM_MOVIMENTI]![Testo26]
Ovviamente i valori di Testo22 e Testo24 non vanno richiamati in maschera M_ITEMS2, restano nascosti, servono solamente per generare il valore di rimanenza della casella Testo 26. Tutta questa procedura, semplicemente, ci porta ad avere una maschera M_ITEMS2, la maschera di dettaglio degli items, piena di valori interessanti quali i movimenti di acquisto e vendita, date e prezzi, la giacenza in magazzino, il prezzo medio di acquisto e di vendita.
MASCHERA ITEMS CON CASELLA COMBINATA
M_ITEMS2 diventa quindi una maschera molto interessante per gestire l’industria di EVE Online, con gli items che vengono visualizzati uno ad uno, in ordine alfabetico (grazie alla query Q_ITEMS vista negli esercizi precedenti… ma come fare se si vuole il dettagli di un determinato item? Potendo il database contenerne anche un numero elevato, scorrerli tutti non è una soluzione. Aprire la maschera M_ITEMS2 e posizionarsi sull’intestazione maschera, quindi inserirci una Casella Combinata. Annullare la creazione guidata. Andare in Origine Riga della casella combinata e scegliere la creazione di una query dalla tabella ITEMS. Scegliere i campi ID e ITEM, mettendo in ordine alfabetico per items quindi salvare. Tornare sulle proprietà della casella combinata, tab Formato, e indicare 2 come Numero Colonne e 0 come Larghezza Colonne. Questo passaggio fa sì che la casella combinata, che si genera dalla query, visualizzi soltanto il campo ITEM e tenga nascosto il campo ID. Ora è necessario far sì che la maschera M_ITEMS2 visualizzi l’item selezionato nella casella combinata. Andare nelle proprietà della maschera, Dati, Origine Record, per aprire la query Q_ITEMS che alimenta la maschera. Nella colonna ID, Criteri, pulsante dx, Genera, generare una espressione. All’interno del database, maschere, maschere caricate, fare doppio clic su CasellaCombinata32 (il nome assegnato alla casella combinata) per generare l’espressione. Chiudere e salvare. Una differenza dovrebbe già essere visibile: la maschera M_ITEMS2 non mostra alcun item, è vuota, ma ancora non riesce a mostrare l’item che si sceglie nella casella combinata. Andare sulle proprietà della casella combinata, evento, su aggiornamento, quindi generare il codice:
Private Sub CasellaCombinata32_AfterUpdate()
Me.Requery
End Sub
La casella combinata funziona e permette di selezionare, dall’elenco alfabetico degli items, un determinato item da visualizzare nella maschera M_ITEMS2. Possiamo salvare e chiudere, la maschera M_ITEMS2, con tutti i suoi dati e con la possibilità di raggiungere velocemente uno specifico item, può rendersi molto utile nella gestione quotidiana dell’industria di EVE Online
ARGOMENTI E FONTI
Questo articolo sul database di gestione di EVE Online affronta i seguenti argomenti: Casella Combinata, Casella di Testo da Sottomaschera a Maschera. Per realizzare correttamente questa parte del database sono state consultate le seguenti fonti:
Come filtrare i record di una maschera scegliendo da una casella combinata
Tutorial 123 – Microsoft Access – Esempio di carrello spesa (dal minuto 54:00)