Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Factura Electronica Paraguay - SIFEN (https://www.clubdelphi.com/foros/showthread.php?t=95864)

JCz 09-09-2022 03:17:13

Factura Electronica Paraguay - SIFEN
 
1 Archivos Adjunto(s)
Buenas;

Adjunto las clases generadas por el asistente del Delphi para la generación de los XML de la factura electronica.

JCz 11-09-2022 01:06:42

1 Archivos Adjunto(s)
por si sirva a alguien como guia, paso formato de los xml de, cambiando los datos sensibles por XXXXXX
Factura
AutoFactura
Nota de Credito
Nota de debito
Nota de Remision

dec 11-09-2022 19:14:52

Hola a todos,

Muchas gracias, también en nombre de quienes han descargado tus archivos, por tu aportación. :)

Casimiro Notevi 11-09-2022 19:30:40

^\||/^\||/^\||/

JCz 20-09-2022 02:05:00

Adjunto la función que utilizo para generar la url del QR

Código Delphi [-]
function TdmSIGCZFE.generarQR(
                              _QRVersion : AnsiString;                      // Version del Manual Técnico = 150
                              _QRId : AnsiString;                             // código CDC string de 44 caracteres 
                              _QRdFeEmiDE : AnsiString;                 // Fecha emision del D.E.
                              _QRdRucRec : AnsiString;                   // RUC del contribuyente
                              _QRdTotGralOpe : AnsiString;             // importe total de la operación
                              _QRdTotIVA : AnsiString;                   // importe del IVA de la operación
                              _QRcItems : AnsiString;                    // cantidad de items facturado
                              _QRDigestValue : AnsiString;            // Digest de la firma
                              _QRIdCSC : AnsiString;                    // id del Codigo CSC facilitado por la SET para la generación de la url (puede haber 2)
                              _QRCSC : AnsiString): AnsiString;    // Código CSC facilitado por la SET para la generación de la url  (puede haber 2)
var
      _cHashQR : AnsiString;
      _QR,_QRCalcHash : AnsiString;
begin

      _QR := 'nVersion='+_QRVersion +'&' +
              'Id='+_QRId+'&' +
              'dFeEmiDE='+ lowercase((String2Hex(_QRdFeEmiDE))) +'&' +   //convertimos la fecha en su valor hexadecimal
              ''+_QRdRucRec +'&' +
              'dTotGralOpe='+_QRdTotGralOpe + '&' +
              'dTotIVA='+ _QRdTotIVA + '&' +
              'cItems='+ _QRcItems + '&' +
              'DigestValue=' + lowercase((String2Hex(_QRDigestValue))) + '&' +  //convertimos el digest de la firma en su valor hexadecimal
              'IdCSC=' + _QRIdCSC;


      _QRCalcHash := _QR + _QRCSC;                              // al valor calculado en paso anterior se adiciona el codigo CSC
      _cHashQR    :=  GetStrHashSHA256(_QRCalcHash);  // el resultado del paso anterior lo Generaramos el Hash

      _QR := _QR + '&cHashQR=' + _cHashQR;

      if idAmbienteActual = 1 then // ambiente de prueba
            _QR := urlQRPrueba + _QR
      else  if idAmbienteActual = 2 then  // ambiente de producción
            _QR := urlQRProduccion + _QR;

      result := StringReplace(_QR,'&','&',[rfReplaceAll, rfIgnoreCase]);  // escapamos el & por '&'
end;

abajo las otras funciones utilizadas


Código Delphi [-]
function String2Hex(const Buffer: AnsiString): string;
begin
  SetLength(Result, Length(Buffer) * 2);
  BinToHex(PAnsiChar(Buffer), PChar(Result), Length(Buffer));
end;

Código Delphi [-]
function GetStrHashSHA256(Str: String): String;
var
  HashSHA: THashSHA2;
begin
    HashSHA := THashSHA2.Create;
    HashSHA.GetHashString(Str);
    result := HashSHA.GetHashString(Str,SHA256);
end;

JCz 20-09-2022 02:12:49

el resultado de la función se debe agregar al xml en el tag

Código:

<gCamFuFD>
<dCarQR>h_t_t_p_s://ekuatia.set.gov.py/consultas-test/qr?nVersion=150&amp;Id=010XXXXXX001001000006212022091914019076583&amp;dFeEmiDE=323032322d30392d31395431393a33313a3331&amp;dRucRec=XXXXXX&amp;dTotGralOpe=1036424.00&amp;dTotIVA=94220.35&amp;cItems=3&amp;DigestValue=70757447585833595a5a66555263354d2f724658716135504c776c64716f7a46635449384b44323843666f3d&amp;IdCSC=0001&amp;cHashQR=d4691e96002fdc2ed6518055f2ba983a59cd940a24f7ed43a3f82454d5fbc719
</dCarQR>
</gCamFuFD>


JCz 21-10-2022 00:13:01

Firma Xml
 
1 Archivos Adjunto(s)
Para la firma del XML utilizo la librería de Chilkat; paso en adjunto como lo hago.

Saludos!!

JEBOJEDA 13-01-2023 14:46:11

hola buen dia

en el archivo recibe.pas, llama una funciona que el compilador no lo encuentra y no veo una unidad en el USES tampoco,

--- > function rEnviDe(const rEnviDe: rEnviDe): rRetEnviDe; stdcall;

Gracias. y Saludos...

JCz 15-01-2023 02:03:09

Recibe.pas es para consumir el servicio que recibe el xml dela factura electrónica, con que versión de Delphi lo estás probando? Como tratas de consumir el web service?

JCz 15-01-2023 02:26:32

Cita:

Empezado por JEBOJEDA (Mensaje 550002)
hola buen dia

