Newsgroup: it.comp.lang.visual-basic
Titolo: [?] registratori di cassa

Ciao,
qualcuno di voi sa dirmi dove posso trovare info su pgm che si interfacciano
ai registratori di cassa?
Grazie.
Ciao.
paul

 ha scritto:

Dipende per quali registratori....
Io lavoro per NCR, un modello di registratore è uguale alla SWEDA, se
può interessarti.
Cmq ogni casa ha il suo protocollo di comunicazione e il suo metodo di
collegamento: rete; seriale; proprietario.....
Se posso esserti d'aiuto.
Ciao
Aran banjo

 ha scritto nel messaggio
news:bEHg8.35331$Ns4.1...@news2.tin.it...


 puň interessarti.


 paul.
Solitamente si distinguono i registratori di cassa dai P.O.S. (che non sono i bancomat ma
sono i Point Of Sale).
I registratori di cassa sono, tanto per capirci, quelli che trovi nei bar.
I POS sono quelli che solitamente trovi nei supermercati e  non sono altro che computer
leggermente modificati.
Per controllare i primi è di solito una banalità; normalmente vengono interfacciati a PC
con un cavo seriale e solitamente nel libretto di istruzioni trovi lo schema del cavo ed
il protocollo di comunicazione. Per poter comunicare con VB basta utilizzare il controllo
MSCOM, che fornisce l'intefaccia con le seriali.
Per controllare i POS il discorso è un po' più complicato. Ultimamente tutte le più grandi
case costruttrici (NCR, IBM, SWEDA) utilizzano connessioni di rete, anche se qualche
modello più anzianotto utilizza ancora qualche connessione proprietaria.
ES.
NCR utilizza un programma che si chiama MTX-SERVER che si appoggia su pacchetti NETBIOS.
IBM utilizza FTS che può essere utilizzato via "seriale-proprietaria IBM" (lasciami
passare il termine) oppure via ethernet
SWEDA utilizza il vecchio protocollo LANtastic con il suo programma BRAINPOS.
Di solito ti interfacci al sistema casse attraverso file ASCII, che vengono "applicati"
attraverso file batch creati dal produttore del sistema.
Mi fermo qui, anche se ce ne sarebbe molto da scrivere.
Se vuoi qualche altra info, chiedi pure.
Ciao,
Aran Banjo

 attraverso file batch creati dal produttore del sistema.
Questa parte non l'ho ben capita. Il file ASCII lo creo io da VB ed il file
batch lo legge e stampa??
Se è così mi sembra più semplice del primo tipo (ma sicuramente ho capito
male)
Grazie 1000 ancora
Ciao.
paul


 MSCOM, che fornisce l'intefaccia con le seriali.
Questo mooolto in teoria...
Io ho avuto (ed ho ancora) grossi problemi di timing in VB
sotto Win98 con MSCOMM, mentre un programmino da
due righe in DOS va che è una scheggia.
Mi spiego: apro la porta seriale, mando un comando di clear,
poi le varie righe dello scontrino, ma devono essere separate
da tempi enormi (addirittura oltre il secondo !...), altrimenti
non ha il tempo di leggerle e le salta.
E' semplicemente assurdo.
Ripeto, in DOS lo stesso programma abbisogna di delay
bassissimi e non perde un colpo.
Ho provato a fare una cosa meschina: scrivere le righe dello
scontrino in VB su un file e chiamare un EXE in finestra DOS
tramite Shell che legge il file e manda i comandi al registratore.
Ebbene: i tempi si sono un po' abbassati, ma VB necessita
sempre di tempi molto più lunghi, altrimenti perde righe
(non le stampa e non le somma al totate, come se non
arrivassero.
Nel manuale non c'è traccia di questi problemi (in effetti, c'è
solo un esempietto in DOS e non dice niente di VB).
Neanche la ditta fornitrice dei registratori (non ricordo
la marca, ma non ha importanza, credo, a questo livello)
ha esperienza di interfacciamento in Windows, tanto è vero
che hanno voluto il mio programmino di prova che manda
la stringa al registratore e ritorna lo status e tutto il contenuto
della stampa a fronte del comando di totalizzazione.
Se ti faccio sapere la marca, dai qualche dritta anche a me ?...
Grazie !... :-)))
--
Er Roscio.

 due righe in DOS va che è una scheggia.
