Painel de líderes
Conteúdo popular
Showing content with the highest reputation on 13-02-2020 em todas as áreas
-
O calendário do ACBr contempla: Datas importantes do SEFAZ Eventos relacionados a desenvolvimento Eventos sobre automação comercial Datas nacionais, como feriados e dias memoriais. O processo de sincronização é bem simples, podendo variar de acordo com o calendário que você usar. Passo 1: Encontre sua Webcal do calendário. 1 Acesse a página do calendário do Projeto ACBr. 2 Na página, Clique no ícone que se encontra na frente de "Todos Calendários" 3 Na aba de opções que foi aberta, clique com o BOTÃO DIREITO em "Assinar o feed iCalendar" e selecione a opção para abrir o link em nova aba ou janela. (Observações: "Baixar a exportação" cria um arquivo com os eventos cadastrados até o momento, mas não irá sincronizar futuras alterações. Se você clicar com o botão esquerdo em "Assinar o Feed", o windows irá abrir uma tela para selecionar o aplicativo. Essa opção pode funcionar somente se você tiver algum calendário / Aplicativo de e-mail instalado.) 4 Na aba ou janela aberta, copie o endereço da webcal que está no navegador. Com isso, nós concluimos a primeira etapa. Agora vamos colocar este endereço em seu calendário de preferência. Passo 2: Cadastre a Webcal obtida no calendário de sua preferência. Listamos como realizar a integração em alguns dos calendário mais populares. Caso o seu calendário não esteja na lista, tente verificar nas configurações de agendas se é permitida a sincronização via URL. Aprenda abaixo como configurar nas plataformas: Google Agenda, Outlook e Thunderbird. Se você usar Goole Agenda 1 Faça o logon em sua conta, na listagem lateral de agendas, encontre a seção "Outras Agendas" e clique em "+ "(Adicionar outras agendas). 2 Selecione "Do URL". 3 Insira a URL da webcal do Calendário ACBr. 4 Depois de adicionar sua agenda, selecione o botão de opções. Logo em seguida, clique em configurações. 5 Altere o campo Nome para "Calendário do Projeto ACBr" ou algum nome de sua preferência. Pronto! Sua sincronização está configurada. Obs: Você poderá personalizar a cor, notificações e muito mais sobre seu calendário. Se você usar o Outlook 1 Após realizar logon em sua conta, clique na opção "Adicionar calendário", localizada no menu lateral esquerdo. 2 Selecione a opção "Assinar da Web" na janela de Adicionar calendário. Logo em seguida, insira a Webcal do Calendário ACBr. 3 Insira o nome "Calendário do Projeto ACBr", ou outro de sua preferência, e personalize cores e ícones para identificar nosso calendário em sua agenda. 4 Feito isso, clique em importar, e pronto! Sua sincronização está configurada. Se você usar o Thunderbird 1 Abra o aplicativo do Mozilla Thunderbird e faça logon. 2 Na aba lateral direita, selecione o e-mail que deseja incluir a sincronização para abrir as configurações. 3 Na seção "Contas", clique em "Criar nova agenda". 4 Selecione "Na rede" nas configurações e clique em avançar. 5 Na tela seguinte, selecione Formato: iCalendar (ICS) e indique a URL da Webcal em Local. Obs: Selecione a opção Suporte off-line para poder visualizar a agenda mesmo sem conexão com a internet. 6 Por fim, chegou a hora de personalizar o calendário. Insira o nome "Calendário do Projeto ACBr" o outro de sua preferência. 7 Após feito, clique em avançar e pronto! Sua sincronização foi configurada. Ficou com alguma dúvida ou deseja acrescentar alguma informação? Por favor, Envie-me uma mensagem!5 pontos
-
O que é o ACBrPosPrinter ? O ACBrPosPrinter permite o envio de comandos em EscPos, direto para a porta da Impressora. Ele é excelente para criação de relatórios complexos em impressoras de bobina, executando tarefas como Impressão de QRCode, Cod.Barras, alinhamento, Expandido, Negrito, Invertido, etc... Você pode baixar uma apresentação mais completa do ACBrPosPrinter, abaixo: Apresentação - ACBr - Elgin - ACBrPosPrinter.pdf Se você usa o ACBr no seu Delphi, poderá encontrar o componente ACBrPosPrinter, na Palheta ACBrSerial... Para quem não usa Delphi, o ACBrPosPrinter pode ser acessado pela ACBrLibPosPrinter , uma biblioteca compartilhada (DLL/SO), compilada em 32 e 64 bits ACBrMonitorPLUS, pelo Objeto ESCPOS... veja nesse link, a tela de configuração. Quais os tipos de portas ? Você deve configurar a Porta da Impressora no componente, e isso é feito através da propriedade "Porta". Dependendo do valor definido nessa propriedade, o ACBrPosPrinter, irá definir a forma de comunicação com a Impressora. Veja abaixo os tipos permitidos e exemplos de uso. Porta Serial, COMxx Útil se a sua impressora tem uma Porta Serial, ou ainda se o Driver USB da Impressora, cria uma COM Virtual no seu Windows. Apenas informa o nome da porta, Exemplos Windows: COM1, COM2, COM17 Exemplos Linux: /dev/ttyS0 /dev/ttyUSB0 Para lista todas as portas Seriais, disponíveis na máquina, use o método abaixo: procedure AcharPortasSeriais(const AStringList: TStrings; UltimaPorta: Integer = 64 ); Exemplo: cbxPorta.Items.Clear; ACBrPosPrinter1.Device.AcharPortasSeriais( cbxPorta.Items ); A porta Serial, PERMITE a leitura de informações , usando os métodos LerStatusImpressora, e LerInfoImpressora Porta USB SIM !!! O ACBrPosPrinter, tem suporte Nativo a USB (apenas no Windows), sem precisar da DLLs dos fabricantes, na maioria dos casos, basta definir "USB" na propriedade Porta. saiba mais nesse tópico: Para lista todas as portas USB, disponíveis na máquina, use o método abaixo: procedure AcharPortasUSB(const AStringList: TStrings); Exemplo: ACBrPosPrinter1.Device.AcharPortasUSB( cbxPorta.Items ); A porta USB, PERMITE a leitura de informações , usando os métodos LerStatusImpressora, e LerInfoImpressora Porta TCP/IP Se a sua impressora tem uma porta Ethernet, então ela é um Servidor de Impressão, e o ACBrPosPrinter pode se conectar a ela, diretamente usando o protocolo TCP/IP. Ou seja, basta plugar a sua impressora em algum cabo RJ45 da sua Rede, configurar o IP nela, e do ACBrPosPrinter na propriedade Porta, usar a sintaxe: "TCP:IP_MAQUINA:Porta". Geralmente esses equipamentos abrem a porta 9100, então ela pode ser omitida... Exemplos: TCP:192.168.0.20:9100 -> Conecta na Impressora que foi previamente configurada para o IP 192.168.0.20, usando a porta 9100 TCP:192.168.0.20 -> tem o mesmo efeito do comando anterior, pois usa a porta padrão (9100) A porta TCP, PERMITE a leitura de informações , usando os métodos LerStatusImpressora, e LerInfoImpressora Impressoras BlueTooth Com a migração dos fontes do ACBr para Android, foi adicionado o suporte a portas BlueTooth, entretanto esse suporte está disponível apenas para Delphi XE8 ou superior, e em Windows ou Android. Os equipamentos devem ser previamente pareados, para que eles sejam listados e acessíveis Nota: Para acessar dispositivos BlueTooth no Android é necessário que a aplicação solicite permissões, BLUETOOTH, BLUETOOTH_ADMIN e BLUETOOTH_PRIVILEGED ao Sistema Operacional... Você deverá usar a sintaxe: "BTH:Nome da Impressora" Exemplos: BTH:RM22 -> Conecta na Impressora chamada RM22, que foi previamente pareada BTH -> Tenta conectar na primeira impressora BlueTooth pareada encontrada Para lista todas as impressoras BlueTooth, disponíveis na máquina/dispositivo, use o método abaixo: procedure AcharPortasBlueTooth(const AStringList: TStrings); Exemplo: {$IfDef HAS_BLUETOOTH} ACBrPosPrinter1.Device.AcharPortasBlueTooth( cbxPorta.Items ); {$EndIf} A porta BTH, PERMITE a leitura de informações , usando os métodos LerStatusImpressora, e LerInfoImpressora RAW (Spooler) Se a sua impressora está instalada e é listada no Windows, ou no Linux/CUPS... então o ACBrPosPrinter, pode acessar ela, através do Spool. O método RAW, instrui o Spool a não interpretar os comandos enviados, ou seja, ele usará o Spool apenas para fazer um Túnel até a impressora. Você deverá usar a sintaxe: "RAW:Nome da Impressora" Exemplo Windows RAW:Bematech MP4200 -> Conecta na Impressora previamente instalada no Windows, e listada com o nome "Bematech MP4200" Exemplo Linux RAW:bema1 -> Conecta na Impressora previamente instalada no CUPS, e listada com o nome "bema1" Para listar todas as portas Instaladas no Spool, use o método abaixo: procedure AcharPortasRAW(const AStringList: TStrings); Exemplo: ACBrPosPrinter1.Device.AcharPortasRAW( cbxPorta.Items ); A porta RAW, NÃO permite a leitura de informações Arquivo TXT Pode ser útil para alguma situação, capturar a saída de impressão em um arquivo. Como por exemplo, Debug, estudo do EscPos, ou ainda encaminhar o arquivo para a Impressão por uma rede, através de um Script. Para isso, apenas defina o nome do arquivo que você quer criar, em "Porta" Exemplo Windows c:\temp\printer.txt -> Irá desviar toda a impressão para o arquivo "c:\temp\printer.txt" Exemplo Linux /tmp/printer.txt - A porta Arquivo, obviamente NÃO permite a leitura de informações Porta em Rede (UNC) Se a impressora está Instalado no Windows, e foi compartilhada na Rede, e portanto disponibiliza um Nome de Compartilhamento, então você pode usar a sintaxe "\\Nome_ou_IP_maquina\Compartilhamento". O ACBrPosPrinter usará a mesma classe de impressão em Arquivo (descrita acima), para suportar as portas UNC Exemplo: \\127.0.0.1\EPSON -> Irá acessar a impressora cujo nome de compartilhamento é "EPSON", e está conectada a máquina local \\192.168.0.10\EPSON -> o mesmo que acima, porém acessa a impressora da máquina cujo IP é "192.168.0.10" A conexão por Porta UNC, NÃO permite a leitura de informações Hook, DLLs A Impressão por "hook" foi criada antes do ACBrPosPriniter, ter suporte nativo a USB, portanto hoje está obsoleta. O truque era usar a DLL dos Fabricantes da Impressora, para acessar o equipamento pela USB. Ou seja, o ACBrPosPrinter faz a carga da DLL do Fabricante, e utiliza a mesma, para enviar e ler comandos da USB. A Sintaxe é: "DLL:MARCA"... Você pode saber mais, no tópico abaixo: Disponível apenas no Windows, e apenas implementado para Impressoras da Epson e Elgin... Exemplos: DLL:EPSON DLL:ELGIN Nota: antigamente a sintaxe "USB:MARCA", poderia ser usada para portas Hook, mas atualmente o prefixo "USB", é reservado apenas para as portas de acesso nativo a USB (conforme descrito no inicio do tópico) A porta Hook, DLL, PERMITE a leitura de informações , usando os métodos LerStatusImpressora, e LerInfoImpressora Portas Paralelas (LPT) Uso legado, pois atualmente poucos equipamentos possuem portas Paralelas ou LPT. Internamente, o ACBrPosPrinter usará a mesma classe de impressão em Arquivo (descrita acima), para suportar as portas LPT Exemplo Windows LPT1, LPT2 Exemplo Linux /dev/lp0, /dev/lp1 A porta LPT, NÃO permite a leitura de informações4 pontos
-
Isso que eles estão querendo é quase impossível, imagine uma empresa com muitos anos de atividade, quantos itens comprados para o estoque com o cst=60 e que essa informação nunca veio para que seja possível passar ela pra frente, pelo que vi e entendi, vc deve passar zerado mesmo, mais em uma restituição, vc deverá pagar pela diferença, agora se vc tem a informação vinda e armazenada, vc deverá utilizar o FIFO - Primeiro que entra é o primeiro que sai, no caso não vai poder fazer Media . Só que hj também o problema está é que a maioria não consegue passar essa informação pra frente, gerando um problema em cadeia, A única forma mesmo, seria rejeitar a NF do fornecedor que não venha com essa informação, mas acho que se for fazer isso, vai rejeitar praticamente 90% dos fornecedores que não sejam Fabricantes . Abaixo vou postar um manual em PDF da CAT 42-2018 que não se refere a NF-e porem, se trata dessa informações de ICMS ST Retido e também alguns vídeos que explicam sobre a cat 42/2018 . ajuda um pouco entender todo esse processo . Esses campos hj estão sendo obrigatórios na NF-e justamente por causa dessa Restituição, pois essas informações são imprescindíveis para que quer restituir imposto . (So que o Governo deu um jeito de que vc não consiga restituir nem a pau rs) Exemplo abaixo retirado do manual do Cat 42/2018 - https://portal.fazenda.sp.gov.br/servicos/st/Downloads/MANUAL Sistema Ressarcimento_ICMS_ST.pdf Exemplo: Último documento de entrada: 10 unidades, a R$15,00cada.Penúltimo documento de entrada: 20 unidades, a R$10,00 cada.Saída: 12 unidades.Valor de Confronto: 10 unidades a R$ 15,00 = R$ 150,00 + 2 unidades a R$ 10,00 = R$ 20,00.Valor total: R$ 170,00, que divididos por 12 = R$ 14,17 (valor unitário a ser informado). Vou deixar tambem alguns videos aqui que tratam da CAT 42/2018, que é sobre a geração de um arquivo para restituição, porem é a mesma situação do que tem que ir na NF-e https://www.youtube.com/watch?v=WChSCf0weIA https://www.youtube.com/watch?v=kTimo6_MD9o https://www.youtube.com/watch?v=LXMW4oZarFM https://www.youtube.com/watch?v=9vwaWKbOWJc4 pontos
-
O erro não parece ser com relação a CST 00 ou CST 60 e sim nas validacoes par ao preenchimento do mesmo. Ou seja, o erro se refere a base de calculo do ICMS que no total da nfce está <vBC>8.90</vBC> e nos itens não tem valor para <vBC>. Dai como o somatório de todos os <vBC> dos itens devem bater com o <vBC> do total da nota e neste caso não está batendo, entao a rejeição.4 pontos
-
@Valterrui Souza Complementando a resposta do @carlosinfoteen Tu estas informando total de BC icms na nota, mas CFOP 5405 não tem destaque de icms.3 pontos
-
Segue em anexo o arquivo: "pcnConversaoNFe.pas" com as alterações supramencionada... pcnConversaoNFe.pas2 pontos
-
Se você precisa usar apenas o MFE, ele agora pode ser usado de forma direta, ou seja, sem precisar que as requisições que chegam até ele, passem pelo Integrador Fiscal... Veja esse tópico: Entretanto, se você efetua vendas no Cartão de Crédito, então ainda é necessário o uso do Integrador, para informar o pagamento no cartão (Módulo VPE)... Veja detalhes nesse tópico: Agora se você deseja usar NFCe no CE, ela necessariamente precisa passar pelo Integrador Fiscal, pois as URLs dos WebServices de NFCe, são bloqueados para outras aplicações, e seu acesso deve ser feito pelo Integrador Fiscal do CE Vale lembrar, que para usar NFCe no CE, ainda sim o estabelecimento comercial precisa ter um MFE, ativo, para ser usado como contingência... pois no CE a contingência da NFCe em modo off-line não é permitida Nesse caso, veja instruções d2 pontos
-
Ok Juliomar, Infelizmente não tenho muito conhecimento para implementar da forma que vocês implementam. Vou analisar e ver se consigo. Muito obrigado.2 pontos
-
Foi feito um grande re-factore nessas units recentemente e esse é um efeito colateral minimo se levar em consideração a imensa alteração que esses fontes vem sofrendo nesses últimos dias. Fique tranquilo! O problema se resolvido! use a sua versão que funciona! Assim que estiver bem testado você volta a usar a versão atualizada.2 pontos
-
Muito obrigado Daniel Port, Deus te abençoe irmão ! Muito obrigado carlosinfoteen, Deus te abençoe irmão !2 pontos
-
Se não funciona nem mesmo a página de testes do Windows, então muito provavelmente é um defeito no equipamento2 pontos
-
2 pontos
-
O componente deve sim gerar um arquivo XML para cada guia. No formato XXX-gnre.xml, sendo XXX o número da guia. (Informação errada, favor ver post do Italo abaixo) Conforme explicação este tópico: É este XML que você deve carregar para o componente para fazer a impressão.2 pontos
-
Olá! Consegui fazer funcionar, obrigado! Uma questão que notei durante os testes da biblioteca, é que a versão compilada que baixei aqui do site não funcionou de primeira no PHP, ele me retornava um erro estranho. Postei uma pergunta no StackOverflow e quem estava me respondendo lá teve um trabalhão para descobrir o que estava acontecendo, mas conseguimos resolver o problema. Aparentemente, no momento que a biblioteca para Linux foi compilada pelo Lazarus, ele adiciona como a primeira dependência a lib /lib64/ld-linux-x86-64.so.2, e ela exporta uma versão do calloc que não limpa a memória corretamente. A solução que consegui foi adicionar a opção -Cn para omitir a fase de linkagem da biblioteca pelo FPC. Então, editei o arquivo link.res e lá pra baixo no arquivo removi a linha onde estava escrito INPUT(/lib64/ld-linux-x86-64.so.2) e executei o script ppas.sh. Aí ele me gerou o arquivo .so linkado corretamente, só então consegui usar ele no PHP. Não sei os detalhes corretamente, pois não sou dev nem Pascal nem C, mas os detalhes do problema podem ser encontrados aqui, aqui e aqui. Essa é uma correção que pode ser feita no projeto para todos as pessoas que baixarem tenham essa versão linkada corretamente, pode ser algum outro problema, ou terei que compilar manualmente minha versão aqui sempre que houver atualizações na ACBRLibNFe? Att.2 pontos
-
Saudações a todos! Desenvolvemos uma API de consultas ao CNPJ com retorno em JSON e gostaríamos de compartilhar com vocês: https://www.cnpja.com.br/ Oferecemos 500 consultas grátis por dia, e é possível testar diretamente pelo site! O resultado das consultas inclui todos os dados do registro: Razão social, nome fantasia, data de fundação e porte Situação cadastral comum e especial Telefone, e-mail e endereço completo Natureza jurídica, atividades primárias e secundárias (CNAE) Quadro de sócios e administradores (QSA) Link para comprovante em PDF Exemplo de retorno: { "last_update": "2020-02-07T12:46:07.143Z", "name": "PETROLEO BRASILEIRO S A PETROBRAS", "alias": "PETROBRAS", "tax_id": "33000167000101", "type": "MATRIZ", "founded": "1966-09-28", "size": "DEMAIS", "capital": 205431960490.52, "email": "[email protected]", "phone": "(21) 3224-8091/ (21) 3224-4477", "federal_entity": "UNIÃO", "registration": { "status": "ATIVA", "status_date": "2005-11-03", "status_reason": null, "special_status": null, "special_status_date": null }, "address": { "street": "AV REPUBLICA DO CHILE", "number": "65", "details": null, "zip": "20031170", "neighborhood": "CENTRO", "city": "RIO DE JANEIRO", "state": "RJ" }, "legal_nature": { "code": "2038", "description": "Sociedade de Economia Mista" }, "primary_activity": { "code": "1921700", "description": "Fabricação de produtos do refino de petróleo" }, "secondary_activities": [ { "code": "0600001", "description": "Extração de petróleo e gás natural" }, { "code": "3520401", "description": "Produção de gás; processamento de gás natural" }, { "code": "4681801", "description": "Comércio atacadista de álcool carburante, biodiesel, gasolina e demais derivados de petróleo, exceto lubrificantes, não realizado por transportador retalhista (T.R.R.)" } ], "membership": [ { "name": "EBERALDO DE ALMEIDA NETO", "role": { "code": "10", "description": "Diretor" } }, { "name": "ROBERTO DA CUNHA CASTELLO BRANCO", "role": { "code": "16", "description": "Presidente" } }, { "name": "CARLOS ALBERTO PEREIRA DE OLIVEIRA", "role": { "code": "10", "description": "Diretor" } }, { "name": "RUDIMAR ANDREIS LORENZATTO", "role": { "code": "10", "description": "Diretor" } }, { "name": "ANELISE QUINTAO LARA", "role": { "code": "10", "description": "Diretor" } }, { "name": "ANDREA MARQUES DE ALMEIDA", "role": { "code": "10", "description": "Diretor" } }, { "name": "ROBERTO FURIAN ARDENGHY", "role": { "code": "10", "description": "Diretor" } }, { "name": "MARCELO BARBOSA DE CASTRO ZENKNER", "role": { "code": "10", "description": "Diretor" } } ], "files": { "registration": "https://api.cnpja.com.br/files/61298ecd-fbe9-42ec-9107-70eaecbc478f.pdf" } } Para utilizar: - Faça login em nosso site com o Google, Facebook ou E-mail. - Visite a página Minha Conta e copie sua Chave de API - Envie uma requisição GET para: https://api.cnpja.com.br/companies/{CNPJ} - Adicione no parâmetro Authorization dos Headers a sua Chave de API Quem tiver alguma dúvida é só perguntar!1 ponto
-
O que é o ACBrPosPrinter ? O ACBrPosPrinter permite o envio de comandos em EscPos, direto para a porta da Impressora. Ele é excelente para criação de relatórios complexos em impressoras de bobina, executando tarefas como Impressão de QRCode, Cod.Barras, alinhamento, Expandido, Negrito, Invertido, etc... Você pode baixar uma apresentação mais completa do ACBrPosPrinter, abaixo: Apresentação - ACBr - Elgin - ACBrPosPrinter.pdf 724 kB · 0 downloads Se você usa o ACBr no seu Delphi, poderá encontrar o componente ACBrPosPrinter, na Palheta ACBrSerial... Para quem não usa Delphi, o ACBrPosPrinter pode ser acessado pela ACBrLibPosPrinter , uma biblioteca compartilhada (DLL/SO), compilada em 32 e 64 bits ACBrMonitorPLUS, pelo Objeto ESCPOS... veja nesse link, a tela de configuração. Com o ACBrPosPrinter, você pode criar relatórios complexos, usando até mesmo o bloco de notas, bastando para isso, conhecer a sintaxe das Tags que o mesmo suporta... (leia mais abaixo) Características do ACBrPosPrinter Usa linguagem nativa da Impressora “Esc/Pos” Suporta vários protocolos “Esc/Pos”, cobrindo praticamente todas as Impressoras do Mercado Brasileiro Permite o uso de Tags, para geração de relatórios complexos. (Fonte, Alinhamento, Cod.Barras, QRCode, Imagens) Permite acesso aos dispositivos ligados a Impressora (Gaveta, Guilhotina, Sensores de Papel/Tampa) Permite vários tipos de Porta (COM, RAW, TCP, File) (veja essa Post) Como usar o ACBrPosPrinter ? De forma muito resumida, seguem os passos necessários Verifique o protocolo suportado pela Impressora e configure em ACBrPosPrinter.Modelo Verifique a Porta disponível na Impressora e configure em ACBrPosPrinter.Porta Ative a comunicação com a Impressora, chamando: ACBrPosPrinter.Ativar Gere seu relatório usando as Tags suportadas e imprima usando: ACBrPosPrinter.Imprimir(Relatorio: String) Quais impressoras o ACBrPosPrinter suporta ? Praticamente todas, uma vez que a maioria dos equipamentos existentes no mercado, tenta mimetizar o protocolo Epson Esc/Pos... Portanto se a sua impressora não está listada na lista de Protocolos suportados, faça um teste definido: ACBrPosPrinter1.Modelo := ppEscPosEpson; Conheça também os relatórios de equipamentos homologados https://www.projetoacbr.com.br/forum/forum/63-equipamentos-testados/ Conhecendo melhor as Tags O ACBrPosPrinter, usa uma linguagem de Tags, que se assemelha as Tags de HTML. Exemplo, para imprimir um texto em expandido, podemos usar a Tag <e> <e>EXPANDIDO Existem 2 conjuntos de Tag, no ACBrPosPrinter. Tag de Linha São Tags que tem efeito imediato, e não precisam ser fechadas por uma Tag de Fechament. Após a interpretação e envio da Tag, a Impressão será afetada imediatamente, até a Tag ser desligada ou substituída por outra. Alguns comandos entretanto, são desligados automaticamente pela impressora, após uma quebra de Linha. As Tags de Alinhamento e as Tags de formatação de caracteres, são exemplos desse tipo de Tag Tags de Bloco São Tags que necessariamente precisam ser fechadas, ou seja, se não houver um inicio e fim da Tag, o ACBrPosPrinter não será capaz de interpreta-la As tags de Cod.Barras e QRCode, são exemplos desse tipo de Tag A maneira mais simples de conhecer TODAS as tags, é pedir para o próprio ACBrPosPrinter imprimi-las, usando o comando: ACBrPosPrinter1.ImprimirTags; Isso produzirá a saída do seguinte relatório: <e> - Liga Expandido </e> - Desliga Expandido <a> - Liga Altura Dupla </a> - Desliga Altura Dupla <n> - Liga Negrito </n> - Desliga Negrito <s> - Liga Sublinhado </s> - Desliga Sublinhado <c> - Liga Condensado </c> - Desliga Condensado <i> - Liga Italico </i> - Desliga Italico </fn> - Fonte Normal </fa> - Liga Fonte Tipo A (normal) </fb> - Liga Fonte Tipo B (condensada) <in> - Liga Fonte Invertida (Fundo Preto) </in> - Desliga Fonte Invertida </ae> - Liga Alinhamento a Esquerda </ce> - Liga Alinhamento ao Centro </ad> - Liga Alinhamento a Direita </linha_simples> - Imprime Linha Simples </linha_dupla> - Imprime Linha Dupla </pular_linhas> - Pula N Linhas de acordo com propriedade do componente </logo> - Imprime Logotipo já gravado na Impressora (use utilitário do fabricante) </corte> - Efetua Corte, conforme configuração de "TipoCorte" </corte_parcial> - Efetua Corte Parcial no Papel (não disponivel em alguns modelos) </corte_total> - Efetua Corte Total no papel </abre_gaveta> - Aciona a abertura da Gaveta de Dinheiro </beep> - Emite um Beep na Impressora (não disponivel em alguns modelos) </zera> - Reseta as configurações de Fonte Alinhamento.<LF>Ajusta Página de Código e Espaço entre Linhas </lf> - Pula para a própxima linha </cr> - Retorna para o Inicio da Linha </reset> - Reseta as configurações de Fonte Alinhamento <ad> - Bloco - Texto Alinhado a Direita <ae> - Bloco - Texto Alinhado a Esquerda <ce> - Bloco - Texto Centralizado <ean8> - Bloco - Cod.Barras EAN8 - 7 numeros e 1 dig.verificador <ean13> - Bloco - Cod.Barras EAN13 - 12 numeros e 1 dig.verificador <std> - Bloco - Cod.Barras "Standard 2 of 5" - apenas números, tamanho livre <inter> - Bloco - Cod.Barras "Interleaved 2 of 5" - apenas números, tamanho PAR <code11> - Bloco - Cod.Barras Code11 - apenas números, tamanho livre <code39> - Bloco - Cod.Barras Code39 - Aceita: 0..9,A..Z, ,$,%,*,+,-,.,/, tamanho livre <code93> - Bloco - Cod.Barras Code93 - Aceita: 0..9,A..Z,-,., ,$,/,+,%, tamanho livre <code128> - Bloco - Cod.Barras Code128 - Todos os caracteres ASCII, tamanho livre <upca> - Bloco - Cod.Barras UPCA - 11 numeros e 1 dig.verificador <upce> - Bloco - Cod.Barras UPCE - 11 numeros e 1 dig.verificador <codabar> - Bloco - Cod.Barras CodaBar - Aceita: 0..9,A..D,a..d,$,+,-,.,/,:, tamanho livre <msi> - Bloco - Cod.Barra MSI - Apenas números, 1 dígito verificador <code128a> - Bloco - Cod.Barras Code128 - Subtipo A <code128b> - Bloco - Cod.Barras Code128 - Subtipo B (padrão) = <code128> <code128c> - Bloco - Cod.Barras Code128 - Subtipo C (informar valores em BCD) <qrcode> - Bloco - Cod.Barras QrCode <abre_gaveta> - Bloco - Abertura de Gaveta Específica (1 ou 2) <barra_mostrar> - Bloco - Configura se deve exibir conteudo abaixo do Cod.Barras: 0-NAO; 1-SIM <barra_largura> - Bloco - Configura a Largura das Barras do Cod.Barras: 0 a 5. (0=default) <barra_altura> - Bloco - Configura a Altura do Cod.Barras: 0 a 255. (0=default) <qrcode> - Bloco - Imprime QRCode de acordo com "ConfigQRCode" <qrcode_tipo> - Bloco - Configura o Tipo de QRCode: 1,2 <qrcode_largura> - Bloco - Configura a Largura do QRCode: 1 a 16 <qrcode_error> - Bloco - Configura o Error Level do QRCode: 0 a 3 <bmp> - Bloco - Imprime Imagem BMP monocromática. Conteúdo pode ser: Path da Imagem, Stream em Base64 ou AscII Art (0 e 1) <mp> - Liga Modo de Impressão em Página (em memória) </mp> - Desliga Modo de Impressão Página (em memória) </mp_imprimir> - Comanda a Impressão da Página na memória <mp_direcao> - Bloco - Direção Texto no Modo Página: 0-Esquerda/Direta, 1-Topo/Baixo, 2-Direita/Esquerda, 3-Baixo/Topo <mp_esquerda> - Bloco - Posição Inicial Horizontal Modo Página (Esquerda) <mp_topo> - Bloco - Posição Inicial Vertical Modo Página (Topo) <mp_largura> - Bloco - Largura da Região no Modo Página <mp_altura> - Bloco - Altura da Região no Modo Página <mp_espaco> - Bloco - Espaço entre Linhas na Região no Modo Página </mp_configurar> - Envia a configuração de Coordenadas da Região e direção do Modo Página <logo_imprimir> - Bloco - Configura a Impressão ou não do Logo Tipo: 0-NÃO, 1-SIM (default = 1) <logo_kc1> - Bloco - Configura a posição KC1 do Logo a ser impresso. Ex: 0=48 <logo_kc2> - Bloco - Configura a posição KC2 do Logo a ser impresso. Ex: 1=49 <logo_fatorx> - Bloco - Configura o aumento Horizonal do Logo, de 1 a 4 <logo_fatory> - Bloco - Configura o aumento Vertical do Logo, de 1 a 4 <ignorar_tags> - Bloco - Ignora todas as Tags contidas no Bloco Printing like a Pro Para aprender de forma profissional, como usar o ACBrPosPrinter, e gerar relatórios complexos, como o Extrato do SAT ou o DANFCe da NFCe, é fundamental estudar os Fontes e exemplos disponíveis no Demo. Você pode encontrar os fontes do Demo na pasta \ACBr\Exemplos\ACBrSerial\ACBrPosPrinter Se quiser baixar e testar uma versão já compilada, use o Donwload abaixo: Configurações Úteis do ACBrPosPrinter Propriedade Descrição Exemplo Colunas Define o máximo de Caracteres, em uma linha, usando a Fonte Normal 48, 42, 40 EspacoEntreLinhas Espaço em DPI entre as Linhas. (permite economia de Papel) 0 (default), 10, 40, 50 LinhasEntreCupons Define o Pulo de Linhas para o comando </pular_linhas> 7, 5 ArqLog Arquivo de Log detalhando tradução de Tags e Dump para Porta C:\temp\PosPrinter.log PaginaDeCodigo Define a Página de Código usada pela Impressora, para a impressão correta de acentos pc850, pc852, pcUTF8 ControlePorta Se Ligado, Abre e Fecha a Porta a cada envio de Comandos para a Impressora True, False ConfigQRCode Configurações do QRCode: Tipo, Largura, ErroLevel, etc Exemplo de Tags de Formatação de Caracteres Tags enviadas Relatório Gerado </linha_dupla> FONTE NORMAL: 42 Colunas ....+....1....+....2....+....3....+....4.. <e>EXPANDIDO: 21 Colunas ....+....1....+....2. </e><c>CONDENSADO: 56 Colunas ....+....1....+....2....+....3....+....4....+....5....+. </c><n>FONTE NEGRITO</N> <in>FONTE INVERTIDA</in> <S>FONTE SUBLINHADA</s> <i>FONTE ITALICO</i> FONTE NORMAL </linha_simples> <n>LIGA NEGRITO <i>LIGA ITALICO <S>LIGA SUBLINHADA <c>LIGA CONDENSADA <e>LIGA EXPANDIDA <a>LIGA ALTURA DUPLA </fn>FONTE NORMAL </linha_simples> <e><n>NEGRITO E EXPANDIDA</n></e> <c><n>NEGRITO E CONDENSADA</n></c> <e><a>EXPANDIDA E ALT.DUPLA</a></e> </fn>FONTE NORMAL <in><e>INVERTIDA E EXPANDIDA</e></in> <in><c>INVERTIDA E CONDENSADA</c></in> <in><a>INVERTIDA E ALT.DUPLA</a></in> </fn>FONTE NORMAL </linha_simples> </FB>FONTE TIPO B <n>FONTE NEGRITO</N> <e>FONTE EXPANDIDA</e> <a>FONTE ALT.DUPLA</a> <in>FONTE INVERTIDA</in> <S>FONTE SUBLINHADA</s> <i>FONTE ITALICO</i> </FA>FONTE TIPO A </FN>FONTE NORMAL </corte_total> Reparem que no exemplo acima, o comando Itálico não funcionou. Isso é uma característica do equipamento que usamos nesse teste, (Epson Esc/Pos)... Ou seja, algumas Tags, podem não funcionar em alguns protocolos. O Demo ACBrPosPrinter é indicado para testar a compatibilidade da Impressora, com os protocolos suportados... Exemplo de Tags de Alinhamento Texto em conjunto com Formatação de Caractere Tags enviadas Relatório Gerado </zera> </linha_dupla> TEXTO NORMAL </ae>ALINHADO A ESQUERDA <bmp>C:\ACBrPosPrinter\acbrmono.bmp</bmp> 1 2 3 TESTANDO <n>FONTE NEGRITO</N> <e>FONTE EXPANDIDA</e> <a>FONTE ALT.DUPLA</a> <c>FONTE CONDENSADA</c> <in>FONTE INVERTIDA</in> <S>FONTE SUBLINHADA</s> <i>FONTE ITALICO</i> </fn></ce>ALINHADO NO CENTRO <bmp>C:\ACBrPosPrinter\acbrmono.bmp</bmp> 1 2 3 TESTANDO <n>FONTE NEGRITO</N> <e>FONTE EXPANDIDA</e> <a>FONTE ALT.DUPLA</a> <c>FONTE CONDENSADA</c> <in>FONTE INVERTIDA</in> <S>FONTE SUBLINHADA</s> <i>FONTE ITALICO</i> </fn></ad>ALINHADO A DIREITA <bmp>C:\ACBrPosPrinter\acbrmono.bmp</bmp> 1 2 3 TESTANDO <n>FONTE NEGRITO</N> <e>FONTE EXPANDIDA</e> <a>FONTE ALT.DUPLA</a> <c>FONTE CONDENSADA</c> <in>FONTE INVERTIDA</in> <S>FONTE SUBLINHADA</s> <i>FONTE ITALICO</i> </ae></fn>TEXTO NORMAL </corte_total> Exemplo de Tags de QRCode e Cod.Barras Tags enviadas Relatório Gerado </zera> </linha_dupla><qrcode_tipo>2</qrcode_tipo><qrcode_largura>4</qrcode_largura><qrcode_error>0</qrcode_error><qrcode>http://projetoacbr.com.br</qrcode> </ce><qrcode>http://www.projetoacbr.com.br/</qrcode> <barra_mostrar>0</barra_mostrar><barra_largura>0</barra_largura><barra_altura>0</barra_altura> </Linha_Simples> EAN13: 123456789012 <ean13>123456789012</ean13> </Linha_Simples> CODE128C: 3515071111111111111159 <code128c>3515071111111111111159</code128c> </corte_total> No exemplo acima, demonstramos as tags que permitem configurar algumas características do QRCode e Cod.Barras, essas tags são opcionais, e você também pode configurar o ACBrPosPrinter, pelas propriedades do componente Acionando a Guilhotina e Gaveta de dinheiro: Moleza... basta enviar as Tags... </corte> - Efetua Corte, conforme configuração de "TipoCorte" </corte_parcial> - Efetua Corte Parcial no Papel (não disponivel em alguns modelos) </corte_total> - Efetua Corte Total no papel </abre_gaveta> - Aciona a abertura da Gaveta de Dinheiro Exemplo: ACBrPosPrinter1.Imprimir('</abre_gaveta>'); Lendo as informações da Impressora Alguns tipos de Porta, permite receber informações da Impressora. Os Tipos de Portas que o ACBrPosPrinter consegue ler informações da Impressora são: Serial, USB, TCP, BTH, Hook O exemplo abaixo, imprime em um memo, o Status da Impressora procedure TFrPosPrinterTeste.bLerStatusClick(Sender: TObject); var Status: TACBrPosPrinterStatus; i: TACBrPosTipoStatus; AStr: String; begin Status := ACBrPosPrinter1.LerStatusImpressora; if Status = [] then mImp.Lines.Add('Nennhum Erro encontrado') else begin AStr := ''; For i := Low(TACBrPosTipoStatus) to High(TACBrPosTipoStatus) do begin if i in Status then AStr := AStr + GetEnumName(TypeInfo(TACBrPosTipoStatus), integer(i) )+ ', '; end; mImp.Lines.Add( AStr ); end; end; O Exemplo abaixo, retorna as informações da Impressora procedure TFrPosPrinterTeste.bLerInfoClick(Sender: TObject); begin mImp.Lines.Add( ACBrPosPrinter1.LerInfoImpressora ); end; Exemplo de retorno Como a mágica do ACBrPosPrinter funciona ? As Tags são interpretadas e traduzidas pelo ACBrPosPrinter, para a Linguagem EscPos, que a linguagem nativa do Firmware da Impressora... ou seja, o ACBrPosPrinter enviará comandos no Protocolo EscPos, para que a impressora interprete-os e faça o Trabalho.... então quando enviamos por exemplo, o comando de QRCode, abaixo: <qrcode>http://www.projetoacbr.com.br</qrcode> O ACBrPosPrinter irá traduzir isso para uma sequencia de comandos, em EscPos, que quando interpretados pela Impressora, fará com que a mesma calcule e imprima um QRCode. Então o ACBrPosPrinter não se preocupa com a parte visual da Impressão, isso é tarefa do Firmware da Impressora, que suporta a poderosa linguagem EscPos Complexo não ? melhor deixar o ACBrPosPrinter cuidar dessa tarefa e gerar o EscPos Leia Também1 ponto
-
Nosso commiter, @Régys Silveira, gravou um excelente vídeo, sobre esse assunto... Leia também:1 ponto
-
Tinha também um bug em uma versão do instalador que removia a instalação Win32 quando iniciava a de Win64.1 ponto
-
Tive este problema também, foi somente instalar o framework .Net 4. Ficou 100%1 ponto
-
Boa, Juliana! Todos que puderem vamos ajudar a comunidade. Para resolver o problema do "ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.procEvento.tpEvento", não mapear os eventos “990900 - Vistoria Suframa” e "990910 - Internalização Suframa" efetuar a seguinte modificação no Fonte do ACBr. Diretório: ACBr\Fontes\ACBrDFe\ACBrNFe\PCNNFe Alterar a function "StrToTpEventoNFe" no arquivo: "pcnConversaoNFe.pas" De: function StrToTpEventoNFe(out ok: boolean; const s: string): TpcnTpEvento; begin Result := StrToEnumerado(ok, s, ['-99999', '110110', '110111', '110112', '110140', '111500', '111501', '111502', '111503', '210200', '210210', '210220', '210240', '610600', '610614', '790700'], [teNaoMapeado, teCCe, teCancelamento, teCancSubst, teEPECNFe, tePedProrrog1, tePedProrrog2, teCanPedProrrog1, teCanPedProrrog2, teManifDestConfirmacao, teManifDestCiencia, teManifDestDesconhecimento, teManifDestOperNaoRealizada, teRegistroCTe, teMDFeAutorizadoComCTe, teAverbacaoExportacao ]); end; Para: function StrToTpEventoNFe(out ok: boolean; const s: string): TpcnTpEvento; begin Result := StrToEnumerado(ok, s, ['-99999', '110110', '110111', '110112', '110140', '111500', '111501', '111502', '111503', '210200', '210210', '210220', '210240', '610600', '610614', '790700', '990900', '990910'], [teNaoMapeado, teCCe, teCancelamento, teCancSubst, teEPECNFe, tePedProrrog1, tePedProrrog2, teCanPedProrrog1, teCanPedProrrog2, teManifDestConfirmacao, teManifDestCiencia, teManifDestDesconhecimento, teManifDestOperNaoRealizada, teRegistroCTe, teMDFeAutorizadoComCTe, teAverbacaoExportacao, teVistoriaSuframa, teConfInternalizacao]); end; Fiz o teste em minha aplicação e deu certo.1 ponto
-
Complementando o que o Daniel mencionou, você pode procurar o manual da impressora e verificar como fazer o autoteste. Esse teste é independente do computador e por isso vai mostrar se a impressora tem algum problema no hardware.1 ponto
-
1 ponto
-
Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico.1 ponto
-
Sim o c# usa a convenção cdecl na nossa classe.1 ponto
-
já resolvi. O problema era que eu tava pegando as DLL's da pasta StdCall , quando peguei da pasta Cdecl funcionou. Muito obrigado.1 ponto
-
1 ponto
-
Bom dia Diogo, Note que foi realizado um refactory recente nas classes desse Banco, inclusive já adicionado o layout UnicredSC. Estamos utilizando a classe ACBrUnicredRS como classe base para os demais layout desse banco, apenas mantivemos a nomenclatura da classe para não ter problemas para quem já utiliza. Está bem parecido com o que voce implementou. Se possível, verifique se é possível adptar seguindo o padrão das classes que já estão implementadas (ACBrBancoUnicredES e ACBrBancoUnicredSC). Ou realizar os ajustes Na classe ACBrBancoUnicredRS, aparentemente o layout que utilizou é o mesmo utilizado nesta classe.1 ponto
-
Bom dia CLverson, Em breve o MDF-e vai passar a ter campos novos no XML que vão contemplar o CIOT. Por favor leia a noticia: Nota Técnica 2020/001 - MDF-e1 ponto
-
Gil, você viu o que sua aplicação faz nesse código? Aqui está adicionando as linhas para um objeto de nome ViasTEF. Mas não comanda a impressão. Então em outro lugar do código da sua aplicação está faltando fazer a impressão. Como você pode ver no log abaixo, o ACBrTEFD está enviando para seu aplicativo avisos de que ele precisa imprimir as vias das duas autorizações. Veja só: -- 04/02 08:24:11:193 - CliSiTef ECFAbreVinculado: COO: 35425 Indice: 3 Valor: 24,16 -- 04/02 08:24:11:194 - CliSiTef ECFImprimeVia: trVinculado Via: 1 -- 04/02 08:24:11:200 - CliSiTef ComandarECF: Oper: opePulaLinhas -- 04/02 08:24:11:200 - CliSiTef DoExibeMsg: Oper: opmDestaqueVia Mensagem: Destaque a 1ª Via -- 04/02 08:24:11:204 - CliSiTef ECFImprimeVia: trVinculado Via: 2 -- 04/02 08:24:11:205 - CliSiTef ComandarECF: Oper: opePulaLinhas -- 04/02 08:24:11:205 - CliSiTef DoExibeMsg: Oper: opmDestaqueVia Mensagem: Destaque a 2ª Via -- 04/02 08:24:11:206 - CliSiTef ECFImprimeVia: trVinculado Via: 1 -- 04/02 08:24:11:207 - CliSiTef ComandarECF: Oper: opePulaLinhas -- 04/02 08:24:11:207 - CliSiTef DoExibeMsg: Oper: opmDestaqueVia Mensagem: Destaque a 1ª Via -- 04/02 08:24:11:208 - CliSiTef ECFImprimeVia: trVinculado Via: 2 -- 04/02 08:24:11:209 - CliSiTef ComandarECF: Oper: opeFechaVinculado -- 04/02 08:24:11:209 - ConfirmarTransacoesPendentes -- 04/02 08:24:11:210 - *** FinalizaTransacaoSiTefInterativo. Confirma: SIM Documento: 35425 Data: 20200204 Hora: 082009 Seria interessante você verificar onde seu aplicativo está comandando as vias da primeira autorização e, analisando o seu código, verificar o motivo de não estar fazendo o mesmo para a segunda autorização. Só então você vai conseguir corrigir.1 ponto
-
Bom dia Matheus, Primeiramente não devemos mais usar o Capicom e sim o WinCrypt ou o OpenSSL, no caso do seu cliente tem que ser WinCrypt uma vez que o certificado é A3. Segundo, certificado A3 é só dor de cabeça, convença o seu cliente a trocar essa porcaria. Existem diversos relatos de pessoas que perderam o certificado, por conta de um bug em uma DLL da Microsoft (se não me falha a memória). Terceiro, com certeza é alguma configuração errada na sua aplicação no que se refere ao certificado digital.1 ponto
-
o ACBr usa o mesmo componente para NFe e NFCe... ou seja... é exatamente o mesmo código apenas mudando o Modelo 55 ou 65 Faça testes com o Demo do ACBrNFe, disponível na pasta Exemplos1 ponto
-
Bom dia Edvaldo, Como você pode ver, existe um grupo especifico para essas informações e a SEFAZ-MG fica inventando moda. Realmente se a SEFAZ-MG existe que essas informações sejam informadas no grupo <obsCont> só será possível informar dados de dois abastecimentos por documento (por exemplo: Gasolina e Etanol). Existe algum caso onde pode ocorrer mais de dois?1 ponto
-
1 ponto
-
ok. Caso consiga transmitir, agradeço seu retorno para ver se encontro o problema. Seguem minha anotações dos ajustes que tive que fazer no meu cenário, caso te ajude: 1. Numero do RPS invalido. Informe um numero de RPS que corresponda a sequencia utilizada pelo prestador do servico. R: Iniciar o contador de RPS = 1 2. Serie do RPS incorreta.Informe corretamente a serie para o RPS pesquisado. R: De acordo com testes e pesquisas na internet, a série funcionou com "RPSL" 3. Codigo de tributacao informado indevidamente. Esse campo nao deve ser preenchido neste municipio. R: Servico.CodigoTributacaoMunicipio não deve ser preenchido quando a prestação for fora do município 4. Erros referentes ao País CNPJ/CPF do tomador do servico informado indevidamente. Nao informe o CNPJ/CPF do tomador do servico quando ele for domiciliado no exterior. NIF do Tomador nao informado. Informe o NIF para tomadores nao residentes no Brasil EnderecoCompletoExterior nao informado. Informe o EnderecoCompletoExterior R: Tomador.TomadorExterior := snNao;1 ponto
-
Obrigado, testei aqui e não deu erro no validador. Tinha visto esse documento mas não tinha achado essa pergunta/resposta, muito obrigado, vou encaminhar esse documento para os contadores. Fiz o teste com uma empresa do Lucro Real e o SPED não deu erro.1 ponto
-
Bom Dia, acho que seria mais ou menos isso: 1- Remetente Direto – O Fornecedor é Substituto Tributário e cobrou a ST 2 - Remetente Indireto – O Fornecedor está apenas revendendo a mercadoria vendendo com CST 60 3 - Próprio declarante – O declarante comprou de outra UF produto não passível de Substituição por Convênio, mas o ICMS-ST existe dentro do seu estado, por isto foi obrigado a recolher na entrada. mas como o EMBarbosa comentou, a melhor forma de confirmar é conversar com seu contador de confiança.1 ponto
-
Bom dia. Caso queira aplicar a correção e nos enviar o fonte, será muito bem vindo tb. Att.1 ponto
-
Aplica pra gente também na unit ACBrECFNaoFiscal.pas que pra mim é ela a causadora do erro! Assim que sobrar um tempo vou dar uma analisada no fluxo e ver se consigo entender onde o arquivo é fechado.1 ponto
-
Waldir, Sinceramente digo que me preocupo mas sei o que tem por traz de todo esse projeto. Essa sim é uma grande equipe de desenvolvimento, das melhores que já vi. Do outro lado, muitos usuários testando e é isso que fazcom que o ACBr seja esse sucesso que é hoje. Sei que será resolvido e o que nós usuários pudermos fazer para contribuir, faremos. Estou agora copiando essa versão de 06/01 para um diretório isolado e vou fazer um SVN Update nele lá e voltar algumas revisões pra chegar em 06/01 e de lá pra cá tentar identificar algo. Qualquer coisa posto aqui. Muito obrigado, abraço e bom dia.1 ponto
-
Nesse link: http://docwiki.embarcadero.com/Libraries/Rio/en/System.SysUtils.EInOutError Tem umas dicas que podem nos ajudar a resolver esse problema. Me parece que em algum ponto o arquivo foi fechado e em seguida ele passa a apresentar esse erro nas chamadas seguintes. Eu resolvi aqui aplicando temporariamente em todas as chamadas as diretivas {$I-} e {$I+} Precisa ser aplicado também na unit ACBrECFNaoFiscal.pas Pode ser a falta de fazer a correção nessa unit o motivo da persistência de seus erros.1 ponto
-
Boa noite, Bea. A forma de buscar o evento "990910 - Confirmacao de Internalizacao da Mercadoria na SUFRAMA" é da mesma maneira que o "790700 - Averbação para Exportação". O problema que eu encontrei foi que a variável "teConfInternalizacao" não está carregando valor nela, ou seja, esse evento "990910 - Confirmacao de Internalizacao da Mercadoria na SUFRAMA" está vindo como Não Mapeado, que é a mesma coisa que estava acontecendo com a variável "teAverbacaoExportacao" do evento "790700 - Averbação para Exportação" ( o Italo acerto no fonte do ACBr ), agora seria top se o Italo pudesse acertar também o evento "990910 - Confirmacao de Internalizacao da Mercadoria na SUFRAMA" no ACBr. Para mim esses eventos "990910 - Confirmacao de Internalizacao da Mercadoria na SUFRAMA", começaram a ficar disponíveis a partir da data de autorização 23/12/2019. Esse novo evento começou a ser emitido devido ao novo sistema do SUFRAMA o SIMNAC - Sistema de Ingresso de Mercadoria Nacional (Clique aqui para ver o Manual). (A partir de agora fica extinta a Declaração de Ingresso emitida pelo SUFRAMA, mas no lugar será gerado o Evento “990910 - Internalização SUFRAMA” ) Segue mais ou menos a rotina que eu fiz, onde foi feita "a toque de caixa", ou seja, precisa ser melhorada... procedure ConsultarNFeEmitente; var s_CNPJ, s_UF_Autor, s_ChaveNFe, s_NSU_Atual: String; docZip: TdocZipCollectionItem; i_UltimoNSU, i, j: Integer; node_infEvento, node_detEvento: IXMLNode; xml_dhEvento, xml_dhVistoria: TDateTime; xml_tpEvento, xml_NumeroPINe, xml_LocalidadeVistoria, xml_Posto, xml_Historico: String; i_Qtd_DFe_Encontrado: Integer; begin i_Qtd_DFe_Encontrado := 0; s_CNPJ := '000000000000'; // CNPJ da Empresa s_UF_Autor := ACBrNFe1.Configuracoes.WebServices.UF; // Aqui antes de começar busco qual foi o ultimo NSU que ficou gravado, e caso for a primeira vez será "0"... with qryTemp do begin Close; SQL.Clear; SQL.Add('SELECT ... '); Open; i_UltimoNSU := FieldByName('CodigoUltimoNSU').AsInteger; end; repeat try ACBrNFe1.DistribuicaoDFePorUltNSU( UFtoCUF( s_UF_Autor ), s_CNPJ, IntToStr( i_UltimoNSU ) ); i_UltimoNSU := StrToInt( ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.ultNSU ); // Rotina que grava o Ultimo NSU consultado, com Data/Hora e Usuário do sistema if ( i_UltimoNSU > 0 ) then GravaUltimoNSU( i_UltimoNSU ); except on er: Exception do begin if ( ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 0 ) then // Pode ser o Erro de Inativo e Inoperante begin Sleep( 5000 ); ACBrNFe1.DistribuicaoDFePorUltNSU( UFtoCUF( s_UF_Autor ), s_CNPJ, IntToStr( i_UltimoNSU ) ); i_UltimoNSU := StrToInt( ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.ultNSU ); if ( i_UltimoNSU > 0 ) then GravaUltimoNSU( i_UltimoNSU ); end else begin MessageDlg( 'cStat: ' + IntToStr( ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat ) + #13#10 + er.Message, mtError, [mbOk], 0 ); Abort; end; end; end; // caso haja retorno [138-Documento localizado] try if ( ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 138 ) then begin j := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count -1; for i:= 0 to j do begin Inc( i_Qtd_DFe_Encontrado ); frmAtualizandoDados.Repaint; frmAtualizandoDados.Refresh; Application.ProcessMessages; XMLDocument1.XML.Clear; s_ChaveNFe := ''; if not ( ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].procEvento = nil ) and not ( ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].procEvento.chDFe = EmptyStr ) then begin s_ChaveNFe := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].procEvento.chDFe; s_NSU_Atual := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].NSU; // Verifica se é o evento Completo de "990910 - Confirmacao de Internalizacao da Mercadoria na SUFRAMA". // Estarei fazendo esse monte de verificações até o ACBr acertar a variável "teConfInternalizacao" if ( ( s_ChaveNFe <> '' ) and ( ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].schema = schprocEventoNFe ) ) and ( ( ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].procEvento.tpEvento = teConfInternalizacao ) or ( ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].procEvento.detEvento.descEvento = 'Confirmacao de Internalizacao da Mercadoria na SUFRAMA' ) or ( ( AnsiPos('Internalizacao', ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].procEvento.detEvento.descEvento) > 0 ) and ( AnsiPos('SUFRAMA', ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].procEvento.detEvento.descEvento) > 0 ) ) or ( ( AnsiPos('Internalização', ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].procEvento.detEvento.descEvento) > 0 ) and ( AnsiPos('SUFRAMA', ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].procEvento.detEvento.descEvento) > 0 ) ) ) then begin // Consulta no Banco de Dados para verificar se a NF-e é "Venda destinada à Zona Franca de Manaus ou Áreas de Livre Comércio - CFOP 6.109 e 6.110" // Regra de Negócio minha... with qryTemp do begin Close; SQL.Clear; SQL.Add('SELECT ...'); SQL.Add(' FROM ... ns'); SQL.Add(' WHERE ... '); SQL.Add(' AND ns.CFOP IN ( ''6.109'', ''6.110'' )'); ParamByName('p_ChaveNFE').AsString := s_ChaveNFe; Open; end; if ( qryTemp.RecordCount > 0 ) then begin // Carrega o XML no "XMLDocument1", onde será possível acessar os "Nodes" de maneira mais fácil... // Foi feito essa rotina que lê direto no XML, pois, até na data "10/02/2020" o componente ACBrNFe não estava totalmente preparado para trabalhar com esse evento... XMLDocument1.XML.Clear; XMLDocument1.LoadFromXML( ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].XML ); node_infEvento := XMLDocument1.ChildNodes.FindNode('procEventoNFe').ChildNodes.FindNode('evento').ChildNodes.FindNode('infEvento'); xml_dhEvento := ISO8601ToDate( node_infEvento.ChildValues['dhEvento'], False ); xml_tpEvento := node_infEvento.ChildValues['tpEvento']; node_detEvento := XMLDocument1.ChildNodes.FindNode('procEventoNFe').ChildNodes.FindNode('evento').ChildNodes.FindNode('infEvento').ChildNodes.FindNode('detEvento'); xml_NumeroPINe := node_detEvento.ChildValues['PINe']; xml_dhVistoria := ISO8601ToDate( node_detEvento.ChildValues['dVistoria'], False ); xml_LocalidadeVistoria := node_detEvento.ChildValues['locVistoria']; xml_Posto := node_detEvento.ChildValues['postoVistoria']; xml_Historico := node_detEvento.ChildValues['xHistorico']; // Aqui eu faço a Inserção do Evento no meu Banco de Dados... qryTemp2.Close; qryTemp2.SQL.Clear; qryTemp2.SQL.Add('BEGIN'); qryTemp2.ExecSQL; qryTemp2.Close; qryTemp2.SQL.Clear; qryTemp2.SQL.Add('INSERT INTO ... '); qryTemp2.ParamByName('chNFe').AsString := s_ChaveNFe; qryTemp2.ParamByName('NSUProtocolo').AsString := s_NSU_Atual; qryTemp2.ParamByName('dhEvento').AsDateTime := xml_dhEvento; qryTemp2.ParamByName('tpEvento').AsString := xml_tpEvento; qryTemp2.ParamByName('nSeqEvento').AsInteger := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].procEvento.nSeqEvento; qryTemp2.ParamByName('descEvento').AsString := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].procEvento.detEvento.descEvento; qryTemp2.ParamByName('ProtocoloEvento').AsString := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].procEvento.RetinfEvento.nProt; qryTemp2.ParamByName('dhAutorizacaoSEFAZ').AsDateTime := ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items[i].procEvento.RetinfEvento.dhRegEvento; qryTemp2.ParamByName('NumeroPINe').AsString := xml_NumeroPINe; qryTemp2.ParamByName('dhVistoria').AsDateTime := xml_dhVistoria; qryTemp2.ParamByName('LocalidadeVistoria').AsString := xml_LocalidadeVistoria; qryTemp2.ParamByName('Posto').AsString := xml_Posto; qryTemp2.ParamByName('Historico').AsString := xml_Historico; qryTemp2.ExecSQL; qryTemp2.Close; qryTemp2.SQL.Clear; qryTemp2.SQL.Add('COMMIT'); qryTemp2.ExecSQL; end; end; end; end; end; except on er: exception do begin raise Exception.Create('Erro Capturado: ' + er.Message); end; end; until ( ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat IN [108,109,137] ); if ( ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 108 ) then begin MessageDlg('cStat = 108: Serviço Paralisado Momentaneamente (curto prazo).', mtWarning, [mbOk], 0); end else if ( ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 108 ) then begin MessageDlg('cStat = 109: Serviço Paralisado sem Previsão.', mtWarning, [mbOk], 0); end else if ( ACBrNFe1.WebServices.DistribuicaoDFe.retDistDFeInt.cStat = 137 ) then begin // Caso tenha encontrado Documento Fiscal Eletrônica, irá da a mensagem "Pesquisa NF-e executado com sucesso!". if ( i_Qtd_DFe_Encontrado > 0 ) then begin MessageDlg('Pesquisa de NF-e que foram Internalizadas foi executado com sucesso!', mtInformation, [mbOk], 0); end else begin MessageDlg('cStat = 137: Nenhum documento localizado.', mtWarning, [mbOk], 0); end; end; end; Espero que eu posso ter ajudado em alguma coisa. Até mais...1 ponto
-
1 ponto
-
Certo. Muito obrigado. Por ora está ocorrendo tudo bem na implantação do monitor. Envio, cancelamento e impressão estão ok e caso precisemos de apoio abrimos um novo tópico. Muito obrigado !!1 ponto
-
Leia o INI do seu BD, Nuvem, etc... e salve no disco... Simples Assim... toda DLL precisa de um ponto de partida para configuração... As DLLs de SAT de todos os fabricantes seguem esse raciocínio, buscam um INI, XML, TXT do disco... ou seja, estamos usando o padrão de mercado... Você pode passar todas as informações, nos INIs dos Boletos, sem mudar o INI Global https://acbr.sourceforge.io/ACBrLib/Informacoes1.html A ACBrLib, assim como todo produto existente, tem o seu Escopo e modelo de funcionamento... Talvez você deva Ler mais sobre o produto, e conhecer as suas características e limitações, antes de adotá-lo...1 ponto
-
Agradeço a sugestão, mas não tenho como adotá-la porque preciso das informações antes de gravar no BD. Além disso, nos outros bancos a informações no arquivo de retorno vêm numa linha só. Aí, de toda forma precisaria de rotinas diferentes. A solução que encontrei foi essa. Deixo aqui para talvez ajudar alguém no futuro: for I := 0 to ACBrBoleto1.ListadeBoletos.Count - 1 do begin if (ACBrBoleto1.ListadeBoletos.Objects.OcorrenciaOriginal.Tipo in [toRetornoLiquidado, toRetornoLiquidadoSemRegistro, toRetornoDebitoTarifas]) then begin if ACBrBoleto1.ListadeBoletos.Objects.OcorrenciaOriginal.Tipo <> toRetornoDebitoTarifas then begin VNumBoleto := ACBrBoleto1.ListadeBoletos.Objects.NossoNumero; VValorRec := ACBrBoleto1.ListadeBoletos.Objects.ValorRecebido; end; if VBaixa.FTipoRet = cobSicred then //o sicred o retorno vem em duas linhas. begin for M := 0 to ACBrBoleto1.ListadeBoletos.Count - 1 do begin if (ACBrBoleto1.ListadeBoletos.Objects[M].OcorrenciaOriginal.Tipo = toRetornoDebitoTarifas) and (ACBrBoleto1.ListadeBoletos.Objects[M].NossoNumero = ACBrBoleto1.ListadeBoletos.Objects.NossoNumero) then VTotTarifas := ACBrBoleto1.ListadeBoletos.Objects[M].ValorDespesaCobranca; end; end else VTotTarifas := ACBrBoleto1.ListadeBoletos.Objects[M].ValorDespesaCobranca; end; end; end; Obrigado.1 ponto
-
Acabei de fazer a integração com o Web Service via ACBr. Está funcionando perfeitamente. Muito bom !!! Agradeço à todos que colaboraram de alguma forma com este componente. Antes de implementa-lo, eu usava a estratégia de copiar cada CT-e gerado para a pasta do ATM. Agora não precisamos mais disso. Muito me ajudou. Parabéns à todos que trabalharam neste projeto. Muito Obrigado.1 ponto
-
Boa noite! Fonte: http://sped.rfb.gov.br/estatico/08/9A74C350BDFA9C627C5C88FB41E163B696D5E1/Perguntas e Respostas EFD Contribuições.pdf1 ponto
-
Pelo que eu entendi da mensagem de erro, a base pode ser zero mas a alíquota deve existir em uma das tabelas citadas. Não é esse o problema? Você consegue validar editando no PVA com esses valores que quer?1 ponto
-
Você precisa rodar TODAS atualizações do Windows Update... Outra alternativa seria usar OpenSSL1 ponto
-
Conforme definido pelo Ajuste Sinief 23/19, os contribuintes emitentes do CT-e no transporte intermunicipal de cargas e na hipótese de contribuinte emitente de NF-e no transporte intermunicipal de bens ou mercadorias acobertadas por NF-e, realizadas em veículos próprios ou arrendados, ou mediante contratação de transportador autônomo de cargas passam estar obrigados a emitir o MDFe a partir de 6 de abril de 2020. Obs: Conforme §3, para o Estado de São Paulo, o termo inicial de obrigatoriedade para emissão de MDF-e nas hipóteses previstas acima será o estabelecido em sua legislação estadual.”. Fonte: https://www.confaz.fazenda.gov.br/legislacao/ajustes/2019/ajuste-sinief-23-191 ponto