Italian Lettore barcode Ean13 con salvataggio e trasferimento file

tmtube73

Active Member
Licensed User
Buongiorno a tutti,

Avrei necessità di leggere barcode (non un qrcode) e dopo averlo letto chiedere la quantità IN LOOP
le letture vengono salvate in un array temporaneo.
un pulsante FINE che se cliccato SALVA le letture in un file di testo ggmmaaaa.txt locale e torna alla schermata iniziale

il file ggmmaaaa.txt conterrà
101321032103, 3
449884844646, 18
441421321321,810
e cosi via

Qualcuno può darmi qualche indicazione da dove partire?

Grazie.
 

tmtube73

Active Member
Licensed User
ho trovato questo esempio che funziona egregiamente a me serve leggere solo barcode quindi dovrò adattarlo

credo però che legga i barcode ma non salva in un file ciò che legge.
 

LucaMs

Expert
Licensed User
Longtime User
credo però che legga i barcode ma non salva in un file ciò che legge.
Ho appena provato quel progetto. Per salvare ti basta farlo nella Sub FoundBarcode.

a me serve leggere solo barcode quindi dovrò adattarlo
Vuoi disattivare il riconoscimento di QR Code? E' necessario? In attesa di risposta (una dozzina di ore? 😄) magari guardo come si possa fare.
 

LucaMs

Expert
Licensed User
Longtime User
magari guardo come si possa fare.
C'è voluto pochissimo, mezzo secondo.

Nella classe CameraExClass c'è il codice seguente:
B4X:
    #if B4A
    'CreateDetector (Array("QR_CODE","CODE_93"))
    'CreateDetector (Array("CODE_128", "CODE_93", "QR_CODE","ALL_FORMATS","EAN_13","EAN_8"))
    'CreateDetector (Array("CODE_128", "CODE_93"))
    CreateDetector (Array("ALL_FORMATS"))
    'CreateDetector (Array("EAN_13"))
In quel modo accetta tutti i formati, quindi dovresti modificare in questo modo (penso!):
B4X:
    #if B4A
        'CreateDetector (Array("QR_CODE","CODE_93"))
        'CreateDetector (Array("CODE_128", "CODE_93", "QR_CODE","ALL_FORMATS","EAN_13","EAN_8"))
        'CreateDetector (Array("CODE_128", "CODE_93"))
        'CreateDetector (Array("ALL_FORMATS"))
        'CreateDetector (Array("EAN_13"))
        CreateDetector (Array("CODE_128", "CODE_93", "EAN_13","EAN_8"))
Se necessario, aggiungi altri formati. Qui puoi trovarne altri.
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
grazie

per creare l'array letture e salvarle in un file ggmmaaaa.txt?
Sostituisci la Sub FoundBarcode con il codice seguente (non testato):
B4X:
Private Sub FoundBarcode (msg As String,tipo As Int)
    nativeMe.RunMethod("playTone", Null)
    Dim tim As Long = 100
    nativeMe.RunMethod("vibrateOnce", Array(tim))
  
        lblResult.Text = msg
        Label1.Visible=True
    StopCamera

    If tipo=2  And msg.Length=6 Then   'Farmaceutico
        lblResult.Text=Code39To32(msg)
    End If

    If tipo=512 And msg.Length<13 Then    ' upc
        lblResult.Text=upcToEan13(msg)
    End If

    Dim sf As Object = xui.Msgbox2Async(lblResult.Text, "Salvare nel file?", "Sì", "", "No", Null)
    Wait For (sf) Msgbox_Result (Result As Int)
    If Result = xui.DialogResponse_Positive Then
        'Conserva il formato-data corrente.
        Dim FormatoAttuale As String = DateTime.DateFormat
        'Cambia il formato-data come ggmmaaaa.
        DateTime.DateFormat = "ddMMyyyy"
        Dim NomeFile As String = DateTime.Date(DateTime.Now) & ".txt"
        Dim SB As StringBuilder
        SB.Initialize
        'Legge i codici salvati in precedenza, se il file esiste già.
        If File.Exists(File.DirInternal, NomeFile) Then
            SB.Append(File.ReadString(File.DirInternal, NomeFile) & CRLF)
        End If
        'Aggiunge il codice appena letto.
        SB.Append(lblResult.Text)
        File.WriteString(File.DirInternal, NomeFile, SB.ToString)
        'Ripristina il formato-data precedente.
        DateTime.DateFormat = FormatoAttuale
    End If

'    Msgbox(tipo,"tipoEan")
' tipo=32  ' ean13
' tipo=512 'upc
' tipo=64  'ean 8
' tipo=2  ' / ean 39  Farmaceutico=32 da codicificare
' tipo=1 ' ean128
End Sub
 
Last edited:

tmtube73

Active Member
Licensed User
C'è voluto pochissimo, mezzo secondo.

