Función VirtualXML_CancelaCFDI
VirtualXML
Cancela un folio fiscal en los registros del SAT de acuerdo a las reglas de cancelación vigentes a partir del 1 de Noviembre de 2018.

Esta función valida los 3 posibles estados de un comprobante antes de realizar el proceso de cancelación (Cancelable, Cancelable con aceptación y No Cancelable).

No confundir con la función VirtualXML_CancelaUUID(), ya que esta queda sin operación desde el día 1 de Noviembre de 2018.
Namespace: VirtualXML®
Aplicación: CFDI 3.3
Sintaxis

public static int VirtualXML_CancelaCFDI(
string szUsuario
string szRfcEmisor
string szRfcReceptor
string szTotal
string szUuid
string sZCert
string szKey
string szPwd
string szResult
string szLog )

Parametros


szUsuario
Tipo: System String
Nombre del usuario VirtualPAC
szRfcEmisor
Tipo: System String
RFC del emisor del CFDI que queremos cancelar

szRfcReceptor
Tipo: System String
RFC del receptor del CFDI que queremos cancelar

szTotal
Tipo: System String
Importe del total del CFDI a cancelar

szUuid
Tipo: System String
UUID del CFDI a cancelar
szCert
Tipo: System String
Nombre y ruta donde se encuentra el archivo .CER
szKey
Tipo: System String
Nombre y ruta donde se encuentra el archivo .KEY
szPwd
Tipo: System String
Password del archivo .KEY
szResult
Tipo: System String
Nombre y ruta de un archivo de salida donde obtendremos el resultado de la cancelación proveniente del SAT. Este archivo es muy importante ya que muestra detalles importantes cuando un CFDI no ha podido ser cancelado o bien cuando se ha solicitado la cancelación al emisor por medio del buzon fiscal. Si se especifica la extensión ".INI" en el nombre de este archivo se obtendrán los resultados en el formato de un archivo INI, si se especifica cualquier otra extensión o bien se omite la extensión la información se presentará como un texto normal.
szLog
Tipo: System  String
Nombre y ruta de un archivo de salida donde obtendremos la bitácora del proceso de cancelación, Su función es similar a la del archivo VirtualXML.LOG, es decir, proporcionar información sobre los pasos seguidos durante el proceso de cancelación y su uso será unicamente para reportar al equipo de desarrollo de VirtualXML posibles fallas en el proceso de cancelación.


Valor retornado:

Tipo: Int32

Retorna un valor númerico que nos indicará el resultado de la cancelación, es importante que además de obtener el número resultado del proceso de cancelación revisemos el archivo de resultados para mas información sobre el resultado de la cancelación. Los posibles valores de retorno son:
  • 1 - El CFDI no es cancelable directamente, es decir, requiere autorización por parte del receptor y se ha solicitado al mismo la autorización para cancelación mediante el BUZON TRIBUTARIO del SAT. El CFDI que se desea cancelar pasará al estado de OPERANDO y se tendrá que esperar 72 horas para obtener una respuesta del receptor o bien a que opere la cancelación FICTA (cancelación automática pasado el plazo de 72 horas si no hay respuesta del receptor) Muy importante: SE COBRARÁ UN TIMBRE cuando sea necesario enviar al buzón tributario, es decir, siempre que la función regrese el valor "1" (UNO).
  • 0 - El CFDI es cancelable directamente y se ha cancelado correctamente. Es similar a la cancelación que operaba anteriormente. NO SE COBRA TIMBRE cuando la cancelación devuelve el valor "0" (CERO)
  • -1 - El CFDI no es cancelable y esto se puede deber a varias razones, entre ellas: El CFDI esta en estado de OPERANDO, el CFDI se encuentra cancelado con anterioridad, el CFDI tiene documentos relacionados que deben ser cancelados previamente, en estos casos sugerimos revisar el archivo de resultados para obtener mas información sobre las causas que impidan la cancelación del CFDI. NO SE COBRA TIMBRE cuando se rechaza la cancelación con un valor de "-1" (MENOS UNO)
  • -2 - EL CFDI no existe en los registros del SAT, este valor se retorna cuando el SAT reporta la inexistencia del CFDI que se desea cancelar en sus registros. NO SE COBRA TIMBRE cuando se rechaza la cancelación con un valor "-2" (MENOS DOS)
  • -3 - Error de comunicaciones o error en el servicio de cancelación del SAT, para mas detalles de este error, revisar el archivo de bitácora (no el de resultados). NO SE COBRA TIMBRE cuando se rechaza la cancelación con un valor "-3" (MENOS TRES)
Ejemplo:

private void GeneraDocto(String version)
{
// Solicitamos la cancelación
    int nResultado = VirtualXML_CancelaCFDI("usuario","AAA010101AAA","CTE940531F58","1160.00",;
"D8E18C2F-2859-4927-A0F0-EA3E93642DDC","C:\CSD\Archivo.CER","C:\CSD\Archivo.Key","password","C:\CSD\Resultado.INI","C:\CSD\Bitacora.log");
switch ( nResult )
{
case 1:
// Se ha solicitado la cancelación via buzon fiscal
MsgBox("Se ha solicitado la cancelación al receptor, debe espear 72 horas");
break;
case 0:
// Se ha cancelado correctamente el CFDI
MsgBox("CFDI Cancelado correctamente");
break;
case -1:
// Cancelacion rechazada
MsgBox("Se ha rechazado la cancelación del cFDI, revise el archivo Resultado.INI para mas inforamción");
break;
case -2:
// UUID no existe en el SAT
MsgBox("UUID No encontrado en los registos del SAT, intente mas tarde");
break;
case -3:
// Error en el servicio del SAT
MsgBox("Servicio de cancelaciones del SAT temporalmente fuera de servicio, reintente su operación mas tarde");
break;
}
}

Veáse Tambien

VirtualXML_CancelaUUID()
                                 VirtualXML_GetStatusCFDI()