LES COMPARTO LA OPCION PARA CANCELAR CFDI, CON EL PAC ECODEX

39 views
Skip to first unread message

André Ladab Serrot

unread,
Feb 3, 2018, 3:17:49 PM2/3/18
to TFacturaElectronica
Si alguien tiene una MEJORA  al siguiente CODE, pido que lo compartas, gracias

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
  Reintentar             : Boolean;
  RutaCertificado, RutaLlavePrivada, ClaveLlavePrivada: String;

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

Begin

// El primer sello es para Ecodex
    RutaCertificado  := ExtractFilePath(Application.ExeName) + 'CSD Pruebas\CSD_Pruebas_CFDI_VOC990129I26.cer';
    RutaLlavePrivada := ExtractFilePath(Application.ExeName) + 'CSD Pruebas\CSD_Pruebas_CFDI_VOC990129I26.cer.key';
    ClaveLlavePrivada:= '12345678a';

    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 ',mb_Ok+mb_iconInformation);
     Exit;
    End;

    PacEcodex:= TProveedorEcodex.Create; //Writeln('Creando instancia de PAC...');
    CredencialesPAC.RFC           :='VOC990129I26';
    CredencialesPAC.DistribuidorID:= '2b3a8764-d586-4543-9b7e-82834443f219';
    PacEcodex.Configurar(_URL_ECODEX_4N8T_V33, _URL_ECODEX_4N8T_V33, _URL_ECODEX_4N8T_V33, credencialesPAC, credencialesIntegrador,_NUEMRO_TRANSACCION_INICIAL);
    // Inicializamos la variable de re-intentar en verdadero para intentar timbrar cada vez que falle el servicio del PAC
    Reintentar:= True;
    While Reintentar Do
    Begin
      Try
         IF pacEcodex.CancelarDocumento(Busqueda_INGFm.UniQ_Facturas.FieldByName('FE_TIMBRE_UUID').AsString) Then
         Begin
           //Actualizar en la Base de Datos, Causa y STATUS de Cancelación del CFDI
           With UniQ_Operations Do
           Begin
              Close;
              SQL.Clear;
              SQL.Add('UPDATE ING_FACTURAS');
              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 FOLIO = ''' + Busqueda_INGFm.UniQ_Facturas.FieldByName('FOLIO').AsString + '''');
              ExecSQL;
           End;
           MenuGralFm.UniTransactionWrite.CommitRetaining;
           Application.MessageBox('El FOLIO CFDI Seleccionado, Fue CANCELADO con Exito','Cancelación CFDI.',mb_Ok+mb_iconInformation);

           // Recibimos el Timbre CANCELACION de forma exitosa, dejamos de "reintentar"
           Reintentar:= False;
           Btn_CancelarClick(Sender);
         End
      Except
        On E: EPACErrorGenericoException do
        Begin
          AllocConsole;
          Writeln('--------------------------------------------------');
          Writeln('Problema Temporal al Timbrar LA CANCELACION, Re-Intentando en 3 segundos: ', E.Message);
          Sleep(3000);
          FreeConsole;
        End;
      End;
    End;

End;

Reply all
Reply to author
Forward
0 new messages