Nella classe CameraExClass c'è il codice seguente:
B4X:
    #if B4A
    'CreateDetector (Array("QR_CODE","CODE_93"))
    'CreateDetector (Array("CODE_128", "CODE_93", "QR_CODE","ALL_FORMATS","EAN_13","EAN_8"))
    'CreateDetector (Array("CODE_128", "CODE_93"))
    CreateDetector (Array("ALL_FORMATS"))
    'CreateDetector (Array("EAN_13"))
In quel modo accetta tutti i formati, quindi dovresti modificare in questo modo (penso!):
B4X:
    #if B4A
        'CreateDetector (Array("QR_CODE","CODE_93"))
        'CreateDetector (Array("CODE_128", "CODE_93", "QR_CODE","ALL_FORMATS","EAN_13","EAN_8"))
        'CreateDetector (Array("CODE_128", "CODE_93"))
        'CreateDetector (Array("ALL_FORMATS"))
        'CreateDetector (Array("EAN_13"))
        CreateDetector (Array("CODE_128", "CODE_93", "EAN_13","EAN_8"))
Se necessario, aggiungi altri formati. Qui puoi trovarne altri.
Non ho trovato il codice qui sopra indicato nell'esempio barcode nella classe CameraExClass dove l'hai visto?
 

tmtube73

Active Member
Licensed User
Sostituisci la Sub FoundBarcode con il codice seguente (non testato):
B4X:
Private Sub FoundBarcode (msg As String,tipo As Int)
    nativeMe.RunMethod("playTone", Null)
    Dim tim As Long = 100
    nativeMe.RunMethod("vibrateOnce", Array(tim))
 
        lblResult.Text = msg
        Label1.Visible=True
    StopCamera

    If tipo=2  And msg.Length=6 Then   'Farmaceutico
        lblResult.Text=Code39To32(msg)
    End If

    If tipo=512 And msg.Length<13 Then    ' upc
        lblResult.Text=upcToEan13(msg)
    End If

    Dim sf As Object = xui.Msgbox2Async(lblResult.Text, "Salvare nel file?", "Sì", "", "No", Null)
    Wait For (sf) Msgbox_Result (Result As Int)
    If Result = xui.DialogResponse_Positive Then
        'Conserva il formato-data corrente.
        Dim FormatoAttuale As String = DateTime.DateFormat
        'Cambia il formato-data come ggmmaaaa.
        DateTime.DateFormat = "ddMMyyyy"
        Dim NomeFile As String = DateTime.Date(DateTime.Now) & ".txt"
        Dim SB As StringBuilder
        SB.Initialize
        'Legge i codici salvati in precedenza, se il file esiste già.
        If File.Exists(File.DirInternal, NomeFile) Then
            SB.Append(File.ReadString(File.DirInternal, NomeFile) & CRLF)
        End If
        'Aggiunge il codice appena letto.
        SB.Append(lblResult.Text)
        File.WriteString(File.DirInternal, NomeFile, SB.ToString)
        'Ripristina il formato-data precedente.
        DateTime.DateFormat = FormatoAttuale
    End If

'    Msgbox(tipo,"tipoEan")
' tipo=32  ' ean13
' tipo=512 'upc
' tipo=64  'ean 8
' tipo=2  ' / ean 39  Farmaceutico=32 da codicificare
' tipo=1 ' ean128
End Sub

Una domanda, dove lo salva il file? non riesco a trovarlo.

La tua sub sembra funzionare ma ti spiego cosa mi servirebbe esattamente (valuto anche un tuo (o di chi vuole proporsi) preventivo costi per la realizzazione)

1. all'avvio dell'app solo al primo avvio chiede "che gruppo sei?" e l'operatore inserisce un numero o una stringa che viene salvata e non più chiesta.

2. dal secondo avvio in poi aprendo la app subito entra in modalità lettura barcode senza dover cliccare la macchina fotografica sotto

3. adesso legge un barcode e ogni volta chiede se voglio salvarlo nel file invece dovrebbe essere un loop cos
legge barcode - chiede quantità - legge barcode - chiede quantità - legge barcode - chiede quantità - (i dati li salva in un array temporaneo)

4. un pulsante "trasmetti file" che se cliccato salva gli elementi dell'array che sono le letture (barcode, qta) in un file una lettura per riga
barcode1, 12
barcode2,870
.....
barcodeN, q.tà

il nome del file è gruppo_ggmmaaaa.txt
dopo aver salvato il file lo carica in una cartella da me indicata tramite FTP e verifica se il file caricato è identico al file locale.
se il controllo da esito positivo sposta quel file appena trasmesso in una sottocartella di nome "caricati" altrimenti visualizza messaggio errore di trasferimento e dovrà permettere di riprovare il caricamento successivamente per esempio quando la connessione dati torna ad essere presente.
 

tmtube73

Active Member
Licensed User
PS nella memoria del telefono ho trovato in android\data\FqGr.Bq una cartella files ma era vuota e io ad ogni lettura di barcode ho cliccato SI di salvare la lettura nel file.
 

Xfood

Expert
Licensed User
Una domanda, dove lo salva il file? non riesco a trovarlo.

La tua sub sembra funzionare ma ti spiego cosa mi servirebbe esattamente (valuto anche un tuo (o di chi vuole proporsi) preventivo costi per la realizzazione)

