Ir para conteúdo
  • Cadastre-se

Diego A. Folieni

Membros
  • Total de ítens

    40
  • Registro em

  • Última visita

Tudo que Diego A. Folieni postou

  1. Para polemizar um pouco(ou não?) talvez trazer o Adriano Santos para comentar(e comparar) o Firemonkey com as principais formas de desenvolvimento para Mobile presentes no mercado(FireMokey Vs Flutter Vs Reac Native)?
  2. Me recordo de em edição anterior do Papo Pro o Francisco Thiago ter dito que precisou se afastar da area de TI por um tempo e depois acabou voltando. Acredito que seria interessante ele nos contar um pouco de como foi essa experiência de "alcançar" o mercado novamente.
  3. 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!
  4. 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
  5. Boa tarde. Peço desculpas pela demora na resposta, mas pode encerrar o tópico, por favor.
  6. 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
  7. 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.
  8. Não está compilando @Italo Giurizzato Junior, não esta encontrando a Unit ACBrPagForInterface na Unit ACBrPagForArquivo.pas Linha do log n a instalação. "..\ACBr\Fontes\ACBrPagFor\ACBrPagForArquivo.pas(103) Fatal: F2613 Unit 'ACBrPagForInterface' not found." ACBr foi atualizado hoje ainda a pouco.
  9. 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
  10. 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. 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
  11. 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
  12. 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.
  13. No caminho \ACBr\Exemplos\ACBrDFe\Schemas\NFSe você encontra os Schemas dos provedores
  14. Bom dia. Precisei fazer uma pequena alteração na ACBrLerXml_ABRASFv2, pois mesmo recebendo no arquivo soap de retorno as informações de Cancelamento e Substituição o componente não estava fazendo a leitura de ambas as informações. ACBrNFSeXLerXml_ABRASFv2.pas
  15. Entendido @Italo Giurizzato Junior, muito obrigado.
  16. 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
  17. Não sei dizer quanto aos outros, mas descobri que a de Mineiros do Tiete está incorreta mesmo. A correta para Produção: http://54.207.200.34/nfse.portal.integracao/services.svc Infelizmente não consegui a de homologação ainda.
  18. 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
  19. ** 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.
  20. 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.
  21. 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.
  22. Bom dia. Antes de indicar o código do município no componente faça a chamada do método LerCidades.
  23. 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.