Painel de líderes
Conteúdo popular
Showing content with the highest reputation on 21-01-2019 em todas as áreas
-
O que é o ACBrPosPrinter e Esc/Pos ? Para quem ainda não conhece, o ACBrPosPrinter é o nosso componente para acesso a Impressoras de Bobinas, Não fiscais... Essas impressoras, denominadas Impressoras POS (Point of Sale), contemplam uma linguagem de impressão de linha, interna, onde podemos realizar tarefas como: Modificar os atributos de impressão Imprimir códigos de barras 1D e 2D (QRCode) Acionar dispositivos ligados a Impressora, como Gaveta de Dinheiro, Guilhotina Ler status da Impressora (Tampa aberta, pouco ou sem papel, etc) No mercado brasileiro, há vários modelos, que contemplam várias linguagens, como por exemplo: EscPos, EscBema, EscDaruma, etc... As linguagens são chamadas de "Esc", pois os comandos geralmente iniciam com o caractere não imprimível, ESC ou #27... Exemplo: se enviarmos para a Impressora a String: chr(27) + 'E' + chr(01), ligaremos o modo Negrito A grande maioria dos fabricantes, procurou seguir o padrão Epson, que é a marca mundialmente líder nesse segmento, e a sua linguagem Epson Esc/Pos... O componente ACBrPosPrinter suporta a grande maioria das linguagens e modelos existentes no mercado brasileiro... mas nem todos os recursos, estão disponíveis em todas as linguagens... Usar o ACBrPosPrinter é extremamente simples, e não requer o conhecimento de Esc/Pos... Através de suas Tags, você pode construir ricos relatórios, com várias formatações de fontes, alinhamento, Imagens, códigos de barra e QRCode... A título de Exemplo, usamos o próprio componente ACBrPosPrinter, para criar o Extrato do SAT, Unit ACBrSATExtratoESCPOS.pas e o DANFCe, unit ACBrNFeDANFeESCPOS.pas Se você usa o ACBrMonitorPLUS, poderá acessar o ACBrPosPrinter pelo objeto ESCPOS... Veja no manual: https://acbr.sourceforge.io/ACBrMonitor/ESCPOSImprimirTags.html Você pode baixar um Demo compilado do ACBrPosPrinter em: Você pode baixar uma Apresentação sobre o ACBrPosPrinter em: Se você não programa em ObjectPascal (Delphi/Lazarus), pode baixar a biblioteca (DLL) ACBrLibPosPrinter em: https://www.projetoacbr.com.br/forum/files/category/35-acbrlibposprinter/ Sobre a Impressão de Imagens no ACBrPosPrinter A muito tempo eu sentia falta dos seguintes recursos, no componente ACBrPosPrinter Impressão de Imagens Gravação e manipulação de Logos na memória da Impressora... Agora isso já é possível... Após muita pesquisa, e com a ajuda de vários outros artigos que encontrei na Internet (veja referência nos fontes), consegui implementar a Impressão de Imagens no modo "Raster Image"... Devido a característica desses equipamentos, apenas a impressão de Imagens monocromáticas é suportada. Existem vários sites de conversão de Imagem, para BMP Monocromático, on-line, como por exemplo: https://online-converting.com/image/convert2bmp/ Novos métodos no componente ACBrPosPrinter procedure ImprimirImagemStream(ABMPStream: TStream); // Permite Imprimir uma Imagem, no formato BMP Monocromático, de um Stream procedure ImprimirImagemArquivo(ArquivoBMP: String); // Carrega e imprime uma Imagem de um Arquivo. Em aplicações visuais (não console) será usado o Objeto TPicture, que permite carregar vários formatos de Imagem, podendo ser Colorida ou em Escala de cinza. A Imagem será convertida para BMP Monocromática. Entretanto, procure sempre usar Imagens BMP Moncromáticas, para evitar processamento desnecessário procedure ImprimirImagemRasterStr(const ARasterStr: AnsiString; AWidth, AHeight: Integer); // Imprime uma Imagem a partir de uma String no formato "Raster Image" (veja abaixo) procedure ImprimirLogo(AKC1: Integer = -1; AKC2: Integer = -1; AFatorX: Integer = -1; AFatorY: Integer = -1); // Imprime um Logo préviamente gravado na memória da Impressora. Se os parâmetros não foram informados, serão usados os valores de ACBrPosPrinter.ConfigLogo procedure GravarLogoStream(ABMPStream: TStream; AKC1: Integer = -1; AKC2: Integer = -1); // Grava uma Imagem de Logo, no formato BMP Monocromático, a partir de um Stream, nas posições informadas. Se os parâmetros não foram informados, serão usados os valores de ACBrPosPrinter.ConfigLogo procedure GravarLogoArquivo(ArquivoBMP: String; AKC1: Integer = -1; AKC2: Integer = -1); // Grava uma Imagem de Logo, a partir de um arquivo em Disco, nas posições informadas. Se os parâmetros não foram informados, serão usados os valores de ACBrPosPrinter.ConfigLogo procedure ApagarLogo(AKC1: Integer = -1; AKC2: Integer = -1); // Remove um Logo da memória da Impressora. Se os parâmetros não foram informados, serão usados os valores de ACBrPosPrinter.ConfigLogo Nova Tag de Bloco <bmp> - Imprime Imagem BMP monocromática. Conteúdo pode ser: Path da Imagem, Stream em Base64 ou AscII Art (0 e 1) Veja alguns exemplos de uso: Inicializa </zera>, define o alinhamento no centro </ce>, e efetua a impressão da Imagem em disco, no Path "C:\temp\acbrmono.bmp" </zera></ce><bmp>C:\temp\acbrmono.bmp</bmp> Imprimir uma Imagem de BMP Mono, codificada em Base64 <bmp> Qk3eDQAAAAAAAD4AAAAoAAAA+gAAAG0AAAABAAEAAAAAAKANAAAAAAAAAAAAAAIAAAAAAAAAAAAAAP///wD/////////////////////////////////////////wP/////////////////////////////////////////A/////////////////////////////////////////8D/////////////////////////////////////////wP4AAAAAAAAAAAAAAA8A8AAAAAAAAAAAAAAAAAAAAD/A/AAAAAAAAAAAAAAADwD4AAAAAAAAAAAAAAAAAAAAD8D4AAAAAAAAAAAAAAAPAHwAAAAAAAAAAAAAAAAAAAAHwOAAAAAAAAAAAAAAAA8APgAAAAAAAAAgAAAAAAAAAAHAwAAAAAAAAAAAAAAADwAfAAAAAAAAAcAAAAAAAAAAAcDAAAAAAAAAAAAAAAAPAA+AAAAAAAAfgAAAAAAAAAAAwIAAAAAAAAAAAAADgAQAB8AAAAAAAH+AAAAAAAAAAABAgAAAAAAAAAAAAACAAAABAAAAAAAAAAAAAAAAAAAAAEAAAAAADDvjnnNn489ngHw4zM+cPM/MD8w7PO4AAAAAAAAAAAAMN+e/c2fn7+/A/nzMz9x+z8wP7Hd27gAAAAAAAAAAAA/2ZnNzZ2YO7ODGxszf3ODOzAxsdx7uAAAAAAAAAAAABmZmc3Nj7gfs4cDGzN/c4MfMDO4ffu4AAAAAAAAAAAAH5mYzd2BmYOzBwObuzNzmxMwPzgdg7gAAAAAAAAAAAAfGb55+5+fHx4HAfP/Pn3zHzAzvvz7uAAAAAAAAAAAAA8AGAAAAAAAAAO4AAAAAAAAMDOAAAA4AAAAAAIAAAAADwAIAAAAAB4AA/AAAMAAAwAwPwAAA7gAAAABAgAAAAAAAAAAAAAAADwA4A+H/4AADwAAAAAAAAAAAAEDAAAAAAAAAAAAAAAAPAAAB//4AAAfAAAAAAAAAAAAAwOAAAAAAAAAAAAAAAA8AAAD/8AAAB4AAAAAAAAAAAAHA8AAAAAAAAAAAAAAADwAAAH/AAAAHAAAAAAAAAAAAA8D4AAAAAAAAAAAAAAAPAAAAPAAAAA4AAAAAAAAAAAAHwP4AAAAAAAAAAAAAAA8AAAAAAAAAHgAAAAAAAAAAAB/A/////////////////////////////////////////8D/////////////////////////////////////////wP/////////////////////////////////////////A/////////////////////////////////////////8D///////gAP///Af////gA//////+Af//4B///////wP///+AAeAB4AB4D+AAB/ADwAAAAf+B4AHgH///////A////4AA4AHgAHgfgAAB+APAAAAAH8HgAeAf//////8D////wADgAeAAeD4AAAB8A8AAAAAHweAB4B///////wP////AAPABwABw+AAAAB4DwAAAAAHx4AHgH///////A////+AA///AAPD4AAAAHwPAAAAAAPHgAeAf//////8D////4AB//8AA4eAAAAAHg8AAAAAAeeAB4B///////wP////wAH//wAHj4AAAAAeDwAAAAAB54AHgH///////A/////AAf/+AAePAAAAAA8PAAAAAADngAeAf//////8D////8AAAAAADx4AAAAAD48AAAAAAPeAB4D///////wP////wAAAAAAPHAAAAAAHjwAAAAAA94AHgP///////A/////gAAAAAA48AAP8AAOPAAP/gAB3gAeA///////8D////+AAAAAADjwAB/4AA48AA//AAH+AB4D///////wP////8AAAAAAe+AAP/wADzwAD/+AAf4AHgf///////A/////wAAAAAB/4AB8PgAPPAAOf4AB/gAeB///////8D/////AAAAAAP/AAHgfAAc8AA7zgAH+AB4H///////wP////+AAAAAA/8AA8A8AP7wAD/+AAd4AHg////////A/////4AAAAAD5wADgBwH/vAAP/4AD3gAeD///////8D/////wAH/AAePAAOAHB/+8AA//AAPeAA4P///////wP/////AAf8ABw8AA4Af/8DwAD/gAA54ADg////////A/////8AB/gAPDwAHgB//APAAAAAAHngAPH///////8D/////4AH+AA8PAAeAD+AA8AAAAAA+eAAf////////wP/////gAf4ADw8AB4APgADwAAAAAHx4AB/////////A/////+AA/gAf7wAHgAwAAPAAAAAA+HgAH////////8D/////8AD8AB//AAeAAAAA8AAAAAfweAAHP///////wP/////wAHwAH/8AB4AAAADwAAAAB+B4AAAf///////A//////gAfAA8fwAHgA4AAPAAAAAB8HgAAA///////8D/////+AB4ADwPAAOAH+AA8AAAAADweAAAD///////wP/////4ADgAeA8AA4Af/gDwAAAAAHh4AAAP///////A//////wAMAB4BwADgB//+PAAP/AAPHgAgAf//////8D//////AAwAHAHAAPAHP/+8AA/+AA8eACAB///////wP/////+ADAA8AcAAfx8A/7wAD/4ADx4AMAD///////A//////4AEADgB4AB//gAPPAAODgAHHgA4AP//////8D//////gAQAOAHgAD/+AA88AA8+AAeeADwB///////wP//////AAAB4AOAAH/gADjwAD/4AB5////////////A//////8AAAHgA8AAP8AAOPAAP/gAHn///////////8D//////wAAA8ABwAAAAAB48AA/wAAef///////////wP//////gAADwAHgAAAAAPDwAAAAABwAAH/////////A//////+AAAOAAOAAAAAA8PAAAAAAPAAAf////////8D//////8AAB4AA+AAAAAHg8AAAAAA8AAD/////////wP//////wAAHgAB4AAAAA8DwAAAAADgAAf/////////A///////AAA8AAD4AAAAHwPAAAAAA/AAD/////////8D//////8AADwAAPgAAAA+A8AAAAAD+AAP/////////wP//////4AAPAAAfgAAAHwDwAAAAAf4AB//////////A///////gAA4AAAfgAAB+APAAAAAHzwAP/////////8D///////AAHgAAA/gAAfwA8AAAAD/PgA//////////wP/////////8AAAB////8AD//////wfAH//////////A//////////wAAAB////gAP//////88A//////////8D//////////gAAAB///4AB////////4H//////////wP//////////AAAAAP/wAAHgAAAAB//w///////////A//////////+AAAAAAHAAA8AAAAAAf/n//////////8D//////////8AAAAAAcAAHwAAAAAAB////////////wP//////////4AAAAABwAAeAAAAAAAAf///////////A///////////wAAAAAHAADwAAAAAAAA///////////8D///////////gAAAAAcAAeAAAAAAAAH///////////wP///////////AAAAABwAD4AAAAAAAA////////////A////////////AAAAAHAAeAAAAAAAAH///////////8D///////////8AAAAAeAD4AAAAAAAA////////////wP///////////4AAAAB4APAAAAAAAAH////////////A////////////4AAAAHgB4AAAAAAAB////////////8D////////////wAAAAeAPAAAAAAAAP////////////wP////////////wAAAB4B8AAAAAAAD/////////////A/////////////gAAAHgHgAAAAAAAf////////////8D/////////////AAAAOA8AAAAAAAD/////////////wP/////////////AAAA4HwAAAAAAA//////////////A//////////////AAADgeAAAAAAAP/////////////8D//////////////AAAPHwAAAAAAD//////////////wP//////////////AAA8eAAAAAAA///////////////A///////////////AADz4AAAAAAH//////////////8D///////////////AAPeAAAAAAD///////////////wP///////////////gA/4AAAAAA////////////////A////////////////wD/AAAAAA////////////////8D////////////////wH4AAAAAP////////////////wP////////////////4fAAAAAH/////////////////A//////////////////8AAAAP/////////////////8D//////////////////8AAA///////////////////wP/////////////////////////////////////////A/////////////////////////////////////////8D/////////////////////////////////////////wA== </bmp> Imprimir uma Imagem, baseado em ASCII ART Na Unit ACBrImage.pas, do pacote ACBrComum, é onde a mágica acontece... essa Unit implementa os seguintes métodos function IsPCX(S: TStream; CheckIsMono: Boolean = True): Boolean; // Retorna True se o Stream contém uma Imagem em PCX function IsBMP(S: TStream; CheckIsMono: Boolean = True): Boolean; // Retorna True se o Stream contém uma Imagem em BMP procedure RasterStrToAscII(const ARasterStr: AnsiString; AWidth: Integer; InvertImg: Boolean; AscIIArtLines: TStrings); // Converte uma String codificada em "Raster Image", para ASCII ART procedure AscIIToRasterStr(AscIIArtLines: TStrings; out AWidth: Integer; out AHeight: Integer; out ARasterStr: AnsiString); // Converte uma String codificada em ASCII ART para "Raster Image" procedure BMPMonoToRasterStr(ABMPStream: TStream; InvertImg: Boolean; out AWidth: Integer; out AHeight: Integer; out ARasterStr: AnsiString); // Converte uma Imagem no formato BMP Monocromático, gravada em um Stream, para uma String codificada em "Raster Image" procedure RasterStrToBMPMono(ARasterStr: AnsiString; AWidth: Integer; InvertImg: Boolean; ABMPStream: TStream); // Converte uma String codificada e "Raster Image", para uma Imagem no formato BMP Monocromático, gravando-a em um Stream {$IfNDef NOGUI} procedure BitmapToRasterStr(ABmpSrc: TBitmap; InvertImg: Boolean; out AWidth: Integer; out AHeight: Integer; out ARasterStr: AnsiString; LuminosityThreshold: Byte = C_LUMINOSITY_THRESHOLD); // Apenas disponível se a aplicação não for console. converte uma Imagem de um TBitMap, para uma String codificada e "Raster Image" {$EndIf} Use a força, leia os fontes Não deixe de estudar os fontes do Projeto Demo, PosPrinterTeste, na pasta: \ACBr\Exemplos\ACBrSerial\ACBrPosPrinter\Delphi Nesse projeto há vários exemplos de como Imprimir Imagens, e manipular Logotipos, usando as Tags e Métodos do componente ACBrPosPrinter O que é o modo "Raster Image" ? O Modo Raster é um fluxo de Bytes que representam os Pixels da Imagem... https://pt.wikipedia.org/wiki/Raster Exemplo: Imagine a Seguinte imagem, de 16 x 16 Pixels... Se fôssemos representá-la em ASCII ART, teríamos: 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 Para transformá-la em Raster, agrupamos os Bits, em Bytes (8 bits)... portanto a primeira linha ficaria: Em Binário: 10101010 + 10101010 Em Hexa: AA + AA Em Decimal: 170 + 170 Então a String em Raster Image, da Imagem acima seria o equivalente a: #170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170 Para imprimir uma String em Raster, é fundamental sabermos qual a largura em Pixels, da imagem A Epson disponibiliza utilitário, para converter imagens para o formato Raster: Epson BmpToRaster (o estudo do conteúdo do arquivo gerado por esse Utilitário, foi essencial na implementação dos métodos de ACBrImage)8 pontos
-
5 pontos
-
Bom dia, O componente de impressão possui uma propriedade chamada MostraPreview (se não me falha a memória) que devemos atribuir o valor False para que o Preview não seja apresentado na tela.3 pontos
-
o ACBrInStore faz o trabalho de ler o codigo de barras através de mascaras da uma olhada no demo "...\Exemplos\ACBrDiversos\ACBrInStore\"2 pontos
-
Boa tarde, Como não foi informado a bandeira, uma vez que o tipo de integração é 2 ou seja não é integrado ao sistema de automação da empresa, mas como foi informado que se trata de cartão de débito (tPag = 4) a mensagem correta nesse caso a ser impressa deveria ser apenas: Cartão de Débito.2 pontos
-
kkkkk, verdade.. fizeram um bem bolado de liberar aqueles schemas bugados.. Peço desculpas que eu acabei não comparando com os que vc tinha ajustado, achei que eles tivessem liberado mais alguma coisa, então por favor desconsidere...2 pontos
-
Beleza, muito obrigado, vou fazer como voce me pediu e verificar !! Obrigado pela atenção2 pontos
-
Isso depende da marca e modelo da impressora. Geralmente o manual explica como deve-se fazer, e não costuma ser muito complicado. Mas talvez, você deva adaptar seu programa para lidar com as duas maneiras, permitindo uma configuração para usar de uma ou outra forma.2 pontos
-
Boa tarde, Segue um exemplo: if ACBrNFSe.WebServices.EnviarSincrono.RetornoNFSe.ListaNfse.MsgRetorno.Count > 0 then begin // as linhas abaixo é interessante colocar em um loop, pois pode ser retornado mais de uma rejeição sStat := ACBrNFSe.WebServices.EnviarSincrono.RetornoNFSe.ListaNfse.MsgRetorno.Items[0].Codigo; sMotivo := ACBrNFSe.WebServices.EnviarSincrono.RetornoNFSe.ListaNfse.MsgRetorno.Items[0].Mensagem; end else begin sStat := ''; sMotivo := ''; end;2 pontos
-
Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico.2 pontos
-
apaguei os fontes e baixei tudo novamente e funcionou, coloquei a pasta na raiz tbm. Muito obrigado.2 pontos
-
Se puder anexar o ACBrMonitor.ini, eu posso verificar e lhe enviar a senha por M.P.2 pontos
-
Por comando não, algumas configurações fixas refente a layout são configuráveis apenas nas configurações em tela, mas como eu havia dito, pode ser editado o arquivo .ini e recarregado as informações através do comando NFe.LerIni, é bem prático localizar tags em arquivos .ini e editar o mesmo...2 pontos
-
Confira o conteudo do CNPJ ( nrinscr ) informado. Pela mensagem é este o motivo do erro. Sucesso2 pontos
-
Bom dia. Se for industrializado parece ser o do que o Felipe citou acima. Se for a água de coco não industrializada (direto do coco) é o 20098920.2 pontos
-
Bom dia, jrpiresfs. Acredito que seja esse: 2009.89.90 - Preparações de produtos hortícolas, de frutas ou de outras partes de plantas - Sucos de frutas (incluídos os mostos de uvas) ou de produtos hortícolas, não fermentados, sem adição de álcool, com ou sem adição de açúcar ou de outros edulcorantes - Suco (sumo) de qualquer outra fruta ou produto hortícola: - Outros - Outros2 pontos
-
Bom dia William, Você esta usando o programa exemplo para os seus testes? Veja que com ele, você marca o evento que deseja gerar ou gerar e enviar. Estude o programa exemplo.2 pontos
-
Bom dia Vânia, Lendo a sua postagem e analisando esses 2 últimos XML que você anexou notei o seguinte: Primeiro, algumas tags você esta informando 2 ou 3 casas decimais sendo que o correto seria 4. Note que o XML gerado e assinado pelo Monitor faz essa correção. Outra coisa, no grupo ICMS20 você gerou as tags: vBCFCP, pFCP e vFCP com o valor zero. O monitor por sua vez ao gerar o novo XML removeu essas 3 tags. Vamos entender o porque o Monitor fez essa remoção, abaixo temos um fragmento do manual que se refere a essas 3 tags: Note que as 3 tags são obrigatórios pois na coluna de ocorrências aparece 1-1, mas veja que as 3 são fichas de um grupo fictício (N17.1) chamado: -x- Sequencia XML que é opcional. O que o manual esta querendo nos informar é que essas 3 tags formam um grupo, sendo assim ou todas são geradas ou nenhuma delas vão constar no XML. E quando elas devem ser geradas? Quando o valor das 3 forem diferente de zero, você até poderia informar a base de calculo do FPC, mas como o percentual é zero, logo o valor do FPC é zero. Neste caso não faz sendo informar a base de calculo diferente de zero e o percentual e o valor como sendo zero. Como não tem FCP - para o item em questão as 3 tags não devem ser geradas. Não analisei as demais tags que não foram geradas no novo XML gerado pelo Monitor, mas acredito que o motivo seja o mesmo.2 pontos
-
Agradeço a atenção, já estou fazendo os testes e atualizando as dlls.2 pontos
-
Aparentemente você não está enviando a mesma instrução que o ACBrPosPrinter... http://svn.code.sf.net/p/acbr/code/trunk2/Fontes/ACBrSerial/ACBrEscBematech.pas rocedure TACBrEscBematech.LerStatus(var AStatus: TACBrPosPrinterStatus); var B: Byte; Ret: AnsiString; begin try Ret := fpPosPrinter.TxRx( GS + #248 + '1', 5, 500 ); B := Ord(Ret[1]); if TestBit(B, 2) then AStatus := AStatus + [stImprimindo]; // Overrun if TestBit(B, 3) then AStatus := AStatus + [stOffLine]; if TestBit(B, 4) then AStatus := AStatus + [stImprimindo]; B := Ord(Ret[2]); if TestBit(B, 1) then AStatus := AStatus + [stPoucoPapel]; if TestBit(B, 2) then AStatus := AStatus + [stSemPapel]; if not TestBit(B, 4) then AStatus := AStatus + [stGavetaAberta]; if TestBit(B, 5) then AStatus := AStatus + [stSemPapel]; if TestBit(B, 6) then AStatus := AStatus + [stErro]; if not TestBit(B, 7) then AStatus := AStatus + [stTampaAberta]; except AStatus := AStatus + [stErroLeitura]; end; end;2 pontos
-
2 pontos
-
Bom dia, izaquesouza. Capicom está obsoleta, sugiro que altere para as configurações abaixo e refaça os testes: SSLCryptLib := cryWinCrypt; SSLHttpLib := httpWinHttp; SSLXmlSignLib := xsLibXml2; SSLType := LT_TLSv1_2;2 pontos
-
O produto rural tem a inscrição de produtor que de fato é a IE. Emiti uma nota e deu certo. Obrigado.2 pontos
-
Bom dia Thiago, Todos os provedores (empresas contratadas pelas prefeituras) que seguem a versão 2 do layout da ABRASF a principio disponibiliza o serviço de envio Síncrono. Neste caso não temos o serviço para consultar a situação do lote. O que temos é o Consultar Lote que se o lote enviado foi processado com sucesso, teremos como retorno o XML da NFS-e, caso contrario teremos a lista de rejeições. Estude o programa exemplo do componente ACBrNFSe.2 pontos
-
Defina valores múltiplos de 1024... deve resolver o problema de Buffer Overflow da Daruma2 pontos
-
Tópico movido para a área do SAC, para que o SLA de respostas seja considerado2 pontos
-
Bom dia No ACBrMonitor configure essa propriedade na aba Impressao/NFe: Decimais Valor Unitário2 pontos
-
Bom dia @Vânia Falcao A primeira coisa que precisamos fazer para corrigir os problemas no XML é utilizar o validador da SEFAZ para validar o XML que está gerando... Mesmo o XML não estando assinado, pode utiliza-lo para verificar possíveis erros de sintaxe ou campos inválidos... https://www.sefaz.rs.gov.br/NFE/NFE-VAL.aspx Note que o seu XML (Antes.XML) já apresenta erros de campos indevidos no validador da SEFAZ mesmo antes de utilizar o ACBr para assinar... Precisa corrigir estes erros, então o validador acusará apenas a falha na assinatura digital, ai sim utilize o ACBr para assinar e não terá problemas no envio... Se utilizar o método "EnviarNFE" poderá assinar o seu XML sem nenhuma alteração por parte do ACBr, porém, mesmo assim terá os erros reportados pelo validador no momento do envio, por isso é necessário corrigir antes, os erros apontados no seu XML ...2 pontos
-
Bom dia! RogérioHFB e Felipe.Pollux, poderiam por gentileza entrar em contato com o Suporte da Gertec no telefone 011 2575 1000 opção 1 para eles fazerem alguns testes remoto nos aparelhos? O post de vocês já foi passado para a Equipe e basta se identificar com membro do Fórum ACBr. Desde já agradeço. att. Wilmar Poli Gerente Comercial2 pontos
-
Ola @codigostr, Esse trecho citado acima eu retirei da Nota Técnica 2018/001. Pelo visto não será possível a emissão sem uma inscrição estadual;2 pontos
-
2 pontos
-
Olá pessoal, Eu realizei o download de um XML do SAT,/CF-e no site da receita, ao vincular esse documento no meu sistema percebi que o numero da versão não estava correto. O problema acontece pelo seguinte motivo, antes os XML's vinham com os atributos da tag nessa ordem versao, versaoSB, versaoDadosEnt, Id, exemplo: <infCFe versao="0.07" versaoSB="010200" versaoDadosEnt="0.07" Id="CFe00000000000000000000000000000000000000000000"> Já esse ultimo documento que fiz o download, veio com essa estrutura diferente, na ordem versaoSB, versaoDadosEnt, versao, Id, exemplo: <infCFe versaoSB="010200" versaoDadosEnt="0.07" versao="0.07" Id="CFe00000000000000000000000000000000000000000000"> Percebi que no método rAtributo da unit pcnLeitor,.pas é feito um pos nessa linha procurando pela palavra 'versao', para o primeiro exemplo mostrado funciona, mas para o segundo exemplo não funciona. (Ao invés de retornar o número "0.07" está retornando "010200"). Para corrigir esse problema realizei algumas alterações. Aqui está o método original sem alterações: function TLeitor.rAtributo(Atributo: string; Tag: String): variant; var ConteudoTag , Aspas : String; inicio , inicioTag , fim , iPos1 , iPos2 : Integer; begin Result := ''; Atributo := Trim(Atributo); Tag := Trim(Tag); inicioTag := pos(Tag, FGrupo); inicio := pos(Atributo, FGrupo); // se inicioTag > 0 significa que o parâmetro Tag foi informado. // se inicioTag > inicio significa que o atributo encontrado não é da Tag informada // logo devemos bustar a proxima ocorrecia a partir da posição da Tag. if (inicioTag > 0) and (inicioTag > inicio) then inicio := PosEx(Atributo, FGrupo, inicioTag); if inicio > 0 then begin inicio := inicio + Length(Atributo); ConteudoTag := trim(copy(FGrupo, inicio, maxInt)); iPos1 := Pos('"' , ConteudoTag); iPos2 := Pos('''', ConteudoTag); if iPos1 <> 0 then Aspas := '"'; if (iPos2 <> 0) and ((iPos1 = 0) or (iPos2 < iPos1)) then Aspas := ''''; inicio := pos(Aspas, ConteudoTag) + 1; if inicio > 0 then begin ConteudoTag := trim(copy(ConteudoTag, inicio, maxInt)); fim := pos(Aspas, ConteudoTag) - 1; if fim > 0 then begin ConteudoTag := copy(ConteudoTag, 1, fim); result := ReverterFiltroTextoXML(ConteudoTag) end end ; end ; end; E esse é o método com as alterações que eu fiz: function TLeitor.rAtributo(Atributo: string; Tag: String): variant; var ConteudoTag , Aspas : String; i , inicio , inicioTag , fim , iPos1 , iPos2 : Integer; const CharValiidacao: Array[0 .. 1] of String = (' ', '='); begin Result := ''; Atributo := Trim(Atributo); Tag := Trim(Tag); inicioTag := pos(Tag, FGrupo); for i := 0 to High(CharValiidacao) do begin inicio := pos(Atributo+CharValiidacao[i], FGrupo); if(inicio > 0)then Break; end; if(inicio = 0)then inicio := pos(Atributo, FGrupo); // se inicioTag > 0 significa que o parâmetro Tag foi informado. // se inicioTag > inicio significa que o atributo encontrado não é da Tag informada // logo devemos bustar a proxima ocorrecia a partir da posição da Tag. if (inicioTag > 0) and (inicioTag > inicio) then inicio := PosEx(Atributo, FGrupo, inicioTag); if inicio > 0 then begin inicio := inicio + Length(Atributo); ConteudoTag := trim(copy(FGrupo, inicio, maxInt)); iPos1 := Pos('"' , ConteudoTag); iPos2 := Pos('''', ConteudoTag); if iPos1 <> 0 then Aspas := '"'; if (iPos2 <> 0) and ((iPos1 = 0) or (iPos2 < iPos1)) then Aspas := ''''; inicio := pos(Aspas, ConteudoTag) + 1; if inicio > 0 then begin ConteudoTag := trim(copy(ConteudoTag, inicio, maxInt)); fim := pos(Aspas, ConteudoTag) - 1; if fim > 0 then begin ConteudoTag := copy(ConteudoTag, 1, fim); result := ReverterFiltroTextoXML(ConteudoTag) end end ; end ; end; Não sei se essa é a melhor forma de corrigir tratar essa situação descrita.1 ponto
-
Boa tarde a todos, Segue processo judicial do dia 08/01/19 em que suspendeu os efeitos do decreto 54.308/RS para os associados ao sindicato Sulpetro 071480-90.2018.8.21.0001(CNJ) - SINDICATO INTERMUNICIPAL DO COM. VAREJISTA DE COMB. E LUBRIFICANTES (Felipe Lopes da Silva Trois 61804/RS, Marjorye Antunes Tobias Bezerra 64259/RS, Thiago Jard Tobias e Silva Bezerra 61313/RS).(...)Em face do exposto, DEFIRO O PEDIDO DE LIMINAR nos exatos termos do pedido, ou seja, "para suspender os efeitos do art. 1º,do Decreto Estadual nº 54.308/18 e, consequentemente, as alterações trazidas parao LivroIII, do RICMS, por ilegais e inconstitucionais, até o julgamento do mérito,determinando que a Autoridade Coatora analise e julgue os pedidos de restituição realizados pelas Empresas Representadas pela Impetrante, de acordo com o art .22,Livro III, do RICMS ". OFÍCIO À DISPOSIÇÃO PARA ENCAMINHAMENTO, DEVENDO O PROTOCOLO JUNTO À SEFAZ SER COMPROVADO NOS AUTOS. A noticia está no link abaixo. http://sulpetro.org.br/noticias/decreto-que-cria-completacao-do-icms-ja-esta-em-vigor-mas-nao-atinge-representados-pelo-sulpetro/1 ponto
-
Boa tarde Joceandro, Até que enfim eles viram a mercadoria que tinham feito. Esses Schemas pelo que notei são exatamente os que eu corrigi e que estão no repositório. Não há nenhuma novidade.1 ponto
-
Bom dia! A questão de ser autorizada a NFCe em um prazo maior que o estabelecido, indica que a empresa emitente estará sujeita a fiscalização da questão em si. Com isto pode ser que a empresa receba uma notificação para se explicar. Porém se for algo que possa se provar. Exemplo: Roubaram o fio da telefonia, ficou sem internet por 4 dias. É algo que você poderá provar. Houve uma falha técnica e empresa precisou consertar algo e aconteceu de estabilizar após 4 dias. Será possível o técnico de informática, mas notas de serviço provar que teve algum problema. Porém estas situações são esporádicas, não vai acontecer a cada semana e penso que a SEFAZ não vai na primeira oportunidade que ocorrer chamar para explicações. Porém se isto se tornar comum, creio que acabará acontecendo. Portanto se for falha da empresa ai, porque eles não transmitiram seria bom você verificar e instruí-los que poderão ser autuados. Abaixo está uma resposta da SEFAZ-RS para um colega do fórum. https://www.projetoacbr.com.br/forum/topic/17472-status-150-autorizado-uso-autorização-fora-do-prazo/?tab=comments#comment-1094671 ponto
-
Bom dia Rafael, O numero do protocolo normalmente é retornado quando usamos o método Enviar pois usamos o numero do protocolo para Consultar a Situação do Lote (Versão 1 do layout da ABRASF) e para Consultar o Lote. Já os métodos EnviarSincrono e Gerar vai depender do provedor retornar ou não essa informação.1 ponto
-
Bom dia, @Daniel Simoes A propriedade RLPrinter.Copies acessa diretamente a propriedade Printer.Copies da unit Printers.pas, disparando o erro mencionado em aplicações ISAPI, onde o nível de permissão é limitado. Acredito que o número de cópias é utilizado apenas quando enviamos uma impressão direta, pois não faz sentido gerar o PDF com mais de uma cópia sendo que isso ficará a critério de quem for imprimir o mesmo. De qualquer forma, a verificação pode ser alterada para if NumCopias > 1 then RLPrinter.Copies := NumCopias; Obrigado.1 ponto
-
1 ponto
-
Outra forma é alterar diretamente no arquivo de configuração: ACBrMonitor.ini e recarregar as configurações pelo método: NFe.LerIni Procure pelo campo "DecimaisValor" no arquivo ACBrMonitor.ini1 ponto
-
OK Obrigado, no ACBrMonitor eu já encontrei. Eu quero deixar dinâmico, alterar por programa. Hoje eu altero várias coisas, Ambiente, Logo Marca, Certificado, etc. Gostaria de alterar Decimais do Valor Unitário.1 ponto
-
Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico.1 ponto
-
Isso não parece ser o problema... Uma vez que ele não tenta enviar algo ao SAT, nesse momento... Repare que o envio do XML ao SAT, somente ocorre em: TACBrECFVirtualSATClass.FechaCupomVirtual.. ou seja, antes disso o ECFVirtual ficará no estado estPagamento, e não permitirá novas sub-totalizações1 ponto
-
Mas nesse caso, no momento em que o Buffer estava sendo carregado, o componente não sabe quantas cópias o método "Imprimir" receberá... Por que você precisou definir um Buffer tão baixo ? Se for problema de envio para algumas portas Seriais... você pode usar os parâmetros: ACBrPosPrinter1.Device.SendBytesCount ACBrPosPrinter1.Device.SendBytesInterval;1 ponto
-
1 ponto
-
Olha, sem querer ser chato, mas me parece que o homebank da nonus, ja manipula do jeito que precisa nos sites de banco, tanto é estranho que as vezes uso a pistola também, e tenho que deixar aquela marcação do site do banco para o codigo de barras ser lido ao inves de digitado, com o nomus, so pega digitado. Pelo que reparei, ele coloca como se o operador estivesse digitando o nosso numero, repare: Pelo nomus: 07790001161200000050000816758478377440000034620 pistola: 07793774400000346200001112000000500081675847 Se reparar o do nonus, é igual a linha digitavel. Não vejo como problema isso com vc, se o meu está assim também. Imagem do boleto.1 ponto
-
1 ponto
-
Por favor anexe o Log do ACBrMonitorPLUS... Se não me engano, há um parâmetro no comendo de leitura do XML, para o ACBr gerar novamente o XML...1 ponto
-
1 ponto
-
Bom dia Poxa, realmente está claro no manual. Infelizmente não houve coerência no projeto, pois a tag pICms deve ser informada sem a divisão por 100. Dai no famoso CTRL-C CTRL-V ficou errado no PIS/COFINS Obrigado pela dica, agora está correto!1 ponto
-
Pesquisando sobre esse erro, encontrei um tópico que indica que um problema no logo poderia gerar especificamente este erro. Sendo assim, queira por favor atualizar e verificar se as alterações propostas hoje corrigem o problema do logo e também esse.1 ponto