Jump to content

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png click.png click.png

Diego A. Folieni

Membros
  • Posts

    29
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Diego A. Folieni's Achievements

  1. 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.
  2. No caminho \ACBr\Exemplos\ACBrDFe\Schemas\NFSe você encontra os Schemas dos provedores
  3. 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
  4. Entendido @Italo Giurizzato Junior, muito obrigado.
  5. 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
  6. 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.
  7. 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
  8. ** 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.
  9. 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.
  10. 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.
  11. Bom dia. Antes de indicar o código do município no componente faça a chamada do método LerCidades.
  12. O ACBrNFSeX não usa o cidades.ini, ele usa o ACBrNFSeXServicos.ini
  13. Verifique no ACBRNFseXServicos.ini se o provedor indicado para a cidade é este, caso não seja, acredito que precisará criar novo tópico(ou usar esse mesmo talvez) pedindo para mudar.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.