Bom dia !!
Estou migrando para o componente NFSeX, segui todos os procedimentos na documentação e o envio já está funcionando, porém ao tentar cancelar estou recebendo o seguinte erro:
EACBRDFeException with message 'Não encontrei final do elemento: <ns3:Pedido>'
Adicionei os arquivos fontes do acbr no debug path para identificar o que estava causando e aparentemente ao assinar o documento para o cancelamento a classe Ginfes.Provider.pas prepara o xml da seguinte forma:
procedure TACBrNFSeProviderGinfes.PrepararCancelaNFSe(
Response: TNFSeCancelaNFSeResponse);
begin
with ConfigMsgDados do
begin
Prefixo := '';
PrefixoTS := '';
end;
inherited PrepararCancelaNFSe(Response);
//Ao voltar os prefixos aqui o metodo assinar chamado posteriormente falha pois tentar encontrar o prefixo + ':' + Pedido, porem a tag pedido não contem prefixo.
with ConfigMsgDados do
begin
Prefixo := 'ns3';
PrefixoTS := 'ns4';
end;
end;
Este comportamento pode ser visto aqui na unit ACBrNFSeXProviderBase.pas
rocedure TACBrNFSeXProvider.AssinarCancelaNFSe(
Response: TNFSeCancelaNFSeResponse);
var
IdAttr, Prefixo, IdAttrSig: string;
AErro: TNFSeEventoCollectionItem;
begin
if not ConfigAssinar.CancelarNFSe then Exit;
if ConfigAssinar.IncluirURI then
IdAttr := ConfigGeral.Identificador
else
IdAttr := 'ID';
//Aqui esta a parte especifica que confere se existe prefixo e atribui ele + os :
if ConfigMsgDados.Prefixo = '' then
Prefixo := ''
else
Prefixo := ConfigMsgDados.Prefixo + ':';
try
IdAttrSig := SetIdSignatureValue(Response.ArquivoEnvio,
ConfigMsgDados.CancelarNFSe.DocElemento, IdAttr);
//E aqui no assinar o prefixo é adicionado ao DocElemento que esta causando o problema.
Response.ArquivoEnvio := FAOwner.SSL.Assinar(Response.ArquivoEnvio,
Prefixo + ConfigMsgDados.CancelarNFSe.DocElemento,
ConfigMsgDados.CancelarNFSe.InfElemento, '', '', '', IdAttr, IdAttrSig);
except
on E:Exception do
begin
AErro := Response.Erros.New;
AErro.Codigo := Cod801;
AErro.Descricao := ACBrStr(Desc801 + E.Message);
end;
end;
end;
Por acaso alguem mais esta passando por isso com o Ginfes de Santo André? tem algo especifico que não estou vendo? pois segui as configurações iguais as do exemplo de teste, e confirmei que debugando e removendo o prefixo neste momento o cancelamento é realizado corretamente.
Desde já agradeço.