Contatta Lovato Damiano via mail
|  HOME  |  CURRICULUM  |  PROGETTI  |  GUESTBOOK  |          
 
PROGRAMMA PER LA GESTIONE DEL CONTO LAVORO UTILIZZANDO ACCESS
 

Agli inizi della mia carriera lavorativao mi sono occupato anche della gestione del conto lavoro. Le problematiche in tema sono le più diverse; innanzitutto gran parte dei gestionali in commercio permettono una gestione priva di controlli che li renderebbero troppo rigidi; è pertanto facile trovarsi con giacenze negative sui magazzini terzisti e finire per non avere un reale controllo sulle quantità presenti nei vari magazzini. Utilizzare eventuali registri di conto lavoro cartacei come si faceva un tempo lo ritengo estremamente negativo e a mio parere non fanno altro che creare maggior confusione. Uno dei limiti dei registri cartacei sta nel fatto che l' operatore deve scaricare il materiale dal magazzino terzista effettuando anche più registrazioni per una singola voce in quanto è necessario spesso scalare da più voci di carico; quando poi lo scarico deve avvenire tramite distinta base i problemi si moltiplicano esponenzialmente. Con questo programma in Access ho voluto creare un supporto valido alla gestione del conto lavoro; fin da subito ho identificato le seguenti caratteristiche indispensabili:

  • Non deve essere possibile effettuare uno scarico nel caso in cui non ci sia una quantità sufficiente di materiale nel magazzino per poterlo permettre.
  • Deve essere possibile scaricare sia tramite distinta base che non.
  • Deve essere possibile inserire bolle di movimentazione di materiale tra un terzsista ed un altro.
  • Deve essere possibile inserire bolle con destinazione diretta al terzista da parte di un fornitore.
  • Deve essere possibile ottenere un report di tutte le giacenze nei magazzini terzisti.
  • Deve essere possibile ottenere un report in grado di visualizzare tutti i movimenti sul magazzino terzista con relativa giacenza parziale.
Qui di seguito alcune delle finestre del programma e una sintesi dei controlli più rilevanti riferiti alle ruotine di carico e scarico.


Inserimento di un carico:

' 8) Controllare che non ci siano già carichi con stesso mittente, stesso terzista destinatario, stesso numero di bolla e stesso articolo (dello stesso anno altrimenti stesso numero di bolla e stesso articolo sarebbe possibile!!)
' 9) Controllare che non ci siano già carichi con stesso mittente, stesso terzista destinatario, stesso numero di bolla ma data diversa (dello stesso anno altrimenti stesso numero di bolla sarebbe possibile!!)
' 10) Controllare che non ci siano già carichi dello stesso articolo sul magazzino in date successive (sfalserebbe lo scarico a partire dal carico più vecchio)


Inserimento di uno scarico:

' 6) Controllare che non ci siano già scarichi con stesso terzista stesso numero bolla e stesso articolo (Disattivato perchè alcuni terzisti sulla stessa bolla era necessario scaricare tramite distinta e non e questo perchè erano pezzi da riparare)
' 7) Controllare il campo destinatario che non sia nullo o vuoto se il destinatario non è la ditta verifica che abbia un codice magazzino altrimenti possono sussitere problemi in fase di successivo carico del materiale
' 8) Nel caso di scarico tramite DI.BA.
' 8.1) Controllare che la distinta sia completa altrimenti segnala errore
' 8.2) Controllare che non ci siano già scarichi dello stesso articolo sul magazzino in date successive (sfalserebbe lo scarico a partire dal carico più vecchio)
' 8.3) Controllare che le giacenze dei componenti su magazzino terzista permettino di effettuare lo scarico
' 9) Nel caso di scarico normale
' 9.1) Controllare che non ci siano già scarichi dello stesso articolo sul magazzino in date successive (sfalserebbe lo scarico a partire dal carico più vecchio)
' 9.2) Controllare che le giacenze dei componenti su magazzino terzista permettino di effettuare lo scarico
' 10) Se erano stati rilevati errori di distinta base segnalalo tramite msgbox
' 11) Se non ci sono errori e lo scarico è tramite distinta base registra lo scarico nel database
' 12) Se non ci sono errori e lo scarico è normale registra lo scarico nel database
' 13) Inserisci il carico nel caso in cui la merce sia destinata ad un altro magazzino terzista

