Normas para el QR-Code

Re: Normas para el QR-Code

Postby postinelli » Fri Jan 15, 2021 1:46 pm

Hola Cesar

yo uso H 3.2.0dev (r1703231115)
fwh17.07
bcc 7.0

pero no creo que esté por ahi el problema

ni por que debes hacer bmp en lugar de jpg

subite la imagen de qr que te genera a ver si lo puedo leer o ver el problema
o bien el código que usaste

viste que hay veces que pones una coma o punto de mas que escapa a la vista y es el problema
postinelli
 
Posts: 147
Joined: Tue Jul 15, 2008 7:12 pm
Location: Argentina

Re: Normas para el QR-Code

Postby cmsoft » Fri Jan 15, 2021 1:52 pm

Pablo:
El jpg me lo genera con el codigo negro.
Ahí hago zoom en el preview y me lo lee (con el bmp)
El tema es que tambien tengo programas que imprimen en comanderas termicas, y ahi me parece que la calidad con la que imprime es mala, por eso no me lo lee
User avatar
cmsoft
 
Posts: 1191
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Normas para el QR-Code

Postby postinelli » Fri Jan 15, 2021 2:00 pm

ah ah
aclaro
yo sólo programo para mis actividades comerciales, no soy profesional, de hecho soy autodidacta pero ahi vamos
con lo cual, te imaginaras mis limitaciones

las facturas las genero via webserver de afip y las guardo como pdf y envío x email a los clientes, siempre en formato A4
en estos dias les saque el codigo de barras y puse el qr asi como te mostré

tambien uso ticketera para imprimir no fiscal, pero jamás pude imprimir imagenes ( uso epson tm 88 )
logro imprimir texto, codigo de barras y el corte automatico de papel

dicho esto
si sos tan amable te pido me muestres como imprimis imagenes en ticketeras

saludos
postinelli
 
Posts: 147
Joined: Tue Jul 15, 2008 7:12 pm
Location: Argentina

Re: Normas para el QR-Code

Postby cmsoft » Fri Jan 15, 2021 2:11 pm

Excelente Pablo!

La imprimo de igual manera que en la impresora laser.
(La impresora de ticket tiene que estar instalada en windows)
Code: Select all  Expand view

*********** Impresion ticket          
           DEFINE FONT oFont   NAME "COURIER NEW"       SIZE -config:fon,config:fon*2.5
           DEFINE FONT oFont3  NAME "COURIER NEW"       SIZE -config:fon,config:fon*2.5 BOLD
           PRINT oPrn TO  ALLTRIM(oQryComand:name) //Imprime por comandera
              PAGE                                  
                 @ 0,1 PRINT TO oPrn IMAGE "logo.jpg" SIZE 3, 1.5 CM  STRETCH
                 @ 0, .1 PRINT TO oPrn TEXT ALLTRIM(oApp:nomb_emp) ;
                              SIZE 5,1 CM FONT oFont ALIGN "C" LASTROW nRow
                 @ nRow, .1 PRINT TO oPrn TEXT ALLTRIM(oApp:dire_emp) ;
                              SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "C"    
                 @ nRow, .1 PRINT TO oPrn TEXT ALLTRIM(aiva[oApp:tipo_iva]) ;
                              SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "C"

                 @ nRow, .1 PRINT TO oPrn TEXT "CUIT:"+oApp:cuit_emp ;
                              SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "C"
                 @ nRow, .1 PRINT TO oPrn TEXT "Ing.br:"+ALLTRIM(oApp:ingb_emp);
                              SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "C"
                 @ nRow, .1 PRINT TO oPrn TEXT "Inic.Act.:"+DTOC(oApp:inac_emp);
                              SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "C"
                             
                 @ nRow, .1 PRINT TO oPrn TEXT IF(cTipoDoc="NC","NOTA DE CREDITO ","TICKET ") + LEFT(cNumComp,1) ;
                              SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "C"
                 @ nRow, .1 PRINT TO oPrn TEXT "Cod:" + oQryVen1:tipfor+" Nro:"+RIGHT(cNumcomp,13) ;
                              SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "C"                
                 @ nRow, .1 PRINT TO oPrn TEXT "Fecha Emision:" + +DTOC(oQryVen1:fecha);
                              SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "C"                                                  
                 IF oQryVen1:coniva = 5
                    @ nRow, .1 PRINT TO oPrn TEXT "A Consumidor Final";
                              SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "C"
                    ELSE
                    @ nRow, .1 PRINT TO oPrn TEXT ALLTRIM(oQryVen1:nombre);
                              SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "L"
                    @ nRow, .1 PRINT TO oPrn TEXT oQryVen1:cuit;
                              SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "L"
                    @ nRow, .1 PRINT TO oPrn TEXT aIva[oQryVen1:coniva];
                              SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "L"
                    @ nRow, .1 PRINT TO oPrn TEXT ALLTRIM(oQryVen1:direccion) + " " + ;
                                                       ALLTRIM(oQryVen1:localidad);
                              SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "L"
                 ENDIF
                 @ nRow, 00 PRINT TO oPrn TEXT "Descripcion";
                              SIZE 2.5,.5 CM FONT oFont LASTROW nRow ALIGN "L"
                 @ nRow, 2.7 PRINT TO oPrn TEXT "Cant";
                              SIZE .9,.5 CM FONT oFont LASTROW nRow ALIGN "R"
                 @ nRow, 3.7 PRINT TO oPrn TEXT "Total";
                              SIZE 1,.5 CM FONT oFont LASTROW nRow ALIGN "R"
                                  oQryDet1:GoTop()                
                     FOR i = 1 TO oQryDet1:nRecCount          
                         nRow1 := nRow
                         @ nRow1, 00 PRINT TO oPrn TEXT ALLTRIM(oQryDet1:detart);
                              SIZE 2.5,.5 CM FONT oFont LASTROW nRow ALIGN "L"
                         @ nRow1, 2.7 PRINT TO oPrn TEXT STR(oQryDet1:cantidad,06);
                              SIZE 0.9,.5 CM FONT oFont LASTROW nRow ALIGN "R"
                         @ nRow1, 3.7 PRINT TO oPrn TEXT IF(LEFT(cNumComp,1) <> "A",;
                                                     STR((oQryDet1:neton*1.21),9,2),;
                                                     STR(oQryDet1:neton,9,2));
                              SIZE 1,.5 CM FONT oFont LASTROW nRow ALIGN "R"                    
                         nSuma := nSuma + oQryDet1:importe
                         oQryDet1:Skip()                    
                      NEXT
                  IF LEFT(cNumComp,1)<>"A"      
                     @ nRow, .1 PRINT TO oPrn TEXT "Total $ " + STR(oQryVen1:importe,10,2);
                              SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "L"                    
                     ELSE
                     @ nRow, .1 PRINT TO oPrn TEXT "Subtotal $ " + STR(oQryVen1:neto,10,2);
                              SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "L"                    
                     oQryIvaDet:GoTop()
                     FOR i = 1 TO oQryIvaDet:nRecCount          
                         @ nRow, .1 PRINT TO oPrn TEXT "I.V.A. "+ALLTRIM(oQryIvaDet:nomiva) + " $:" +STR(oQryIvaDet:iva,10,2) ;
                          SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "L"                        
                     NEXT
                     @ nRow, .1 PRINT TO oPrn TEXT "Total $:"+STR(oQryVen1:importe,10,2) ;
                          SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "L"                    
                 ENDIF    
                 @ nRow, .1 PRINT TO oPrn TEXT "CAE Nro:"+oQryVen1:cae ;
                          SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "L"                    
                 @ nRow, .1 PRINT TO oPrn TEXT "Fecha Vto CAE:"+DTOC(oQryVen1:fecVto);
                          SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "L"

                  IF oQryPar:emite_pie
                        @ nRow, .1 PRINT TO oPrn TEXT oQryPar:texto_pie;
                          SIZE 5,.5 CM FONT oFont3 LASTROW nRow ALIGN "L"        
                  ENDIF    
                  @ nRow,.1 PRINT TO oPrn TEXT ".";
                          SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "L"
                  @ nRow,.4 PRINT TO oPrn IMAGE "FactQR.bmp" SIZE 2.5,2.5 CM NOTRANSPARENT;
                   LASTROW nRow
                 
                  @ nRow,.1 PRINT TO oPrn TEXT "...";
                          SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "L"
                  @ nRow,.1 PRINT TO oPrn TEXT "...";
                          SIZE 5,.5 CM FONT oFont LASTROW nRow ALIGN "L"
              ENDPAGE
           ENDPRINT
 

Tengo una POS58 para hacer las pruebas...
User avatar
cmsoft
 
Posts: 1191
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Normas para el QR-Code

Postby postinelli » Fri Jan 15, 2021 2:17 pm

gracias

voy a probar

para las ticketeras uso tdosprn y manda siempre cualquiera sea la impresora instalada
manda directo a com,lpt o usb

no se si con PRINT podes enviar el corte automatico de papel
postinelli
 
Posts: 147
Joined: Tue Jul 15, 2008 7:12 pm
Location: Argentina

Re: Normas para el QR-Code

Postby cmsoft » Fri Jan 15, 2021 4:10 pm

En algunas que he probado, el corte de papel (si la impresora tiene) lo hace al hacer endpage
User avatar
cmsoft
 
Posts: 1191
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Normas para el QR-Code

Postby jpcavagnaro » Wed Jan 20, 2021 11:17 pm

Hola buenas tardes, estoy viendo este tema, compilo el ejemplo y me da error StrToBase64 no existe la función.

me falta alguna librería?

Saludos
Jorge

postinelli wrote://----------------------------------------------------------------------------//

function GeneraQR()

Local cOrigen, cJason, cDestino, ElTxt

cOrigen:="https://www.afip.gob.ar/fe/qr/?p="
cJason:='{"ver":1,"fecha":"2020-10-13","cuit":30000000007,"ptoVta":10,"tipoCmp":1,"nroCmp":94,"importe":12100,"moneda":"DOL","ctz":65,"tipoDocRec":80,"nroDocRec":20000000001,"tipoCodAut":"E","codAut":70417054367476}'
cJason=StrToBase64( cJason )
cOrigen=cOrigen+cJason

//MsgAlert(cOrigen)

ElTxt:= "QrJason.txt"
Nhandle:= fcreate(ElTxt)
If (nhandle > 0)
fwrite(Nhandle, cOrigen + CRLF)
fclose(nhandle)
EndIf

cDestino:="FastQR.jpg"

QRCode(cOrigen,cDestino)

MsgInfo("Qr Generado OK")

Return NIL

//----------------------------------------------------------------------------//

DLL32 STATIC FUNCTION QRCode(cStr As STRING, cFile As STRING) AS LONG PASCAL FROM "FastQRCode" LIB "QRCodelib.Dll"
RETURN NIL
/*
Jorge
Saludos.
jpcavagnaro
 
Posts: 147
Joined: Tue Oct 11, 2016 1:02 pm
Location: Luján, bs. as.

Re: Normas para el QR-Code

Postby karinha » Thu Jan 21, 2021 12:49 am

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7254
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Normas para el QR-Code

Postby cmsoft » Thu Jan 21, 2021 3:02 pm

Copiado del Foro Brasil
Code: Select all  Expand view

//
FUNCTION StrToBase64( cTexte )
  //******************
// Conversion en base 64 de la chaine cTexte
// Un alphabet de 65 caractères est utilisé pour permettre la représentation de 6 bits par caractère :
// "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
// Le '=' (65e caractère) est utilisé dans le processus de codage pour les caractères finaux.
   LOCAL cTexte64 := ""
   LOCAL X
   LOCAL cHex
   DO WHILE !( cTexte == "" )
      cHex := ""
      // Le processus de codage représente des groupes de 24 bits de données en entrée par une chaîne en sortie de 4 caractères codés.
      // En procédant de gauche à droite, un groupe de 24 bits est créé en concaténant 3 octets (8 bits par octet).
      FOR X := 1 TO 3
         // Conversion de chaque caractère en chaine binaire de 8 octets
         cHex += CarToBin( LEFT( cTexte, 1 ) )
         IF LEN( cTexte ) > 1
            cTexte := SUBSTR( cTexte, 2 )
         ELSE
            cTexte := ""
            EXIT
         ENDIF
      NEXT X
      // Ces 24 bits (ici contenus dans cHex, ou au moins un multiple) sont traités comme 4 groupes concaténés de 6 bits chacun convertis
      // en un unique caractère dans l'alphabet de la base 64.
      // Chaque groupe de 6 bits est utilisé comme index dans la table des caractères de la base 64.
      // Le caractère référencé par l'index correspondant est utilisé comme codage de ce groupe de 6 bits.
      FOR X := 1 TO 4
         IF SUBSTR( cHex, ( (X - 1 ) * 6 ) + 1 ) == ""
            cTexte64 += REPLICATE( "=", 4 - X + 1 )
            EXIT
         ELSE
            // Un traitement spécial est effectué si moins de 24 bits sont disponibles à la fin des données
            // à coder. Aucun bit ne restant non-codé,
            // si moins de 24 bits sont disponibles alors des bits à zéro sont ajoutés à la droite des données
            // pour former un nombre entier de groupes de 6 bits.
            IF LEN( cHex ) % 6 > 0
               // Ajout des bits à zéro
               cHex += REPLICATE( "0", 6 - ( LEN( cHex ) % 6 ) )
            ENDIF
            cTexte64 += Carac64( "00" + SUBSTR( cHex, ( (X - 1 ) * 6 ) + 1, 6 ) )
         ENDIF
      NEXT X
   ENDDO
RETURN cTexte64


FUNCTION Carac64( cBin )
  //***************
// Renvoie le caractère correspondant en base 64
   LOCAL nPos := ASC( BinToCar( @cBin ) ) + 1
RETURN SUBSTR( "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", nPos, 1 )
FUNCTION Hex64( carac64 )
  //*************
// Renvoie le caractère correspondant en base 64
   LOCAL cCodeAsc := CHR( AT( carac64, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" ) - 1 )
RETURN SUBSTR( CarToBin( @cCodeAsc ) , 3, 6 )

FUNCTION CarToBin( carac, lInverse )
  //****************
// Renvoie le caractère correspondant dans une chaine binaire (composée de 0 et 1) de 8 bits
#define cHexa "0123456789ABCDEF"
#define aBin {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" }
   LOCAL cToHex
   IF EMPTY( lInverse )
      // Retourne la chaine binaire en ayant reçu le caractère ASCII
      cToHex := str2Hex( carac )
      RETURN aBin[ AT( LEFT(cToHex,1), cHexa ) ] + aBin[ AT( SUBSTR(cToHex,2), cHexa ) ]
   ELSE
      // Retourne le caractère ASCII en ayant reçu la chaine binaire
      cToHex := SUBSTR( cHexa, ASCAN( aBin, LEFT(carac,4 ) ), 1 ) + SUBSTR( cHexa, ASCAN( aBin, SUBSTR(carac,5,4 ) ), 1 )
      RETURN Hex2str( cToHex )
   ENDIF
RETURN NIL

FUNCTION BinToCar( cBin )
  //****************
RETURN CarToBin( @cBin, .T. )
 
User avatar
cmsoft
 
Posts: 1191
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Normas para el QR-Code

Postby jpcavagnaro » Thu Jan 21, 2021 6:57 pm

Hola, logre generar el código e imprimirlo perfecto.

Quise validarlo, saben si funciona la página que recibirá estos códigos.

Saludos.
Jorge
Jorge
Saludos.
jpcavagnaro
 
Posts: 147
Joined: Tue Oct 11, 2016 1:02 pm
Location: Luján, bs. as.

Re: Normas para el QR-Code

Postby postinelli » Thu Jan 21, 2021 7:54 pm

Estimado

la pagina de afip aun está a prueba, no valida una factura en si, solo te lleva a la pagina informativa de codigos qr de afip
siempre te lleva a https://www.afip.gob.ar/fe/qr/conceptos-generales.asp

yo lo que hice fue generar un txt con el link completo
lo abro con el block de notas y copio el json y lo decodifico en https://www.base64decode.org/

ahi vas a ver si el link generado es correcto comparandolo con la informacion que da la afip para este tema

es todo bastante simple
postinelli
 
Posts: 147
Joined: Tue Jul 15, 2008 7:12 pm
Location: Argentina

Re: Normas para el QR-Code

Postby jpcavagnaro » Sat Jan 23, 2021 3:17 pm

Joya, ahí lo probé, quedo perfecto.

Muchas gracias
Saludos
Jorge
Saludos.
jpcavagnaro
 
Posts: 147
Joined: Tue Oct 11, 2016 1:02 pm
Location: Luján, bs. as.

Re: Normas para el QR-Code

Postby TOTOVIOTTI » Thu Mar 18, 2021 11:50 am

Hola... puede ser que la "QRCodelib.Dll" no funcione para Windows XP?

Muchas gracias!
Roberto
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.edu.ar
User avatar
TOTOVIOTTI
 
Posts: 387
Joined: Fri Feb 05, 2010 11:30 am
Location: San Francisco - Córdoba - Argentina

Re: Normas para el QR-Code

Postby postinelli » Thu Mar 18, 2021 7:58 pm

TOTOVIOTTI wrote:Hola... puede ser que la "QRCodelib.Dll" no funcione para Windows XP?

Muchas gracias!
Roberto


Estimado Roberto

la verdad no lo sé, ni tengo una pc con XP como para probar
postinelli
 
Posts: 147
Joined: Tue Jul 15, 2008 7:12 pm
Location: Argentina

Re: Normas para el QR-Code

Postby Ariel » Fri Mar 19, 2021 11:05 am

Roberto,

si funciona en xp, lo tengo andando en un cliente.

Saludos.
Ariel
 
Posts: 374
Joined: Wed Nov 29, 2006 1:51 pm
Location: Rosario - Argentina

Previous

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 11 guests