Condividi tramite

Tempi Macchina con Barcode

Anonimo
2019-12-03T09:44:42+00:00

Salve a tutti

ho realizzato un piccolo programmino che permette, attraverso un lettore di codice a barre, collegato al campo "BARCODE" di registrare il momento di start di una macchina operatrice e il momento in cui la lavorazione termina, con calcolo del tempo.

Il tutto attraverso la maschera "STATOMACCHINA". Il programma può funzionare anche senza l'ausilio del lettore di barcode, semplicemente scrivendo "START" e "STOP" nel campo "BARCODE".

quello che non riesco a creare è la possibilità, quando si utilizza il lettore di codice a barre, di attivare la segnalazione nel momento in cui vado a leggere il codice a barre, così come impostato, devo leggere il codice a barre e premere "INVIO" per farlo funzionare, mi chiedevo se esiste la possibilità di evitare il tasto "INVIO", ovvero con il click del lettore di barcode leggere, scrivere e dare invio in unica soluzione.

Altro problema è che posso indipendentemente selezionare start e stop, ossia posso anche selezionare prima stop e poi start e questo non va bene, vorrei un blocco allo stop se prima non è stato selezionato start, inoltre lo star deve bloccarsi e non deve essere selezionato due volte, così come per lo stop.

In pratica le due letture devono essere sequenziali e non devono poter essere invertite, inoltre una volta effettuate le due letture, si dovrà agire per forza sul pulsante "NUOVA LETTURA" per poter azzerare il tutto e ripetere, non come succede adesso che se seleziono nuovamente "START", ripete nuovamente la lettura.

Spero in un aiuto da parte vostra.

posto il link al programma per facilitare il tutto

https://www.dropbox.com/s/ztytmhp90lgmyf1/PROVA.accdb?dl=0

Grazie per la preziosa collaborazione

Ciro

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2019-12-04T08:45:30+00:00

ciao Ciro,

[...]

Cosa ne pensi?

[...]

mi pare che le osservazioni ci stiano tutte, prova questa soluzione, per il terzo barcode non ho implementato nulla...in caso lascio a te la palla... :-)....vedi intanto se ci siamo :

Option Compare Database

Option Explicit

Private Const strStart    As String = "start"

Private Const strStop     As String = "stop"

Private boolT             As Boolean

Private boolF             As Boolean

Private boolStop          As Boolean

Private Const strMessSTA  As String = "hai selezionato due volte start, seleziona stop"

Private Const strMessSTo  As String = "hai selezionato due volte stop, seleziona start"

#If VBA7 Then

    Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)

#Else

    Private Declare Sub Sleep Lib "kernel32" (ByVal Milliseconds As Long)

#End If

Private Sub BARCODE_Change()

With Me.BARCODE

    If Len(.Text) > 5 Then .Value = Null: Exit Sub

    If Not boolStop And .Text = strStop Then

        VBA.MsgBox prompt:="Non si parte con stop ma con start!", _

                   buttons:=vbCritical + vbOKOnly, _

                   Title:="Attenzione"

        Exit Sub

    End If

    If Len(.Text) > 0 Then

        setStatus Me.BARCODE, boolT, boolF

    End If

End With

End Sub

Private Sub setStatus(ByVal BARCODE As Access.TextBox, _

                      ByVal bt As Boolean, _

                      ByVal bf As Boolean)

With Me

    Select Case BARCODE.Text

        Case strStart

            If bt Then

                VBA.MsgBox prompt:=strMessSTA, _

                          buttons:=vbCritical + vbOKOnly, _

                          Title:="Attenzione"

                .BARCODE = Null

            Else

                .STATOSTART = strStart

                .DATE01 = VBA.Date()

                .TIME01 = VBA.Now()

                 boolT = True

                 boolStop = True

            End If

            boolF = False

            DoEvents

            Sleep 1500

            eraseTextBoxes

        Case strStop

            If bf Then

                VBA.MsgBox prompt:=strMessSTo, _

                          buttons:=vbCritical + vbOKOnly, _

                          Title:="Attenzione"

                .BARCODE = Null

                boolT = False

            Else

                .STATOSTOP = strStop

                .DATE02 = VBA.Date()

                .TIME02 = VBA.Now()

                boolF = True

                .BARCODE.Enabled = False

                 DoEvents

                Sleep 1500

                eraseTextBoxes

            End If

    End Select

 End With

End Sub

Private Sub eraseTextBoxes()

With Me

        .STATOSTOP = Null

        .DATE02 = Null

        .TIME02 = Null

        .STATOSTART = Null

        .DATE01 = Null

        .TIME01 = Null

        .BARCODE = Null

End With

End Sub

Private Sub cmdNewDatas_Click()

Me.BARCODE.Enabled = True

Me.BARCODE.SetFocus

boolT = False

eraseTextBoxes

End Sub

