Cancelar CFDI alguien que aporte, gracias

24 views
Skip to first unread message

André Ladab Serrot

unread,
Nov 5, 2018, 4:24:43 PM11/5/18
to TFacturaElectronica
Saludos a todos, actualmente tengo este CODE, para la CANCELACIÓN DE UN CFDI con el PAC Ecodex

procedure TBusqueda_ING_CancelFm.Btn_AceptarClick(Sender: TObject);
Var
  // Instancias comunes independientes de la version
  OpenSSL                : IOpenSSL;
  PacEcodex              : IProveedorAutorizadoCertificacion;
  CertificadoSellos      : ICertificadoDeSellos;
  CredencialesPAC        : TFacturacionCredencialesPAC;
  CredencialesIntegrador : TFacturacionCredencialesPAC;
  //Variables
  RutaCertificado, RutaLlavePrivada, ClaveLlavePrivada: String;

Const
  _URL_ECODEX_4N8T_V33 = 'https://wsdev.ecodex.com.mx:2045';
  _NUEMRO_TRANSACCION_INICIAL = 1;

begin
 IF (Length(Causa.Text) > 15) AND (Busqueda_INGFm.UniQ_Ingresos.FieldByName('T_DOCTO').AsString = 'RECIBO') Then
 Begin
    With UniQ_Operations Do
    Begin
     Close;
     SQL.Clear;
     SQL.Add('UPDATE ING_RECIBOS');
     SQL.Add('SET C_CANCEL = ''' + Trim(UpperCase(Causa.Text)) + ''', ');
     SQL.Add('STATUS = ''CA'''+', ');
     SQL.Add('PC_UPDATE = ''' + Terminal + ''' ');
     SQL.Add('WHERE EJERCICIO = ' + MenuGralFm.UniQ_Ejercicio.FieldByName('EJERCICIO').AsString + '');
     SQL.Add('AND RECIBO = ''' + Busqueda_INGFm.UniQ_Ingresos.FieldByName('RECIBO').AsString + '''');
     ExecSQL;
    End;
    MenuGralFm.UniTransactionWrite.CommitRetaining;
    Application.MessageBox('El FOLIO Seleccionado del RECIBO SIMPLE, Fue CANCELADO con Exito','Cancelación RECIBO SCAMi Recaudación Mpal.',mb_Ok+mb_iconInformation);
    Btn_CancelarClick(Sender);
 End
 Else
  Begin
    // El primer sello es para Ecodex
    RutaCertificado  := ExtractFilePath(Application.ExeName) + 'CSD_SAT\MHU800101Q70.cer';
    RutaLlavePrivada := ExtractFilePath(Application.ExeName) + 'CSD_SAT\MHU800101Q70.key';
    ClaveLlavePrivada:= Busqueda_INGFm.UniQ_SIS_Datos.FieldByName('CSD_PW').AsString;

    OpenSSL:= TOpenSSL.Create;
    OpenSSL.AsignarLlavePrivada(rutaLlavePrivada, claveLlavePrivada);

    CertificadoSellos:= TCertificadoDeSellos.Create;
    CertificadoSellos.Leer(rutaCertificado);

    // Verificando certificado de sellos y llave privada... sean pareja
    IF Not openSSL.SonPareja(RutaCertificado, RutaLlavePrivada, ClaveLlavePrivada) Then
    Begin
     Application.MessageBox('Los Archivos de Certificado y Llave Privada No Son Pareja. Favor de Verificar','Certificado SAT SCAMi Recaudación',mb_Ok+mb_iconInformation);
     Exit;
    End;

    PacEcodex:= TProveedorEcodex.Create; //Writeln('Creando instancia de PAC...');
    CredencialesPAC.RFC           := Busqueda_INGFm.UniQ_SIS_Datos.FieldByName('RFC').AsString;
    CredencialesPAC.DistribuidorID:= Busqueda_INGFm.UniQ_SIS_Datos.FieldByName('ID_INTEGRADOR_PAC').AsString;
    PacEcodex.Configurar(_URL_ECODEX_4N8T_V33, _URL_ECODEX_4N8T_V33, _URL_ECODEX_4N8T_V33, credencialesPAC, credencialesIntegrador,_NUEMRO_TRANSACCION_INICIAL);

      Try
         IF pacEcodex.CancelarDocumento(Busqueda_INGFm.UniQ_Ingresos.FieldByName('FE_TIMBRE_UUID').AsString) = False Then
         Begin
           With UniQ_Operations Do
           Begin
              Close;
              SQL.Clear;
              SQL.Add('UPDATE ING_RECIBOS');
              SQL.Add('SET C_CANCEL = ''' + Trim(UpperCase(Causa.Text)) + ''', ');
              SQL.Add('STATUS = ''CA'''+', ');
              SQL.Add('PC_UPDATE = ''' + Terminal + ''' ');
              SQL.Add('WHERE EJERCICIO = ' + MenuGralFm.UniQ_Ejercicio.FieldByName('EJERCICIO').AsString + '');
              SQL.Add('AND RECIBO = ''' + Busqueda_INGFm.UniQ_Ingresos.FieldByName('RECIBO').AsString + '''');
              ExecSQL;
           End;
           MenuGralFm.UniTransactionWrite.CommitRetaining;
           Application.MessageBox('El FOLIO CFDI Seleccionado, Fue CANCELADO con Exito','Cancelación CFDI SCAMi Recaudación Mpal.',mb_Ok+mb_iconInformation);
           // Recibimos el Timbre CANCELACION de forma exitosa, dejamos de "reintentar"
           Btn_CancelarClick(Sender);
         End
      Except
        On E: Exception Do
        Begin
         Application.MessageBox(PChar('** Ocurrio un error inesperado:' + E.ClassName + ': ' + E.Message),'Cancelación CFDI Recaudación Mpal.',mb_Ok+mb_iconInformation);
         MenuGralFm.UniTransactionWrite.RollbackRetaining;
         Btn_CancelarClick(Sender);
        End;
      End;
  End;
end;

Algunos de los presentes, me puede orientar como aplicar el NUEVO ESQUEMA DE CANCELACIÓN DEL CFDI?


Reply all
Reply to author
Forward
0 new messages