Página 1 de 1

COMO CANCELAR UMA NFC-e com a SEFAZCLASS??

Enviado: 06 Mar 2018 15:51
por Fernando queiroz
Estou precisando cancelar uma NFC-e usando a SEFAZCLASS mas nao esta funcionando

tentei pela mesma rotina de cancelamento da NF-e mas nao fez nada, tem alguma rotina especifica para isso???

Código: Selecionar todos

********************************************************
STATIC FUNCTION NFCECANCELA(  )
********************************************************
		SELE CERTIFICADO
		IF !DBSEEK(rtrim(hwg_GetComputerName()))
			hwg_MsgInfo("Computador sem o CERTIFICADO DIGITAL instalado"+ HB_EOL()+"A Operação não poderá ser efetuada")
			SELE NOTAFE
			RETURN NIL
		endif
		SELE NOTAFCE
		
		cPrefixo := hb_Dirbase()+"xml\retorno\NFCe" + substr(NOTAFCE->a_Id,26,12)			

		xJust:=space(90)      
		oSefaz     := SefazClass():New()
		oSefaz:cCertificado := TRIM(CERTIFICADO->NOMCERT)
//		cXmlRetorno := oSefaz:NFeConsultaProtocolo( substr(NOTAFCE->a_Id,4,44), ALLTRIM(oSefaz:cCertificado) , FLAG->n_tpAmb )
//		IF XmlNode(cXmlRetorno, "cStat") != "100"
//			hwg_MsgInfo("NFC-e NAO PODE SER CANCELADA"+ HB_EOL()+ HB_EOL() +;
//				              "MOTIVO: " + XmlNode(cXmlRetorno, "xMotivo")+ HB_EOL() +;
//				              "STATUS: " + XmlNode(cXmlRetorno, "cStat")+ HB_EOL() + HB_EOL() , "Cancela NFC-e - " + substr(NOTAFCE->a_Id,29,9) ) 
//		ELSE
			IF PERG( "DESEJA CANCELAR A NFC-e " + substr(NOTAFCE->a_Id,29,9) + " ?" ) = "S"	
				cXmlRetorno:=MemoRead(cPrefixo + "_7_Autorizado.xml")
				xJust:=space(120)
				xJust:=JUSTIFICANFCE(xJust)                                      
				IF xJust = "cancela"
					RETURN NIL
				endif
				if xJust != space(20)
					oSefaz     := SefazClass():New()
					hwg_MsgInfo( substr(NOTAFCE->a_Id,4,44)+ HB_EOL() + XmlNode(cXmlRetorno, "nProt")+ HB_EOL() +RTRIM(xJust)+ HB_EOL() +TRIM(CERTIFICADO->NOMCERT))
					
					
					
					cXmlRetorno := oSefaz:NFeEventoCancela( substr(NOTAFCE->a_Id,4,44), 1, val(XmlNode(cXmlRetorno, "nProt")), RTRIM(xJust), TRIM(CERTIFICADO->NOMCERT), FLAG->n_tpAmb )		
					hb_MemoWrit( cPrefixo + "_9_Cancelamento.xml", cXmlRetorno )
					cXmlRetorno := XmlNode( cXmlRetorno, "retEvento" )
					if XmlNode(cXmlRetorno, "cStat") == "135"		
						hwg_MsgInfo("NFC-e SOLICITACAO DE CANCELAMENTO EFETUADA COM SUCESSO"+ HB_EOL()+ HB_EOL() +;
										  "MOTIVO: " + XmlNode(cXmlRetorno, "xMotivo")+ HB_EOL() +;
										  "STATUS: " + XmlNode(cXmlRetorno, "cStat")+ HB_EOL() + HB_EOL() , "Cancela NFC-e - " + substr(NOTAFCE->a_Id,29,9) ) 
					else
						hwg_MsgInfo("NFC-e SOLICITACAO DE CANCELAMENTO RECUSADA"+ HB_EOL()+ HB_EOL() +;
										  "MOTIVO: " + XmlNode(cXmlRetorno, "xMotivo")+ HB_EOL() +;
										  "STATUS: " + XmlNode(cXmlRetorno, "cStat")+ HB_EOL() + HB_EOL() , "Cancela NFC-e - " + substr(NOTAFCE->a_Id,29,9) )						
					endif
				endif
			endif
