Ir para conteúdo
  • Cadastre-se

dev botao

Possível correção Cancelamento IPM Cascavel.


Ver Solução Respondido por Italo Giurizzato Junior,
  • Este tópico foi criado há 500 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado (editado)

Na implementação do cancelamento para cidade de Cascavel-PR para o Provedor IPM identifiquei os seguintes problemas:

1- Na Unit IPM.Provider foi necessário alterar a procedure "procedure TACBrNFSeProviderIPM.TratarRetornoCancelaNFSe", pois o metódo não conseguia tratar o retorno visto que o XML vinha com um padrão diferente e a tag <nfse> não era encontrada, foi necessário realizar a seguinte alteração: (Segue em exemplo um XML de solicitação de cancelamento em anexo).

 ANode := Document.Root;
      if Document.Root.Name <> 'nfse' then
      begin
        ANode := ANode.Childrens.Find('documentos');
        ANode := ANode.Childrens.Find('nfse');
      end;
 ProcessarMensagemErros(ANode, Response);

2- Foi necessário adicionar no arquivo ACBrNFSeXServicos.ini o parametro "SolicitarCancelamento" para a cidade de Cascavel-PR:

[4104808]
; Atualizado em 19/10/2021
Nome=Cascavel
UF=PR
Provedor=IPM
Versao=1.01
Params=NaoGerarGrupoRps:|SolicitarCancelamento:
;
ProRecepcionar=https://cascavel.atende.net/atende.php?pg=rest&service=WNERestServiceNFSe&cidade=padrao&eletron=1
HomRecepcionar=https://homologacao.atende.net/atende.php?pg=rest&service=WNERestServiceNFSe&cidade=integracoes&eletron=1

 

15702-can.xml

Editado por mdogomes
Postado

Boa tarde,

Fiz mais uns testes e foi necessário fazer mais uma alteração na Unit IPM.Provider foi necessário alterar a procedure "procedure TACBrNFSeProviderIPM.TratarRetornoCancelaNFSe"

Como estava: 

NotaCompleta := (Pos('<nfse>', Response.ArquivoRetorno) > 0)

Como ficou:

NotaCompleta := (Pos('<nfse>', Response.ArquivoRetorno) > 0) and (ANota.NFSe.NfseSubstituida = '');

A alteração foi necessária pois caso fique como NotaCompleta ele tenta verificar se o ANodeArray está assigned causando erro. no seguinte trecho de código:

if NotaCompleta then
      begin
        if not Assigned(ANodeArray) and (Response.Sucesso) then
        begin
          AErro := Response.Erros.New;
          AErro.Codigo := Cod203;
          AErro.Descricao := ACBrStr(Desc203);
          Exit;
        end;
...

 

  • Curtir 2
  • 3 semanas depois ...
  • 3 semanas depois ...
  • Consultores
Postado

Boa tarde Gomes,

Para mim a sua alteração vai falhar.

Sua primeira alteração:

      NotaCompleta := (Pos('<nfse>', Response.ArquivoRetorno) > 0) and (ANota.NFSe.NfseSubstituida = '');

Ao executar a linha acima a variável ANota ainda não foi preenchida, logo esta com todos as suas classes e campos vazios.

Segunda alteração:

      if Document.Root.Name <> 'nfse' then
      begin
        ANode := ANode.Childrens.Find('documentos');
        ANode := ANode.Childrens.Find('nfse');
      end;

Ao executar o IF acima se a condição for verdadeira você esta confirmando que existe a tag documentos e em seguida a tag nfse.

Terceira alteração:

Você removeu a linha abaixo que esta dentro do ( if NotaCompleta then )

        ANodeArray := ANode.Childrens.FindAllAnyNs('nfse');

Com a remoção dessa linha a variável ANodeArray fica vazio.

Vamos fazer o seguinte, faça um teste com a unit em anexo.

IPM.Provider.pas

  • Curtir 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

Bom dia,

Fiz o teste e agora ele ficou como nota completa, porém o XML que retorna não é de nota completa e no método TACBrNFSeProviderIPM.TratarRetornoCancelaNFSe agora dá erro de memória devido ao ANode estar nulo.

755-can.xml

Postado
1 hora atrás, Italo Giurizzato Junior disse:

Boa tarde Gomes,

Em qual linha ocorre o erro?

Pois não tenho como testar.

with Response do
        begin
          NumeroNota := ObterConteudoTag(ANode.Childrens.FindAnyNs('numero_nfse'), tcStr);
          SerieNota := ObterConteudoTag(ANode.Childrens.FindAnyNs('serie_nfse'), tcStr);
          Data := ObterConteudoTag(ANode.Childrens.FindAnyNs('data_nfse'), tcDatVcto);
          Data := Data + ObterConteudoTag(ANode.Childrens.FindAnyNs('hora_nfse'), tcHor);
          Situacao := ObterConteudoTag(ANode.Childrens.FindAnyNs('situacao_codigo_nfse'), tcStr);
          DescSituacao := ObterConteudoTag(ANode.Childrens.FindAnyNs('situacao_descricao_nfse'), tcStr);
          Link := ObterConteudoTag(ANode.Childrens.FindAnyNs('link_nfse'), tcStr);
          Link := StringReplace(Link, '&amp;', '&', [rfReplaceAll]);
          Protocolo := ObterConteudoTag(ANode.Childrens.FindAnyNs('cod_verificador_autenticidade'), tcStr);
          CodigoVerificacao := Protocolo;
        end;

Quando vai atribuir o NumerodaNota já ocorre o erro, por não ser uma nota completa.

  • Consultores
Postado

Boa tarde Gomes,

Por favor anexe aqui a alteração que você fez na cidade em questão, não precisa anexar o arquivo INI inteiro somente as linhas referente a cidade.

Desde já muito obrigado pela colaboração.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado
5 minutos atrás, Italo Giurizzato Junior disse:

Boa tarde Gomes,

Por favor anexe aqui a alteração que você fez na cidade em questão, não precisa anexar o arquivo INI inteiro somente as linhas referente a cidade.

Desde já muito obrigado pela colaboração.

Segue as alterações feitas:

Foi necessário adicionar no arquivo ACBrNFSeXServicos.ini o parametro "SolicitarCancelamento" para a cidade de Cascavel-PR:

[4104808]
; Atualizado em 19/10/2021
Nome=Cascavel
UF=PR
Provedor=IPM
Versao=1.01
Params=NaoGerarGrupoRps:|SolicitarCancelamento:
;
ProRecepcionar=https://cascavel.atende.net/atende.php?pg=rest&service=WNERestServiceNFSe&cidade=padrao&eletron=1
HomRecepcionar=https://homologacao.atende.net/atende.php?pg=rest&service=WNERestServiceNFSe&cidade=integracoes&eletron=1
  • Consultores
Postado

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

Consultor SAC ACBr

Alexandre de Paula
Ajude o Projeto ACBr crescer - Assine o SAC                    

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  ícone Discórdia Discord   

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

 

  • Este tópico foi criado há 500 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.