ciao, Sandro.

La risposta è stata utile?

2 persone hanno trovato utile questa risposta.
0 commenti Nessun commento

5 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2019-12-04T19:53:38+00:00

    ciao Ciro,

    meglio me.barcode=null che "" è più efficiente.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-12-04T19:14:20+00:00

    Ciao Sandro,

    così è perfetto, ho solo preferito sostituire l'istruzione:

    eraseTextBoxes

    con

    Me.BARCODE=""

    In tal modo la routine cancella solo il campo BARCODE predisponendolo per ricevere il nuovo comando lasciando evidenziati i dati di partenza e di stop

    Appena ne avrò la possibilità, ora sono via per uno dei miei soliti viaggi di lavoro, proverò a sostituire il pulsante "NUOVA LETTURA" con un barcode in modo che, l'operatore possa evitare di utilizzare completamente la tastiera e gestire tutto tramite il lettore di codice a barre.

    Grazie ancora per la tua professionalità e disponibilità.

    A presto

    Ciro

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2019-12-03T19:57:15+00:00

    Ciao Sandro

    grazie come sempre per la tua disponibilità e preziosa collaborazione, come suggerito ho fatto qualche test, in linea generale funziona e fa quello che serve, ci sono solo due cose che, se risolte risulterà perfetto:

    1. su apertura della maschera, se l'operatore seleziona STOP, il programma segnala stop nella casella e riporta data e ora, questo, se è possibile bisognerebbe evitarlo, un errore è sempre possibile, sia in maniera accidentale che voluto.
    2. una volta selezionato "START", il focus resta su BARCODE ma non cancella,  bisogna premere un qualsiasi tasto per azzerare il campo, se fosse possibile preferirei evitare che l'operatore possa in qualche modo interagire, quindi se fosse possibile cancellare subito dopo che sia stato riportato il DATA e TIME a seguito della scelta START, in tal modo la textbox BARCODE rimarrebbe subito pulita pronta a ricevere un nuovo input.

    Tieni conto che il tutto dovrà essere utilizzato da un operaio di una macchina operatrice tramite un lettore barcode, attraverso la lettura di due codici a barre, quindi l'operatore, in teoria, non dovrebbe neanche utilizzare la tastiera; addirittura pensavo di sostituire il pulsante "NUOVA LETTURA" con un terzo codice a barre che, su lettura/ modifica agirebbe come il pulsante.

    Cosa ne pensi?

    a presto

    Ciro

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2019-12-03T13:27:49+00:00

    ciao Ciro,

    modifica

    valuterei l'evento su modifica, prova a dare qualche test sul link modifica.

    Ciao, Sandro.

    Option Compare Database

    Option Explicit

    Private Const strStart    As String = "start"

    Private Const strStop     As String = "stop"

    Private boolT             As Boolean

    Private boolF             As Boolean

    Private Const strMessSTA  As String = "hai selezionato due volte start, seleziona stop"

    Private Const strMessSTo  As String = "hai selezionato due volte stop, seleziona start"

    Private Sub BARCODE_Change()

    If Len(Me.BARCODE.Text) > 5 Then Me.BARCODE.Value = Null: Exit Sub

    If Len(Me.BARCODE.Text) > 0 Then

        setStatus Me.BARCODE, boolT, boolF

    End If

    End Sub

    Private Sub setStatus(ByVal BARCODE As Access.TextBox, _

                          ByVal bt As Boolean, _

                          ByVal bf As Boolean)

    With Me

        Select Case BARCODE.Text

            Case strStart

                If bt Then

                    VBA.MsgBox prompt:=strMessSTA, _

                              buttons:=vbCritical + vbOKOnly, _

                              Title:="Attenzione"

                    .BARCODE = Null

                Else

                    .STATOSTART = strStart

                    .DATE01 = VBA.Date()

                    .TIME01 = VBA.Now()

                    boolT = True

                End If

                boolF = False

            Case strStop

                If bf Then

                    VBA.MsgBox prompt:=strMessSTo, _

                              buttons:=vbCritical + vbOKOnly, _

                              Title:="Attenzione"

                    .BARCODE = Null

                    boolT = False

                Else

                    .STATOSTOP = strStop

                    .DATE02 = VBA.Date()

                    .TIME02 = VBA.Now()

                    boolF = True

                    .BARCODE.Enabled = False

                End If

        End Select

     End With

    End Sub

    Private Sub eraseTextBoxes()

    With Me

            .STATOSTOP = Null

            .DATE02 = Null

            .TIME02 = Null

            .STATOSTART = Null

            .DATE01 = Null

            .TIME01 = Null

            .BARCODE = Null

    End With

    End Sub

    Private Sub cmdNewDatas_Click()

    Me.BARCODE.Enabled = True

    Me.BARCODE.SetFocus

    boolT = False

    eraseTextBoxes

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento