Jump to content
marcolopes

AT - questões legais

Recommended Posts

Sergio.

Boas e todos deste fórum,

Ao ler as especificações do Qrcode fiquei parado no ultimo exemplo, uma guia de transporte, ter ATCUD até entendo, agora imprimir o Qrcode.... já tenho clientes que se limitam a imprimir numa etiqueta o Código de autorização da AT, que segunda ela é o suficiente para a mercadoria poder sair para a rua.... e parece-me que assim vai continuar a ser.

Será para o caso de imprimir em papel tenho que imprimir o Qrcode...só esta me parece fazer sentido.

ou estou a falhar em alguma coisa...

Obrigado

Edited by Sergio.
correcao

Share this post


Link to post
Share on other sites
kalin
1 hora atrás, Sergio. disse:

Boas e todos deste fórum,

Ao ler as especificações do Qrcode fiquei parado no ultimo exemplo, uma guia de transporte, ter ATCUD até entendo, agora imprimir o Qrcode.... já tenho clientes que se limitam a imprimir numa etiqueta o Código de autorização da AT, que segunda ela é o suficiente para a mercadoria poder sair para a rua.... e parece-me que assim vai continuar a ser.

Será para o caso de imprimir em papel tenho que imprimir o Qrcode...só esta me parece fazer sentido.

ou estou a falhar em alguma coisa...

Obrigado

Penso que o Qrcode é para estar impresso no documento, se não imprimes, não precisas do Qrcode

Share this post


Link to post
Share on other sites
desconfiado

Esta questão de impressão do QR Code nas facturas é uma completa PARVOÍCE! Qual é o objectivo disto?

Além das dificuldades de implementação e custos para o contribuinte, que não ajudam nada no actual cenário de pandemia, não vejo os benefícios desta obrigatoriedade.

Eu acho que alguém tem que colocar um travão nesta "perseguição" ás empresas e empresários. Começa a ultrapassar o limite do razoável (acho que até já ultrapassou).

ATCUD? Então agora vai ser obrigatório o cliente ter um computador ligado á internet porque senão não consegue obter o código ATCUD!?!

Isto é outro nível de loucura...

Share this post


Link to post
Share on other sites
kalin
9 minutos atrás, desconfiado disse:

Esta questão de impressão do QR Code nas facturas é uma completa PARVOÍCE! Qual é o objectivo disto?

Além das dificuldades de implementação e custos para o contribuinte, que não ajudam nada no actual cenário de pandemia, não vejo os benefícios desta obrigatoriedade.

Eu acho que alguém tem que colocar um travão nesta "perseguição" ás empresas e empresários. Começa a ultrapassar o limite do razoável (acho que até já ultrapassou).

ATCUD? Então agora vai ser obrigatório o cliente ter um computador ligado á internet porque senão não consegue obter o código ATCUD!?!

Isto é outro nível de loucura...

Isto do Qrcode até estou de acordo, mas para o ATCUD é só mais 1 alteração, já é preciso uma ligação a internet para enviar o SAFT mensal

Share this post


Link to post
Share on other sites
desconfiado
9 minutos atrás, kalin disse:

Isto do Qrcode até estou de acordo, mas para o ATCUD é só mais 1 alteração, já é preciso uma ligação a internet para enviar o SAFT mensal

Não sei como funcionam os outros clientes mas muitos dos meus clientes geram o SAF-T e enviam para a contabilidade para eles submeterem.

E isto pode dar grande confusão se houver postos, ou clientes, que não actualizam o programa. Imaginem que têm um cliente com uma versão anterior do software num PC qualquer que não é actualizado com a nova versão do software. Como é que se impede uma versão anterior de fazer um documento sem o ATCUD? O ATCUD vai poder ser introduzido depois da série ser iniciada? Como é que vão controlar se o ATCUD foi introduzido antes do 1º documento da série ser gerado? Este ATCUD vai fazer parte da assinatura do documento?

Share this post


Link to post
Share on other sites
CrominhO
5 horas atrás, kalin disse:

Penso que não dá para fazer com uma fonte, posso estar muito enganado, mas o que há é caracter a caracter, ou seja "FT" terias 2 códigos QR 1 para o "F" e outro para o "T".

Tens que usar uma livraria que te crie os códigos nos reports ou uma que gere uma imagem e inseres nos documentos quando estiveres a imprimir, ou se usares impressoras térmicas, ESC/POS.

Estive a testar os exemplos do manual, na minha impressora de 58mm e o 1º exemplo da FT, consigo imprimir mas depois não consigo ler o que lá está, todas as aplicações que usei dão erro ao ler aquilo, hoje é dia de testar na de 80mm

Meti Like, já que não dá para ver agora quem vota. 

Já testei em ambas (58 e 80mm) e funciona, por imagem. Qual a livraria que estás a utilizar para não fazeres por imagem? 

Em relação ao não conseguires ler, usaste as margens e tamanhos que eles definem? Se sim, podes estar a fazer tudo correctamente e simplesmente o "leitor" que usaste não ter qualidade. Tira uma foto com qualidade ao report, mete no PC e tenta ler. 

PS: @PHonorato, tens de pesquisar um bocadinho sobre isso, há diversas tabelas de caracteres, diversas codificações e algumas variáveis. Dá uma vista de olhos sobre isso, e depois se for necessário abrimos um tópico sobre isso, porque é tanta informação que iria ocupar e baralhar este Tópico. Podemos é criar um tópico depois de dares uma vista de olhos e "linkar" a este. 


As mentes humanas são realmente um local estranho!

Share this post


Link to post
Share on other sites
CrominhO
35 minutos atrás, desconfiado disse:

Não sei como funcionam os outros clientes mas muitos dos meus clientes geram o SAF-T e enviam para a contabilidade para eles submeterem.

E isto pode dar grande confusão se houver postos, ou clientes, que não actualizam o programa. Imaginem que têm um cliente com uma versão anterior do software num PC qualquer que não é actualizado com a nova versão do software. Como é que se impede uma versão anterior de fazer um documento sem o ATCUD? O ATCUD vai poder ser introduzido depois da série ser iniciada? Como é que vão controlar se o ATCUD foi introduzido antes do 1º documento da série ser gerado? Este ATCUD vai fazer parte da assinatura do documento?

Todos nós sabemos que é assim, mas não deveria. O que  a AT diz claramente é que deveria ser o cliente a submeter o SAFT exactamente para ver se há diferenças com a Contabilidade. 

Em relação ás outras duas questões, também colocadas anteriormente por outras pessoas. 

Acho que não nos devemos preocupar em Demasia com o facto de os clientes actualizarem ou não as aplicações. Isso já aconteceu no passado. Ninguém pode obrigar um cliente a actualizar, logo as SH não podem ser responsabilizadas por 10 clientes que não actualizaram e o TEU software não fazer o que é suposto. É para isso que serve termos as Versões nos softwares, para que se algum documento "bater" na AT, é importante ver em que versão da tua aplicação foi feita. E isto serve para todas as questões, parece-me

Em relação à última, parece-me que estamos a fazer um bocadinho de confusão (também levantada por outras pessoas). Tenho sérias dúvidas, que a comunicação da criação da Série seja exclusivamente por Webservice, tal como nos Documentos de Transporte, deverá ser possível obter através do Portal e/ou até mesmo através do telefone com posterior comunicação. 


As mentes humanas são realmente um local estranho!

Share this post


Link to post
Share on other sites
kalin
37 minutos atrás, CrominhO disse:

Meti Like, já que não dá para ver agora quem vota. 

Já testei em ambas (58 e 80mm) e funciona, por imagem. Qual a livraria que estás a utilizar para não fazeres por imagem? 

Em relação ao não conseguires ler, usaste as margens e tamanhos que eles definem? Se sim, podes estar a fazer tudo correctamente e simplesmente o "leitor" que usaste não ter qualidade. Tira uma foto com qualidade ao report, mete no PC e tenta ler. 

PS: @PHonorato, tens de pesquisar um bocadinho sobre isso, há diversas tabelas de caracteres, diversas codificações e algumas variáveis. Dá uma vista de olhos sobre isso, e depois se for necessário abrimos um tópico sobre isso, porque é tanta informação que iria ocupar e baralhar este Tópico. Podemos é criar um tópico depois de dares uma vista de olhos e "linkar" a este. 

Estou a usar ESC/POS e não consigo definir todos os parâmetros que eles obrigam, por exemplo a margem acho que isso não se consegue definir nestes comandos, as outras obrigações como a versão, nivel de erro já dá.

Desde que se consiga ler as informações corretas nem me chateio se as especificações não estão todas corretas, isso fica para depois.

Tentei com mais do que 1 app e com um serviço online, e nada, o que é estranho se a impressora manda o código devia dar para ler.

Se não conseguir, também vou pela imagem.

Share this post


Link to post
Share on other sites
CrominhO
1 hora atrás, kalin disse:

(...)Se não conseguir, também vou pela imagem.

Mas podes usar ambas, vê a msg que te enviei


As mentes humanas são realmente um local estranho!

Share this post


Link to post
Share on other sites
PHonorato
17 horas atrás, CrominhO disse:

Meti Like, já que não dá para ver agora quem vota. 

Já testei em ambas (58 e 80mm) e funciona, por imagem. Qual a livraria que estás a utilizar para não fazeres por imagem? 

Em relação ao não conseguires ler, usaste as margens e tamanhos que eles definem? Se sim, podes estar a fazer tudo correctamente e simplesmente o "leitor" que usaste não ter qualidade. Tira uma foto com qualidade ao report, mete no PC e tenta ler. 

PS: @PHonorato, tens de pesquisar um bocadinho sobre isso, há diversas tabelas de caracteres, diversas codificações e algumas variáveis. Dá uma vista de olhos sobre isso, e depois se for necessário abrimos um tópico sobre isso, porque é tanta informação que iria ocupar e baralhar este Tópico. Podemos é criar um tópico depois de dares uma vista de olhos e "linkar" a este. 

Ainda não fui trabalhar neste assunto.

Mas pelo que vi no NotGet package manager procurei por qr code e encontrei o messagingtoolkit.qrcode e parece que faz aquilo que precisamos.

Share this post


Link to post
Share on other sites
kalin
1 hora atrás, PHonorato disse:

Ainda não fui trabalhar neste assunto.

Mas pelo que vi no NotGet package manager procurei por qr code e encontrei o messagingtoolkit.qrcode e parece que faz aquilo que precisamos.

Eu não usaria essa biblioteca, já não é atualizada desde 2012 não tenho a certeza da licença. 

Encontrei 2 para .NET que são open source e tem estado bem ativas:

https://github.com/codebude/QRCoder/

https://github.com/micjahn/ZXing.Net/

  • Vote 1

Share this post


Link to post
Share on other sites
karlynhuz
5 minutes ago, brunotoira said:

 


var CodigoQR:String;
...
...
...

Ao gravar documento ou antes de imprimir:
  
//obter código unico
//ainda estou a aguardar informação adicional sobre o pedido do ATCUD
CodigoQR:=copy(AnsiReverseString(IntToStr(IBDOCS.fieldbyname('ID').Asinteger*4)),1,4);
CodigoQR:=CodigoQR+IBDOCS.fieldbyname('SERIE').AsString;
CodigoQR:=CodigoQR+copy(IntToStr(NumeroDocumento*2),5,9);
    

   StringCodigo:='A:NIFEMISSOR*';
   StringCodigo:=StringCodigo+'B:'+IBDocs.FieldByName('NRCONTRIBUINTE').AsString+'*';
   StringCodigo:=StringCodigo+'C:PT*';
   if TIPODOCUMENTO='FACTURA SIMPLIFICADA' then
     StringCodigo:=StringCodigo+'D:FS*';
   if TIPODOCUMENTO='NOTA DE CREDITO' then
     StringCodigo:=StringCodigo+'D:NC*';
   if TIPODOCUMENTO='RECIBO' then
     StringCodigo:=StringCodigo+'D:RE*';
    //ETC...

   StringCodigo:=StringCodigo+'E:N*';
   StringCodigo:=StringCodigo+'F:'+FORMATDATETIME('YYYYMMDD',IBDocs.FieldByName('DATADOC').AsDateTime)+'*';
   StringCodigo:=StringCodigo+'G:'+IBDOCS.fieldbyname('INICIAISDOC').AsString + ' ' + IBDOCS.FIELDBYNAME('SERIE').AsString + '/' + IBDOCS.fieldbyname('NDOC').asstring+'*';
   StringCodigo:=StringCodigo+'H:'+IBDocs.FieldByName('CODLOJA').AsString +'-'+IBDocs.FieldByName('NDOC').AsString+'*';
   StringCodigo:=StringCodigo+'I1:PT*';

   ibquery1.close;
   ibquery1.SQL.clear;
   ibquery1.SQL.add(
     'select ROUND(TOTAISIVA1,2), ROUND(TOTAISIVA2,2), ROUND(TOTAISIVA3,2), ROUND(TOTAISIVA4,2) FROM DOCS WHERE tipodoc=:TIPODOC AND ndoc=:NDOC');
   ibquery1.parambyname('TIPODOC').AsString := TIPODOCUMENTO;
   ibquery1.parambyname('NDOC').AsInteger := NumeroDocumento;
   ibquery1.open;

   while NOT ibquery1.eof do
    begin
      if ibquery1.FieldByName('IVA').AsInteger=6 then
        begin
          StringCodigo:=StringCodigo+'I3:'+FloatToStr(ibquery1.FieldByName('TOTALSEMIVA').AsFloat)+'*';
          StringCodigo:=StringCodigo+'I4:'+FloatToStr(ibquery1.FieldByName('TOTALIVA').AsFloat)+'*';
        end;
      if ibquery1.FieldByName('IVA').AsInteger=13 then
        begin
          StringCodigo:=StringCodigo+'I5:'+FloatToStr(ibquery1.FieldByName('TOTALSEMIVA').AsFloat)+'*';
          StringCodigo:=StringCodigo+'I6:'+FloatToStr(ibquery1.FieldByName('TOTALIVA').AsFloat)+'*';
        end;
      if ibquery1.FieldByName('IVA').AsInteger=23 then
        begin
          StringCodigo:=StringCodigo+'I7:'+FloatToStr(ibquery1.FieldByName('TOTALSEMIVA').AsFloat)+'*';
          StringCodigo:=StringCodigo+'I8:'+FloatToStr(ibquery1.FieldByName('TOTALIVA').AsFloat)+'*';
        end;
      ibquery1.Next;
    end;

   StringCodigo:=StringCodigo+'N:'+FloatToStr(RoundNExtend(IBDOCS.FieldByName('TOTALIVA').AsFloat,2))+'*';
   StringCodigo:=StringCodigo+'O:'+FloatToStr(RoundNExtend(IBDOCS.FieldByName('TOTALGERAL').AsFloat,2))+'*';
   StringCodigo:=StringCodigo+'Q:'+copy(IBDocs.FieldByName('PRINTHASH').AsString,1,4)+'*'; //CODIGO HASH
   StringCodigo:=StringCodigo+'R:'+CodigoCertificado+'*'; // VOSSO NUMERO DE CERTIFICADO
   StringCodigo:=StringCodigo+'S:NU;'+FloatToStr(RoundNExtend(IBDOCS.FieldByName('TOTALGERAL').AsFloat,2));

   StringCodigo:=StringReplace(StringCodigo,',','.',[rfReplaceAll]);

   UpdateQRCode(StringCodigo,CodigoQR);
        
   //Isto vai-vos criar o BMP com o QRCode.
   //Depois só têm que grava-lo numa BD, e no CrystalReports, adicionar o campo dessa BD.
   +/- ISTO UPDATE DOCS SET IMAGEMQRCODE=FILESTREAM(C:\PASTATEMPORARIA\QRCODE\XXXXXXXXX.BMP
  
          
       
        
        
Procedure TDataModule1.UpdateQRCode(Texto,Codigo:String);
var
  QRCode: TDelphiZXingQRCode; //Gratuito é só ir buscar á net.
  Row, Column: Integer;
  Scale: Double;
  QRCodeBitmap: TBitmap;
  ImageQR:TImage;
begin

  try
    ImageQR:=TImage.Create(self);
    QRCodeBitmap := TBitmap.Create;
    QRCode := TDelphiZXingQRCode.Create;

    QRCode.Data := Texto;
    QRCode.Encoding := TQRCodeEncoding(0);
    QRCode.QuietZone := 1;
    QRCodeBitmap.SetSize(QRCode.Rows, QRCode.Columns);
    for Row := 0 to QRCode.Rows - 1 do
    begin
      for Column := 0 to QRCode.Columns - 1 do
      begin
        if (QRCode.IsBlack[Row, Column]) then
        begin
          QRCodeBitmap.Canvas.Pixels[Column, Row] := clBlack;
        end else
        begin
          QRCodeBitmap.Canvas.Pixels[Column, Row] := clWhite;
        end;
      end;
    end;

    ImageQR.Canvas.Brush.Color := clWhite;
    ImageQR.Canvas.FillRect(Rect(0, 0, ImageQR.Width, ImageQR.Height));
    if ((QRCodeBitmap.Width > 0) and (QRCodeBitmap.Height > 0)) then
    begin
      if (ImageQR.Width < ImageQR.Height) then
      begin
        Scale := ImageQR.Width / QRCodeBitmap.Width;
      end else
      begin
        Scale := ImageQR.Height / QRCodeBitmap.Height;
      end;
      ImageQR.Canvas.StretchDraw(Rect(0, 0, Trunc(Scale * QRCodeBitmap.Width), Trunc(Scale * QRCodeBitmap.Height)), QRCodeBitmap);
    end;
  ImageQR.Picture.SaveToFile('C:\PASTATEMPORARIA\QRCode\'+Codigo+'.bmp');
  QRCode.Free;
  QRCodeBitmap.Free;

  except

  end;

end;

Delphi

Se precisarem para outras linguagens de programação, mandem msg.

Ah boa. Comecei agora mesmo a implementar (tentar) com essa mesma lib num projecto ainda em Delphi 6! Acho que vou aproveitar parte do teu código! Depois só me falta ver como enfiar a imagem no FastReport. Obrigado!!!

E boa sorte para todos!

Em relação à comunicação das series ainda não há especificações técnicas?!

Share this post


Link to post
Share on other sites
brunotoira
2 minutos atrás, karlynhuz disse:

Ah boa. Comecei agora mesmo a implementar (tentar) com essa mesma lib num projecto ainda em Delphi 6! Acho que vou aproveitar parte do teu código! Depois só me falta ver como enfiar a imagem no FastReport. Obrigado!!!

E boa sorte para todos!

Em relação à comunicação das series ainda não há especificações técnicas?!

Só em Dezembro é que é preciso comunicar as nossas séries á AT, e eles devolvem-te um código para colocares no teu source code.

até lá, é esperar, comer tremoços e beber finos.

 

  • Vote 1

Source code para enviar Guias de Transporte

Source code para enviar UBL - Faturação Eletrónica (XML de faturas e validador) - bmartins.p45@gmail.com

QRCode ATCUD https://www.portugal-a-programar.pt/forums/topic/77364-at-questões-legais/?do=findComment&comment=619124

 

 

Share this post


Link to post
Share on other sites
PHonorato
20 minutos atrás, brunotoira disse:

 


uses DelphiZXingQRCode;

Procedure GravarDocumento ou ImprimirDocumento;
var CodigoQR:String;
...
...
...
begin
  
Ao gravar documento ou antes de imprimir:
  
//obter código unico
//ainda estou a aguardar informação adicional sobre o pedido do ATCUD
CodigoQR:=copy(AnsiReverseString(IntToStr(IBDOCS.fieldbyname('ID').Asinteger*4)),1,4);
CodigoQR:=CodigoQR+IBDOCS.fieldbyname('SERIE').AsString;
CodigoQR:=CodigoQR+copy(IntToStr(NumeroDocumento*2),5,9);
    
//criar os campos para gerar o QRCode.
//A NIF do emitente *
//B NIF do adquirente *
//C País do adquirente *
//D Tipo de documento *
//E Estado do documento *
//F Data do documento *
//G Identificação única do documento *
//H ATCUD *
//I1 Espaço fiscal *
//I2 Base tributável isenta de IVA *
//I3 Base tributável de IVA à taxa reduzida *
//I4 Total de IVA à taxa reduzida *
//I5 Base tributável de IVA à taxa intermédia *
//I6 Total de IVA à taxa intermédia *
//I7 Base tributável de IVA à taxa normal *
//I8 Total de IVA à taxa normal *
//J1 Espaço fiscal *
//J2 Base tributável isenta *
//J3 Base tributável deIVA à taxa reduzida *
//J4 Total de IVA à taxa reduzida *
//J5 Base tributável de IVA à taxa intermédia *
//..
//...
//...
//....
//.....
//etc....
//N Total de impostos *
//O Total do documento com impostos *
//Q 4 carateres do Hash *
//R Nº do certificado *

   StringCodigo:='A:NIFEMISSOR*';
   StringCodigo:=StringCodigo+'B:'+IBDocs.FieldByName('NRCONTRIBUINTE').AsString+'*';
   StringCodigo:=StringCodigo+'C:PT*';
   if TIPODOCUMENTO='FACTURA SIMPLIFICADA' then
     StringCodigo:=StringCodigo+'D:FS*';
   if TIPODOCUMENTO='NOTA DE CREDITO' then
     StringCodigo:=StringCodigo+'D:NC*';
   if TIPODOCUMENTO='RECIBO' then
     StringCodigo:=StringCodigo+'D:RE*';
    //ETC...

   StringCodigo:=StringCodigo+'E:N*';
   StringCodigo:=StringCodigo+'F:'+FORMATDATETIME('YYYYMMDD',IBDocs.FieldByName('DATADOC').AsDateTime)+'*';
   StringCodigo:=StringCodigo+'G:'+IBDOCS.fieldbyname('INICIAISDOC').AsString + ' ' + IBDOCS.FIELDBYNAME('SERIE').AsString + '/' + IBDOCS.fieldbyname('NDOC').asstring+'*';
   StringCodigo:=StringCodigo+'H:'+IBDocs.FieldByName('CODLOJA').AsString +'-'+IBDocs.FieldByName('NDOC').AsString+'*';
   StringCodigo:=StringCodigo+'I1:PT*';

   ibquery1.close;
   ibquery1.SQL.clear;
   ibquery1.SQL.add(
     'select ROUND(TOTAISIVA1,2), ROUND(TOTAISIVA2,2), ROUND(TOTAISIVA3,2), ROUND(TOTAISIVA4,2) FROM DOCS WHERE tipodoc=:TIPODOC AND ndoc=:NDOC');
   ibquery1.parambyname('TIPODOC').AsString := TIPODOCUMENTO;
   ibquery1.parambyname('NDOC').AsInteger := NumeroDocumento;
   ibquery1.open;

   while NOT ibquery1.eof do
    begin
      if ibquery1.FieldByName('IVA').AsInteger=6 then
        begin
          StringCodigo:=StringCodigo+'I3:'+FloatToStr(ibquery1.FieldByName('TOTALSEMIVA').AsFloat)+'*';
          StringCodigo:=StringCodigo+'I4:'+FloatToStr(ibquery1.FieldByName('TOTALIVA').AsFloat)+'*';
        end;
      if ibquery1.FieldByName('IVA').AsInteger=13 then
        begin
          StringCodigo:=StringCodigo+'I5:'+FloatToStr(ibquery1.FieldByName('TOTALSEMIVA').AsFloat)+'*';
          StringCodigo:=StringCodigo+'I6:'+FloatToStr(ibquery1.FieldByName('TOTALIVA').AsFloat)+'*';
        end;
      if ibquery1.FieldByName('IVA').AsInteger=23 then
        begin
          StringCodigo:=StringCodigo+'I7:'+FloatToStr(ibquery1.FieldByName('TOTALSEMIVA').AsFloat)+'*';
          StringCodigo:=StringCodigo+'I8:'+FloatToStr(ibquery1.FieldByName('TOTALIVA').AsFloat)+'*';
        end;
      ibquery1.Next;
    end;

   StringCodigo:=StringCodigo+'N:'+FloatToStr(RoundNExtend(IBDOCS.FieldByName('TOTALIVA').AsFloat,2))+'*';
   StringCodigo:=StringCodigo+'O:'+FloatToStr(RoundNExtend(IBDOCS.FieldByName('TOTALGERAL').AsFloat,2))+'*';
   StringCodigo:=StringCodigo+'Q:'+copy(IBDocs.FieldByName('PRINTHASH').AsString,1,4)+'*'; //CODIGO HASH
   StringCodigo:=StringCodigo+'R:'+CodigoCertificado+'*'; // VOSSO NUMERO DE CERTIFICADO
   StringCodigo:=StringCodigo+'S:NU;'+FloatToStr(RoundNExtend(IBDOCS.FieldByName('TOTALGERAL').AsFloat,2));

   StringCodigo:=StringReplace(StringCodigo,',','.',[rfReplaceAll]);

   UpdateQRCode(StringCodigo,CodigoQR);
        
   //Isto vai-vos criar o BMP com o QRCode.
   //Depois só têm que grava-lo numa BD, e no CrystalReports, adicionar o campo dessa BD.
   +/- ISTO UPDATE DOCS SET IMAGEMQRCODE=FILESTREAM(C:\PASTATEMPORARIA\QRCODE\XXXXXXXXX.BMP
  
          
       
        
        
Procedure TDataModule1.UpdateQRCode(Texto,Codigo:String);
var
  QRCode: TDelphiZXingQRCode; //Gratuito é só ir buscar á net.
  Row, Column: Integer;
  Scale: Double;
  QRCodeBitmap: TBitmap;
  ImageQR:TImage;
begin

  try
    ImageQR:=TImage.Create(self);
    QRCodeBitmap := TBitmap.Create;
    QRCode := TDelphiZXingQRCode.Create;

    QRCode.Data := Texto;
    QRCode.Encoding := TQRCodeEncoding(0);
    QRCode.QuietZone := 1;
    QRCodeBitmap.SetSize(QRCode.Rows, QRCode.Columns);
    for Row := 0 to QRCode.Rows - 1 do
    begin
      for Column := 0 to QRCode.Columns - 1 do
      begin
        if (QRCode.IsBlack[Row, Column]) then
        begin
          QRCodeBitmap.Canvas.Pixels[Column, Row] := clBlack;
        end else
        begin
          QRCodeBitmap.Canvas.Pixels[Column, Row] := clWhite;
        end;
      end;
    end;

    ImageQR.Canvas.Brush.Color := clWhite;
    ImageQR.Canvas.FillRect(Rect(0, 0, ImageQR.Width, ImageQR.Height));
    if ((QRCodeBitmap.Width > 0) and (QRCodeBitmap.Height > 0)) then
    begin
      if (ImageQR.Width < ImageQR.Height) then
      begin
        Scale := ImageQR.Width / QRCodeBitmap.Width;
      end else
      begin
        Scale := ImageQR.Height / QRCodeBitmap.Height;
      end;
      ImageQR.Canvas.StretchDraw(Rect(0, 0, Trunc(Scale * QRCodeBitmap.Width), Trunc(Scale * QRCodeBitmap.Height)), QRCodeBitmap);
    end;
  ImageQR.Picture.SaveToFile('C:\PASTATEMPORARIA\QRCode\'+Codigo+'.bmp');
  QRCode.Free;
  QRCodeBitmap.Free;

  except

  end;

end;

Delphi

Se precisarem para outras linguagens de programação, mandem msg.

Consegues para VB.

Obrigado por partilhares

Share this post


Link to post
Share on other sites
JorgeRocha
4 horas atrás, kalin disse:

Eu não usaria essa biblioteca, já não é atualizada desde 2012 não tenho a certeza da licença. 

Encontrei 2 para .NET que são open source e tem estado bem ativas:

https://github.com/codebude/QRCoder/

https://github.com/micjahn/ZXing.Net/

Viva 

Já experimentas-te algum ? 

alguem sabe se é possivel passar por parametro para dentro do crystal reports a imagem ? 
Dá para passar muitas coisas mas imagens eu não sei se dá.

 

Obrigado

Jorge Rocha


Jorge Rocha

Share this post


Link to post
Share on other sites
brunotoira
27 minutos atrás, JorgeRocha disse:

Viva 

Já experimentas-te algum ? 

alguem sabe se é possivel passar por parametro para dentro do crystal reports a imagem ? 
Dá para passar muitas coisas mas imagens eu não sei se dá.

 

Obrigado

Jorge Rocha

claro que dá.

crias o campo na BD, tipo Blob e adicionas o campo no crystal.

ele desenha o que gravar nesse campo.


Source code para enviar Guias de Transporte

Source code para enviar UBL - Faturação Eletrónica (XML de faturas e validador) - bmartins.p45@gmail.com

QRCode ATCUD https://www.portugal-a-programar.pt/forums/topic/77364-at-questões-legais/?do=findComment&comment=619124

 

 

Share this post


Link to post
Share on other sites
CrominhO
5 horas atrás, brunotoira disse:

(...)Delphi

Se precisarem para outras linguagens de programação, mandem msg.

Não posso deixar de comentar lol, tenho isto a funcionar precisamente em Delphi e c/ o Zxing  já ha algum tempo (e não sou o único), e agora estou a fazer esta treta em modo texto directo, mas não meti aqui o código. O Bruno, não só mete o componente, como mete o código em Delphi, como ainda se disponibiliza pra fazer em outras Linguagens sendo que no site do ZXing está lá para outras LPs, portanto a "papinha" toda feita lol :D ainda pergunta se quer a papinha mais fria ou mais quente :D ... e agora gostaria de saber onde andam os criticos do Bruno aquando da FE-AP ??? lol :D 

  • Vote 1

As mentes humanas são realmente um local estranho!

Share this post


Link to post
Share on other sites
CrominhO
5 horas atrás, brunotoira disse:

(...)Delphi

Se precisarem para outras linguagens de programação, mandem msg.

Bruno no Delphi não tás a passar o correction level pois não? 

No Java aparece, em Delphi não me aparece, para já ignorei e ele vai gerindo sozinho. 


As mentes humanas são realmente um local estranho!

Share this post


Link to post
Share on other sites
JorgeRocha
37 minutos atrás, brunotoira disse:

claro que dá.

crias o campo na BD, tipo Blob e adicionas o campo no crystal.

ele desenha o que gravar nesse campo.

Dessa maneira sim, de fato... 


Jorge Rocha

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.