Il linguaggio di programmazione Delphi
 

Invio dati a misuratore fiscale

Daniele 18 Gen 2017 10:44
Ciao a tutti,
come da oggetto ha questo problema.
Le casse fiscali sono Ditron ZIP, ma non esculdo che un domani possa si
possa cambiare marca e/o modello, di cui una e' in rete (serve 3 pc) e
l'altra e' collegata ad un pc non in rete e collegata tramite rs 232.
Prima di questa esigenza il programma mandava l'operazione ad una
stampantina (sono testo) con tutto il lavorato, poi manualmente si emetteva
il fiscale con l'importo totale.
Adesso quello che mando alla stampantina (ogni operazione e' una riga) alla
chiusura delle operazioni lo devo mandare alla cassa con codice + prezzo *
quantita' = totale riga e alla fine il totalone.

Questo perche' ci sono determinati articoli che non sono gestiti da
gestionale in uso, sono referenze senza alcuna banca dati esterna e (in caso
di movimentazione di questi articoli) essi vanno gestiti in vendita come gli
altri con l'emissione di una scontrino molto dettagliato.

Da dove posso iniziare ?? (qualche esempio non farebbe male).

Grazie per tutto.

Daniele
Alberto Salvati 18 Gen 2017 11:01
> Da dove posso iniziare ?? (qualche esempio non farebbe male).

Devi creare un layer di astrazione che "si mette in mezzo" tra il tuo programma
e la cassa.
Riguardo i dettagli dei protocolli di comunicazione, il sito di riferimento è
ovvio.

A.








Ovviamente (ma non per tutti) la risposta è scontata:
il
>
> Grazie per tutto.
>
> Daniele
Daniele 18 Gen 2017 11:50
Ciao Alberto,

>> Da dove posso iniziare ?? (qualche esempio non farebbe male).

> Devi creare un layer di astrazione che "si mette in mezzo" tra il tuo
> programma e la cassa.
Scusami per la mia scarsa preparazione .... ma non ho idea di come di come
fare l'astrazione.
La cassa ha un suo driver e sono in attesa del manuale tecnico per avere la
sequenza di generazione delle stringhe.
Il problema e' che ogni marca ha il suo driver ma, probabilmente, con
l'astrazione non dovrebbe creare grossi disagi.

Per completezza, il gestionale (quello vero) si compone di 2 moduli:
Un programma esterno dove si impostano gli aggiornamenti del db e la
configurazione delle casse in rete
Il gestionale vero e proprio.
Se non parte il primo (che evidentemente fa qualcosa sulle casse o in rete),
il secondo (il gestionale) non trova le casse.

Ovvio che a me non interessa la logica di lavoro di questo gestionale anche
perche', nella mia immaginazione, pensavo di implementare un controllo
all'avvio del mio programma.

Non ho trovato il ******* driver fisicamente nel pc (forse perche' e' stato
incorporato in qualche ******* del gestionale).

> Riguardo i dettagli dei protocolli di comunicazione, il sito di
> riferimento è ovvio.
Ho contattato i tecnici della Ditron, sono in attesa delle risposte (driver
+ specifiche tecniche) .

Grazie e Ciao

Daniele
Alberto Salvati 18 Gen 2017 12:59
> Scusami per la mia scarsa preparazione .... ma non ho idea di come di come
> fare l'astrazione.

Quindi?

A.
Emanuele Desideri 19 Gen 2017 08:38
Scriveva Daniele mercoledì, 18/01/2017:
> Ciao a tutti,
> come da oggetto ha questo problema.

> Da dove posso iniziare ?? (qualche esempio non farebbe male).
>
Ciao Daniele,
per quanto riguarda casse Ditron puoi farti fornire il driver WinECRCom
(ultima versione o NB versione compatibile con il firmware delle casse
che hai) installarlo e importare l'ocx in Delphi.
Dopodichè l'utilizzo di per sè è abbastanza semplice e ben documentato
(trovi sia documentazione che esempi con codici sorgenti in c e vb
quando installi il driver).
Se hai dubbi chiedi pure.

E.

--
Emanuele Desideri
Daniele 19 Gen 2017 12:00
Ciao,

>> Scusami per la mia scarsa preparazione .... ma non ho idea di come di
>> come
>> fare l'astrazione.

> Quindi?

Quindi dovro' impegnarmi per capire come fare l'astrazione.
Per il problema cassa ditron rispondo al messaggio successivo.

Grazie e ciao

Daniele
Daniele 19 Gen 2017 12:16
Ciao Emanuele,

> per quanto riguarda casse Ditron puoi farti fornire il driver WinECRCom
> (ultima versione o NB versione compatibile con il firmware delle casse che
> hai) installarlo e importare l'ocx in Delphi.

Dopo chiaccherata con i tecnici del gestionale in uso e' emersa la strada
che conduce alla soluzione.
Infatti esiste una directory sull'hd dov'e' presente il programma che
indichi (WinECRCom) il quale sta in attesa e ogni 1/2 secondo controlla se
esistono ******* di testo
SCF0000x.TXT (dove x e' un numero).
Se esiste lo da in pasto alla cassa e poi lo cancella.
Ora il problema e' capire com'e' strutturato il ******* di testo.

> Dopodichè l'utilizzo di per sè è abbastanza semplice e ben documentato
> (trovi sia documentazione che esempi con codici sorgenti in c e vb quando
> installi il driver).
> Se hai dubbi chiedi pure.

Ho installato il driver e, come hai anticipato, c'e' un pdf.
Ora lo leggo e poi aggiorno la discussione.

Grazie per l'aiuto

Ciao

Daniele
Daniele 19 Gen 2017 12:58
Ciao, ho letto la documentazione e ho aperto diversi ******* di esempi
allegati.
Gli esempi sono ben documentati e, devo dire, e' quasi impossibile creare un
******* di testo errato seguendo quelle istruzioni.

Quello che non capisco e' il formato del ******* di testo intercettato prima
della stampa, ovvero prima che venga intercettato da WinECRCom e mandato
alla cassa.
Il ******* e' il seguente, tenedo presente che:

Le vendite fittizie sono 2 (due righe).
La prima di 0.01 centesimi, 1 Pezzo
La seconda di 0.02 centesimi, 1 Pezzo.
Il codice fiscale e' ABC12D34E567F (di fantasia)
Il primo codice prodotto e' "PRODOTTO PER PREZZO" in quanto non ha codice
perche' e' un servizio
Il secondo codice prodotto e' "99999999" che identifica TEST
Pagamento in contanti.
Alla fine della stampa si apre il cassetto e si attiva la taglierina (ultima
riga).

PRODOTTO PER PREZZO
000012000000000011ABC12D34E567FNNENSERVIZI
999999999
000012000000000021ABC12D34E567FNNENTEST
T_O_T_A_L_E00YJL3000000CONTANTI

Queste informazioni dove sono ?

Questo ******* e' decisamente diverso da, prendo il piu' semplice, da quello
fornito con gli esempi (qui sotto)

vend rep=1, pre=5.00, qty=2, des='Articolo 1'
vend rep=1, pre=10.00, des='Articolo 2'
chius t=1, imp=10.00 ; Chiude parzialmente lo scontrino (10€) in contanti
chius t=2 ; Chiude il restante da pagare (10€) a credito (non pagato)

; t=1 : CONTANTI
; t=2 : CREDITO
; t=3 : ASSEGNI
; t=4 : BUONI
; t=5 : CARTA DICREDITO

La domanda e', se creo un ******* di testo cosi' fatto

vend rep=1, pre=5.00, qty=2, des='Articolo 1'
vend rep=1, pre=10.00, des='Articolo 2'
chius t=1, imp=10.00 ; Chiude parzialmente lo scontrino (10€) in contanti
chius t=2 ; Chiude il restante da pagare (10€) a credito (non pagato)

e lo chiamo SCF00001.TXT, il WinECRCom lo vede e lo interpreta in modo
corretto ?

Evidentemente devo stare MOLTO attento ai test .... essendo la cassa
fiscalizzata !

Qualche suggerimento?

Grazie

Daniele
Emanuele Desideri 21 Gen 2017 08:14
Daniele ha pensato forte :

>
> Qualche suggerimento?
>
> Grazie
>
> Daniele

Ciao Daniele, come ti avevo scritto, ma probabilmente sono stato un po'
criptico, puoi importare l'ocx (lo trovi dentro la cartella di
winECRCom) in delphi ed utilizzare il componente in delphi.
Utilizzando il componente non ti è necessario creare il ******* di testo,
bensì puoi direttamente connetterti al driver (indicando la porta
logica che hai configurato su winECRConf) e inviare i comandi.
Spero di esserti stato d'aiuto!

--
Emanuele Desideri
Daniele 21 Gen 2017 10:52
Ciao Emanuele,

> Ciao Daniele, come ti avevo scritto, ma probabilmente sono stato un po'
> criptico, puoi importare l'ocx (lo trovi dentro la cartella di winECRCom)
> in delphi ed utilizzare il componente in delphi.
ti sei spiegato benissimo, ho importato il componente ed e' visibile nella
palette ActiveX

> Utilizzando il componente non ti è necessario creare il ******* di testo,
OK

> bensì puoi direttamente connetterti al driver (indicando la porta logica
> che hai configurato su winECRConf) e inviare i comandi.
Tra le proprieta' dell'oggetto non vedo come settare la porta.
Nella configurazione ho settato come porta logica la "1" e ho deselezionato
l'autorun.
Queste informazioni possono esserti di aiuto?

ControObjectDescription: Ditron EcrCom Object Control, (C) 2010 Ditron
s.r.l.
ControlObjectVersion: 1004001

Non ho settaggi di porta.
Tieni presente che queste (sono 2 in rete e 1 in locale) sono Ditron Zip
fiscalizzate ed in uso da giugno 2012.
Quindi tutto il corredo (driver ecc...) sono di quella data (anche perche' a
fine 2012 la zip e' stata sostituita dalla quadra).

> Spero di esserti stato d'aiuto!
Certo che si.
Pero', se me lo consenti ti chiedo un'ultimo (spero) sostegno.
Form di vendita, griglia prodotti con
1a colonna codice
2a colonna descrizione
3a colonna quantita
4a colonna prezzo unitario
5a colonna prezzo totale riga
6a colonna sconto
7a colonna prezzo finale netto sconto

pannello con 3 mega label
la prima con prezzo lordo sconto
la seconda con lo sconto totale (dato dalla somma degli sconti precedenti)
la terza prezzo totale netto sconto.

Come passo le righe ed il finale alla cassa (magari gestendo il fine carta,
lo stato occupato, lo sportello aperto ecc...).

Ti ringrazio per il tuo prezioso aiuto.

Buona domenica

Daniele
Emanuele Desideri 23 Gen 2017 08:33
Sembra che Daniele abbia detto :

> Tra le proprieta' dell'oggetto non vedo come settare la porta.
> Nella configurazione ho settato come porta logica la "1" e ho deselezionato
> l'autorun.
> Queste informazioni possono esserti di aiuto?
>
> ControObjectDescription: Ditron EcrCom Object Control, (C) 2010 Ditron s.r.l.
> ControlObjectVersion: 1004001

Ciao Daniele,
intanto ti invito a leggere la documentazione corredata del driver e
gli esempi di codice perchè sono molto chiari, comunque la dritta di
cui necessiti fondamentalmente è:
- ECR.Open('Port=1'); //apre il collegamento con la porta logica 1
- ECR.EcrCmd //per inviare un comando alla cassa (VEDI elenco comandi)
- ECR.Close; //chiude il collegamento

Buon divertimento ;)

--
Emanuele Desideri
Daniele 23 Gen 2017 13:23
Ciao Emanuele,

> intanto ti invito a leggere la documentazione corredata del driver e gli
> esempi di codice perchè sono molto chiari
La documentazione non e' poi cosi' chiara.
Si tratta di un ******* pdf di, circa, 50 pagine.
La sintassi e' spiegata bene .... ma non c'e' uno straccio di esempio.
Esempi che sono presenti nella directory ESEMPI dove si trovano una
moltitudine di ******* di testo.
Tutti questi ******* sono "interpretabili" del programma di gestione ECR ma sul
significato dei codici e' tutto un mistero.
I due sorgenti inclusi sono in visual basic (che non conosco) e in C++ che
conosco poco (comunque capibile).

> comunque la dritta di cui necessiti fondamentalmente è:
> - ECR.Open('Port=1'); //apre il collegamento con la porta logica 1
> - ECR.EcrCmd //per inviare un comando alla cassa (VEDI elenco comandi)
> - ECR.Close; //chiude il collegamento
Vedi, queste 3 righe sono ben identificabili nel sorgente c++.
Adesso vediamo se ho capito bene come dovrebbe andare:

Nel FormCreate della MainForm (dove presumibilmente si inizializza)
inserisco
ECR.Open('Port=1'); // In effetti e' sulla porta logica 1

Cosi' inizializzo la cassa e sta in attesa.

Adesso il codice per mandare alla cassa la vendita di un articolo fittizio
con codice 99999999 con descrizione
test che costa 0.01 euro (dimmi che va bene !) con il codice fiscale
MRTRSR81P11B158EK (totalmente inventato)

ECR.EcrCmd('INP TERM=61');
ECR.EcrCmd('INP ALFA=' + QuotedStr('MRTRSR81P11B158EK') + ',TERM=49');
ECR.EcrCmd(VEND ALFA=' + QuotedStr('99999999') + 'REP=2,PRE=0.01,QTY=1,DES='
+ QuotedStr('Test) );
ECR.EcrCmd('CHIUS');

Quando termino il programma, nella MainFormClose
ECR.Close

Come vedi, non so dove trovare i significati assegnati a TERM.
Inoltre, le stringhe le posso stampare anche dopo la vendita ?
Mi puoi dire dove sto sbagliando?

Grazie per i tuoi suggerimenti.

Daniele
Emanuele Desideri 23 Gen 2017 16:11
Daniele ha spiegato il 23/01/2017 :

> La documentazione non e' poi cosi' chiara.
> Si tratta di un ******* pdf di, circa, 50 pagine.
> La sintassi e' spiegata bene .... ma non c'e' uno straccio di esempio.

Nella documentazione (almeno quella che ho io) nella parte finale sono
spiegate dettagliatamente tutte le proprietà, metodi ed eventi del
componente.

Inoltre se apri il ******* ecrcom.ini (nella cartella WinECRCom\Drivers)
trovi tutti i comandi utilizzabili sulla cassa (con ECR.EcrCmd) ben
commentati (con tanto di riga di esempio a volte).

Non mollare Daniele ;)

--
Emanuele Desideri
Daniele 24 Gen 2017 12:07
Ciao Emanuele,

> Nella documentazione (almeno quella che ho io) nella parte finale sono
> spiegate dettagliatamente tutte le proprietà, metodi ed eventi del
> componente.
Ok,

> Inoltre se apri il ******* ecrcom.ini (nella cartella WinECRCom\Drivers)
> trovi tutti i comandi utilizzabili sulla cassa (con ECR.EcrCmd) ben
> commentati (con tanto di riga di esempio a volte).
Questo ******* l'avevo gia' aperto e visionato ma, onestamente, non l'ho
capito.
Infatti neel'esempio dello scontrino parlante ho queste linee


;ESEMPIO CON CODICE FISCALE:

INP TERM=61
INP ALFA='MRTRSR76S11F158E',TERM=49
VEND REP=1, PRE=1.00
VEND REP=2,PRE=1.50,QTY=5,DES='ARTICOLO PROVA'
CHIUS

Nel ******* ini al codice 61 e' riportato


; Pseudo-istruzioni speciali valide solo in output da ecr
; -------------------------------------------------------
;
; NOTA : queste NON POSSONO essere trasmesse dal PC ma sono solo ricevute
; dall'ecr in risposta a comandi o per funzioni speciali
;
61=TOTG ;Totali cassa giornalieri ******* 20)
62=TOTP ;Totali cassa periodici ******* 21)
63=TOTREP ;Totali dei reparti ******* 22)
64=TOTPLU ;Totali dei plu ******* 23)
65=TOTOPE ;Totali operatori ******* 24)
66=.... ;U.F.
67=.... ;U.F.
68=.... ;U.F.
69=.... ;U.F.
70=.... ;U.F.

