@Italo Giurizzato Junior, o provedor Bauhaus para o município de Cristais/MG quando recebo o retorno da nota autorizada o arquivo tem a tag <xml> no inicio do arquivo, porem este provedor trata todo processo em Json.
Está gerando um erro no método LerJsonNfse() da classe Bauhaus.LerJson quando é carregado para geração do DANFSE pois o .Parse do Json não reconhece a tag contida e levanta a exception.
function RemoverTagXml(const Arquivo: string): string;
// Remove: <?xml version="1.0" encoding="UTF-8"?>
var
lPos: Integer;
begin
Result := Arquivo;
lPos := Pos('<?xml', Result);
if lPos > 0 then
begin
lPos := Pos('?>', Result) + 1;
Result := Trim(Copy(Result, lPos + 1, Length(Result)));
end;
end;
function TNFSeR_Bauhaus.LerJsonNfse(const ArquivoRetorno: String): Boolean;
var
jsRet: TACBrJSONObject;
lArquivoRetorno: String;
begin
Result := False;
tpXML := txmlNFSe;
try
lArquivoRetorno := RemoverTagXml(ArquivoRetorno);
//jsRet := TACBrJSONObject.Parse(String(ArquivoRetorno)); // <<-- ERRO
jsRet := TACBrJSONObject.Parse(String(lArquivoRetorno)); // Ajuste
if Assigned(jsRet.AsJSONObject['DadosNfse']) then
begin
LerNota(jsRet.AsJSONObject['DadosNfse'], False);
LerPrestador(jsRet.AsJSONObject['DadosNfse']);
LerTomador(jsRet.AsJSONObject['DadosNfse']);
LerRps(jsRet.AsJSONObject['DadosNfse']);
LerServicos(jsRet.AsJSONObject['DadosNfse']);
Result := True;
end;
finally
jsRet.Free;
end;
end;
Gostaria de saber em qual classe no ACBrNFSeX posso acrescentar este método RemoverTagXml() para não engessar a funcão na classe Bauhaus.LerJson.pas ?
Agradeço seu feedback mestre,
Everson