//		ENDIF
RETURN NIL

**********************************************************************************************************************
STATIC FUNCTION JUSTIFICANFCE(cJust)
**********************************************************************************************************************
  LOCAL oDlg,  oButton1, oButton2, oJust, oLabel1

  INIT DIALOG oDlg TITLE "INFORME A JUSTIFICATIVA PARA CANCELAMENTO DA NFC-E " + substr(NOTAFCE->a_Id,29,9)    AT 0, 0 SIZE 751,136 NOEXIT  ;
     STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+WS_SIZEBOX+DS_CENTER 
    Thisform := oDlg

   @ 546,80 BUTTON oButton1 CAPTION "Ok"   SIZE 90,30 ;
        STYLE BS_CENTER +WS_TABSTOP ;
        ON CLICK {|| cJust:=UPPER(cJust),oDlg:close() }
   @ 649,80 BUTTON oButton2 CAPTION "Cancelar"   SIZE 90,30 ;
        STYLE BS_CENTER +WS_TABSTOP  ;
        ON CLICK {|| cJust:="cancela",oDlg:close() }
   @ 97,27 GET oJust VAR cJust SIZE 646,24  STYLE ES_AUTOHSCROLL  MAXLENGTH 120  
   @ 7,29 SAY oLabel1 CAPTION "Justificativa:"  SIZE 85,21  

   ACTIVATE DIALOG oDlg 


RETURN cJust
:% :% :% :% :% :% :% :%

COMO CANCELAR UMA NFC-e com a SEFAZCLASS??

Enviado: 06 Mar 2018 16:14
por JoséQuintas
Pra NFCe é necessário Sefaz:cNFCe := "S"
Essa é a forma de diferenciar webservice de NFE e NFCE.

Para alguns eventos dá pra pegar da chave de acesso, o modelo 65.
Com base nisso, depois vou melhorar a classe pra ela pegar automático aonde possível - cancelamento, protocolo, carta, etc.

COMO CANCELAR UMA NFC-e com a SEFAZCLASS??

Enviado: 06 Mar 2018 17:47
por Fernando queiroz
quintas baixei as atualizações da SEFAZCLASS e gerei novamente as lib recompilei e funcionou , acho que o que eu tinha estava desatualizado , mas no cancelamento
ocorreu algo engraçado

NFC-e 2018-03-06T15:01:09-05:00
CANCELAMENTO 2018-03-06T15:27:09-05:00

E ESTA DANDO ERRO 577: A data do evento não pode ser menor que a data de emissão da NF-e

:% :% :% :% :%

peguei uma nota emitida a mais horas e cancelou normalmente, vai entender

COMO CANCELAR UMA NFC-e com a SEFAZCLASS??

Enviado: 06 Mar 2018 18:29
por JoséQuintas
Alguma chance da data/hora de autorização ser acima da data/hora que está indicando no evento?

Me veio na cabeça uma coisa:
E o webservice que atende várias UFs?
Qual será o fuso horário? da UF que processa ou da UF do documento?
E será que considera isso pra tudo, ou só pra determinadas coisas?

Voltando à Sefaz:
Na alteração atual, coloquei detecção de NFE/NFCE no cancelamento.
Pode ser o que fez diferença aí.

COMO CANCELAR UMA NFC-e com a SEFAZCLASS??

Enviado: 06 Mar 2018 19:06
por Fernando queiroz
Quntas descobri a coisa do horario, o Webserver trabalha com o horario local como o Acre esta a 2:00 horas do Rio Grande do Sul ele so cancela apos duas horas da emissão da nota,
:(Neg :(Neg :(Neg :(Neg :(Neg :(Neg :(Neg