Autore Topic: errore pdfwriter  (Letto 1088 volte)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
errore pdfwriter
« il: 10 Aprile 2010, 00:49:41 »
ciao raga

sono alle prese con uno strano errore di pdfwriter.
vi spiego: ho realizzato una classe con pdfwriter che mi stampa i ddt, nella stampa dei ddt devo riportare in basso un codice a barre.
tutto funzionava finchè non sono arrivato alla stampa del ddt 78/10, va continuamente in errore con bad argoument.
strano che tutti gli altri ddt differenti come 77/10 - 79/10 - 15/10 ecc.. vengono stampati correttamente.

a quanto sembra è il n° 78 abbinato a /10 che provoca casini.

mi serve urgentemente una mano sono bloccato con le stampe e l'amministratore comincia già ad urlare che rivuole windows.

allego il codice

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: errore pdfwriter
« Risposta #1 il: 10 Aprile 2010, 01:01:32 »
La riga incriminata è questa:

RETURN Mid(chars, sum MOD 43, 1)

Strano!La stessa funzione due righe sopra, scritta uguale pare funzionare...

Anche a me da Bad Argument....che versione di gambas hai?io la 2.20...

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: errore pdfwriter
« Risposta #2 il: 10 Aprile 2010, 03:37:53 »
Nella tua funzione ho fatto una piccola modifica per trovare l'errore
Codice: [Seleziona]
PRIVATE FUNCTION _checksum_code39(code AS String) AS String
  DIM sum, i AS Integer
  DIM chars AS String
  'Compute the modulo 43 checksum
  chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"
  sum = 0
  FOR i = 1 TO Len(code)
    sum += InStr(chars, Mid(code, i, 1))
  NEXT

  i = sum MOD 43  <---- Stop del programma per visualizzare il risultato
  STOP

  RETURN Mid(chars, sum MOD 43, 1)
END

Premesso che io non so cosa sia e a che cosa serva MOD ma ho visto che sum ha valore 86 e i prende un valore di 0
Quindi quando tu fai un Mid(chars,0,1) genera errore perche' deve almeno avere valore 1 sia la partenza che la lunghezza.

Spero di esserti stato di aiuto :)

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: errore pdfwriter
« Risposta #3 il: 10 Aprile 2010, 15:30:05 »
Nella tua funzione ho fatto una piccola modifica per trovare l'errore
Codice: [Seleziona]
PRIVATE FUNCTION _checksum_code39(code AS String) AS String
  DIM sum, i AS Integer
  DIM chars AS String
  'Compute the modulo 43 checksum
  chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"
  sum = 0
  FOR i = 1 TO Len(code)
    sum += InStr(chars, Mid(code, i, 1))
  NEXT

  i = sum MOD 43  <---- Stop del programma per visualizzare il risultato
  STOP

  RETURN Mid(chars, sum MOD 43, 1)
END

Premesso che io non so cosa sia e a che cosa serva MOD ma ho visto che sum ha valore 86 e i prende un valore di 0
Quindi quando tu fai un Mid(chars,0,1) genera errore perche' deve almeno avere valore 1 sia la partenza che la lunghezza.

Spero di esserti stato di aiuto :)

milio milio milio....devo bacchettarti ora...mi crei un componente da zero e poi mi cadi su MOD???
Mod restituisce il resto di una divisione....si vede che non leggi il mio blog!!!! :P

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: errore pdfwriter
« Risposta #4 il: 10 Aprile 2010, 19:04:10 »
L'avevo intuito, ma non avendolo mai usato non volevo fare il gradasso :)

Ritornando alla funzione di pdfwriter, credo che sia da modificare in questo modo:
Codice: [Seleziona]
PRIVATE FUNCTION _checksum_code39(code AS String) AS String
  DIM sum, i AS Integer
  DIM chars AS String
  'Compute the modulo 43 checksum
  chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"
  sum = 0
  FOR i = 1 TO Len(code)
    sum += InStr(chars, Mid(code, i, 1))
  NEXT
  RETURN Mid(chars, (sum MOD 43) +1 , 1)
END

prima cosa per evitare un ritorno di valore zero e secondo perche' il carattere '%' non verrebbe mai selezionato...

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: errore pdfwriter
« Risposta #5 il: 10 Aprile 2010, 19:10:31 »
Nella tua funzione ho fatto una piccola modifica per trovare l'errore
Codice: [Seleziona]
PRIVATE FUNCTION _checksum_code39(code AS String) AS String
  DIM sum, i AS Integer
  DIM chars AS String
  'Compute the modulo 43 checksum
  chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"
  sum = 0
  FOR i = 1 TO Len(code)
    sum += InStr(chars, Mid(code, i, 1))
  NEXT

  i = sum MOD 43  <---- Stop del programma per visualizzare il risultato
  STOP

  RETURN Mid(chars, sum MOD 43, 1)
