Programmazione: eseguire calcoli e controlli con Visual Basic for Application

 

In questo articolo spiego come sia possibile utilizzare uno strumento importante e potente come il Visual Basic all'interno di Access senza essere per forza dei programmatori.
Ad esempio, eseguendo dei controlli su dei calcoli.

Ipotiziamo di aver un database che contiene il ciclo di lavorazione di un articolo (Fig.1): se arriva un ordine da 1000 pezzi come faccio a calcolare il tempo di produzione?


Fig.1

Dobbiamo fare in modo che il sistema riconosca le lavorazioni in cui il tempo e' espresso per lotto (nel record deve esserci questa informazione) e che utilizzi una formula diversa per fare i conti.
Il comdando If......Then risultera' particolarmente utile.

Il ragionamento e' questo: se il tempo indicato e' per la produzione di un pezzo, bisogna moltiplicare 10 secondi per 1000 pezzi e dividere per 3600 per trovare le ore di lavoro; se il tempo indicato e' per lotto e' necessario dividere la quantita' in ordine 1000 per i 100 pezzi del lotto e moltiplicare il risultato ottenuto per 30.
Per ottenere il tempo in ore e' necessario dividere ancora per 60.

Nell' esempio ogni articolo ha il suo ciclo di lavoro.
Per convenzione diciamo che se il numero di pezzi per lotto e' 0 il tempo di lavoro si intende per pezzo.

Il database di esempio visto prima e' basato sulla seguente tabella (Fig.2):


Fig.2

Nella tabella c'e' un campo (Ore_Calcolate) in cui verra' salvato il risultato del calcolo.
Inoltre se il campo Min_Sec e' -1 (spuntato) il tempo viene considerato in minuti.

Il tasto Inserisci articoli esegue una routine su click (DoCmd.OpenForm "Nome della maschera") che apre la maschera di Fig.3 dove bisogna inserire il numero di articoli.


Fig.3

Il tasto Calcola esegue la routine che riporto e commento qui sotto, esegue i conteggi e salva i risultati nel campo Ore_Calcolate della tabella vista in precedenza.

 

On Error GoTo Fine

La riga sopra fa in modo che se il programma trova un errore,
anziche' bloccarsi, invia alla routine di nome Fine

'---------------------------------------------------------------
'Apre il database e le tabelle necessarie
'---------------------------------------------------------------

Dim db As Database, rst0 As Recordset
Dim Tempo As Double, Misura As Integer, Ordinato As Double
Dim Lotto As Double, Risultato As Double

Set db = CurrentDb
Set rst0 = db.OpenRecordset("Cicli", dbOpenDynaset)  ' "Cicli" e' il nome della tabella in cui salvo i risultati
'---------------------------------------------------------------
'Legge dalla maschera quanti articoli sono in ordine
'---------------------------------------------------------------


Ordinato = Me![Ordinato]  'Nome del campo un cui inserisco il numero di articoli

'---------------------------------------------------------------
'Legge i dati dalla tabella cicli
'---------------------------------------------------------------


Vai al primo record
rst0.MoveFirst

Do Until rst0.EOF

Edit ci serve perche' dovremo scrivere nella tabella 
rst0.Edit

Tempo = 0
If Not IsNull(rst0("tempo")) Then Tempo = rst0("tempo")

If Not IsNull e' stato scritto per evitare che, nel caso in cui nel campo tempo non vi siano dati e
quindi vi sia il valore nullo, il programma non generi errori. In pratica la variabile Tempo viene forzata
a 0 e, se nel campo tempo della tabella cicli non vi e' un valore nullo, la variabile prende tale valore.


Lotto = 0
If Not IsNull(rst0("Lotto")) Then Lotto = rst0("Lotto")

Misura = rst0("Min_Sec")
If Misura = -1 Then Tempo = Tempo * 60

Abbiamo visto sopra che se il campo min_sec della tabella cicli vale -1 (Vero il tempo in minuti
viene trasformato in secondi.

Sotto invece si eseguono i calcoli in ore in funzione della lavorazione, ovvero del numero di pezzi
per lotto

If Lotto = 0 Then Risultato = (Tempo * Ordinato) / 3600
If Lotto > 0 Then Risultato = (Tempo / Lotto) * Ordinato / 3600


Fatto il calcolo si salvano i dati nella tabella, prima scrivendoli nel campo e poi usando il metodo update

rst0("Ore_Calcolate") = Risultato

rst0.Update

Si passa a nuovo record per un nuovo calcolo fino al termine della tabella
 

rst0.MoveNext
Loop

rst0.Close
db.Close

Apriamo la maschera e vediamo i calcoli
 

DoCmd.OpenForm "Cicli_Calcolo"

Fine:
Close
MsgBox Err.Description
Exit Sub

End Sub

 

A questo punto verra' visualizzata la maschera riassuntiva di sola lettura (Fig.4) che mostra i risultati dei calcoli.


Fig.5

Buon lavoro.

 

 

Ultimi Articoli

01.05.2017
Proteggere Access
11.03.2017
Perche' imparare il VBScript
22.08.2016
Rubrica con VBScript - Parte 2
28.07.2016
Rubbrica con VBScript - Parte 1
15.12.2015
Raccolta dati da sito web