Diego A. Folieni
Membros-
Total de ítens
40 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Tudo que Diego A. Folieni postou
-
Caixa de Sugestões do Papo Pro ACBr
Diego A. Folieni replied to EMBarbosa's tópico in Dúvidas Gerais sobre o ACBr
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)? -
Caixa de Sugestões do Papo Pro ACBr
Diego A. Folieni replied to EMBarbosa's tópico in Dúvidas Gerais sobre o ACBr
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. -
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
-
Alterações em Units do ACBrPagFor para o Banco do Bradesco
um tópico no fórum postou Diego A. Folieni Dúvidas Gerais sobre o ACBr
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 -
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.
-
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
-
Pequena alteração na Unit pcnDIR da Declaração de Importação.
um tópico no fórum postou Diego A. Folieni Dúvidas Gerais sobre o ACBr
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 -
Alterações em algumas Units do ACBrPagFor para o banco Bradesco.
um tópico no fórum postou Diego A. Folieni Outros (ACBrLFD, ACBrSEF2, etc)
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 -
Consulta NFSe Servidor Betha versão 1.xx - São José-SC
Diego A. Folieni replied to Sandro Andre Reghelin's tópico in ACBrNFSe
Tenta ACBrNFSeX.WebService.ConsultaLoteRps.XmlRetorno. -
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.
-
Onde encontrar um xml de envio como exemplo?
Diego A. Folieni replied to junior103's tópico in ACBrNFSe
No caminho \ACBr\Exemplos\ACBrDFe\Schemas\NFSe você encontra os Schemas dos provedores -
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
-
Entendido, muito obrigado!
-
Entendido @Italo Giurizzato Junior, muito obrigado.
-
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
-
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.
-
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
-
Dúvida no processamento da função Emitir do ACBrNFSeX
Diego A. Folieni replied to Diego A. Folieni's tópico in ACBrNFSe
** 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. -
Dúvida no processamento da função Emitir do ACBrNFSeX
Diego A. Folieni replied to Diego A. Folieni's tópico in ACBrNFSe
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. -
Dúvida no processamento da função Emitir do ACBrNFSeX
um tópico no fórum postou Diego A. Folieni ACBrNFSe
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. -
Código erro "X999" Serviço não implementado para este servidor
Diego A. Folieni replied to inods's tópico in ACBrNFSe
Bom dia. Antes de indicar o código do município no componente faça a chamada do método LerCidades. -
Código erro "X999" Serviço não implementado para este servidor
Diego A. Folieni replied to inods's tópico in ACBrNFSe
O ACBrNFSeX não usa o cidades.ini, ele usa o ACBrNFSeXServicos.ini