e

[61] ;Istruziuone "TOTG" (solo da ecr)
1=NR ;numero del tot.re
2=CONT ;contatore
3=VAL ;valore

non ho altro.
Onestamente sto vagando nella nebbia piu' fitta !

> Non mollare Daniele ;)
Certo che non mollo.
Un'altro problema e' che non posso neanche fare chissa' quali test essendo
le casse fiscalizzate e impossibilitate ad essere usate come banco di test.
Dovrei procurarmi una cassa di x mano non piu' in uso !!

Grazie

Ciao

Daniele

PS: Ma le linee del messaggio precedente andavano bene?
Emanuele Desideri 24 Gen 2017 18:28
Daniele ha usato la sua tastiera per scrivere :

Ciao Daniele!

> Questo ******* l'avevo gia' aperto e visionato ma, onestamente, non l'ho
capito.
E infatti stai facendo confusione qui.
Ora il ******* non è che sia proprio esplicativo, ma ci sono casse e
driver ben più ostici, fidati ;)

Non far caso ai numeri all'interno del ******* per un momento.
Quelle INP VEND CHIUS etc sono degli alias di funzioni.
Ergo invece che scrivere il numero (che sarebbe poco leggibile in una
applicazione) usi l'alias.
Ad ognuna di queste funzioni puoi passare dei parametri.
ti faccio un esempio:
; Istruzioni di attivazione di funzioni su ecr :
; --------------------------------------------
;
...
10=VEND ;Vendita <----alias di funzione
....
[10] ;Istruzione "VEND" <---elenco dei parametri
1=REP ;Numero di reparto
2=ART ;Codice articolo
3=QTY ;Quantita'
4=PREZZO ;Prezzo
5=RESO ;Falg reso
6=STORNO ;Flag storno
7=DES ;Descrizione
8=DPT,1 ;Alias di REP
9=QUANTITY,3 ;Alias di QTY
10=PLU,2 ;Alias di ART
11=PRICE,4 ;Alias
12=REFUND,5 ;Alias
13=VOID,6 ;Alias

