Ir para conteúdo
  • Cadastre-se

dev botao
  • Este tópico foi criado há 3820 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado (editado)

Olá, bom dia.

Estou com um problema ao cancelar uma NFS-e em ambiente de homologação pelo provedor Coplan.

Observei que o XML do pedido de cancelamento não está preenchendo o Código de Cancelamento, o restante das informações parecem estar corretas.

A forma de preencher estou fazendo da seguinte maneira:

function TFrmCadPedido.CancelarNFSe: boolean;
var
  vCodigo, vMotivo: String;
begin
  try
    try
      Result := False;
      if OpenDialogNFSe.Execute then
      begin
        DMNFSe.ObjetoNFSe.NotasFiscais.Clear;
        DMNFSe.ObjetoNFSe.NotasFiscais.LoadFromFile(OpenDialogNFSe.Filename);

        // Codigo de Cancelamento
        // 1 - Erro de emissão
        // 2 - Serviço não concluido
        // 3 - RPS Cancelado na Emissão

        //if not(InputQuery('Cancelar NFSe',
        //  'Código de Cancelamento:' + #13 +
        //  '1 - Erro de emissão' + #13 +
        //  '2 - Serviço não concluído' + #13 +
        //  '3 - RPS Cancelado na Emissão', vCodigo)) then
        //  Exit;

        // Provedor Equiplano é obrigatório o motivo de cancelamento
       // if not(InputQuery('Cancelar NFSe', 'Motivo de Cancelamento', vMotivo)) then
        //  Exit;
        //DMNFSe.ObjetoNFSe.NotasFiscais.Items[0].NFSe.MotivoCancelamento:= vMotivo;

      DMNFSe.ObjetoNFSe.WebServices.CancNfse.CodigoCancelamento := '2';
      DMNFSe.ObjetoNFSe.WebServices.CancNfse.MotivoCancelamento := 'SERVIÇO NÃO CONCLUÍDO';
      DMNFSe.ObjetoNFSe.WebServices.CancNfse.CNPJ := '06137422000190';
      DMNFSe.ObjetoNFSe.WebServices.CancNfse.IM := '4147';
      DMNFSe.ObjetoNFSe.WebServices.CancNfse.CodigoMunicipio := '5102678';
      DMNFSe.ObjetoNFSe.WebServices.CancNfse.NumeroNFSe := '283';
      Result := DMNFSe.ObjetoNFSe.WebServices.CancelaNFSe(vCodigo, False);
      // Result := DMNFSe.ObjetoNFSe.CancelarNFSe(vCodigo);
      end;
    except
      on E: Exception do
      begin
        Result := False;
      end;
    end;
  finally
  end;
end;

O XML do Pedido de Cancelamento gerado é esse:

<?xml version="1.0"?>

-<CancelarNfseEnvio xmlns="http://www.abrasf.org.br/nfse.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    -<Pedido>
        -<InfPedidoCancelamento Id="pedidoCancelamento_061374220001904147283">
            -<IdentificacaoNfse>
                <Numero>283</Numero>
                -<CpfCnpj>
                    <Cnpj>06137422000190</Cnpj>
                </CpfCnpj>
                <InscricaoMunicipal>4147</InscricaoMunicipal>
                <CodigoMunicipio>5102678</CodigoMunicipio>
            </IdentificacaoNfse>
            <CodigoCancelamento/>
        </InfPedidoCancelamento>
    </Pedido>
</CancelarNfseEnvio>

O erro gerado é o seguinte:

Código Erro: E9999

Mensagem: Erro Desconhecido

Correção: For input string: ""

Provedor: Coplan

Código Erro:

Mensagem:

Correção:

Provedor: Coplan

 

O que pode estar ocorrendo?

Obrigado.

Editado por Leandro Araújo

Leandro Araújo, Analista de Sistemas.

Postado (editado)

Observação:

Estava olhando o código na unit 'ACBrNFSeWebServices' no método 'TWebServices.CancelaNFSe' existe um parâmetro chamado 'CarregaProps' do tipo Boolean, porém no corpo do método dá pra ver que se eu passar 'CarregaProps' como True ele vai fazer o "contrário" do que propôe.

ACBrNFSeWebServices, linhas 2728:

function TWebServices.CancelaNFSe(ACodigoCancelamento: String;
const CarregaProps: boolean): Boolean;
begin
  if CarregaProps then
  begin
    Self.CancNfse.NumeroNFSe := '';
    Self.CancNfse.CNPJ := '';
    Self.CancNfse.IM := '';
    Self.CancNfse.CodigoMunicipio := '';
  end;
  // Aqui está comentado.. não alterado, já veio assim:
 (*
 if CarregaProps then
 begin
   Self.CancNfse.NumeroNFSe      := TACBrNFSe( FACBrNFSe ).NotasFiscais.Items[0].NFSe.Numero;
   Self.CancNfse.CNPJ            := TACBrNFSe( FACBrNFSe ).NotasFiscais.Items[0].NFSe.PrestadorServico.IdentificacaoPrestador.Cnpj;
   Self.CancNfse.IM              := TACBrNFSe( FACBrNFSe ).NotasFiscais.Items[0].NFSe.PrestadorServico.IdentificacaoPrestador.InscricaoMunicipal;
   Self.CancNfse.CodigoMunicipio := TACBrNFSe( FACBrNFSe ).NotasFiscais.Items[0].NFSe.PrestadorServico.Endereco.CodigoMunicipio;
 end;
 *)
 Self.CancNfse.CodigoCancelamento := ACodigoCancelamento;

 Result := Self.CancNfse.Executar;

  // Restante da function....
