Creare un terminale per la lettura dei codici a barre

Attraverso le opzioni presenti sulle tabelle, un telefono e un lettore a codice a barre è possibile creare un completo e funzionante terminale per la lettura dei codici a barre da utilizzare ad esempio, all'interno dei magazzini per creare rapidamente i documenti di trasporto con Nios4. Hardware Per creare fisicamente il terminale utilizzeremo un normale telefono Android e un lettore a codice a barre bluetooth Eyoyo . Questo lettore è studiato espressamente per essere collegato a un telefono e attraverso il bluetooth simulare l'input della tastiera.   Impostazione della tabella Andiamo sulle opzioni delle tabelle . In questo caso attiveremo la lettura dei codici a barre della tabella che gestisce le righe di dettaglio di un ddt di acquisto. Per configurare correttamente la lettura occorerrà impostare tre parametri. Il primo è il campo sottotabella da utilizzare. Questo viene utilizzato per poter selezionare l'articolo da inserire sulla riga del ddt. In questo caso il campo

Formattazione ore e minuti

 

Come tutti sanno quando vengono eseguiti calcoli su delle date i valori vengono convertiti in scala decimale. Questo serve per poter utilizzare il valore all'interno delle espressioni regolari. Matematicamente il valore 1,30 non significa 90 minuti ma 1,3. Per questo viene convertito in 1,5.

Questo per i calcoli. Potrebbe servire visualizzare il valore dei minuti in sessantesimali, ossia formattato come leggiamo normalmente l'ora. Nei software si capisce immediatamente quale è il formato: Se il valore è separato dalla virgola allora il valore è in formato decimale, altrimenti, se separato dai due punti il valore dei minuti è in sessantesimale.

Nios4 per il corretto calcolo rende disponibile i comandi per il calcolo decimale. Per poter ottenere il formato "orologio" occorrerà creare uno script che prenda il valore e lo converta. Nell'esempio qui sotto viene mostrato come calcolare e formattare la differenza tra queste due.


if datafield.name() == "data_inizio" or datafield.name() == "data_fine" then
   
    if dataview.getvalue("data_inizio") == nil or dataview.getvalue("data_inizio") == 0 then
        do return end
    end

    if dataview.getvalue("data_fine") == nil  or dataview.getvalue("data_fine") == 0 then
        do return end
    end
        
   --calcolo il tempo in minuti
   minuti = utility.datediffminutes(dataview.getvalue("data_inizio"),dataview.getvalue("data_fine"))
   
  --calcolo le ore
  ore = minuti / 60
  
  oreintere = math.modf(ore)
  
  --converto il resto dei minuti da decimali a sessantesimali
  restominuti = ore-oreintere
  tminuti     = math.floor((((restominuti / 100) * 60) * 100) + 0.5)
  
  --creo il valore finale formattato come ore e minuti
  dataview.setvalue("totale",string.format("%02d:%02d", oreintere, tminuti))
  
end
  1. Visto che si tratta di uno script applicato alla modifica dei valori per prima controlliamo che effettivamente siano stati modificati i campi che ci interessano. Controlliamo anche che il valore sia compilato. Probabilmente questa parte andrà modificata in base al sistema operativo visto che le date sono gestite in modo diverso in base alla tipologia della base dati.
  2. Fatto questo calcoliamo i minuti totali presenti tra la prima data e la seconda ed estrapoliamo le ore togliendo i decimali.
  3. Estrapolati i decimali li convetiamo con una proporzione in sessantesimali e arrotondiamo il valore.
  4. Come ultima cosa montiamo le ore intere con i minuti calcolati creando il valore di tipo testo che inseriremo nel nostro campo di arrivo.

Ricordate che il valore calcolato non è utilizzabile all'interno delle espresioni. Quindi servirà sempre mantenere il valore decimale per i calcoli e quello sessantesimale per visualizzare il risultato finale.

Commenti