Ir para conteúdo
  • Cadastre-se

Diego A. Folieni

Membros
  • Total de ítens

    40
  • Registro em

  • Última visita

Posts postados por Diego A. Folieni

  1. 29 minutos atrás, Italo Giurizzato Junior disse:

    Boa tarde Diego,

    Favor atualizar os fontes, reinstale o ACBr e faça novos testes.

    Note que foi realizado um Refactoring no componente.

     

    Timing ruim da minha parte kkkkkk.
    Atualizei o ACBr nesta quarta-feira(08/06) antes de fazer as minhas alterações. Se eu tivesse esperado um pouco mais kkkk.
    OK @Italo Giurizzato Junior eu farei como pediu.
    Muito obrigado!

    • Curtir 2
  2. 2 horas atrás, Diego A. Folieni disse:

    Prezados, bom dia.
    Utilizando o validador de arquivos do site do Bradesco para o serviço de Pagamento a Fornecedores disponível neste link https://banco.bradesco/html/pessoajuridica/solucoes-integradas/outros/layout-de-arquivo.shtm
    Realizei as seguintes alterações em Units do ACBrPagFor.

    • ACBrPagForGravarTXT.pas
      • Alterei a procedure GeraRegistro1 para que quando o banco seja o Bradesco e o lote correspondente for de segmentos O preencha o Layout do Lote como 012.
      • Modifiquei a procedure GeraRegistro1 para que quando o banco seja o Bradesco e o lote correspondente for de segmentos O preencha o indicativo de forma de pagamento (P014 no manual) como 01.
      • Modifiquei o case da procedure GeraSegmentoO para que quando o banco for Bradesco gere o Segmento conforme é para o Santander, Sicredi e Safra, colocando 20 posições para o Nosso Número(conforme é no manual) ao invés de 19.
    • ACBrPagForLerTXT.pas
      • Adicionei um no Case da procedure LerSegmentoO uma opção específica para o Bradesco.
    • Linha 14 - Trailer de Arquivo. Caracteres, espaços ou mais de uma linha após Trailer.ACBrPagForConversao.pas
      • Alterei na procedure BancoToDesc para que o resultado quando Bradesco seja BANCO BRADESCO S.A;
      • Adicionei uma procedure DescricaoRetornoBancoBradesco.

    As coloco a disposição da comunidade para validação e possível inclusão.

    ACBrPagForConversao.pas 103 kB · 0 downloads ACBrPagForGravarTxt.pas 127 kB · 0 downloads ACBrPagForLerTxt.pas 97 kB · 0 downloads

    Adiciono também a ACBrPagForArquivo onde setei para false a property TrailingLineBreak da TStringList ArquivoGerado na function Gravar da classe TRegistro para resolver o erro.
    Linha 14 - Trailer de Arquivo. Caracteres, espaços ou mais de uma linha após Trailer.  apontado pelo validador do Bradesco.

    ACBrPagForArquivo.pas

  3. Prezados, bom dia.
    Utilizando o validador de arquivos do site do Bradesco para o serviço de Pagamento a Fornecedores disponível neste link https://banco.bradesco/html/pessoajuridica/solucoes-integradas/outros/layout-de-arquivo.shtm
    Realizei as seguintes alterações em Units do ACBrPagFor.

    • ACBrPagForGravarTXT.pas
      • Alterei a procedure GeraRegistro1 para que quando o banco seja o Bradesco e o lote correspondente for de segmentos O preencha o Layout do Lote como 012.
      • Modifiquei a procedure GeraRegistro1 para que quando o banco seja o Bradesco e o lote correspondente for de segmentos O preencha o indicativo de forma de pagamento (P014 no manual) como 01.
      • Modifiquei o case da procedure GeraSegmentoO para que quando o banco for Bradesco gere o Segmento conforme é para o Santander, Sicredi e Safra, colocando 20 posições para o Nosso Número(conforme é no manual) ao invés de 19.
    • ACBrPagForLerTXT.pas
      • Adicionei um no Case da procedure LerSegmentoO uma opção específica para o Bradesco.
    • ACBrPagForConversao.pas
      • Alterei na procedure BancoToDesc para que o resultado quando Bradesco seja BANCO BRADESCO S.A;
      • Adicionei uma procedure DescricaoRetornoBancoBradesco.

    As coloco a disposição da comunidade para validação e possível inclusão.

    ACBrPagForConversao.pas ACBrPagForGravarTxt.pas ACBrPagForLerTxt.pas

  4. 22 horas atrás, Juliana Tamizou disse:

    Boa tarde,

    Possível correção enviada ao svn, favor testar.

    At.

    O problema de não gerar o Trailer de Lote quando Segmento O foi resolvido.
    O validador (https://banco.bradesco/html/pessoajuridica/solucoes-integradas/outros/layout-de-arquivo.shtm)ainda apontou alguns(poucos e dos quais alguns nem fazer sentido ao meu ver) problemas, mas isso acredito que seja assunto para outro tópico.
    Muito obrigado, pode fechar esse aqui, por favor.

    • Curtir 1
  5. Boa tarde!

    Estou adicionando em nosso sistema opção para que usando o ACBrPagFor gere arquivos com registros para o serviço de Pagamento de Tributos com Código de Barras.
    Mas me deparei com um problema!
    Para o banco do Bradesco a procedure GeraRegistro5 da Unit ACBrPagForGravarTxt tem uma condição quando o Banco é Bradesco para que só gere o Trailer de Lote se a forma de lançamento do Header do Lote for algumas específicas.

    pagBradesco:
    begin
      wregistro := wregistro + FormatFloat('000000', FQtdeRegistrosLote);
      if (FPagFor.Lote.Items[I].Registro1.Servico.FormaLancamento in [flLiquidacaoTitulosProprioBanco, flLiquidacaoTitulosOutrosBancos,
                                                                      flDocTed, flPIXTransferencia, flPIXQRCode,flCreditoContaCorrente])then
      begin
        wregistro := wregistro + FormatFloat('000000000000000000', FPagFor.Lote.Items[I].Registro5.Valor * 100);
        wregistro := wregistro + FormatFloat('000000000000000000', FPagFor.Lote.Items[I].Registro5.QtdeMoeda * 100000); // 5 casas decimais
        wregistro := wregistro + '000000';
        wregistro := wregistro + Space(165);
        wregistro := wregistro + Space(10);
      end;
    end;

    A forma de lancamento para o Pagamento de Tributos com Código de Barras nos manuais que estou usando é 11, que para o ACBr traduz como flPagamentoContas. Logo a condição não é atendida, o Trailer do Lote não é gerado por completo e da erro na geração do arquivo.
    Existe alguma razão para ter essa condição delimitando quais os serviços? O Segmento correspondente para esse serviço é o Segmento O e o mesmo consta no manual.

    Não consigo anexar os manuais em PDF pois ambos excedem 2MB, mas os consegui nos seguintes links
    * Manual Bradesco  https://banco.bradesco/assets/pessoajuridica/pdf/jun-19-layout-multipag.pdf
    * Manual Febraban https://cmsarquivos.febraban.org.br/Arquivos/documentos/PDF/Layout padrao CNAB240 V 10 09 - 14_10_21.pdf

  6. Bom dia a todos.
    Precisei utilizar a classe TDeclaracaoImportacao(e derivados) para importar uma DI.
    Tenho em mãos o XML da DI e o Impresso do Extrato da DI correspondente.

    Na impressão as informações relacionadas a carga estão conforme o print.

    image.thumb.png.cfeff9ad51c7ab8b9ca5fff263474c96.png

    Quanto importo atualmente os resultados ficam assim:

    cargaPesoBruto|Valor Lido (FloatToStr): 11705300
    cargaPesoLiquido|Valor Lido (FloatToStr): 9876300
    quantidadeVolumes|Valor Lido (FloattoStr): 36,58
    cargaPesoBruto|Valor Lido FormatFloat(#,###,##0.00000): 11.705.300,00000
    cargaPesoLiquido|Valor Lido FormatFloat(#,###,##0.00000): 9.876.300,00000
    quantidadeVolumes|Valor Lido FormatFloat(###0): 37

    Fiz algumas pequenas alterações para que eles fiquem assim depois de importar:

    cargaPesoBruto|Valor Lido (FloatToStr): 11705,3
    cargaPesoLiquido|Valor Lido (FloatToStr): 9876,3
    quantidadeVolumes|Valor Lido (FloattoStr): 3658
    cargaPesoBruto|Valor Lido FormatFloat(#,###,##0.00000): 11.705,30000
    cargaPesoLiquido|Valor Lido FormatFloat(#,###,##0.00000): 9.876,30000
    quantidadeVolumes|Valor Lido FormatFloat(###0): 3658

    pcnDIR.pas

    • Curtir 1
  7. Bom dia a todos.

    Precisei fazer algumas poucas alterações no ACBrPagFor para o arquivo que é gerado para o Bradesco(Foi muito pouca coisa mesmo).

    Utilizando este Link aqui para validar o arquivo (https://banco.bradesco/html/pessoajuridica/solucoes-integradas/outros/layout-de-arquivo.shtm) me foram apontados alguns erros.

    O primeiro deles é que o nome do Banco deveria ser me maíusculo e ser BANCO BRADESCO S.A. Então alterei na BancoToDesc da ACbrPagForConversao.pas;

    O outro informava que o dígito verificador da conta corrente era inválido. Utilizei este site(https://www.4devs.com.br/validador_conta_bancaria) para validar e o mesmo apontou que a conta era válida. Debugando vi que nas funções GeraRegistro0 e GeraRegistro1 a parte de informações da conta corrente estava caindo no else do case e por isso estava colocando a informação do Tipo de Conta, informação essa que não consta no Layout do Bradesco.(https://banco.bradesco/assets/pessoajuridica/pdf/jun-19-layout-multipag.pdf). Então adicionei uma opção para o Bradesco no case de ambos.
    Por fim estava apontando que tinha uma linha a mais depois do fim do arquivo. Alterei a procedure Gravar da classe TRegistro na ACBrPagForArquivo .pas

    Em anexo as Units.
     

    ACBrPagForArquivo.pas ACBrPagForConversao.pas ACBrPagForGravarTxt.pas

    • Curtir 1
    • Obrigado 1
  8. 19 horas atrás, Italo Giurizzato Junior disse:

    Boa tarde Diego,

    Favor atualizar os fontes e faça novos testes.

    Maravilha, muito obrigado!
    Precisei fazer também uma pequena alteração na ACBrNFSeXProviderABRASFv2.pas pois ao fazer a substituição, mesmo que efetuada com sucesso não estava achando a Tag NfseSubstituidora que vinha na resposta.
    Vendo o código da TratarRetornoSubstituiNFSe vi que para a Tag NfseSubstituida era procurada nos elementos filhos de RetSubstituicao, enquanto que a NFSeSubstituidora era procura nos elementos de um nível acima.

    Grato, Diego F.

    • Curtir 1
  9. 8 minutos atrás, Italo Giurizzato Junior disse:

    Boa tarde Diego,

    Favor atualizar os fontes e faça novos testes.

    Note que agora temos uma nova pasta com os schemas dos provedores: ...\Exemplos\ACBrDFe\Schemas\NFSe

    Dentro da pasta NFSe temos uma pasta para cada Provedor.

    O componente tem agora uma nova propriedade de configuração: Configuracoes.Geral.MontarPathSchema := True/False

    Se o valor dela for True e o PathSchemas apontar para a pasta: ...\Exemplos\ACBrDFe\Schemas\NFSe o componente vai encontrar os schemas utilizado pelo provedor de forma automática.

    Outra correção feita no componente é que se o provedor não tiver uma URL de homologação definida vai ser apresentada uma mensagem de erro e o envio vai ser abortado.

    Entendido, muito obrigado!

    • Curtir 1
  10. 22 minutos atrás, Italo Giurizzato Junior disse:

    Boa tarde a todos,

    Favor atualizar os fontes e faça novos testes.

    Note que agora temos uma nova pasta com os schemas dos provedores: ...\Exemplos\ACBrDFe\Schemas\NFSe

    Dentro da pasta NFSe temos uma pasta para cada Provedor.

    O componente tem agora uma nova propriedade de configuração: Configuracoes.Geral.MontarPathSchema := True/False

    Se o valor dela for True e o PathSchemas apontar para a pasta: ...\Exemplos\ACBrDFe\Schemas\NFSe o componente vai encontrar os schemas utilizado pelo provedor de forma automática.

    Outra correção feita no componente é que se o provedor não tiver uma URL de homologação definida vai ser apresentada uma mensagem de erro e o envio vai ser abortado.

    Entendido @Italo Giurizzato Junior, muito obrigado.

    • Curtir 1
  11. Isso acontece porque o Nó não foi encontrado.
    Em outras procedures dessa mesma Unit você vai ver que existe uma validação antes

    if(not Assigned(ANode)) or (ANode = nil)then Exit;

    Relacionado

     

  12. Bom dia.
    Estou tendo problemas para emitir NFSe para Mineiros do Tiete.
    Debugando pelo programa exemplo cheguei neste trecho de código localizado na ACBrNFSeXWebServiceBase na function Executar

      try
        HttpClient.Execute;
    
        HttpClient.DataResp.Position := 0;
        FPRetorno := ReadStrFromStream(HttpClient.DataResp, HttpClient.DataResp.Size);
    
        // Alsuns provedores retorna uma string apenas com a mensagem de erro
        if Pos('Body', FPRetorno) = 0 then
          FPRetorno := GetSoapBody(FPRetorno);
    
        if Pos('ISO-8859-1', FPRetorno) > 0 then
        begin
          FPRetorno := RemoverDeclaracaoXML(FPRetorno);
          FPRetorno := TranslateString(FPRetorno, 0, 28591);
        end;
    
        if Pos('<?xml version="1.0" ?>', FPRetorno) > 0 then
          FPRetorno := RemoverDeclaracaoXML(FPRetorno);
    
        // Alguns provedores não retornam o XML em UTF-8
        FPRetorno := ConverteXMLtoUTF8(FPRetorno);
    
        // Verifica se o ResultCode é: 200 OK; 201 Created; 202 Accepted
        // https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
        if not (HttpClient.HTTPResultCode in [200..202]) then
        begin
          aRetorno := TACBrXmlDocument.Create;
          if FPRetorno <> '' then
          begin
            aRetorno.LoadFromXml(FPRetorno);
            try
              ChecarRetorno(aRetorno);
            finally
              aRetorno.Free;
            end;
          end
          else
            raise EACBrDFeException.Create('WebService retornou um XML vazio.');
        end;
      except
        on E:Exception do
        begin
          raise EACBrDFeException.CreateDef(Format(ACBrStr(cACBrDFeSSLEnviarException),
                                         [HttpClient.InternalErrorCode, HttpClient.HTTPResultCode, HttpClient.URL] )
                                         + sLineBreak + HttpClient.LastErrorDesc + sLineBreak + Result);
        end;
      end;
    finally
      HTTPResultCode := HttpClient.HTTPResultCode;
      InternalErrorCode := HttpClient.InternalErrorCode;
    end;

    Nele para a cidade de Mineiros do Tiete, depois da chamada do HttpClient.Execute a o HttpClient fica com os seguintes valores:
    **HttpClient.URL                        = http://54.207.200.34/nfsewsteste/services.svc;
    **HttpClient.HTTPResultCode  = 404;
    ** HttpClient.HeaderResp.Text = HTTP/1.1 404 Not Found Date: Wed, 22 Sep 2021 12:42:11 GMT Content-Length: 0 Server: Microsoft-IIS/10.0 X-Powered-By: ASP.NET;
    ** HttpClient.DataResp.Size     = 0;

    Acredito que isso quer dizer que a URL para qual estou fazendo o envio está incorreta.

    Testei então, pelo programa exemplo, as outras cidades que constam no ACBrNFSeXServicos.ini com o provedor GovBR e obtive os seguintes resultados:

    * Cidade de São Gabriel deu erro de Timeout de Requisição(12002 - TimeOut de Requisição) e não salvou soap de resposta. 
    ** HttpClient.URL = http://191.36.145.163/nfsewsteste/services.svc
    ** HttpClient.HTTPResultCode = 0 ;
    ** HttpClient.HeaderResp.Text = "";
    ** HttpClient.DataResp.Size     =  0 ;

    * Cidade de Bocaiuva do Sul
    ** HttpClient.URL = http://18.230.172.116/nfsewsteste/services.svc;
    ** HttpClient.HTTPResultCode = 404;
    ** HttpClient.HeaderResp.Text = HTTP/1.1 404 Not Found Date: Wed, 22 Sep 2021 12:38:54 GMT Content-Length: 0 Server: Microsoft-IIS/10.0 X-Powered-By: ASP.NET;
    ** HttpClient.DataResp.Size     =  0;

    Alguém emite NFS para essas cidades ? 
    Anexo também os arquivos gerados pelo programa exemplo para as cidades.
    GovBR - Mineiros Tiete.zip
    GovBR - Bocaiuva do Sul.zip

  13. 26 minutos atrás, Diego A. Folieni disse:

    Mas pelo que pude entender essa informação não é utilizada posteriormente no método que chamou.
    A procedure Execute é chamada dentro da Executar e a mesma retorna uma String contendo o XML de Retorno.
    E é esse XML de retorno que ele válida então esse erro acaba sendo ignorado.

    ** A procedure Execute é chamada dentro do método Executar através de HttpClient.Execute e o retorno da Executar é uma String contendo o XML de Retorno.

  14. 15 horas atrás, BigWings disse:

    Ao contrário, o try..except seria pra tratar a exceção, nesse caso o método não trata, se ocorrer uma exceção ela será devolvida ao método que chamou.

    Mas pelo que pude entender essa informação não é utilizada posteriormente no método que chamou.
    A procedure Execute é chamada dentro da Executar e a mesma retorna uma String contendo o XML de Retorno.
    E é esse XML de retorno que ele válida então esse erro acaba sendo ignorado.

  15. Estou recebendo um retorno em branco/vazio ao tentar emitir NFSe para a cidade de Mineiros do Tiete usando o programa exemplo.
    Enquanto aguardava retorno do Provedor a prefeitura para que a mesma me passase continuei tentando no programa exemplo, na esperança de ser alguma configuração que passei errado, ou algo do gênero, alguma coisa que pudesse corrigir sem precisar aguardar a boa vontade do pessoal do provedor.
    Enquanto debugava o método Emitir do componente no Programa Exemplo, cheguei nas seguintes situações:
    * A Unit ACBrNFSeXWebServiceBase possui a função chamada Executar. Dentro dela, tem a chamada HttpClient.Execute. Entrando nela através do F7 chego a seguinte procedure:

    procedure TDFeHttpWinHttp.Execute;
    begin
      inherited;
    
      // Enviando, dispara exceptions no caso de erro //
      try
        FWinHTTPReqResp.Execute(DataResp);
        HeaderResp.Text := FWinHTTPReqResp.HeaderResp.Text;
      finally
        FpHTTPResultCode := FWinHTTPReqResp.HttpResultCode;
        FpInternalErrorCode := FWinHTTPReqResp.InternalErrorCode;
      end;
    
      // DEBUG //
      //DataResp.SaveToFile('c:\temp\ReqResp.xml');
    end;

    Considerando o comentário, não deveria ser um try except ao invés de try finally ?
    Nela para mim os valores de FWinHTTPReqResp.HttpResultCode é 404 e FWinHttpReqResp.HeaderResp.Text é HTTP/1.1 404 Not Found Date: Mon, 20 Sep 2021 16:36:09 GMT Content-Length: 0 Server: Microsoft-IIS/10.0 X-Powered-By: ASP.NET.
    Ainda assim considera como sucesso a requisição e trata o Retorno "Bem Sucedido".
    Isso está correto?
    * Na Unit ACBrNFSeXWebserviceBase, na procedure Executar tem o seguinte trecho de código:
     

    
    HttpClient.Execute;
    
    HttpClient.DataResp.Position := 0;
    FPRetorno := ReadStrFromStream(HttpClient.DataResp, HttpClient.DataResp.Size);
    
    // Alsuns provedores retorna uma string apenas com a mensagem de erro
    if Pos('Body', FPRetorno) = 0 then
      FPRetorno := GetSoapBody(FPRetorno);
    
    if Pos('ISO-8859-1', FPRetorno) > 0 then
    begin
      FPRetorno := RemoverDeclaracaoXML(FPRetorno);
      FPRetorno := TranslateString(FPRetorno, 0, 28591);
    end;
    
    if Pos('<?xml version="1.0" ?>', FPRetorno) > 0 then
      FPRetorno := RemoverDeclaracaoXML(FPRetorno);
    
    // Alguns provedores não retornam o XML em UTF-8
    FPRetorno := ConverteXMLtoUTF8(FPRetorno);
    
    // Verifica se o ResultCode é: 200 OK; 201 Created; 202 Accepted
    // https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
    if not (HttpClient.HTTPResultCode in [200..202]) then
    begin
      aRetorno := TACBrXmlDocument.Create;
    
      if FPRetorno <> '' then
      begin
    	aRetorno.LoadFromXml(FPRetorno);
    
    	try
    	  ChecarRetorno(aRetorno);
    	finally
    	  aRetorno.Free;
    	end;
      end
      else
    	raise EACBrDFeException.Create('WebService retornou um XML vazio.');
    end;

    Nele, a função GetSoapBody é assim:

      aXml := SeparaDados(Response, 'Body');
    
      if aXml = '' then
        aXml := '<a>' +
                  '<ListaMensagemRetorno>' +
                    '<MensagemRetorno>' +
                      '<Codigo>' + '</Codigo>' +
                      '<Mensagem>' + Response + '</Mensagem>' +
                      '<Correcao>' + '</Correcao>' +
                    '</MensagemRetorno>' +
                  '</ListaMensagemRetorno>' +
                '</a>';
    
      Result :=  aXml;

    Então mesmo que FPResponse seja vazio(que está sendo o meu caso)ele vai passar um valor para FPResponse e assim não cai na exceção se o retorno vier vazio.

  16. 14 minutos atrás, inods disse:

    Bom dia, Diego

    Verifiquei o arquivo ACBrNFSeXServicos.ini, e consta para Taubate [3554102] o provedor da Conam.

    Configurei para essa cidade (Taubate), mas no exemplo do ACBrNFSeX ocorre esse erro "Nenhum provedor encontrado".

     

     

    Bom dia.
    Antes de indicar o código do município no componente faça a chamada do método LerCidades.

  17. 1 hora atrás, inods disse:

    Olá Italo,

    Tentei pelo exemplo do ACBrNFSeX, porém a mensagem que recebo nele é: "Nenhum provedor encontrado".

    Analisando o arquivo cidades.ini verifiquei que para taubaté o servidor é da conam.

    Isto não está ocorrendo devido as configurações do webservice. SSLLib, CryptLib etc?

     

     

    O ACBrNFSeX não usa o cidades.ini, ele usa o ACBrNFSeXServicos.ini

×
×
  • 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.