end;

A parte que era para carregar as propriedades está comentada, dai no caso, para não alterar o código do ACBr eu estou passando 'CarregaProps' como False:

Result := DMNFSe.ObjetoNFSe.WebServices.CancelaNFSe(vCodigo, False);

No XML do pedido de cancelamento as informações são preenchidas, mas não o código de cancelamento. :-|

 

Obrigado pessoal.

Editado por Leandro Araújo

Leandro Araújo, Analista de Sistemas.

  • Consultores
Postado

Bom dia Leandro,

 

Analisando o código do componente não encontrei nada que pudesse estar provocando o problema.

 

Você verificou se a sua variável vCodigo não esta vazia ao ser executado o WebServices.CancelaNFSe ?

  • 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

Tentando realizar o cancelamento dessa maneira:

Result := DMNFSe.ObjetoNFSe.WebServices.CancelaNFSe('2', '302', '06137422000190', '4147', '5102678');

Recebo o retorno:

Número da NFS-e: 302

Data Hora.: 02/06/14 10:10:57

 

Logo em seguida o erro:

Código Erro: E9999

Mensagem: Erro Desconhecido.

Correção: Zero length BigInteger

Provedor: Coplan

 

Alguém pode ajudar?

Obrigado. :mrgreen:

Leandro Araújo, Analista de Sistemas.

Postado (editado)

Bom dia Leandro,

 

Analisando o código do componente não encontrei nada que pudesse estar provocando o problema.

 

Você verificou se a sua variável vCodigo não esta vazia ao ser executado o WebServices.CancelaNFSe ?

Olá italojjr, bom dia.

Sim, verifiquei e corrigi aqui, obrigado.

Testei do outro modo agora.. e vem o erro, Zero length BigInteger.

 

Obs.: Era a falta do número do RPS que causava o erro.

Editado por Leandro Araújo

Leandro Araújo, Analista de Sistemas.

Postado (editado)

italojjr, realmente, era um erro meu, estava esquecendo de preencher vCodigo, agora preenchi.

Fiz um novo teste e observei que está cancelando de fato, pois fui tentar cancelar a mesma NFS-e e me retornou E79 (NFS-e já cancelada), porém, todavia vem aquela resposta do Zero length BigInteger , acho que é só tratar ele depois..

Acabei deixando desse modo:

Result := DMNFSe.ObjetoNFSe.WebServices.CancelaNFSe('2', '302', '06137422000190', '4147', '5102678');

Ao tentar cancelar novamente vem E79, ou seja, o cancelamento funcionou, mesmo com a function 'TWebServices.CancelaNFSe' retornando False.

Creio que está tudo resolvido.. qualquer coisa posto aqui novamente.

Será que posso usar assim?

Muito obrigado.

Editado por Leandro Araújo

Leandro Araújo, Analista de Sistemas.

  • Solution
Postado (editado)

Consegui realizar o cancelamento dessa maneira:

DMNFSe.ObjetoNFSe.NotasFiscais.Clear;
  with DMNFSe.ObjetoNFSe.NotasFiscais.Add do
  begin
    NFSe.Numero := FNumNFSe;
    NFSe.IdentificacaoRps.Numero := FNumRPS;
    NFSe.IdentificacaoRps.Serie := 'UNICA';
    NFSe.IdentificacaoRps.Tipo := trRPS;
    NFSe.PrestadorServico.IdentificacaoPrestador.Cnpj := FCnpj;
    NFSe.PrestadorServico.IdentificacaoPrestador.InscricaoMunicipal := FInscMunicipal;
    NFSe.PrestadorServico.Endereco.CodigoMunicipio := FCodMunicipio;
  end;
Result := DMNFSe.ObjetoNFSe.CancelarNFSe(IntToStr(FCodigoCancelamento));

Eu estava fazendo errado, desse modo ai funcionou perfeito.

 

Obs.: Não pode faltar o número do RPS se não retorna um erro com a mensagem:

Código Erro: E9999

Mensagem: Erro Desconhecido.

Correção: Zero length BigInteger

Provedor: Coplan

 

Muito obrigado italojjr e aos demais pela ajuda.

Editado por Leandro Araújo

Leandro Araújo, Analista de Sistemas.

  • Este tópico foi criado há 3820 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.