un esempio di utilizzo di questa funzione:
ECR.EcrCmd('VEND
REP='+Reparto+',PRE='+PrezzoUnitarioStringa+',QTY='+QuantitaStringa+',DES='+Descrizione+';',

ResultECR)

> Un'altro problema e' che non posso neanche fare chissa' quali test essendo le
> casse fiscalizzate e impossibilitate ad essere usate come banco di test.

eh questo è un bel problema, potrebbe aiutarti il tecnico ditron di
zona. Che io sappia non c'è una utility che testa i comandi, a suo
tempo lavorai su un reg. di cassa non fiscalizzato.
> Grazie

Prego!

--
Emanuele Desideri
Daniele 25 Gen 2017 09:28
Ciao,

>> Questo ******* l'avevo gia' aperto e visionato ma, onestamente, non l'ho
>> capito.
>E infatti stai facendo confusione qui.
Chissa' come hai fatto a capirlo :-))

> Ora il ******* non è che sia proprio esplicativo,
Ho fatto una chiaccherara con l'agente dell'Emilia-Lombardia.
Per gentile intercessione ha parlato con i tecnici della Ditron.
I quali mi hanno mandato un'email (molto stringata) dicendomi che tutto
quello di cui necessito e' nel ******* .INI

> ma ci sono casse e driver ben più ostici, fidati ;)
Su questo non discuto.
Infatti siamo passati alla ZIP perche' le esperienze sui misuratori
precedenti (come utilizzatori) sono state pessime.
Con la ZIP, ora quadra, tutto sommato il lavoro (da intendersi quello
manuale sulla cassa con il tastierino) e' ben gestito.

