Database in Excel - Gestione Magazzino. - dal 04/09/04 pagina vista: volte

Ancora un'altro esempio di un progetto di inserimento, consultazione, carico, scarico articoli in un database.

Sempre per agganciarsi all'utilizzo degli indici riga (vedi articolo "Database - Videoteca" su questo sito) e per confermare che il VBA ci consente un'ampia diversificazione di procedure per ottenere uno stesso obiettivo (vedi articolo "Database - Gest. Magazzino" sull'altro sito), presento questo esercizio.

Ovviamente ogni progetto va sviluppato in funzione dei risultati che vogliamo ottenere, ma le routine di base gira e gira sono sempre le stesse.

Comunque ho diviso la gestione in due operazioni distinte: la prima è l'inserimento e/o la consultazione di articoli. In questa fase è possibile insieme all'inserimento di un nuovo articolo, effettuare contemporaneamente il carico e la definizione del valore di scorta che si intende impostare per l'articolo stesso. La seconda operazione è relativa al carico/scarico di articoli già inseriti.

Vediamo le prime 2 necessità operative per questo progetto:

  • Inserimento Nuovi articoli

  • Consultazione Articoli presenti

Queste due necessità sono soddisfatte con l'impiego di una Userform : All'avvio della Userform una istruzione provvede a trovare la prima riga libera in modo che dopo aver scritto i dati nelle Textbox, sia possibile inserirli, tramite il pulsante "Registra" nei campi della riga predisposta:

  • Private Sub UserForm_Activate()
    Ri = ActiveSheet.[A1].End(xlDown).Row + 1
    For I = 1 To 10
    UserForm1.Controls("TextBox" & I).Text = Sheets(1).Cells(Ri, I).Value
    Next
    End Sub

La variabile "Ri" è stata dichiarata pubblica e inserita il Generale - Dichiarazioni del modulo Userform e all'avvio chiaramente le Textbox si presenteranno vuote, MA pronte per accogliere dati. Vediamo un'immagine della Form

Nella Userform sono presenti due OptionButton : "Inserimento Articoli" (attivata di default) e "Consultazione Articoli"; se attiviamo questa seconda opzione otteniamo l'abilitazione dello ScrollBar1 (di default impostato a Enabled = False) che consentirà la consultazione degli articoli presenti nel database, e disabilita il pulsante "Registra Articolo". Se vorremo ritornare a "Inserimento Articoli" basterà selezionare l'opzione e abiliteremo/disabiliteremo pulsante e scrollbar, riattivando la selezione della prima riga libera. In pratica la Userform la usiamo o per inserire articoli, o per consultarli.

Le Textbox "Scarico", "Giacenza" e "Valore" sono impostate di default Enabled = False : servono solo come consultazione. Sono inoltre presenti tre ComboBox collegate tramite il RowSource (quelle sotto "Controllo esistenza codice o articolo") ai tre campi del database: "CodArt", "CodForn" "Descrizione" e servono solo, durante un inserimento, a controllare se esiste già un articolo con i dati che stiamo inserendo; è solo un controllo visivo ma che aiuta a non creare doppioni.

Il pulsante "Registra Articolo" serve per trasferire i dati delle TextBox nelle celle della riga libera. Ho previsto diversi controlli che si assicurano di completare i campi eventualmente dimenticati o lasciati vuoti, e solo un controllo che se la Textbox  "Descrizione" è vuota, si avvisi della necessità di scrivere il nome dell'articolo, uscendo dalla routine. Potrete leggere le istruzioni previste scaricando il file.

Vediamo ora le altre necessità operative, e osserviamo come si presenta la "Consolle di comando", cioè la zona del Foglio contenente i pulsanti e l'inizio della tabella:

I primi due pulsanti gialli descrivono chiaramente la loro funzione (e chiamano le form relative), il terzo pulsante serve a controllare i valori "Giacenza" con il valore di "Scorta" minima (o limite di sottoscorta). E' collegato ad una macro che avvisa in tre casi:

  1. se il valore di "scorta" non esiste (se è a zero)

  2. se la giacenza è inferiore a scorta (siamo sottoscorta)

  3. se la giacenza è al limite di scorta (stessi valori)

Sono presenti quattro OptionButton che hanno il compito di predisporre il tipo di ordinamento dati attraverso il pulsante "Ordina". Possiamo quindi scegliere un tipo di ordinamento prima di chiamare la Userform per l'inserimento; risulterà facilitata la ricerca se esiste già un articolo, trovandoli in ordine alfabetico nella rispettiva combobox del campo ordinato.

In H1 è stata inserita la funzione =CONTA.VALORI(A3:A10000) che ci dirà quanti articoli sono presenti, e in J1 la funzione =SOMMA(J3:J10000) che ci restituisce il valore totale delle giacenze. La colonna H (giacenza) da H3 a H10000 porta la formula (in ogni cella) per la differenza tra Carico e Scarico (=F3-G3 e seguenti). La colonna J invece contiene una semplice moltiplicazione: Giacenza per Costo (=H3*E3 e seguenti).

Passiamo ora ad esaminare come sono stata impostate le altre necessità fondamentali per la gestione di:

  • Carico

  • Scarico

Ho previsto una seconda Userform, richiamabile dall'apposito pulsante della "Consolle", e all'avvio si presenta così:

Per poter eseguire operazioni di carico/scarico è necessario rintracciare l'articolo su cui operare; ho previsto tre opzioni di ricerca: per codice articolo, per codice fornitore, per descrizione articolo. A secondo dell'opzione scelta, si rende visibile una ComboBox che porterà l'elenco degli articoli presenti per il campo (opzione) scelto; un click sul valore che vorremo caricare/scaricare e trasferiamo il nome  nella TextBox "Cosa Cercare"; a questo punto ho previsto due modalità per la ricerca:

  • con la pressione sul pulsante "Cerca" attiviamo un ciclo che scorrerà tutte le celle del campo selezionato, rintracciando l'indice riga del valore corrispondente al valore presente nella Textbox, e predisponendo poi le celle, stessa riga, a ricevere la "Quantità" da caricare o scaricare. Contemporaneamente vedremo nelle TextBox "Giacenza" e "Scorta" i valori relativi all'articolo selezionato. Queste due Textbox sono state rese Enabled = False perchè servono solo di consultazione valori.

  • se attiviamo con un segno di spunta la casella di controllo (CheckBox) "Cerca su Digitazione", potremo ottenere due comportamenti: il primo è che se selezioniamo un dato in una delle ComboBox rese visibili dalla scelta di una opzione, poichè all'evento click nella combo corrisponde la copia del valore ivi selezionato, nella Textbox "Cosa cercare", sfruttiamo l'evento Change di questa Textbox per svolgere in automatico il ciclo di ricerca, ed otterremo il risultato senza bisogno di premere il pulsante "Cerca". Oppure potremo manualmente digitare le lettere nella TextBox e ad ogni lettera digitata, attiviamo la ricerca su quella lettera e/o gruppo di lettere.

Con i due pulsanti "Carico" e "Scarico" effettueremo l'operazione scelta, che provvederà ad aggiungere la "Quantità" nel rispettivo campo Carico o Scarico. Sarà poi la differenza svolta con la formula nel corrispondente campo "Giacenza" a predisporre il valore della giacenza stessa. Ad ogni pressione su uno dei due pulsanti, verrà aggiornata la Textbox "Giacenza" aggiornando il valore. Sono presenti alcuni controlli sui due pulsanti: si verifica che non ci si sia dimenticati di scrivere la quantità, e per il pulsante "Scarico" si controlla anche che la quantità da scaricare non sia superiore alla giacenza; in questo caso si viene avvisati e si rende impossibile lo scarico. Veniamo altresì avvisanti se la nuova giacenza sarà inferiore al valore di scorta.

Sicuramente il programma è migliorabile, adattabile o ampliabile per esigenze personali, ma è un buon esempio che potrà servire ad altri anche così come sta.

 

File Scaricabile e consultabile :         Magaz2000.zip    394  Kb  

 

GBuon Lavoro.

prelevato sul sito www.ennius.altervista.org