Non è che potresti darmi qualche esempietto stupido in VB, tanto per
rendermi conto di cosa dovrò occuparmi?
Grazie.
Ciao.
paul.

due righe in DOS va che è una scheggia.
mmm, con il 2140 NCR, che è la stessa cosa di una cassa SWEDA, come timing ho selezionato
1 sec, e va abbastanza bene. Cmq si basa tutto sui ritardi....quando si parla di
seriale....
In effetti la quasi totalità dei programmi che si intefacciano con le casse via seriale
hanno il modulo di stampa sotto DOS.
Ho provato anche in VisualFoxPro e sembra leggermente meglio la gestione dalla seriale,
nonostante si utilizzi lo stesso oggetto.
Ciao

 hanno il modulo di stampa sotto DOS.
Questo mi consola... vuol dire che non ho fatto proprio una vaccata
facendo quell'exe in finestra DOS... :-)))
--
Er Roscio.

 rendermi conto di cosa dovrò occuparmi?
Mah... in VB scrivo semplicemente le righe su un file sequenziale.
Di seguito riporto un esempio di file (che dipende ovviamente dai
comandi del singolo registratore:
KXCL
KX1000R1Art. 01
KX1345R1Art. 02
KX- .
KX1000R1Reso Art. 01
KXST
KXT1
La prima riga, ad esempio, è un comando di reset,
la seconda imputa 10 euro al reparto 1 seguita dalla
descrizione; poi c'è un reso, infine il subtotale ed il totale.
Poi lancio la shell che mi esegue un programmino
in DOS (scritto in Quick Basic).
Il programma legge il file "Scontro.txt" che
contiene le righe da mandare al registratore,
aperto come #2 sulla COM1, poi scrive anche
un file "Scontro.log" che contiene l'input da me
mandato al registratore e l'output del registratore,
letto sempre dalla COM1 dopo che si è dato il
comando di totale. Infine, scrivo un file "Scontro.out"
che contiene l'eventuale codice di errore o la stringa
"OK" da rileggere da parte del programma principale
in VB per sapere se la stampa è andata bene o no.
DECLARE SUB Aspetta (intervallo AS SINGLE)
DECLARE SUB Leggi ()
DIM SHARED Riga AS STRING
OPEN "C:\Qb45\Scontro.txt" FOR INPUT AS 1
OPEN "COM1:2400,N,8,1,CS,DS" FOR RANDOM AS 2
OPEN "C:\Qb45\Scontro.log" FOR OUTPUT AS 3
OPEN "C:\Qb45\Scontro.out" FOR OUTPUT AS 4
CLS
DO UNTIL EOF(1)
    LINE INPUT #1, Riga
    PRINT #3, ">"; Riga
    PRINT #2, Riga
    Leggi
    Aspetta .1
LOOP
PRINT #4, "OK"
CLOSE
END
SUB Aspetta (intervallo AS SINGLE)
   inizio = TIMER
   DO
      fine = TIMER
   LOOP UNTIL fine > inizio + intervallo
END SUB
SUB Leggi
    DO
        LINE INPUT #2, Riga
        PRINT #3, "<"; Riga
        IF LEFT$(Riga, 2) = "DE" THEN
            SELECT CASE VAL(MID$(Riga, 3))
                CASE 1: PRINT #4, "E1Inserire chiave"
                CASE 2:  PRINT #4, "E2Fine carta"
                CASE 3:  PRINT #4, "E3Premere Subtotale"
                CASE 4:  PRINT #4, "E4Superato limite reparto"
                CASE 5:  PRINT #4, "E5Totale negativo"
                CASE 6:  PRINT #4, "E6Sequenza errata"
                CASE ELSE:  PRINT #4, "E" + LTRIM$(STR$(VAL(MID$(Riga, 3))))
+ "Errore tecnico"
            END SELECT
        END IF
        IF INSTR(Riga, CHR$(4)) > 0 THEN EXIT DO
    LOOP
END SUB
--
Er Roscio.