END

Premesso che io non so cosa sia e a che cosa serva MOD ma ho visto che sum ha valore 86 e i prende un valore di 0
Quindi quando tu fai un Mid(chars,0,1) genera errore perche' deve almeno avere valore 1 sia la partenza che la lunghezza.

Spero di esserti stato di aiuto :)

milio milio milio....devo bacchettarti ora...mi crei un componente da zero e poi mi cadi su MOD???
Mod restituisce il resto di una divisione....si vede che non leggi il mio blog!!!! :P

ho la 2.19 (con il nuovo avatar sembri un nubbio, non è che ti sei ringiovanito troppo?
per la riga incriminata l'avevo già individuata solo che non riesco a capire perchè dà errore.

@milio
quella funzione era già presente in pdfwriter e non sono riuscito a capire perchè l'autore perchè l'autore usa sum e mod (86 / 43 = 0) ma questo succede solo con 78/10

cmq ho parzialmente risolto aggiungendo dei caratteri in

vecchio
Codice: [Seleziona]
chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"

nuovo
Codice: [Seleziona]
chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. :()&$/+%"

pero mi piacerebbe capire il perchè dell'errore sia per conoscenza informatica sia per evitare che in futuro mi si blocchi su un'altro numero

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: errore pdfwriter
« Risposta #6 il: 10 Aprile 2010, 19:11:27 »
L'avevo intuito, ma non avendolo mai usato non volevo fare il gradasso :)

Ritornando alla funzione di pdfwriter, credo che sia da modificare in questo modo:
Codice: [Seleziona]
PRIVATE FUNCTION _checksum_code39(code AS String) AS String
  DIM sum, i AS Integer
  DIM chars AS String
  'Compute the modulo 43 checksum
  chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"
  sum = 0
  FOR i = 1 TO Len(code)
    sum += InStr(chars, Mid(code, i, 1))
  NEXT
  RETURN Mid(chars, (sum MOD 43) +1 , 1)
END

prima cosa per evitare un ritorno di valore zero e secondo perche' il carattere '%' non verrebbe mai selezionato...


abbiamo postato in simultanea
io ho parzialmente risolto aggiungendo caratteri tu togliendo

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: errore pdfwriter
« Risposta #7 il: 10 Aprile 2010, 19:15:07 »
a per la cronaca avevo notato che inserendo 78 /10 invece di 78/10 funzionava.
evidentemente lo spazio evitava l'errore.

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: errore pdfwriter
« Risposta #8 il: 10 Aprile 2010, 19:23:14 »
@ milio

Ringiovanito???A 21 anni pensi che io sia vecchio???

P.S.

Bisogna focalizzarsi sul numero 78 perchè ho provato con 79 e funziona...

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: errore pdfwriter
« Risposta #9 il: 10 Aprile 2010, 19:54:22 »
@ milio

Ringiovanito???A 21 anni pensi che io sia vecchio???

P.S.

Bisogna focalizzarsi sul numero 78 perchè ho provato con 79 e funziona...

??? queste parole non sono uscite dalla mia tastiera...

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: errore pdfwriter
« Risposta #10 il: 10 Aprile 2010, 20:00:49 »
@ milio

Ringiovanito???A 21 anni pensi che io sia vecchio???

P.S.

Bisogna focalizzarsi sul numero 78 perchè ho provato con 79 e funziona...

??? queste parole non sono uscite dalla mia tastiera...

non farci caso con l'età perde colpi....  :P

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: errore pdfwriter
« Risposta #11 il: 10 Aprile 2010, 23:51:56 »
@ milio

Ringiovanito???A 21 anni pensi che io sia vecchio???

P.S.

Bisogna focalizzarsi sul numero 78 perchè ho provato con 79 e funziona...

??? queste parole non sono uscite dalla mia tastiera...

Chiedo scusa...era a dex...lo bannerò 21 volte!!!!una per ogni mio anno di età!!

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: errore pdfwriter
« Risposta #12 il: 11 Aprile 2010, 12:17:10 »
L'errore viene dato perché 86 MOD 43 (86 è il valore di sum che genera l'errore) dà 0 come resto della divisione e Mid non accetta un punto di inizio che sia uguale a 0!
Ricordo che la sintassi di Mid è:
Codice: [Seleziona]
Mid(Stringa, punto_di_inizio, numero_di_caratteri)

Mid(char, 0, 1) dà quindi errore. Inoltre se numero_di_caratteri è 1, si può anche omettere.
Ancora un altro inoltre... Se si deve prendere un solo carattere si può usare Left(stringa, posizione) che preleva dalla stringa il carattere in posizione "posizione". Ma anche qui serve un valore di 1 o superiore.
Visita il mio sito personale: http://www.leonardomiliani.com