en el archivo recibe.pas, llama una funciona que el compilador no lo encuentra y no veo una unidad en el USES tampoco,

--- > function rEnviDe(const rEnviDe: rEnviDe): rRetEnviDe; stdcall;

Gracias. y Saludos...

Ahora me percaté, debes cambiar esa función por esta
Código Delphi [-]
  function  rEnviDe(const rEnviDe: UnicodeString): UnicodeString; stdcall;

hoyosfelix 02-08-2023 04:25:47

Sifen en Lazarus.
 
Hola.


Gracias por compartir tu código aquí.


Te hago una pregunta:

¿Vos decís que va a ser posible implementar todo esto en Lazarus?


Saludos.

JCz 02-08-2023 04:39:53

Cita:

Empezado por hoyosfelix (Mensaje 552226)
Hola.


Gracias por compartir tu código aquí.


Te hago una pregunta:

¿Vos decís que va a ser posible implementar todo esto en Lazarus?


Saludos.

Hola, no veo porque no se podría ya que ambos tienen Pascal como lenguaje base, desconozco si Lazarus tiene el equivalente al componente Httprio que es en gran parte el utilizado para el consumo del webservice del SIFEN.

Saludos y suerte con el proyecto.

Casimiro Notevi 02-08-2023 09:32:10

Seguramente este: https://wiki.lazarus.freepascal.org/...ervice_Toolkit

marioerp 05-08-2023 16:13:47

Ejemplo
 
Cita:

Empezado por JCz (Mensaje 550029)
Ahora me percaté, debes cambiar esa función por esta
Código Delphi [-]
  function  rEnviDe(const rEnviDe: UnicodeString): UnicodeString; stdcall;


Podrian publicar un ejemplo llamando al servicio de consultar ruc..

Gracias.

JCz 05-08-2023 19:30:12

Consulta Ruc - Sifen
 
2 Archivos Adjunto(s)
Cita:

Empezado por marioerp (Mensaje 552260)
Podrian publicar un ejemplo llamando al servicio de consultar ruc..

Gracias.

Buenas


Paso como lo tengo yo.


Saludos

marioerp 06-08-2023 23:04:38

Gracias JCZ, estoy tratando de consumir con delphi 10.2, al parecer el HTTPRIO en esta version no tiene la propiedad HTTPWebNode.SecureProtocols.

Podrias pasarme tu contacto (email o whatsapp) para ver si podemos conversar un poco mas?

JCz 08-08-2023 02:11:45

Cita:

Empezado por marioerp (Mensaje 552266)
Gracias JCZ, estoy tratando de consumir con delphi 10.2, al parecer el HTTPRIO en esta version no tiene la propiedad HTTPWebNode.SecureProtocols.

Podrias pasarme tu contacto (email o whatsapp) para ver si podemos conversar un poco mas?

Buenas, para procesar no es necesario configurar en tiempo de ejecución el TLS, yo lo hago porque uno de los (PSC) Code100 emite mal el certificado, según manual 150 debe ser TLS2 pero CODE100 emite mal y hay que forzar el envío en TLS1.

Si tienes el Certificado de otro PSC puede obviar esa sección. Yo uso D11, no tengo como probar en D10.

Saludos

marioerp 08-08-2023 05:34:34

Cita:

Empezado por JCz (Mensaje 552279)
Buenas, para procesar no es necesario configurar en tiempo de ejecución el TLS, yo lo hago porque uno de los (PSC) Code100 emite mal el certificado, según manual 150 debe ser TLS2 pero CODE100 emite mal y hay que forzar el envío en TLS1.

Si tienes el Certificado de otro PSC puede obviar esa sección. Yo uso D11, no tengo como probar en D10.

Saludos


Del mismo emisor es mi certificado, code 100.

marioerp 09-08-2023 15:25:25

Consultar ruc de la set
 
1 Archivos Adjunto(s)
Buenas.

Adjunto proyecto de consultar ruc de la set... Tengo problemas para anhadirle el certificado, si pueden corregir donde estoy errando seria de gran ayuda.

JCz 09-08-2023 16:08:15

Cita:

Empezado por marioerp (Mensaje 552287)
Buenas.

Adjunto proyecto de consultar ruc de la set... Tengo problemas para anhadirle el certificado, si pueden corregir donde estoy errando seria de gran ayuda.

Buenas

1- El certificado debe estar instalado en la PC

2- No haz incluido el procedure findclientcertificate

Código Delphi [-]
procedure TdmRIO.findClientCertificate(
  const Sender: TObject; const ARequest: TURLRequest;
  const ACertificateList: TCertificateList; var AnIndex: Integer);
var
    i : integer;
begin
      for I := 0 to ACertificateList.Count-1 do begin
          if SameText(ACertificateList[i].SerialNum,'74926b31c944fe9648575fa99162761a') then begin
            AnIndex := I;
            break;
          end;
      end;
end;

3- "Descomenta" esta parte

Código Delphi [-]
 HTTPRIOConsultaRUC.HTTPWebNode.ClientCertificate.SerialNum := '74926b31c944fe9648575fa99162761a';
 HTTPRIOConsultaRUC.HTTPWebNode.OnNeedClientCertificate := findClientCertificate;
 HTTPRIOConsultaRUC.OnBeforeExecute := BeforeExecute;
 HTTPRIOConsultaRUC.OnAfterExecute  := AfterExecute;

4- Utiliza el protocolo TLS1.1

Código Delphi [-]
HTTPRIOConsultaRUC.HTTPWebNode.SecureProtocols := [THTTPSecureProtocol.TLS11];

Saludos


La franja horaria es GMT +2. Ahora son las 04:47:19.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi