Scheda Anagrafica di Clienti e Fornitori

Vediamo come implementare la scheda delle anagrafiche di clienti e fornitori nel programma per magazzino in Access che stiamo creando. In questa lezione vedremo come visualizzare i dati dei clienti e fornitori all’interno di una form o maschera o finestra. Le form in Access sono delle finestre che è possibile ottimizzare per la visualizzazione dei dati all’utilizzatore del programma. Vediamo in visualizzazione struttura come devono essere organizzati i controlli all’interno delle nostre finestre. La predisposizione dei controlli all’interno della finestra ( layout ) è personalizzabile ed ognuno può distribuirli come vuole.

clienti

Maschera dei clienti in visualizzazione struttura

Anche la formattazione, colore e carattere del testo all’interno dei controlli, è personalizzabile, in Access basta utilizzare il menu “Formato“.

fornitori

Maschera dei fornitori in visualizzazione struttura

Per effettuare delle azioni al caricamento della finestra o soltanto per rispondere ad azioni dell’utente, dobbiamo lavorare a livello di codice VBA ( Visual Basic for Application ). In visualizzazione struttura maschera premiamo sul pulsante della barra degli strumenti “Codice” e verremo proiettati in un editor di testo, nel quale possiamo creare delle routine con un vero e proprio linguaggio di programmazione. In questo corso vedremo come creare un’applicazione per magazzino e non ci soffermeremo sui dettagli del linguaggio, nozioni che devono già essere conosciute.
Il codice necessario al funzionamento delle maschere dei clienti e dei fornitori è uguale per entrambe le maschere, avendo gli stessi controlli e stessi dati.

Option Compare Database
Option Explicit

Private Sub Abi_DblClick(Cancel As Integer)
    Banca_DblClick (Cancel)
End Sub

Private Sub Abi_NotInList(NewData As String, Response As Integer)
    MsgBox "Fare doppio clic sul campo per inserire
               una nuova banca!"
    Response = acDataErrContinue
End Sub

Private Sub Agenzia_DblClick(Cancel As Integer)
    Banca_DblClick (Cancel)
End Sub

Private Sub Agenzia_NotInList(NewData As String,
            Response As Integer)
    MsgBox "Fare doppio clic sul campo per inserire
            una nuova banca!"
    Response = acDataErrContinue
End Sub

Private Sub Banca_DblClick(Cancel As Integer)
    On Error GoTo Err_Banca_DblClick

    If Not IsNull(Me.OpenArgs) Then Exit Sub

    Dim lBan As Long
    lBan = 0

    If Not IsNull(Me!IDBanca) Then lBan = Me!IDBanca

    If lBan = 0 Then
        DoCmd.OpenForm "Banche", , , , , acDialog, "GotoNew"
    Else
        DoCmd.OpenForm "Banche", , , , , acDialog, lBan
    End If

    lBan = GetSetting("Calus", "RetVal", "Last", 0)
    If lBan <> 0 Then Me!IDBanca = lBan

    Me.Banca.Requery
    Me.ABI.Requery
    Me.CAB.Requery
    Me.Agenzia.Requery
    Me.Indirizzo_Banca.Requery
    Me.Comune_Banca.Requery

Exit_Banca_DblClick:
    Exit Sub
Err_Banca_DblClick:
    MsgBox Err.Description
    Resume Exit_Banca_DblClick
End Sub

Private Sub Banca_NotInList(NewData As String,
            Response As Integer)
    MsgBox "Fare doppio clic sul campo per inserire
             una nuova banca!"
    Response = acDataErrContinue
End Sub

Private Sub Cab_DblClick(Cancel As Integer)
    Banca_DblClick (Cancel)
End Sub

Private Sub Cab_NotInList(NewData As String,
          Response As Integer)
    MsgBox "Fare doppio clic sul campo per inserire
               una nuova banca!"
    Response = acDataErrContinue
End Sub

Private Sub Cap_AfterUpdate()
    Dim myData As dao.Database, myRec As dao.Recordset
    Set myData = CurrentDb
    Set myRec = myData.OpenRecordset("Comuni", dbOpenDynaset)

    Dim strSQL As String

    If Not IsNull(CAP.Value) Then
        strSQL = "CAP = '" & CAP.Value & "'"
        myRec.FindFirst strSQL
        If Not myRec.NoMatch Then
            Comune.Value = myRec!Comune.Value
            Provincia.Value = myRec!Provincia.Value
        End If
    End If

    myRec.Close
    Set myData = Nothing
End Sub

Private Sub Comune_AfterUpdate()
    Dim myData As dao.Database, myRec As dao.Recordset
    Set myData = CurrentDb
    Set myRec = myData.OpenRecordset("Comuni", dbOpenDynaset)

    Dim strSQL As String

    If Not IsNull(Comune.Value) Then
        strSQL = "Comune = '" & Comune.Value & "'"
        myRec.FindFirst strSQL
        If Not myRec.NoMatch Then
            CAP.Value = myRec!CAP.Value
            Provincia.Value = myRec!Provincia.Value
        End If
    End If

    myRec.Close
    Set myData = Nothing
End Sub

Private Sub Comune_Banca_DblClick(Cancel As Integer)
    Banca_DblClick (Cancel)
