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
_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?