Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Boa tarde, pessoal!

Tudo bem?

Estou implementando o Cupom Fiscal Eletrônico e me deparei com um erro agora, não achei no fórum a resposta.

Quando vou cancelar um Cupom, recebo a autorização de uso da SEFAZ, mas o sistema dá erro, informando que o schema não foi especificado.

Eu consigo enviar sem problemas, mas na hora de cancelar dá esse erro.

Eu baixei os schemas do site da fazenda.

 

Obrigado.

Rafael

Postado

Oi André!

 

O código está abaixo:

  Chave := FrmDados.CDSQlocFaturasPchave_nfe.Text;

  //Envia consulta antes do cancelamento
  ACBrNFe1.Configuracoes.WebServices.Ambiente := TpcnTipoAmbiente(iif(rgTipoAmb.ItemIndex = 0, taProducao, taHomologacao));

  ACBrNFe1.WebServices.Consulta.NFeChave := Chave;
  ACBrNFe1.WebServices.Consulta.Executar;

  MemoResp.Lines.Text := ACBrNFe1.WebServices.Consulta.RetWS;
  memoRespWS.Lines.Text := ACBrNFe1.WebServices.Consulta.RetornoWS;
  LoadXML(ACBrNFe1.WebServices.Consulta.RetornoWS, WBResposta);

  pgRespostas.ActivePageIndex:=0;

  MemoDados.Lines.Add('Consulta NFe');
  MemoDados.Lines.Add('tpAmb: '+ TpAmbToStr(ACBrNFe1.WebServices.Consulta.TpAmb));
  MemoDados.Lines.Add('verAplic: '+ ACBrNFe1.WebServices.Consulta.verAplic);
  MemoDados.Lines.Add('cStat: '+ IntToStr(ACBrNFe1.WebServices.Consulta.cStat));
  MemoDados.Lines.Add('cUF: '+ IntToStr(ACBrNFe1.WebServices.Consulta.cUF));
  MemoDados.Lines.Add('xMotivo: '+ ACBrNFe1.WebServices.Consulta.xMotivo);
  MemoDados.Lines.Add('Protocolo: '+ ACBrNFe1.WebServices.Consulta.Protocolo);

  ShowMessage('cStat: '+ IntToStr(ACBrNFe1.WebServices.Consulta.cStat)+#13+
              'xMotivo: '+ ACBrNFe1.WebServices.Consulta.xMotivo);

  if ACBrNFe1.WebServices.Consulta.Protocolo = '' then
  begin
    ShowMessage('Cupom não localizado para cancelamento!');
    Exit;
  end;

  vNumLote := insereLoteBdGravaFatura_novo();
  CNPJ     := DBDados.qempresacecgc.Text;
  Protocolo:= FrmDados.CDSQlocFaturasPprotocolo.Text;
  cstat    :='';

  if Application.MessageBox('Confirma cancelamento do Cupom Fiscal Eletrônico?','Cancelar?',MB_ICONQUESTION+ MB_YESNO+MB_DEFBUTTON2)=idno then
    Exit;

  ACBrNFe1.EventoNFe.Evento.Clear;
  limpa;
  dadosArquivoXmlCanc:='';
  dadosRespostaCanc:='';

  if(FrmGeraCupom.rgTipoAmb.ItemIndex = 0) then
    FrmGeraCupom.ACBrNFe1.Configuracoes.WebServices.Ambiente:=taProducao
  else
    FrmGeraCupom.ACBrNFe1.Configuracoes.WebServices.Ambiente:=taHomologacao;

  with FrmGeraCupom.ACBrNFe1.EventoNFe.Evento.Add do
  begin
    infEvento.tpAmb := FrmGeraCupom.ACBrNFe1.Configuracoes.WebServices.Ambiente;
    infEvento.chNFe := Chave;
    infEvento.CNPJ := CNPJ;
    infEvento.dhEvento := now;
    infEvento.tpEvento := teCancelamento;
    infEvento.detEvento.xJust := motivo;
    infEvento.detEvento.nProt := Protocolo;
  end;

  FrmGeraCupom.ACBrNFe1.EnviarEvento(strtoint(vNumLote));
  MemoDados.Lines.Text := UTF8Encode(FrmGeraCupom.ACBrNFe1.WebServices.EnvEvento.RetWS);
  memoRespWS.Lines.Text := UTF8Encode(FrmGeraCupom.ACBrNFe1.WebServices.EnvEvento.RetWS);
  //consulta o xml e ve se ja foi cancelado ou não caso ja tenha sido cancelado
  //retorna o <csta> 573 se retornar este codigo significa que é duplicidade de cancelamento
  //entao deverá cancelar no sics denovo caso não tenha sido cancelada
  LoadXML(ACBrNFe1.WebServices.EnvEvento.RetornoWS,WBResposta);

  if (FrmGeraCupom.ACBrNFe1.WebServices.EnvEvento.EventoRetorno.cStat = 220) then
  begin
    ShowMessage('<cStat>220</cStat>'+#13+
                       '<xMotivo>Rejeicao: Prazo de Cancelamento Superior ao Previsto na Legislacao</xMotivo>'                     );
  end;

  if (FrmGeraCupom.ACBrNFe1.WebServices.EnvEvento.EventoRetorno.cStat = 573) then
  begin
    if dadosRespostaCanc = '' then
      XMLRespostaCanc := UTF8Encode(String(FrmGeraCupom.ACBrNFe1.WebServices.EnvEvento.RetornoWS))
    else
      XMLRespostaCanc := UTF8Encode(dadosRespostaCanc);
    nprotCanc := Copy(XMLRespostaCanc, (Pos('<nProt>', XMLRespostaCanc) + 7), ((Pos('</nProt>', XMLRespostaCanc)) - (Pos('<nProt>', XMLRespostaCanc) + 7)));
    cstat := Copy(XMLRespostaCanc, (Pos('<cStat>', XMLRespostaCanc) + 7), ((Pos('</cStat>', XMLRespostaCanc)) - (Pos('<cStat>', XMLRespostaCanc) + 7)));
    dhRegEvento := Copy(XMLRespostaCanc, (Pos('<dhRegEvento>', XMLRespostaCanc) + 13), ((Pos('</dhRegEvento>', XMLRespostaCanc)) - (Pos('<dhRegEvento>', XMLRespostaCanc) + 13)));
    MemoXML.Lines.SaveToFile(dirArquivosCancelamento+'NFe_'+Chave+'_Cancelada.xml');
    //Monta update
    wsql:='update faturas set cancelada = "S", nfe_status = "C", nfe_situacao = "Cancelada", ' +
          ' protocolo_canc = "'+nprotCanc+ '", dhcancelamento = "' + formatdatetime('yyyy-mm-dd hh:mm:ss',datamemo) + '" ' +
          'where codnf = '+inttostr(v_codnf);
    Frmdados.QInsertSQL.Close;
    Frmdados.QInsertSQL.sql.clear;
    Frmdados.QInsertSQL.sql.add(wsql);
    try
      Frmdados.QInsertSQL.execute;
      CancelaNFe_Sics;
      Locnotafiscal_Codnf(v_codnf);
      ShowMessage('Cancelado no SICS - Verifique');
      Exit;
    except
      Exit;
    end;
  end;

 

Obrigado

  • Este tópico foi criado há 3209 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.