Boa tarde a todos.
Começou um cliente novo conosco ontem em ambiente de homologação de CT-e de MG. Tive problemas retornando exception do Acbr "Conhecimento(s) não cofirmados: n->".
Investigando melhor o assunto, notei que o retorno de lote processado estava diferente na tag infProt (arquivo está em anexo).
Fiz uma alteração no pcnLeitor.pas na rotina TLeitor.rExtrai e funcionou. Segue abaixo como ficou (o trecho em negrito foi o que adicionei):
function TLeitor.rExtrai(const nivel: integer; const TagInicio: string; TagFim: string = ''; const item: integer = 1): AnsiString;
var
Texto: AnsiString;
i,j: integer;
begin
//NOTA: Extrai um grupo de dentro do nivel informado
FNivel.strings[0] := FArquivo;
if Trim(TagFim) = '' then
TagFim := TagInicio;
Texto := FNivel.Strings[nivel - 1];
Result := '';
FGrupo := '';
for i := 1 to item do
if i < item then
Texto := copy(Texto, pos('</' + Trim(TagFim) + '>', Texto) + length(Trim(TagFim)) + 3, maxInt);
/////////////////
/// infProt MG
if TagInicio = 'infProt' then
begin
Texto := StringReplace(Texto,'ns3:','',[rfReplaceAll]);
Texto := StringReplace(Texto,'ns6:','',[rfReplaceAll]);
Texto := StringReplace(Texto,' xmlns="http://www.portalfiscal.inf.br/cte"','',[rfReplaceAll]);
end;
j := pos('</' + Trim(TagFim) + '>', Texto);
if j = 0 then
j := pos('</' + Trim(TagFim) + ':', Texto); // Correção para WebServices do Ceará/MG
//Correção para leitura de tags em que a primeira é diferente da segunda Ex: <infProt id=XXX> e a segunda apenas <infProt>
// Texto := copy(Texto, 1, pos('</' + Trim(TagFim) + '>', Texto) + length(Trim(TagFim)) + 3);
Texto := copy(Texto, 1, j + length(Trim(TagFim)) + 3);
i := pos('<' + Trim(TagInicio) + '>', Texto);
if i = 0 then
i := pos('<' + Trim(TagInicio) + ' ', Texto);
if i = 0 then
i := pos('<' + Trim(TagInicio) + ':', Texto); //correção para webservice do Ceará
if i = 0 then
exit;
Texto := copy(Texto, i, maxInt);
// Alterado por Claudemir em 13/03/2013: j:=pos('</' + Trim(TagFim) + '>',Texto);
// j:=pos('</' + Trim(TagFim) + '>', Texto) + length(Trim(TagFim)) + 3;
j:=pos('</' + Trim(TagFim) + '>', Texto);
if j=0 then
j:=pos('</' + Trim(TagFim) + ':', Texto); //correção para webservice do Ceará
// Result := TrimRight(copy(Texto, 1, j - 1));
Result := TrimRight(copy(Texto, 1, j - 1 + (length(Trim(TagFim)) + 3)));
FNivel.strings[nivel] := Result;
FGrupo := result;
end;
Alguém já se deparou com esse problema? Estou esquecendo de algo, ou essa alteração que fiz está correta?
Outro problema que tive foi que ontem, quando me deparei com esse problema, atualizei os fontes do ACBr conforme meu amigo Juliomar me sugeriu e, após isso, começou a gerar um exception em branco no envio de evento de cancelamento de CT-e. Tive que voltar os fontes anteriores.
311000002104204-pro-rec.xml