Ir para conteúdo
  • Cadastre-se

Painel de líderes

Conteúdo popular

Showing content with the highest reputation on 22-08-2019 em todas as áreas

  1. Boa tarde. Segue definição do estado do Paraná quanto as regras a critério da UF.
    3 pontos
  2. Boa tarde a todos, Já esta disponível em nossa biblioteca a Nota Técnica 2019/001 versão 1.20 que trata sobre as alterações nas regras de validação. Essa nova versão é uma complementação da anterior que inclusive o seu resumo se encontra aqui. Resumo da NT:  • Remoção da Regra 1C03-10 (A Regra 1C03-10 exigia que Razão Social do emitente informada na tag emit\xNome fosse exatamente igual ao cadastro da SEFAZ, o que se demonstrou problemático). • Correção na Descrição da Regra de Validação N12-90 (Retirada informação de aplicação somente em casos de operação interna). Se CST de ICMS = (20, 30, 40, 41, 50, 70 ou 90): - Verificar se informado o valor do ICMS desonerado (tag:vICMSDeson) e o Motivo da Desoneração (tag: motDesICMS). • Torna facultativas as regras N18-10 e N18-20 (Os tempos de implementação destas regras variam muito entre as diversas Sefaz autorizadoras, por isto a partir da versão 1.20 desta nota técnica estas regras são de aplicação facultativa). N18-10: Se o campo modBCST = “4” Margem Valor Agregado, obrigatório o preenchimento do campo pMVAST. N18-20: Se o campo modBCST <> “4” Margem Valor Agregado, não deverá ser preenchido o campo pMVAST . • Criado novo Valor para o Campo N18 (A tag modBCST passa a aceitar a opção “6=Valor da Operação”). Datas previstas para entrada em vigor: 26/08/2019 - Ambiente de Homologação; 02/09/2019 - Ambiente de Produção. Alterações no componente: Criado o valor dbisValordaOperacao, para o campo modBCST. Alterações na aplicação do desenvolvedor: Prever o uso do novo valor para os CST 10 e 30. Para quem utiliza o ACBrMonitor, basta atribuir o valor 6 ao campo modBCST para os CST 10 e 30 quando for o caso. Foi publicada uma nova tabela: cBenef x CST atualizada até 19/08/2019, a qual pode ser baixada aqui, além dos novos schemas para atender o novo valor do modBCST. Até o final desta semana estaremos disponibilizando os novos schemas para que semana que vem, vocês possam iniciar os testes em ambiente de homologação.
    2 pontos
  3. Boa tarde. Segue definição do estado do Rio Grande do Sul quanto as regras a critério da UF. Fonte: https://receita.fazenda.rs.gov.br/conteudo/10866/conformidade-dos-sistemas-emissores-de-nf-e-nfc-e-com-as-regras-de-validacao-previstas-na-nt-2019.001
    2 pontos
  4. Boa tarde a todos, Para quem utiliza o componente ACBrCTe e estava com dificuldades de gerar o Hash de Entrega, poderá se utiliza de uma das duas funções que acabam de ser disponibilizadas na unit ACBrDFeUtil. São elas: function CalcularHashDados(const ADados: TStream; AChave: String): string; Devemos utilizar a função acima quando a imagem esta armazenada no banco de dados, neste caso o conteúdo da mesma é passado como Stream no primeiro parâmetro da função, já o segundo é a chave do CT-e. A função retorna uma string com 28 caracteres que devemos atribuir ao campo: infEvento.detEvento.hashEntrega Exemplo: infEvento.detEvento.hashEntrega := CalcularHashDados(xStreamImagem, xChaveCTe); e function CalcularHashArquivo(const APathArquivo: String; AChave: String): string; Devemos utilizar a função acima quando a imagem esta salva em disco, neste caso o primeiro parâmetro da função é o path com o nome do arquivo (imagem) e o segundo é a chave do CT-e. A função retorna a string com 28 caracteres que devemos atribuir ao campo: infEvento.detEvento.hashEntrega Exemplo: infEvento.detEvento.hashEntrega := CalcularHashArquivo(xPathImagem, xChaveCTe);
    2 pontos
  5. Olá pessoal, Introduzi no componente ACBrPosPrinter, um novo mecanismo de acesso a Impressora Agora poderemos acessar algumas impressoras, usando a Sintaxe: ACBrPosPrinter1.Porta := 'DLL:MARCA'; Onde MARCA, será o nome da Marca do Fabricante da Impressora... Até o momento, temos suporte para as marcas "ELGIN", e "EPSON" A ideia por traz dessa nova sintaxe de Porta, é permitir usar a DLL/SO do Fabricante, para Imprimir diretamente na Impressora... Ok.. o ACBrPosPrinter, já conseguia acessar impressoras Não Fiscais, pela Porta USB, usando a Sintaxe "RAW:" ACBrPosPrinter1.Porta := 'RAW:Nome da Impressora no Windows'; Mas então porque desenvolvemos essa nova forma de acesso ? A nova sintaxe "DLL:", tem algumas vantagens, em relação a sintaxe "RAW:" Não depende da instalação do Driver de Spool da Impressora.. (note porém, que em alguns casos, o Driver de Spool não pode estar instalado, pois ele bloqueia o acesso a USB) Podemos Ler Informações da Impressora (o que não é possível no modo RAW) Entretanto, como foi dito antes, dependemos de DLL exclusiva do fabricante, para o acesso a Impressora pela USB... Quais são essas DLLs ? Para onde eu devo copiá-las ? Vejamos como foi descrito no ACBrSerial-change-Log.txt Creio que isso responde as duas perguntas, correto ? Você pode encontrar as DLLs no nosso SVN, na pasta: \ACBr\DLLs\PosPrinter, ou ainda pela Web: http://svn.code.sf.net/p/acbr/code/trunk2/DLLs/PosPrinter/ Você pode ainda baixar uma versão do Demo PosPrinterTeste, atualizada, compilado em Lazarus/FPC no link abaixo: Como funciona essa nova técnica ? Quem faz todo acesso as Portas suportadas pelo ACBr, é um subcomponente chamado ACBrDevice, e há um bom tempo, esse componente já possui uma possibilidade de Integração por Hooks O que é Hook ? https://pt.wikipedia.org/wiki/Hooking A ideia por trás dos Hooks, é instalar ganchos, em eventos, que nos permitam interceptar algumas ações e chamadas... Veja esse trecho de código FDevice.HookAtivar := PosPrinterHookAtivar; FDevice.HookDesativar := PosPrinterHookDesativar; FDevice.HookEnviaString := PosPrinterHookEnviaString; FDevice.HookLeString := PosPrinterHookLeString; Aqui instruímos o subcomponente ACBrDevice, a chamar nossos eventos, quando ele precisar "Ativar", "Desativar" uma porta e também quando ele for "EnviarString" e "LeString", de uma determinada porta... Então no interior do componente ACBrPosPrinter, implementamos os eventos indicados acima (PosPrinterHookAtivar, PosPrinterHookDesativar, etc) ... Com isso, o ACBrDevice executará um código nosso, ao invés do que ele normalmente executaria... Veja que dentro dos eventos de ativação e desativação usamos uma Classe de Hook (leia mais abaixo) procedure TACBrPosPrinter.PosPrinterHookAtivar(const APort: String; Params: String); begin if Assigned(FHook) then FHook.Open(APort); end; procedure TACBrPosPrinter.PosPrinterHookDesativar(const APort: String); begin if Assigned(FHook) then FHook.Close; end; FHook por sua vez, é uma variável interna ao ACBrPosPrinter, que contem uma Classe de Hook (TACBrPosPrinterHook), e implementa os comandos necessários, para transmitir essas ações, a DLL do fabricante... Veja o exemplo abaixo, como fica a implementação dos Hooks de Ativar e Desativar, da ELGIN... observe que chamamos métodos Externos, da DLL da Elgin, como: "PrtPortOpenW" e "PrtPortClose" procedure TElginUSBPrinter.Open(const APort: String); var errorNo: Integer; begin if Connected then Exit; inherited Open(APort); try errorNo := xPrtPortOpenW(FPrinter, WideString(fpPort)); // <------- A Q U I ------- if (errorNo <> E_SUCCESS) then raise Exception.CreateFmt(CERROR_OPEN, [fpPort, fpPrinterName]); except fpConnected := False; fpPort := ''; raise; end; end; procedure TElginUSBPrinter.Close; var errorNo: Integer; begin if not Connected then Exit; errorNo := xPrtPortClose(FPrinter); // <------- A Q U I ------- if (errorNo <> E_SUCCESS) then raise Exception.CreateFmt(CERROR_CLOSE, [fpPort, fpPrinterName]); inherited Close; end; Com isso, conseguimos usar a DLL do Fabricante, para estabelecer um túnel entre o ACBrPosPrinter e o equipamento... Como posso implementar um Hook para um novo modelo ? Os Primeiros passos, são verificar: Se o Fabricante disponibiliza uma DLL para acesso direto ao equipamento (sem depender do Spooler) Se há nessa DLL, um método que nos permita Escrever e Ler Dados da Porta USB Ou seja, não precisamos de métodos de alto nível, que façam a formatação de caracteres, ou manipulem a impressora... Pois continua sendo o ACBrPosPrinter, quem montará toda a Sintaxe de comandos a serem enviados para a Impressora, usando a linguagem Esc/Pos... e igualmente, será o ACBrPosPrinter que fará a leitura de respostas, quando for necessário... Na DLL da Elgin, temos um ótimo exemplo de método para isso... function PrtDirectIO(printer:Pointer; // Ponteiro com a Impressora instanciada por PrtPrinterCreatorW writeData:PByte; // Buffer com dados a serem enviados writeNum:integer; // Número de Bytes em "writeData" (tamanho do Buffer) readData:PByte; // Ponteiro com o Retorno a ser Lido (Buffer de saída) readNum:integer; // Numero de bytes disponíveis para escrita em "readData" (tamanho disponível no Buffer de Saída) preadedNum:PInteger // Número de bytes realmente escritos em "readData" ): Integer; cdecl; // Status de retorno E_SUCCESS = 0; Tendo isso em mãos, podemos criar uma cópia de uma das Units já existentes, como por exemplo a Unit ACBrEscPosHookElginDLL.pas, e implementar o suporte usando a nova DLL, e efetuar os ajustes referente a nova Marca
    1 ponto
  6. Bom dia, detectei um detalhe na impressão do evento (Fortes - TfrlDANFeEventoRLRetrato), dependendo do tamanho da justificativa, ela é cortada pelo fato do componente ser do tipo TRLLabel. Alterei o fonte, apenas no Lazarus (.pas e .lfm), substituindo o componente de rllJustificativa: TRLLabel para rlmJustificativa: TRLMemo Segue abaixo imagens do antes e depois... Segue em anexo os fontes alterados para análise. OBS: acho que esse ajuste pode resolver outro problema que vi no fonte, quando o tipo do evento é "cancelamento por substituição", ele insere uma quebra de linha para exibir abaixo o documento referenciado, porém imagino que esta segunda linha não esteja aparecendo. (ainda não implementamos este evento...) Att Ricardo ACBrNFeDANFeEventoRLRetrato.lfm ACBrNFeDANFeEventoRLRetrato.pas
    1 ponto
  7. Boa Tarde, Segue anexo fontes alterados para possibilitar o uso do método "ACBrNFSe.TesteEnviar" no provedor "proSP" assim como já era permitido para "proNotaBlu". ACBrNFSeConfiguracoes.pas SP.ini
    1 ponto
  8. Fiz o teste mudando o tipo de emissão para 9 e funcionou, não tive problemas em gerar em contingência e nem com o qrcode. Obrigado Fiz o teste mudando o tipo de emissão para 9 e funcionou, não tive problemas em gerar em contingência e nem com o qrcode. Obrigado
    1 ponto
  9. Sempre que está gerando vc passa o cnf, ele pode está mudando sempre que gera, pois ao não passar ele gera randomicamente.
    1 ponto
  10. Boa tarde, vamos verificar assim que possível. Obrigado.
    1 ponto
  11. Essa alteração vai causar problemas pras cooperativas que pedem que a posição 72 seja informada em branco. No seu caso bastava preencher a propriedade DigitoVerificadorAgenciaConta com 0 ao gerar a remessa.
    1 ponto
  12. Resposta curta: NÃO. Resposta Longa: Você pode saber tudo sobre o ACBr nesse link: https://www.projetoacbr.com.br/perguntas-frequentes/
    1 ponto
  13. Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico.
    1 ponto
  14. Bom dia. Creio que seria interessante iniciar um novo tópico para falar especificamente da NFCe, seria interessante também citar qual foi o erro neste caso. Att.
    1 ponto
  15. Bom dia. Neste caso é um pouco mais complicado, caso tenha interesse em tentar adicionar, o especialista em NFSe @Italo Jurisato Junior certamente poderá apoia-lo. Att.
    1 ponto
  16. Bom dia. Obrigado pela resposta Daniel. Hoje consegui resolver. Eu estava testando pelo emulador do android studio e esse era o problema, a aplicação so funciona na maquina da GPOS 700, que precisa de um apk assinado com uma chave envida pelo fornecedor. Foi um erro bem básico, mas espero q possa ajudar outros com duvida semelhante. Obrigado pela resposta, vou entrar em contato com o fórum caso tenha novos problemas. Obrigado a todos.
    1 ponto
  17. bom dia pessoal! caro daniel, configurei para 28 segundos e esta comunicando normalmente, com dois terminais um antigo que caia e um novo. pelos teste aqui ta ok. a tarde vou testar em campo Vlw. Escutando porta: 6550 22/08/2019 09:58:44: Conectou IP: 192.168.25.42 22/08/2019 09:59:14: Terminal: 192.168.25.42 - On Line 22/08/2019 09:59:43: Terminal: 192.168.25.42 - On Line 22/08/2019 10:00:12: Terminal: 192.168.25.42 - On Line 22/08/2019 10:00:41: Terminal: 192.168.25.42 - On Line 22/08/2019 10:01:10: Terminal: 192.168.25.42 - On Line 22/08/2019 10:01:39: Terminal: 192.168.25.42 - On Line 22/08/2019 10:02:08: Terminal: 192.168.25.42 - On Line 22/08/2019 10:02:37: Terminal: 192.168.25.42 - On Line 22/08/2019 10:03:06: Terminal: 192.168.25.42 - On Line 22/08/2019 10:03:35: Terminal: 192.168.25.42 - On Line 22/08/2019 10:03:44: Conectou IP: 192.168.25.55 22/08/2019 10:04:13: Terminal: 192.168.25.55 - On Line 22/08/2019 10:04:28: Terminal: 192.168.25.42 - On Line 22/08/2019 10:04:42: Terminal: 192.168.25.55 - On Line 22/08/2019 10:04:57: Terminal: 192.168.25.42 - On Line 22/08/2019 10:05:11: Terminal: 192.168.25.55 - On Line 22/08/2019 10:05:26: Terminal: 192.168.25.42 - On Line 22/08/2019 10:05:40: Terminal: 192.168.25.55 - On Line 22/08/2019 10:05:55: Terminal: 192.168.25.42 - On Line 22/08/2019 10:06:09: Terminal: 192.168.25.55 - On Line 22/08/2019 10:06:24: Terminal: 192.168.25.42 - On Line 22/08/2019 10:06:38: Terminal: 192.168.25.55 - On Line 22/08/2019 10:06:53: Terminal: 192.168.25.42 - On Line 22/08/2019 10:07:07: Terminal: 192.168.25.55 - On Line 22/08/2019 10:07:22: Terminal: 192.168.25.42 - On Line 22/08/2019 10:07:36: Terminal: 192.168.25.55 - On Line 22/08/2019 10:07:51: Terminal: 192.168.25.42 - On Line 22/08/2019 10:08:05: Terminal: 192.168.25.55 - On Line
    1 ponto
  18. Temos o sistema instalado em cada micro, mas o atalho do sistema chama um "atualizador", que verifica se tem uma versão nova do sistema no servidor, se tiver, baixa o executável compactado, descompacta e depois abre o sistema; Se não tem atualização nova só abre o sistema.
    1 ponto
  19. Na verdade é uma String... mas você pode passar o INI com as quebras de linha... Seria equivalente a um TStringList.Text
    1 ponto
  20. 1 ponto
  21. Por favor veja esse tópico, e teste com as Units em anexo no tópico indicado
    1 ponto
  22. Obrigado pelo dica, funcionou perfeitamente meu amigo. Só que rra ser sincero eu não estava gostando da maneira que eu fiz essa rotina, tinha muito código e não estava elegante esse fechamento do formulário no FormShow do mesmo. Fiz uma mudança simples na rotina e acho que ficou bem melhor, agora o código está pequeno e eu não preciso mais fechar o form no evento FormShow do mesmo. Segue abaixo: procedure PDV1Click; begin if not(CaixaAberto) Then frm_abrircaixa.ShowModal; if CaixaAberto Then frm_pdv.ShowModal; end; Agora eu chamo o frm_abrircaixa antes de chamar o frm_pdv, se e só se o caixa estiver fechado. Caso o caixa já esteja aberto eu pulo essa etapa e chamo o frm_pdv direto.
    1 ponto
  23. Boa tarde a todos, Foi alterado e enviado para o repositório um novo arquivo ACBrNFeServicos.ini Conforme sugestão do Daniel no dia 02/09/2019 devemos alterar esse arquivo e salvar ele na mesma pasta que se encontra o EXE da sua aplicação nas maquinas dos seus clientes. Faça uma atualização de todos os fontes de todas as pastas e abra o arquivo ACBrNFeServicos.ini e veja como ele esta no que se refere a SEFAZ-PA. Ele tem que estar conforme abaixo: [NFe_PA_P] ; A partir do dia 02/09/2019 devemos comentar ou excluir a primeira linha abaixo, e descomentar a próxima linha; ; pois a SEFAZ-PA vai deixar de utilizar a SVAN - SEFAZ-Virtual do Ambiente Nacional e passará para a ; SVRS - SEFAZ-Virtual do Rio Grande do Sul. Usar=NFe_SVAN_P ;Usar=NFe_SVRS_P [NFe_PA_H] ; A partir do dia 02/09/2019 devemos comentar ou excluir a primeira linha abaixo, e descomentar a próxima linha; ; pois a SEFAZ-PA vai deixar de utilizar a SVAN - SEFAZ-Virtual do Ambiente Nacional e passará para a ; SVRS - SEFAZ-Virtual do Rio Grande do Sul. Usar=NFe_SVAN_H ;Usar=NFe_SVRS_H Como deverá ficar no dia 02/09/2019 para ser salvo na mesma pasta do EXE da sua aplicação: [NFe_PA_P] Usar=NFe_SVRS_P [NFe_PA_H] Usar=NFe_SVRS_H Observação: Para aqueles que não tem Clientes contribuintes no Pará não precisam se preocuparem com essas alterações. A partir do dia 02/09/2019 os fontes do repositório estarão com as mudanças e o ACBrMonitorPlus também. Lembrando que o procedimento de copiar o arquivo INI com a alteração para a pasta do EXE da sua aplicação se faz necessário caso não seja possível em tempo hábil disponibilizar uma nova versão EXE em seus clientes.
    1 ponto
  24. 1 ponto
  25. ppEscElgin foi alterado para ppEscVox, por causar confusão com alguns modelos da Elgin que não aceitam esse protocolo e usam ppEscPosEpson. Qual tópico? Se configurar a porta de impressão no modo USB é preciso ter a DLL de comunicação da impressora (Elgin ou Epson). Se tiver a porta serial virtual instalada basta informar a porta. Se tiver apenas a impressora instalada no Windows pode usar o modo RAW. Fez teste pelo demo do ACBrPosPrinter?
    1 ponto
  26. Ítalo. Boa tarde. Resolvido. Mais uma vez você tinha razão. O erro era do provedor. O Thema desativou o ambiente de homologação, a Prefeitura assumiu o ambiente e restaurou um backup de maio de 2013, imagina a bagunça que ficou. Agora temos que aguardar a boa vontade da Prefeitura para normalizar o serviço. Mais uma vez obrigado pelas suas preciosas informações.
    1 ponto
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...