Jump to content

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

Recommended Posts

Posted

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

Posted

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á 3288 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

The popup will be closed in 10 seconds...