Também estou com esse problema em Barueri.
Eu coloquei apos o Emitir, uma consulta para obter o erro, pois pelo que vi em Barueri, ele recepciona com sucesso sempre, mas depois tem que fazer a consulta com o protocolo retornado xxx.err para obter qual o problema.
Mas sempre recebo o retorno que o arquivo esta fora do layout.
ACBrNFSeX1.Emitir(IntToStr(_RpsLote), meAutomatico, False);
ChecarResposta(tmRecepcionar);
if (ACBrNFSeX1.WebService.Emite.Sucesso) and (ACBrNFSeX1.WebService.Emite.Erros.Count = 0) then
begin
// Consulta a situação do lote se disponivel
if ACBrNFSeX1.Configuracoes.Geral.ServicosDisponibilizados.ConsultarSituacao then
begin
while true do
begin
ACBrNFSeX1.ConsultarSituacao(
ACBrNFSeX1.WebService.Emite.Protocolo,
ACBrNFSeX1.WebService.Emite.NumeroLote
);
ChecarResposta(tmConsultarSituacao);
// Se houver falha de comunicação
if not ACBrNFSeX1.WebService.ConsultaSituacao.Sucesso then
raise Exception.Create(
'Falha na comunicação com o WebService ao consultar o lote.'
);
// Se houver erros retornados pelo provedor
if ACBrNFSeX1.WebService.ConsultaSituacao.Erros.Count > 0 then
begin
MsgErros := '';
for i := 0 to ACBrNFSeX1.WebService.ConsultaSituacao.Erros.Count - 1 do
begin
MsgErros := MsgErros +
Format('Erro %d: Código=%s, Mensagem=%s, Correção=%s ',
[i+1,
ACBrNFSeX1.WebService.ConsultaSituacao.Erros[i].Codigo,
ACBrNFSeX1.WebService.ConsultaSituacao.Erros[i].Descricao,
ACBrNFSeX1.WebService.ConsultaSituacao.Erros[i].Correcao]
);
// Remove eventuais quebras de linha na string completa
MsgErros := StringReplace(MsgErros, sLineBreak, ' ', [rfReplaceAll]);
end;
raise Exception.Create('Erros encontrados no lote:' + sLineBreak + MsgErros);
end;
if StrToIntDef(ACBrNFSeX1.WebService.ConsultaSituacao.Situacao, -2) >= 0 then
begin
if ACBrNFSeX1.WebService.ConsultaSituacao.Situacao = '2' then
begin
ACBrNFSeX1.ConsultarLoteRps(ACBrNFSeX1.WebService.ConsultaSituacao.Protocolo);
memoLog.Lines.Add('');
MsgErros := '';
for i := 0 to ACBrNFSeX1.WebService.ConsultaLoteRps.Erros.Count - 1 do
begin
MsgErros := MsgErros +
Format('Erro %d: Código=%s, Mensagem=%s, Correção=%s ',
[i+1,
ACBrNFSeX1.WebService.ConsultaLoteRps.Erros[i].Codigo,
ACBrNFSeX1.WebService.ConsultaLoteRps.Erros[i].Descricao,
ACBrNFSeX1.WebService.ConsultaLoteRps.Erros[i].Correcao]
);
// Remove eventuais quebras de linha na string completa
MsgErros := StringReplace(MsgErros, sLineBreak, ' ', [rfReplaceAll]);
end;
memoLog.Lines.Add(MsgErros);
raise Exception.Create(MsgErros);
end;
Break;
end;
Sleep(3000);
end;
end;