End Sub

Private Sub Comune_Banca_NotInList(NewData As String,
          Response As Integer)
    MsgBox "Fare doppio clic sul campo per inserire
              una nuova banca!"
    Response = acDataErrContinue
End Sub

Private Sub Form_Load()
    If Not IsNull(Me!IDCliente) And Not IsNull(Me.OpenArgs) Then
        If Me.OpenArgs = "GotoNew" Then
            DoCmd.DoMenuItem acFormBar, 3, 0, , acMenuVer70
            DoCmd.GoToRecord , , acNewRec
        Else
            Dim myRec As dao.Recordset
            Set myRec = Me.RecordsetClone
            myRec.FindFirst "IDCliente = " & Me.OpenArgs
            If Not myRec.NoMatch Then Me.Bookmark = myRec.Bookmark
            myRec.Close
        End If
    Else
        DoCmd.GoToRecord , , acLast
    End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
    If Not IsNull(Me!IDCliente) Then
        SaveSetting "Calus", "RetVal", "Last", Me!IDCliente
    Else
        SaveSetting "Calus", "RetVal", "Last", 0
    End If

    Forms![Pannello comandi].Visible = True
End Sub

Private Sub Indirizzo_Banca_DblClick(Cancel As Integer)
    Banca_DblClick (Cancel)
End Sub

Private Sub Indirizzo_Banca_NotInList(NewData As String,
                 Response As Integer)
    MsgBox "Fare doppio clic sul campo per inserire
                     una nuova banca!"
    Response = acDataErrContinue
End Sub

Private Sub Tipo_Indirizzo_DblClick(Cancel As Integer)
    On Error GoTo Err_Tipo_Indirizzo_DblClick

    If Not IsNull(Me.OpenArgs) Then Exit Sub

    Dim strTipo As String
    strTipo = ""

    If Not IsNull(Me![Tipo Indirizzo]) Then
        strTipo = Me![Tipo Indirizzo]
    End If
    If strTipo = "" Then
        DoCmd.OpenForm "Tipi di Indirizzo",
              , , , , acDialog, "GotoNew"
    Else
        DoCmd.OpenForm "Tipi di Indirizzo",
              , , , , acDialog, DLookup("ID", "Tipo Indirizzo",
             "[Nome Tipo indirizzo] = '" & strTipo & "'")
    End If

    If GetSetting("Calus", "RetVal", "Last", 0) > 0 Then
        strTipo = DLookup("[Nome Tipo indirizzo]",
            "Tipo indirizzo", "ID = " &
            GetSetting("Calus", "RetVal", "Last", 0))
    Else
        strTipo = ""
    End If

    If strTipo <> "" Then Me![Tipo Indirizzo] = strTipo

    Me.Tipo_Indirizzo.Requery

Exit_Tipo_Indirizzo_DblClick:
    Exit Sub
Err_Tipo_Indirizzo_DblClick:
    MsgBox Err.Description
    Resume Exit_Tipo_Indirizzo_DblClick
End Sub

Private Sub Tipo_Indirizzo_NotInList(NewData As String,
          Response As Integer)
    MsgBox "Fare doppio clic sul campo per inserire
           un nuovo tipo di Indirizzo!"
    Response = acDataErrContinue
End Sub

Private Sub Titolo_DblClick(Cancel As Integer)
    On Error GoTo Err_Titolo_DblClick

    If Not IsNull(Me.OpenArgs) Then Exit Sub

    Dim strTit As String
    strTit = ""

    If Not IsNull(Me!Titolo) Then strTit = Me!Titolo

    If strTit = "" Then
        DoCmd.OpenForm "Titoli", , , , , acDialog, "GotoNew"
    Else
        DoCmd.OpenForm "Titoli", , , , ,
               acDialog, DLookup("ID", "Titoli",
                "[Nome Titolo] = '" & strTit & "'")
    End If

    If GetSetting("Calus", "RetVal", "Last", 0) > 0 Then
        strTit = DLookup("[Nome Titolo]", "Titoli", "ID = " &
               GetSetting("Calus", "RetVal", "Last", 0))
    Else
        strTit = ""
    End If

    If strTit <> "" Then Me!Titolo = strTit

    Me.Titolo.Requery

Exit_Titolo_DblClick:
    Exit Sub
Err_Titolo_DblClick:
    MsgBox Err.Description
    Resume Exit_Titolo_DblClick
End Sub

Private Sub Titolo_NotInList(NewData As String,
              Response As Integer)
    MsgBox "Fare doppio clic sul campo per inserire
              un nuovo titolo!"
    Response = acDataErrContinue
End Sub

Il codice è molto semplice da comprendere, in pratica abbiamo soltanto la necessità di mostrare una lista di banche, titoli e tipi di indirizzo che facendo doppio clic sul controllo, deve aprire una finestra modale per fare le modifiche, gli inserimenti e le eliminazioni dei valori dell’elenco; tutte nozioni che ho già spiegato in un articolo di qualche tempo fa sulla creazione delle finestre popup in Access.

<< Lezione PrecedenteLezione Successiva >>

Informazioni su Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.
Questa voce è stata pubblicata in Database e contrassegnata con . Contrassegna il permalink.