Ir para conteúdo
  • Cadastre-se

Roberto.Godinho

Membros
  • Total de ítens

    192
  • Registro em

  • Última visita

Tudo que Roberto.Godinho postou

  1. Boa tarde, Efetuei alguns ajustes na DANFE com FortesReport: - Ajustado codificação dos captions no DFM que estava ficando incorreto dependendo da versão do delphi utilizada. - Adicionado calculo para a TAG ValorLiquidoNfse quando estiver zerado. Motivo: No provedor Betha quando retorna a NFSe gerada, a TAG é inexistente, desta forma ao carregar o XML para gerar a DANFE o respectivo campo estava imprimindo incorretamente. Estou anexando juntamente aos fontes alterados um XML retornado do ws, se alguem puder subir para o SVN ficaria grato. ACBrNFSe.rar
  2. Boa tarde, quem estiver com este problema poderia fazer o seguinte teste. Na unit ACBrNFeWebServices, linha 1811 tem a seguinte sentença: FRetornoWS := TiraAcentos(ParseText(StrStream.DataString, True)); Põe um breakpoint nela e roda, quando pegar o retorno salva os dados contidos em "StrStream.DataString", só dá um save to file e posta o arquivo aqui pra gente poder da uma analisada, pegando os dados ai não vai ter passado pelo parsetext ainda, lembro de já ter visto algo parecido mas não lembro onde foi.
  3. Ola lvr, Alterei a banda correspondente ás informações do Emitente de modo que só apareçam na primeira página. Não tenho certeza se eu estava com a ultima versão que você havia disponibilizado, se acaso não estiver anexe a ultima que eu altero pra ti. E desculpe a demora, estava sobrecarregado com a implementação da NFSe, queria terminar antes de entrar de férias. Abraço. DANFeNFCe.rar
  4. Q nada Italo, a gente que tem que agradecer pelo comprometimento seu. Obrigado.
  5. Boa tarde, Estou anexando os fontes alterados do arquivo "pnfsConsLoteRpsResposta.pas", adicionei algumas correções para o provedor Betha que estavam ficando com status normal quando no arquivo xml retornado estavam cancelados. Já havia feito as correções para outras consultas mas havia de certa forma esquecido esta. Bloco alterado. if Leitor.rExtrai(iNivel + 3, 'NfseCancelamento') <> '' then begin ListaNfse.FCompNfse[i].NFSe.NfseCancelamento.DataHora := Leitor.rCampo(tcDatHor, 'DataHora'); // provedor Betha sempre retorna a o grupo "NfseCancelamento" mesmo não estando cancelada, // o cancelamento deverá ser verificado na TAG especifica // Incluido por Roberto Godinho 21/11/2013 if FProvedor = proBetha then begin Leitor.rExtrai(4,'InfConfirmacaoCancelamento'); if StrToBool(Leitor.rCampo(tcStr, 'Sucesso')) then begin ListaNfse.CompNfse[i].NFSe.Status := srCancelado; ListaNfse.CompNfse[i].NFSe.NfseCancelamento.DataHora := Leitor.rCampo(tcDatHor, 'DataHora'); end; end else begin // Incluido por Mauro Gomes // se não encontrou o campo DataHora, deve procurar pelo DataHoraCancelamento if (ListaNfse.FCompNfse[i].NFSe.NfseCancelamento.DataHora = 0) then ListaNfse.FCompNfse[i].NFSe.NfseCancelamento.DataHora := Leitor.rCampo(tcDatHor, 'DataHoraCancelamento'); end; end; Agradeço se alguem puder subir ao SVN estas correções. Em anexo esta os fontes juntamento com o arquivo XML de retorno. pnfsConsLoteRpsResposta.rar
  6. Pois é, estamos apenas com um cliente cobaia utilizando, ele utiliza apenas pos, agora, este é um problema que terá que ser resolvido logo pois é necessário a confirmação da impressão para confirmar o TEF, mas ao mesmo tempo é necessário a confirmação do pagamento pra gerar a NFCe, nestes casos estou utilizando um contador para o "antigo" COO e informando na transação, confirmo o pagamento e emito a NF-e, em casos de erro na emissão deixo a cargo do emissor o cancelamento da transação TEF. Mas como disse, ainda não tenho ninguém utilizando esta forma, então não tenho como dizer se esta é a forma correta ou não de fazer o procedimento. Pelo jeito vamos ter que esperar mais um pouco até que as mudanças se estabilizem pra gente acerta o que estiver errado e tocar o barco pra frente.
  7. Boa tarde, voltando ao assunto anterior, só por comentar mesmo, como o italo falou, nenhum estabelecimento permite o troco quando é forma de pagamento a prazo, quando cartão o valor não deve ser superior ao da venda. Alguns estabelecimentos/sistemas até permitem saque com o cartão, mas é feito um tratamento separado para estas opções. No caso dos tratamentos de troco no sistema em que trabalho, cada forma de pagamento é configurável se permite ou não troco, ficando a cargo do adm do sistema decidir, nestes casos, quando o pagamento é superior eu simplesmente desconto o valor do troco da forma de pgto que permitir. Nos documentos fiscais informa-se só o valor liquido. Então, eu tenho nos meus registros de pagamentos o seguinte: ID_FILIAL ID_PGTO_COMPROVANTES ID_DB REFERENCIA TIPO_FORMA VALOR_PAGO VLR_TROCO 3026 1 3026 55812 0 50.00 0.00 3026 2 3026 55814 4 50.00 4.20
  8. bom dia, nestes casos, as NFC-e geradas devem ser canceladas assim como acontece com qualquer documento fiscal, lembrando que a NFC-e tem um tempo limite bem curto pra cancelamento, uma vez que, por se tratar de venda a consumidor, a transição da mercadoria da-se logo após a emissão do mesmo.
  9. só depois de responder que eu lembrei. destro da pasta do ACBr você vai encontrar a pasta do capicom (..\ACBr\DLLs\Capicom\) e dentro desta pasta um arquivo executavel "instala.bat", executa ele como adm e ele fará o processo de registro automaticamente
  10. Bom dia, você pode gerar a NFC-e normalmente, trocar as informações referente a contigência, ou seja, tpEmis (9-impressão offline, ...), dhCont (data hora da entrada em contingência) e xMotivo (motivo da entrada em contingencia). segundo passo, efetuar a validação, assinatura e salvar o arquivo XML: acbr.NotasFiscais.Assinar; acbr.NotasFiscais.Validar; apartir daí você terá toda a informação necessária pra gerar o DANFE menos o protocolo, este, só pode ser obtido com a autorização da NFC-e. terceiro passo: imprimir a DANFE em contingencia. quarto passo (Este só depois de regularizado a situação da emissão): simplesmente carregar o xml e efetua o envio. EDIT: nos casos de impressão em contigência, o local destinado a impressão do protocolo deve ser suprimido.
  11. Bom dia, verifique se a Capicom esta registrada corretamente, este erro é comum quando isto acontece.
  12. no XML não é informado o valor do troco, o único local onde é informado é no danfe, logo você deverá gerenciar esta informação e só informar na impressão do danfe.
  13. Bom dia, No XML estes valores são informados são informados na TAG tPag, de uma estudadinha na nota técnica que tem tudo explicadinho lá. <pag> <tPag>01</tPag> <vPag>10.00</vPag> </pag> Você pode encontrar mais informações sobre este assunto no tópico
  14. Boa tarde, Estou testando a emissão de NFS-e para o servidor betha de São Mateus do Sul PR e me deparei com alguns erros no retorno da Consulta por RPS e consulta por Periodo, erros este ocorrendo devido ao fato do WS sempre retornar o grupo NfseCancelamento e da maneira como estava sendo tratado o Status da NFSe estava ficando sempre como cancelada autorizada. Efetuei as correções e estou anexando, se alguem puder subir ao SVN eu ficaria muito grato. att Roberto Godinho ACBrNFSe.rar
  15. segue ai, no entanto eu apenas testei o do MT em homologação. function TfrmReport.GetSiteConsulta(UF: string; Ambiente: TpcnTipoAmbiente ): string; const site_uf_prod : array[0..6] of string = ('http://www.sefaznet.ac.gov.br/nfe/NFe.jsp?opc=3', 'http://sistemas.sefaz.am.gov.br/nfceweb/consultarNFCe.jsp', 'http://www.nfce.sefaz.ma.gov.br/portal/consultarNFCe.jsp', 'http://www.sefaz.mt.gov.br/nfe/portal/consultanfce', 'http://www.nfe.rn.gov.br/portal/consultarNFCe.jsp', 'https://www.sefaz.rs.gov.br/NFCE/NFCE-COM.aspx', 'http://www.nfe.se.gov.br/portal/consultarNFCe.jsp'); site_uf_hom : array[0..6] of string = ('http://hml.sefaznet.ac.gov.br', 'http://homnfe.sefaz.am.gov.br/nfceweb/consultarNFCe.jsp', 'http://www.hom.nfce.sefaz.ma.gov.br/portal/consultarNFCe.jsp', 'http://homologacao.sefaz.mt.gov.br/nfce/consultanfce', 'http://www.hom.nfe.rn.gov.br/portal/consultarNFCe.jsp', 'https://www.sefaz.rs.gov.br/NFCE/NFCE-COM.aspx', 'http://www.hom.nfe.se.gov.br/portal/consultarNFCe.jsp'); begin case Ambiente of taProducao: begin if UF = 'AC' then Result := site_uf_prod[0] else if UF = 'AM' then Result := site_uf_prod[1] else if UF = 'MA' then Result := site_uf_prod[2] else if UF = 'MT' then Result := site_uf_prod[3] else if UF = 'RN' then Result := site_uf_prod[4] else if UF = 'RS' then Result := site_uf_prod[5] else if UF = 'SE' then Result := site_uf_prod[6] end; taHomologacao: begin if UF = 'AC' then Result := site_uf_hom[0] else if UF = 'AM' then Result := site_uf_hom[1] else if UF = 'MA' then Result := site_uf_hom[2] else if UF = 'MT' then Result := site_uf_hom[3] else if UF = 'RN' then Result := site_uf_hom[4] else if UF = 'RS' then Result := site_uf_hom[5] else if UF = 'SE' then Result := site_uf_hom[6] end; end; end;
  16. pra mim não falta pq as propriedades FToken e FIdToken são informadas antes de entrar nesta função, só são alteradas se o ambiente for Homologação, neste caso eu gero o IdToken e Token para homologação.
  17. Boa tarde Marcio, Me diz uma coisa, você está utilizando um token fornecido pela receita? quando em produção o token deverá ser válido, diferente de homologação que você mesmo montar.
  18. Ola Rezende, O ACBrMonitor esta funcionando para emissão de NFC-e, apenas o DANFE que não temos nada oficial ainda, portanto, você terá que efetuar a impressão por conta própria, o que não é grande problema. A emissão, cancelamento, consulta, enfim, todos os processos da NFC-e podem ser feitos, inclusive eu creio já haver varios usuários utilizando pra esse fim.
  19. Para quem ainda esta com problemas pra gerar o qrCode vou postar aqui da maneira que esta funcionando, pelo menos para o MT: procedure TfrmDanfeECF.GerarQrCode; var s_aux, dh_emi, s_hash: string; begin dh_emi := GetUTC( CodigoParaUF(facbr.NotasFiscais.Items[0].NFe.Ide.cUF), StrToDateTime(FormatDateTime('dd/mm/yyyy',facbr.NotasFiscais.Items[0].NFe.Ide.dEmi)+' '+ FormatDateTime('hh:mm:ss', facbr.NotasFiscais.Items[0].NFe.Ide.dEmi))); dh_emi := StrToHex( FormatDateTime('yyyy-mm-dd',facbr.NotasFiscais.Items[0].NFe.Ide.dEmi)+'T'+ FormatDateTime('hh:mm:ss', facbr.NotasFiscais.Items[0].NFe.Ide.dEmi)+dh_emi ); if (FAcbr.NotasFiscais.Items[0].NFe.ide.tpAmb = taHomologacao) then begin FIdToken := '000001'; end; if (FAcbr.NotasFiscais.Items[0].NFe.ide.tpAmb = taHomologacao) then begin FToken := Copy(FAcbr.NotasFiscais.Items[0].NFe.Emit.CNPJCPF, 1, 8)+IntToStr(YearOf(Now))+'0001'; end; s_aux :='chNFe=<chaveacesso>'+ '&nVersao=100'+ '&tpAmb=<ambiente>'+ IIf(facbr.NotasFiscais.Items[0].NFe.Dest.CNPJCPF<>'', '&cDest=<cnpj_dest>', '')+ '&dhEmi=<data_hora>'+ '&vNF=<valor>'+ '&vICMS=<valor_icms>'+ '&digVal=<digito_val>'+ '&cIdToken=<id_token><token>'; s_aux := StringReplace(s_aux, '<chaveacesso>', SomenteNumeros(facbr.NotasFiscais.Items[0].NFe.infNFe.ID), []); s_aux := StringReplace(s_aux, '<ambiente>', TpAmbToStr(facbr.NotasFiscais.Items[0].NFe.Ide.tpAmb), []); s_aux := StringReplace(s_aux, '<data_hora>', dh_emi, []); s_aux := StringReplace(s_aux, '<valor>', StringReplace(FormatFloat('##,##0.00',facbr.NotasFiscais.Items[0].NFe.Total.ICMSTot.vNF),',','.',[]),[] ); s_aux := StringReplace(s_aux, '<valor_icms>', StringReplace(FormatFloat('##,##0.00',facbr.NotasFiscais.Items[0].NFe.Total.ICMSTot.vICMS),',','.',[]),[] ); s_aux := StringReplace(s_aux, '<digito_val>', StrToHex(facbr.NotasFiscais.Items[0].NFe.signature.DigestValue), []); s_aux := StringReplace(s_aux, '<id_token>', FIdToken, []); s_aux := StringReplace(s_aux, '<cnpj_dest>', facbr.NotasFiscais.Items[0].NFe.Dest.CNPJCPF, []); with TACBrEAD.Create(nil) do try s_hash := StringReplace(s_aux,'<token>',FToken,[]); s_hash := CalcularHash(s_hash, dgstSHA1); finally Free; end; s_aux := StringReplace(s_aux,'<token>', '',[]) + '&cHashQRCode='+s_hash; s_aux := GetSiteConsulta( CodigoParaUF(FAcbr.NotasFiscais.Items[0].NFe.Ide.cUF), FAcbr.NotasFiscais.Items[0].NFe.Ide.tpAmb ) +'?'+ s_aux; MontarQrCode(s_aux); end; Notem que, quando for gerar o hash, deve ser feito com IdToken e Com o Token, para homologação deve ser IdToken = '000001', e Token, (primeiros 8 digitos do CNPJ)+Ano+0001. Quando for gerar o qrCode deve remover o "token" e deixar apenas o IdToken senão não vai fechar e vai retornar o erro 100. pra quem tiver interesse segue uma string do qr_code funcionando. http://homologacao.sefaz.mt.gov.br/nfce/consultanfce?chNFe=51131115319954000139650050000001031175076630&nVersao=100&tpAmb=2&dhEmi=323031332D31312D30375431363A33343A35322D30333A3030&vNF=111.01&vICMS=19.98&digVal=486256502F3478596278784230314470377466474E4151356949553D&cIdToken=000001&cHashQRCode=56A39A17537CAB21C1632887C332BE95CD1BD51F Abaixo a string sob a qual foi gerado o hash STRING: chNFe=51131115319954000139650050000001031175076630&nVersao=100&tpAmb=2&dhEmi=323031332D31312D30375431363A33343A35322D30333A3030&vNF=111.01&vICMS=19.98&digVal=486256502F3478596278784230314470377466474E4151356949553D&cIdToken=0000011531995420130001 HASH: 56A39A17537CAB21C1632887C332BE95CD1BD51F
  20. bom dia, A diferença será nas configurações informar modeloDF = moNFCe, o ACBr trata internamente as url's que será enviadas;
  21. Bom dia, Pessoal, não tenho um exemplo disponível aqui agora, mais tarde se sobrar um tempinho eu posto algum exemplo. Mas é simples, quando vocês efetuarem o envio dessa nota vocês devem armazenar a situação dela para mais tarde poder tratar esses erros, enfim, antes de efetuar o reenvio você efetuar uma consulta da nfe. Ele vai retornar 3 status que denotam duplicidade. Segue: 204 - Duplicidade de NF-e [nRec:999999999999999] neste caso a NFe esta com a mesma chave, então basta você utilizar a chave que você tem e o nRec retornado e efetuar um BuscaProc. 562 - Rejeição: Código Numérico informado na Chave de Acesso difere do Código Numérico da NF-e [chNFe:99999999999999999999999999999999999999999999] Neste caso, você esta com duas chaves de acesso diferentes. EX: Você gerou uma NF-e e tentou enviar e por algum motivo não retornou processado. Após isto você tentou reenviar esta mesma nota e alterou o cNF *** e a chave de acesso ficou diferente. Neste caso vc esta cometendo erro já no reenvio, ou seja, a nota não deve ter seu cNF alterado caso ja tenha sido enviado ao ws anteriormente, ou seja, no reenvio voce deve pegar este mesmo cNF anterior e informar no XML pra evitar diferença na chNFe. Mas se aconteceu, você pega esta chave retornada na msg e ela será a chave correta, faz uma consulta da situação da NF-e utilizando ela. 539 Duplicidade de NF-e com diferença na Chave de Acesso [chNFe: 99999999999999999999999999999999999999999999][nRec:999999999999999] Mesma situação do retorno acima e o mesmo tratamento se aplica com um diferencial que o recibo do primeiro envio também é retornado, ou seja, você pode utiliza-los para efetuar uma BuscaProc e autorizar sua NF-e. Estas são as dicas de como tratar e como prevenir os erros, no entanto, a maneira como você vai implementar/tratar estas situações varia de sistema para sistema. Como o Kiko mencionou acima, deem uma buscada que tem muita informação disponível, basta estuda-las e aplicar os métodos mencionados para adequar seus sistema. *** Sempre que for efetuar o reenvio procurem carregar o XML gerado e só alterar as informações que precisarem ser alteradas. Se precisarem gerar o XML novamente com base nas informações do banco de dados, uma coisa, pelo menos, vocês devem ter, e esta é a chave de acesso ou então gravar o código numerico da chave (cNF), pois se vocês gerarem novamente a chave e utilizar o mesmo cNF não haverá diferença da chave de acesso anterior com a do xml gerado agora.
  22. 1 - eu utilizo o google por enquanto, mas é por que estou com muita coisa em andamento (entenda atrasado) e não estou tendo tempo pra testar os componetes sugeridos no outro post. é claro que terei que rever isto daki alguns dias pois o google é uma solução temporaria. 2 - 3 - voce pode salvar esta imagem e enviar o caminho dela pro componente. TfrxPictureView(frxReport1.FindObject('Picture1')).Picture.SaveToFile(xxx.bmp); 4 - o digest value esta na assinatura da tua nota. pelo acbr faz o seguinte: acbr.NotasFiscais.Items[0].NFe.signature.DigestValue 5 - dh_emi := StrToHex( FormatDateTime('yyyy-mm-dd',facbr.NotasFiscais.Items[0].NFe.Ide.dEmi)+'T'+ FormatDateTime('hh:mm:ss', facbr.NotasFiscais.Items[0].NFe.Ide.dEmi)+UTC ); Nota: UTC voce deve verificar qual é de acordo com o fuso horario e concatenar à string dh_emi. ex: '-3:00', '4:00' EDIT: adicione ao uses a unit pcnAuxiliar GetUTC('MT', StrToDateTime(FormatDateTime('dd/mm/yyyy hh:mm:ss',facbr.NotasFiscais.Items[0].NFe.Ide.dEmi)) 6 - function StrToHex(const S: String): String; const HexDigits: array[0..15] of Char = '0123456789ABCDEF'; var I: Integer; P1: PChar; P2: PChar; B: Byte; begin SetLength(Result, Length(S) * 2); P1 := @S[1]; P2 := @Result[1]; for I := 1 to Length(S) do begin B := Byte(P1^); P2^ := HexDigits[B shr 4]; Inc(P2); P2^ := HexDigits[B and $F]; Inc(P1); Inc(P2); end; end; 7 - adicione ACBrEAD ao uses with TACBrEAD.Create(nil) do try s_hash := CalcularHash(s_hash, dgstSHA1); finally Free; end; espero que tenha ajudado. PS: estas informações ja estão contidas no topico official sobre o assunto, você por estar acompanhando por lá.
  23. Boa tarde, É o seguinte zumbi, este erro e comum em clientes com internet muito ruim, eu mesmo ja passei por isso. Há varias maneiras de vc identificar e corrigir a situação: - se ocorreu erro 105 (mais comum por lentidão no ws). você só tem que armazenar o recibo e então consultar a situação da NFe mais tarde. - se por algum motivo não receber o retorno, voce pode consultar a situação da nota quando estiver efetuando o reenvio. - quando você efetuar o envio da e retornar duplicidade, dois tipos de retorno você poderá receber. 1 - Duplicidade de NF-e: quando foi efetuado o envio da NF-e mas esta com a mesma chave. 1 - Duplicidade de NF-e com chave diferente: neste caso, houve envio da nf-e duas vezes mas gerou o cNF diferente para cada uma, neste caso, na mesma msg de resposta você receberá a chave de acesso numero do recibo que foi utilizado na primeira emissão. Você só tem que pegar esse recibo e chave, atualizar seus arquivos com eles e efetuar o BuscaProc utilizando estas informações. Ou seja, seu primeiro envio esta correto, o segundo envio esta incorreto e vai ser ignorado e a primeira nota vai estar autorizada. Basta você analisar a situação e preparar teu aplicativo pra se comportar de acordo com a situação.
×
×
  • 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.