' 8) ------------------------------------------------------------------------------------
If MessaggioErrore = "" And GS_TipoScarico.Value = 1 Then
  ' Riempi il recordset con i sottocomponenti presenti in distinta base relativi al codice scelto
  Set rsSDB = CurrentDb.OpenRecordset("SELECT ID, CODARTICOLO, CODCOMPONENTE, QT FROM DistintaBase WHERE CODARTICOLO = '" & GS_CodiceArticolo.Value & "'", dbOpenDynaset)
  'Se in distinta base esiste l'articolo scelto procedi altrimenti segnala che l'articolo non ha distinta base
  If rsSDB.RecordCount <> 0 Then
    rsSDB.MoveFirst
    ' Per ogni riga finchè non si arriva alla fine del recordset (ossia per ogni componente della distinta)
    Do Until rsSDB.EOF
      ' Crea una array di valori da scaricare
      ReDim Preserve Componenti(i) 'aggiunge un elemento alla matrice
      ReDim Preserve ScaricoQtComp(i) 'aggiunge un elemento alla matrice
      ReDim Preserve QtDaScaricare(i) 'aggiunge un elemento alla matrice
      ReDim Preserve SommaQtArticolo(i) 'aggiunge un elemento alla matrice
      Componenti(i) = rsSDB("CODCOMPONENTE")
      ' 8.1) ------------------------------------------------------------------------------------
      ' Se il codice del sottocomponente è nullo o vuoto segnala che la distinta base non è corretta
      If (IsNull(Componenti(i)) Or (Componenti(i) = "")) Then
        DIBAError = "SI"
      End If
      ' Se la quantità del sottocomponente è nulla o vuota ponila a 0 altrimenti ponila al valore presente in distinta
      If (IsNull(rsSDB("QT")) Or (rsSDB("QT") = "")) Then
        ScaricoQtComp(i) = 0
      Else
        ScaricoQtComp(i) = rsSDB("QT")
      End If
      ' Calcola la quantità da scaricare moltiplicando la quantità in bolla e la quantità di sottocomponente necessario per ogni unità
      QtDaScaricare(i) = GS_Quantità * ScaricoQtComp(i)
      ' 8.2) ------------------------------------------------------------------------------------
      ' Verifica che non siano presenti altri scarichi dello stesso articolo sullo stesso magazzino con data successiva a quella scelta altrimenti potrebbe causare giacenze negative
      Set rsSCQ = CurrentDb.OpenRecordset("SELECT CODMAGAZZINO, ARTICOLO FROM Movimenti WHERE ARTICOLO = '" & Componenti(i) & "' AND DATA > #" & Format(GS_Data.Value, "mm/dd/yyyy") & "# AND CODMAGAZZINO = '" & GS_CodMag.Value & "' AND TIPO = 'SCARICO'", dbOpenDynaset)
      ' Nel caso in cui siano presenti segnala l'errore
      If rsSCQ.RecordCount <> 0 Then
        MessaggioErrore = MessaggioErrore & "Su magazzino " & GS_CodMag.Value & " ci sono scarichi di " & Componenti(i) & " in date successive al " & GS_Data.Value & vbCrLf
      Else
      ' 8.3) ------------------------------------------------------------------------------------
      ' Calcola le giacenze presenti raggruppate per codice magazzino e articolo con data inferiore a quella inserita
      Set rsSCQ = CurrentDb.OpenRecordset("SELECT CODMAGAZZINO, ARTICOLO, SUM(MOVIMENTO) as SOMMA FROM Movimenti WHERE (DATA <= #" & Format(GS_Data.Value, "mm/dd/yyyy") & "#) GROUP BY CODMAGAZZINO, ARTICOLO HAVING (ARTICOLO = '" & Componenti(i) & "' AND CODMAGAZZINO = '" & GS_CodMag.Value & "')", dbOpenDynaset)
      ' Se esistono giacenze del codice nel magazzino
      If rsSCQ.RecordCount <> 0 Then
        SommaQtArticolo(i) = rsSCQ("SOMMA")
        ' Verifica che la quantità da scaricare non sia maggiore della quantità presente in magazzino altrimenti segnala l'errore
        If QtDaScaricare(i) > SommaQtArticolo(i) Then
          MessaggioErrore = MessaggioErrore & "Su magazzino " & GS_CodMag.Value & " ci sono " & SommaQtArticolo(i) & " " & Componenti(i) & " non è possibile scaricarne " & QtDaScaricare(i) & vbCrLf
        End If
      Else
        ' Se il codice da scaricare non è presente nel magazzino segnala l'errore
        MessaggioErrore = MessaggioErrore & "Su magazzino " & GS_CodMag.Value & " non c'è alcuna giacenza di " & Componenti(i) & vbCrLf
      End If
    End If
    ' Procedi con il record successivo della distinta base
    i = i + 1
    rsSDB.MoveNext
  Loop
Else
  MessaggioErrore = "Si è scelto di scaricare tramite distinta base; ma il codice scelto non ha sottocomponenti!"
End If

Tramite il report delle giacenze con parziali divise per terzista e per articolo è possibile avere una situazione chiara; un altro report molto utile ed immediato fornisce l'elenco dei materiali che sono presenti in giacenza nel magazzino terzista. Per ottenere la somma parziale nel report è sufficiente settare l'apposito campo nella finestra delle proprietà come visibile qui sotto: