Impressão CFe SAT VB.net
AlanJovita opened this issue · comments
Bom dia Pessoal
Primeiramente gostaria de parabenizar o projeto, esta funcionando perfeitamente em meus clientes, e foi te grande ajuda para eu conseguir lançar meu sistema no mercado bem antes do planejado.
Como temos apenas o FastReport como a impressão, venho contribuir ao projeto uma opção de classe de impressão nativa utilizando o Printing.PrintDocument
. Não me dei bem com o Fast por isso resolvi adaptar um código que já tinha;
há duas dependencias no projeto, uma para a impressão do código de barras Imports BarcodeLib
e outra para o QrCode Imports Gma.QrCodeNet.Encoding
as demais são informações do próprio componente ACbr.SAT.
Fiquem a vontade para melhorias e sugestões. Qualquer duvida estou a disposição!
Dica: converter código entre C# e VB.net http://converter.telerik.com/
Imagem do cupom impresso usando a classe.
Vou estar analisando.
Excelente!!
@AlanJovita , td bem?
Poderia me informar quais pacotes NuGet eu realmente deveria instalar para usar o esta impressão direta que desenvolveu?
Muito obrigado
@apbertoletti , bom dia.
Pacote que na minha aplicação está instalado via Nuget é somente Gma.QrCodeNet
já o BarCodeLib.dll eu referenciei diretamente no arquivo, mas também pode ser feito via NuGet.
Install-Package Gma.QrCodeNet -Version 0.4.1.2
Install-Package BarcodeLib -Version 1.0.0.23
Qualquer duvida estou a disposição.
@AlanJovita,
Estou fazendo uns testes com o ACBr.Net.Sat e Impressão CFe SAT VB.net e instalei os pacotes via nuget que comentou só que a impressão para justamente na hora de imprimir o código de barras e o qrcode.
Algum ideia? Obrigado.
Analisando entre a mensagem de erro e a classe o código esta parando na linha 324.
confira o seguinte.
Esse código Gera uma imagem do QRCode e salva na pasta inicial da aplicação.
Dim file As New FileStream(Application.StartupPath & "\QR.png", FileMode.Create, FileAccess.Write)
gRenderer.WriteToStream(QrcodeX.Matrix, ImageFormat.Png, file)
file.Close()
Em seguida, o mesmo faz o carregamento da imagem no componente para impressão.
Dim imgQrcode As Image = Image.FromFile(Application.StartupPath & "\QR.png")
Debugue o código para verificar em qual desses procedimentos não está funcionando e se esta realmente criando o arquivo .png na pasta indicada.
O problema estava ocorrendo na linha:
Que é a tag de data e hora da emissão. O problema que ocorria é que estavamos gerando a venda e em seguida já fazendo a impressão, então ele tentava imprimir a venda gerada e não a recebida após processamento, assim, essa tag vinha vazia.
Feito isso a impressão seguiu correta. Obrigado.
@rftd , @marcosgerene, @apbertoletti, @AlanJovita ,
Com a ajuda do @apbertoletti, fizemos a conversão do modelo de impressão disponibilizado pelo nosso colega @AlanJovita em VB para C#. Fizemos os testes com o VS2017 Professional, uma impressora Daruma DR800-H com driver spool versão 2.0.0.6 e um Sat Tanca SDK-1000 sem problemas. Estamos disponibilizando o pacote para que o @rftd possa analisar e subir para o projeto.
Obrigado.
Não preve se esta em homologação e por isso não imprime as linhas de homologação e não deixa o numéro do extrato zerado.
Não esta imprimindo a parte dos imposto incorreto esta imprimindo igual no NFCe e não é.
De cabeça lembro estes, mas tem mais coisas, sem falar que ele não calcula direito se o texto vai caber no cabeçalho corretamente e não da opção de imprimir logo.
Entendi, realmente estava relendo o manual Versão: MO 2.16.02 - Última Atualização: 18 de maio de 2017 e realmente falta a parte do imposto. Tem alguns outros detalhes pormenores que estava vendo também onde tem negritos e deve ser normal e vice versa.. Vou tentar dar uma corrigida.
Obrigado
'define os objetos printdocument e os eventos associados
Dim pd As Printing.PrintDocument = New Printing.PrintDocument()
Dim preview As New PrintPreviewDialog
'IMPORTANTE - definimos 3 eventos para tratar a impressão : PringPage, BeginPrint e EndPrint.
AddHandler pd.PrintPage, New Printing.PrintPageEventHandler(AddressOf PdRelatorios_PrintPage)
Bobina = CInt(Round(CDbl(80 * 3.77), 0))
'Seta o papel personalizado e converte o valor do tamanho da bobina de Minimetros para pixels
pd.DefaultPageSettings.Margins = New Printing.Margins(10, 10, 10, 10)
pd.DefaultPageSettings.PaperSize = New Printing.PaperSize("personal", Bobina, 90000)
pd.PrinterSettings.PrinterName = tPortaImpCFe
pd.Print()
Estou com um problema que ele não esta acatando o tamanho do papel, ele só imprime 53 itens , alguém tem alguma ideia
Att.
Felipe
@tchotlain isso está relacionado ao tamanho padrão do papel nas configurações da impressora.
Provavelmente a impressão usa spooler, se vc tentar imprimir qlqr coisa via spooler vai acontecer isso, se quer que ele possa imprimir maior configure para bobina (o mais cumprido que tiver).
Nem mesmo o fast que é uma p* de uma ferramenta corrige isso sozinho, depende da configuração da impressora no windows.
Edit: Mesmo usando unlimitedheight ou calculando "na pata" o tamanho da impressão o fast muitas vezes o Fast corta, tem que configurar a impressora para o tamanho de bobina para imprimir corretamente, acredito que essa mesma lógica seja aplicada para demais impressões via spooler.
@tchotlain o que o @marcosgerene falou é meia verdade, na verdade quando você seta o papel como custom ele manda pra impressora o tipo de papel 0 ou 128, os dois significam custom, mas nem todas acatam isto e em algumas o papel custom tem outro numero.
Outra coisa que pode ocorre e se mandar a largura do papel muito grande a impressora desconsidera a mudança de tamanho do papel, é possível pegar a largura máxima do papel da impressora pelas api do windows não me recordo como fazer no .net mas deve ter algo do tipo.
Por isso uma forma de resolve e criar o papel direto no windows.
@rftd @marcosgerene já coloquei manualmente bobina na impressora e resolveu meu problema ... muito obrigado pela atenção e explicação
Ainda bem que sempre compram a mesma impressora, agora é só configurar a impressora na instalação do sistema
Att.
Felipe
Percebi que na impressao o Qrcode nao esta lendo no leitor do celular... alguem sabe porque isso esta ocorrendo?
Esta usando o App De Olho na Nota ? fiz o teste agora e trouxe as informações corretamente.
Tente algumas variações de tamanhos no QrCode
Private QrEncoder As QrEncoder = New QrEncoder(ErrorCorrectionLevel.M)
esta é a que estou usando atualmente, menor que a publicada na classe.