> Quelle INP VEND CHIUS etc sono degli alias di funzioni.
OK

> Ergo invece che scrivere il numero (che sarebbe poco leggibile in una
> applicazione) usi l'alias.
OK

> un esempio di utilizzo di questa funzione:
> ECR.EcrCmd('VEND
>
REP='+Reparto+',PRE='+PrezzoUnitarioStringa+',QTY='+QuantitaStringa+',DES='+Descrizione+';',

> ResultECR)
Ho tagliato un po, ma ti ringrazio per avermi dato la possibilita' di capire
quel ******* di testo.
Adesso le idee sono (appena appena) un piu' chiare.

>> Un'altro problema e' che non posso neanche fare chissa' quali test
>> essendo le casse fiscalizzate e impossibilitate ad essere usate come
>> banco di test.
> eh questo è un bel problema, potrebbe aiutarti il tecnico ditron di zona.
> Che io sappia non c'è una utility che testa i comandi, a suo tempo lavorai
> su un reg. di cassa non fiscalizzato.
Sto cercando di aggirare il problema cercando una ZIP/QUADRA non piu'
utilizzata (quindi defiscalizzata) a basso costo per i test.
Sto trovando casse e casse ma non quelle, forse perche' le ZIP ancora oggi
sono considerate dei muli (robuste).
Per il momento il codice e' in attesa di test che faro' appena trovo il
muletto, anzi se per caso hai una zip di seconda, terza,x mano che ti avanza
..... te la ritiro volentieri.