1. all'avvio dell'app solo al primo avvio chiede "che gruppo sei?" e l'operatore inserisce un numero o una stringa che viene salvata e non più chiesta.

2. dal secondo avvio in poi aprendo la app subito entra in modalità lettura barcode senza dover cliccare la macchina fotografica sotto

3. adesso legge un barcode e ogni volta chiede se voglio salvarlo nel file invece dovrebbe essere un loop cos
legge barcode - chiede quantità - legge barcode - chiede quantità - legge barcode - chiede quantità - (i dati li salva in un array temporaneo)

4. un pulsante "trasmetti file" che se cliccato salva gli elementi dell'array che sono le letture (barcode, qta) in un file una lettura per riga
barcode1, 12
barcode2,870
.....
barcodeN, q.tà

il nome del file è gruppo_ggmmaaaa.txt
dopo aver salvato il file lo carica in una cartella da me indicata tramite FTP e verifica se il file caricato è identico al file locale.
se il controllo da esito positivo sposta quel file appena trasmesso in una sottocartella di nome "caricati" altrimenti visualizza messaggio errore di trasferimento e dovrà permettere di riprovare il caricamento successivamente per esempio quando la connessione dati torna ad essere presente.
Controlla se questo si avvicina di piu alle tue esigenze
 

shadow

Active Member
Licensed User
Longtime User
Ciao,
Mi ricordo di una vecchia discussione di xfood, dove aveva postato un esempio per la lettura dei barcode. A suo tempo mi sono divertito a fare un piccolo progetto, partendo dal suo esempio pubblicato. Forse ti potrebbe ritornate utile, nel caso svilupparsi tu l'app. Ho ritrovato il link, te lo lascio nel caso ci vuoi dare uno sguardo.
 

tmtube73

Active Member
Licensed User
Ciao,
Mi ricordo di una vecchia discussione di xfood, dove aveva postato un esempio per la lettura dei barcode. A suo tempo mi sono divertito a fare un piccolo progetto, partendo dal suo esempio pubblicato. Forse ti potrebbe ritornate utile, nel caso svilupparsi tu l'app. Ho ritrovato il link, te lo lascio nel caso ci vuoi dare uno sguardo.
si è proprio l'esempio da cui sono partito ma gli mancano alcune cose che ho scritto qui in un post precedente per ottenere l'app che serve a me
valuto preventivi da parte vostra per la realizzazione (necessaria partita iva)

Grazie.
 

Xfood

Expert
Licensed User
Provato, forse sbaglio qualcosa io ma non legge i barcode come l'altro esempio si avvia un riquadro nero con linea rossa ma non legge mentre l'altro esempio legge subito anche se non inquadro benissimo il barcode
Appena provata, legge i barcode.. senza problemi , almeno sul mio dispositivo note 8, al primo avvio dai i permessi della fotocamera?, immaggino di si.
Poi basta premere una volta su scan, legge sempre a ripetizione, e popola una listview a destra dello schermo
 

tmtube73

Active Member
Licensed User
stranamente non mi ha chiesto permessi, il mio è un oppo, l'altra app funziona. non saprei il motivo.
 

Xfood

Expert
Licensed User

tmtube73

Active Member
Licensed User
Era per darti un'idea, eventualmente il sorgente e' il mio, insieme a questo..

Consulta "Raccolta Ordini PDT"


E questo

Quale si adatta alle tue esigenze?

le mie esigenze sono esattamente queste: (valuto preventivi ma solo da professionisti con partita iva)
partendo da questo esempio esempio barcode
i primi due punti li ho già fatti, devo fare dal punto 3 in poi

1. all'avvio dell'app solo al primo avvio chiede "che gruppo sei?" e l'operatore inserisce un numero e clicca tasto conferma e salva il gruppo in un file gruppo.txt
oppure tasto esci esce dalla app (questo punto l'ho già fatto partendo dall'esempio)

2. dal secondo avvio in poi aprendo la app subito entra in modalità lettura barcode senza dover cliccare la macchina fotografica sotto (già fatto)

3. avviata la modalità lettura barcode appena legge il barcode deve apparire un prompt che chiede la quantità in loop
i barcode letti e le quantità inserite le salva in in array tempoeraneo, poi quando clicco un pulsante "fine lettura barcode"
salva l'array costituito da tanti elementi array(0)(barcode, qta) array(1)(barcode1, qta1) e cosi via.... in un file di nome gruppo_ggmmaaaa.txt
dopo aver salvato il file torna in un menu che ha due pulsanti
"leggi barcode" che riprende la lettura dei barcode come qui sopra spiegato
"trasferisci barcode" che carica il file su ftp, controlla se il file trasferito è uguale a quello locale e solo se è uguale elimina (o meglio sposta) il file trasferito in una cartella "FileTrasmessi"

il file gruppo_ggmmaaaa.txt sarà cosi composto

riga 1 => barcode1, 12
riga 2 => barcode2,870
.....
riga N => barcodeN, q.tà N
 
Top