Grazie ancora per il tuo prezioso aiuto.

Ciao
Daniele

PS: Di dove sei ?? , Lontano da Como-Varese ?
Emanuele Desideri 25 Gen 2017 09:34
Sembra che Daniele abbia detto :

> Adesso le idee sono (appena appena) un piu' chiare.

E mi sembra un ottimo punto di partenza :)

> Per il momento il codice e' in attesa di test che faro' appena trovo il
> muletto, anzi se per caso hai una zip di seconda, terza,x mano che ti avanza
> ..... te la ritiro volentieri.

No, ci occupiamo solo di software, per le casse rimandiamo sempre ai
tecnici di zona.

> Grazie ancora per il tuo prezioso aiuto.

ma figurati, pagherai il caffè!

> Ciao
> Daniele
>
> PS: Di dove sei ?? , Lontano da Como-Varese ?

Eh direi di si, scrivo dal centro-italia :) arriverà freddo sto caffè!
:-@

--
Emanuele Desideri
Daniele 26 Gen 2017 14:53
Ciao,

>> Adesso le idee sono (appena appena) un piu' chiare.
> E mi sembra un ottimo punto di partenza :)
L'importante e' partire ..... non si sa per dove .... ma intanto si parte
!!!

> No, ci occupiamo solo di software, per le casse rimandiamo sempre ai
> tecnici di zona.
Forse ne ho trovata una defiscalizzata.
Avro' notizie in merito lunedi prossimo.

> ma figurati, pagherai il caffè!
Ti accontenti di poco .....

> Eh direi di si, scrivo dal centro-italia :) arriverà freddo sto caffè!
Dipende ... se sei in prossimita' di una costa non e' detto che possa
portartelo di persona!!!!

A presto (ovvero alla prossima discussione)

Ciao
Daniele

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio di programmazione Delphi | Tutti i gruppi | it.comp.lang.delphi | Notizie e discussioni delphi | Delphi Mobile | Servizio di consultazione news.