Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   SII -Nuevo sistema de la Agencia Tributaria española de envío de datos vía Webservice (https://www.clubdelphi.com/foros/showthread.php?t=91252)

Javierus 12-06-2024 18:59:09

Problemas con envío a Canarias
 
Hola,
Desde ayer estoy teniendo problemas con los envíos al SII de Canarias; estoy utilizando:
https://sede.gobiernodecanarias.org/...iiFactFEV1SOAP
https://sede.gobiernodecanarias.org/...iiFactFRV1SOAP

Y desde ayer la conexión me da "connection timed out", tanto desde instalaciones/equipamiento del cliente como nuestros

¿Sabéis si han cambiado o se han caído esos endpoints?

¡¡Gracias!!

chenech 12-06-2024 19:49:45

Si, están caídos, nos han llamado todos los clientes ayer y hoy que no le funciona a ninguno e intentan dar de alta alguna factura directamente en la plataforma y tampoco les funciona.
Un saludo.

sglorka 12-06-2024 22:52:21

Confirmo la información. Desde ayer por la tarde sólo responde connection timeout. Confirmado al subir una factura desde la propia plataforma de la ATC

Javierus 12-06-2024 23:52:59

Muchas gracias; ya no sabía dónde mirar

Noe277 14-06-2024 10:04:13

Sii
 
Buenas,

Nos a llamado algún cliente y nos a dicho que mandan al SII y que luego entran a la Web y no ven nada.
Estos no mandan a canarias.

sglorka 14-06-2024 11:04:13

Ya están habilitados los endpoints en la Agencia tributaria canaria.

razorxxx 27-06-2024 14:47:24

Solución al OnBeforePost en Delphi 10.3 y superiores
 
Cita:

Empezado por razorxxx (Mensaje 545013)
Dado que aún no he conseguido hacer funcionar el procedimiento OnBeforePost del HTTPRIO en Delphi Rio, estoy tratando de prescindir de ese método, y asignando (justo antes de la petición al WebService) la llamada al HTTPRIO1.HTTPWebNode.ClientCertificate.SerialNum, usando la función
Código:

function BUSCAR_CERTIFICADO(Nombre_Certificado: String): string;
que ya han mencionado en un post anterior.

Sin embargo, cuando hago
Código:

HTTPRIO1.HTTPWebNode.ClientCertificate.SerialNum := Buscar_Certificado(Cert.Text)
, me devuelve una cadena vacía. Según me he estado informando, esto solo sirve para cuando el certificado está en el almacén de certificados del equipo, pero no para cuando trabajamos con un fichero PFX/P12.

¿Alguien tiene alguna idea acerca de cargar un .pfx o .p12 en un objeto THTTPRIO, usando HTTPWebNode.ClientCertificate y prescindiendo de la llamada al OnBeforePost?

Buenas a todos.

Hasta ahora, para cargar un certificado desde archivo antes de realizar una petición con un objeto HTTPRIO utilizaba la librería capicom.dll desde el método OnBeforePost. Pero como comenté en su día, el método había cambiado desde la versión 10.3 de Delphi, ya que el Data: Pointer lo cambiaron a Client: THTTPClient.

Pues bien, después de mucho batallar, he conseguido hacerlo funcionar y además prescindiendo de la antigua librería capicom, simplemente usando métodos nativos de la librería crypt32.dll de Windows.

Primeramente, antes de llamar al bloque "implementation" de nuestro código, poner la siguiente línea:

Código Delphi [-]
function PFXImportCertStore(var pPFX: CRYPT_DATA_BLOB; szPassword: LPCWSTR; dwFlags: DWORD): HCERTSTORE; stdcall; external 'Crypt32.dll';

Luego en el método
Código Delphi [-]
HTTPRIOHTTPWebNodeBeforePost(const HTTPReqResp: THTTPReqResp; Client: THTTPClient)
se pone lo siguiente:

Código Delphi [-]
const
     PKCS12_INCLUDE_EXTENDED_PROPERTIES  = $0010;
     CERT_COMPARE_HAS_PRIVATE_KEY        = 21;
     CERT_FIND_HAS_PRIVATE_KEY           = CERT_COMPARE_HAS_PRIVATE_KEY shl CERT_COMPARE_SHIFT;
var
   Almacen: HCERTSTORE;
   Certificado: PCERT_CONTEXT;
   DataBlob: CRYPT_DATA_BLOB;
   PFX: TBytes;
begin
     Almacen := nil;
     Certificado := nil;
     PFX := TFile.ReadAllBytes(Cert.Text);
     Try
        DataBlob.cbData := Length(PFX);
        DataBlob.pbData := @PFX[0];

        // Defino mi almacén con el único certificado seleccionado, en lugar del almacén con todos los certificados de Windows
        Almacen := PFXImportCertStore(DataBlob, PWideChar(Pwd.Text), PKCS12_INCLUDE_EXTENDED_PROPERTIES);
        If not Assigned(Almacen) Then
            Salida.Lines.Add('[ERROR] No se pudo importar el certificado seleccionado.')  //RaiseLastOSError;
        Else
        Begin
             Certificado := CertFindCertificateInStore(Almacen, X509_ASN_ENCODING, 0, CERT_FIND_HAS_PRIVATE_KEY, nil, nil);
             If not Assigned(Certificado) Then
                 Salida.Lines.Add('[ERROR] No se pudo encontrar el certificado digital en el contexto actual, o bien no tiene clave privada.');  //RaiseLastOSError;
        End;
     Finally
            If Assigned(Certificado) Then CertFreeCertificateContext(Certificado);
            If Assigned(Almacen) Then CertCloseStore(Almacen, 0);
     End;
end;

, sabiendo que la ruta completa al certificado .pfx o .p12 está en un campo TEdit llamado 'Cert', y su contraseña en otro TEdit llamado 'Pwd'.

No olviden asignar este método al OnBeforePost del objeto HTTPRIO que realiza la petición al webservice, de lo contrario recibirán el error Received content of invalid Content-Type setting: text/html - SOAP expects "text/xml".

Espero haber ayudado. Saludos.

razorxxx 28-06-2024 16:01:48

Nada, olviden lo anterior. Seguía dando problemas para conectar, porque faltaba asignarle el certificado al objeto HTTPReqResp, parece ser que me estaba cogiendo el primero que veía en el almacén de certificados.

Pero lo he solucionado. Todo es más fácil de lo que pensaba.

El método
Código Delphi [-]
HTTPRIOHTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Client: THTTPClient)
debe quedar así:

Código Delphi [-]
var
   CertStream: TMemoryStream;
begin
     CertStream := TMemoryStream.Create;
     CertStream.LoadFromFile(Cert.Text);
     HTTPReqResp.ClientCertificate.Stream := CertStream;
     HTTPReqResp.ClientCertificate.Password := Pwd.Text;
end;

Ahora ya puedo seleccionar el certificado que quiera antes de cualquier petición y prescindir de la librería CAPICOM.

Saludos.

keno_71 28-06-2024 16:20:44

Cita:

Empezado por razorxxx (Mensaje 556425)
Nada, olviden lo anterior. Seguía dando problemas para conectar, porque faltaba asignarle el certificado al objeto HTTPReqResp, parece ser que me estaba cogiendo el primero que veía en el almacén de certificados.

Pero lo he solucionado. Todo es más fácil de lo que pensaba.

El método
Código Delphi [-]
HTTPRIOHTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Client: THTTPClient)
debe quedar así:

Código Delphi [-]
var
   CertStream: TMemoryStream;
begin
     CertStream := TMemoryStream.Create;
     CertStream.LoadFromFile(Cert.Text);
     HTTPReqResp.ClientCertificate.Stream := CertStream;
     HTTPReqResp.ClientCertificate.Password := Pwd.Text;
end;

Ahora ya puedo seleccionar el certificado que quiera antes de cualquier petición y prescindir de la librería CAPICOM.

Saludos.


Gracias razorxxx, estoy en Delphi Berlin y veía que uno de los cambios que me afectaba para pasar a un delphi superior era ese

razorxxx 01-07-2024 15:58:53

Cita:

Empezado por keno_71 (Mensaje 556427)
Gracias razorxxx, estoy en Delphi Berlin y veía que uno de los cambios que me afectaba para pasar a un delphi superior era ese

Gracias a la ayuda del usuario Garada de este foro he sabido que cada vez que se realiza una petición al webservice se guarda un fichero temporal con la clave privada encriptada en la ruta %appdata%\Microsoft\Crypto\RSA\S-1-5-21-algomás. Esto significa que en apenas 1 año habremos acumulado cientos o miles de archivos que no sirven para nada, si bien es verdad que ocupan muy poco espacio.

Si usas la librería crypto32.dll y quieres deshacerte de estos archivos, Garada aporta la siguiente solución en otro hilo: https://www.clubdelphi.com/foros/sho...0&postcount=50 .

En mi caso, como no uso ni crypto32.dll ni capicom.dll, para borrar estos archivos automáticamente lo que hago es moverme a la ruta %appdata%\Microsoft\Crypto\RSA\ y cuando encuentre el directorio que empieza por S-1-5-21, borro su contenido.

Si bien es verdad que otras aplicaciones pueden estar guardando estos temporales en la misma carpeta, en mi caso ningún usuario va a estar trabajando simultáneamente con 2 aplicaciones a la vez, así que los borro sin piedad. En cualquier caso, como sólo se usan en el contexto en el que fueron creados, interpreto que solamente se usarán en su mayoría durante pocos milisegundos o segundos.

fercapfor 09-07-2024 19:48:00

Cita:

Empezado por razorxxx (Mensaje 556425)
Nada, olviden lo anterior. Seguía dando problemas para conectar, porque faltaba asignarle el certificado al objeto HTTPReqResp, parece ser que me estaba cogiendo el primero que veía en el almacén de certificados.

Pero lo he solucionado. Todo es más fácil de lo que pensaba.

El método
Código Delphi [-]
HTTPRIOHTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Client: THTTPClient)
debe quedar así:

Código Delphi [-]
var
   CertStream: TMemoryStream;
begin
     CertStream := TMemoryStream.Create;
     CertStream.LoadFromFile(Cert.Text);
     HTTPReqResp.ClientCertificate.Stream := CertStream;
     HTTPReqResp.ClientCertificate.Password := Pwd.Text;
end;

Ahora ya puedo seleccionar el certificado que quiera antes de cualquier petición y prescindir de la librería CAPICOM.

Saludos.

Hola razorxxx, grácias por los aportes.
El ejemplo que indicas no me funciona en Delphi 10.4 ya que ClientCertificate no tiene la propiedad 'Stream' ni tampoco 'Password'.
He intentado sobreescribir el fichero 'Soap.SOAPHTTPTrans.pas' con una versión de Delphi 11.......y sigue sin funcionar.
Hay que modificar algo más ?
Grácias

rci 10-07-2024 10:34:35

Rectificativa de Ventanilla Única OSS sin tener el CIF del comprador
 
Cita:

Empezado por rci (Mensaje 555455)
Por fin hoy me han contestado de hacienda a la consulta de como facturar y como enviar a SII ventas de Ventanilla Única OSS sin tener el CIF del comprador.

Resumiendo un poco, me han dicho lo siguiente:


Por lo tanto en el caso de OSS si no tenemos el CIF enviaremos el tipo de factura F2

Saludos

Hola hace unos días comenté en este foro el caso de facturas de Ventanilla Única OSS sin tener el CIF del comprador. Ya funciona correctamente pero ahora nos encontramos que alguna de esas facturas se ha hecho una rectificativa y como enviamos el tipo de factura F2 pues no indicamos que es una rectificativa (R4) cuando si lo es y por eso especificamos el TipoRectificativa.
Las facturas son rechazadas con el siguiente error:
Cita:

Si la factura no es del tipo rectificativa, el campo TipoRectificativa no debe tener valor
En este caso que no tengo claro que debemos hacer.
Si queremos indicar que es rectificativa pero no tenemos el CIF podemos utilizar el tipo R5 (Factura Rectificativa en facturas simplificadas) o mejor indicar R4 (Factura Rectificativa (Resto)) y utilizar la clave idOtro.IDType = 06 (Otro documento probatorio) para poner el CIF con un 0 (por ejemplo)?

Muchas gracias

newtron 10-07-2024 11:02:03

Cita:

Empezado por rci (Mensaje 556625)
Hola hace unos días comenté en este foro el caso de facturas de Ventanilla Única OSS sin tener el CIF del comprador. Ya funciona correctamente pero ahora nos encontramos que alguna de esas facturas se ha hecho una rectificativa y como enviamos el tipo de factura F2 pues no indicamos que es una rectificativa (R4) cuando si lo es y por eso especificamos el TipoRectificativa.
Las facturas son rechazadas con el siguiente error:


En este caso que no tengo claro que debemos hacer.
Si queremos indicar que es rectificativa pero no tenemos el CIF podemos utilizar el tipo R5 (Factura Rectificativa en facturas simplificadas) o mejor indicar R4 (Factura Rectificativa (Resto)) y utilizar la clave idOtro.IDType = 06 (Otro documento probatorio) para poner el CIF con un 0 (por ejemplo)?

Muchas gracias


No se me ha dado el caso pero entiendo que si pones un tipo relativo a facturas simplificadas no necesitarás rellenar esos campos.


Saludos.

sglorka 10-07-2024 11:43:44

Cita:

Empezado por rci (Mensaje 556625)
Hola hace unos días comenté en este foro el caso de facturas de Ventanilla Única OSS sin tener el CIF del comprador. Ya funciona correctamente pero ahora nos encontramos que alguna de esas facturas se ha hecho una rectificativa y como enviamos el tipo de factura F2 pues no indicamos que es una rectificativa (R4) cuando si lo es y por eso especificamos el TipoRectificativa.
Las facturas son rechazadas con el siguiente error:


En este caso que no tengo claro que debemos hacer.
Si queremos indicar que es rectificativa pero no tenemos el CIF podemos utilizar el tipo R5 (Factura Rectificativa en facturas simplificadas) o mejor indicar R4 (Factura Rectificativa (Resto)) y utilizar la clave idOtro.IDType = 06 (Otro documento probatorio) para poner el CIF con un 0 (por ejemplo)?

Muchas gracias

Si tienes que hacer una factura rectificativa de una simplificada, sólo tienes una opción, y es enviarla como R5. R1, R2, R3 y R4 sólo son para facturas rectificativas completas.

Por otro lado, te agradecería que publicaras el xml de una factura simplificada para el caso de ventanilla única OSS para contrastarlo, Gracias

rci 10-07-2024 12:02:47

Cita:

Empezado por sglorka (Mensaje 556628)
Si tienes que hacer una factura rectificativa de una simplificada, sólo tienes una opción, y es enviarla como R5. R1, R2, R3 y R4 sólo son para facturas rectificativas completas.

Por otro lado, te agradecería que publicaras el xml de una factura simplificada para el caso de ventanilla única OSS para contrastarlo, Gracias


Muchas gracias newtron y sglorka por las respuestas.

De hecho nuestro programa no permite hacer facturas simplificadas con IVA de otro país de la UE, ventanilla única OSS. PERO
este caso se refiere a facturas completas que no tienen el cif del destinatario y las enviamos con el tipo F2, según indicación de hacienda, como puedes ver si sigues el hilo de esté post.
El problema que tenemos ahora es cuando se rectifica esa factura completa pero sin el cif del cliente y que es de ventanilla única.

sglorka 10-07-2024 12:08:09

Cita:

Empezado por rci (Mensaje 556629)
Muchas gracias newtron y sglorka por las respuestas.

De hecho nuestro programa no permite hacer facturas simplificadas con IVA de otro país de la UE, ventanilla única OSS. PERO
este caso se refiere a facturas completas que no tienen el cif del destinatario y las enviamos con el tipo F2, según indicación de hacienda, como puedes ver si sigues el hilo de esté post.
El problema que tenemos ahora es cuando se rectifica esa factura completa pero sin el cif del cliente y que es de ventanilla única.

Y por qué no puedes emitir la misma factura con clave F2, tipo rectificativa R5 y sin identificación de destinatario ?

rci 10-07-2024 12:47:45

Cita:

Empezado por sglorka (Mensaje 556630)
Y por qué no puedes emitir la misma factura con clave F2, tipo rectificativa R5 y sin identificación de destinatario ?

Si, es una de las opciones que quiero probar, pero no se cual es la mejor ni cual es la correcta.
Cuando sepa algo mas os informo.

gracias!

rci 24-07-2024 16:42:46

Rectificativa de Ventanilla Única OSS sin tener el CIF del comprador
 
Cita:

Empezado por sglorka (Mensaje 556630)
Y por qué no puedes emitir la misma factura con clave F2, tipo rectificativa R5 y sin identificación de destinatario ?

Perdona sglorka no te respondí correctamente:
No puedo indicar a la vez la clave F2 y la clave R5 porque es una única propiedad y solo puedo indicar un valor.




Recordatorio, es una factura completa pero no tenemos el cif del cliente. Es una factura rectificativa de una factura de ventanilla única OSS.

Opción 1
Clave de régimen especial 17 // Ventanilla única OSS
TipoRectificativa = ClaveTipoRectificativaType.I; // por diferencias
ClaveTipoFacturaType.R5; // Factura Rectificativa en facturas simplificadas
No indicar datos de la contraparte


Opción 2
Clave de régimen especial 17 // Ventanilla única OSS
TipoRectificativa = ClaveTipoRectificativaType.I; // por diferencias
ClaveTipoFacturaType.R4; // Factura Rectificativa (Resto)
Informar los datos de la contraparte.
idOtro.IDType = PersonaFisicaJuridicaIDTypeType.Item06; // Otro documento probatorio
idOtro.ID = 0; // No disponemos del CIF


He probado las dos opciones y de las dos formas se ha aceptado correctamente la factura. No se cual será la correcta :confused:
En una estoy indicando que es una simplificada cuando no lo es y en la otra estoy enviando un 0 como documento identificativo del receptor:(

Muchas gracias por vuestro tiempo. Saludos!

sglorka 24-07-2024 17:11:37

Cita:

Empezado por rci (Mensaje 556817)
Perdona sglorka no te respondí correctamente:
No puedo indicar a la vez la clave F2 y la clave R5 porque es una única propiedad y solo puedo indicar un valor.




Recordatorio, es una factura completa pero no tenemos el cif del cliente. Es una factura rectificativa de una factura de ventanilla única OSS.

Opción 1
Clave de régimen especial 17 // Ventanilla única OSS
TipoRectificativa = ClaveTipoRectificativaType.I; // por diferencias
ClaveTipoFacturaType.R5; // Factura Rectificativa en facturas simplificadas
No indicar datos de la contraparte


Opción 2
Clave de régimen especial 17 // Ventanilla única OSS
TipoRectificativa = ClaveTipoRectificativaType.I; // por diferencias
ClaveTipoFacturaType.R4; // Factura Rectificativa (Resto)
Informar los datos de la contraparte.
idOtro.IDType = PersonaFisicaJuridicaIDTypeType.Item06; // Otro documento probatorio
idOtro.ID = 0; // No disponemos del CIF


He probado las dos opciones y de las dos formas se ha aceptado correctamente la factura. No se cual será la correcta :confused:
En una estoy indicando que es una simplificada cuando no lo es y en la otra estoy enviando un 0 como documento identificativo del receptor:(

Muchas gracias por vuestro tiempo. Saludos!

Si utilizas el asistente virtual del SII, ante este tipo de operación arroja la siguiente información.

Libro registro: Facturas emitidas
Identificación de la factura:
NIF del emisor: NIF del transmitente
Número de factura: número de factura
Fecha de expedición: fecha de expedición de factura
Tipo Factura: F1, F2
Importe total: importe total de la factura en euros,sin incluir en su caso, el IVA de otro Estado miembro.
Clave de régimen especial: 17
Contraparte: no debe consignar los datos de la contraparte si el tipo de factura es F2. Si es F1, consigne:
    NIF.
    En el caso de que el cliente no sea residente en España, IdOtro:
    Código país: identificación fiscal del país de residencia del cliente (consumidor final)
    Número de identificación fiscal en el país de residencia (claves 03…06)
Desglose, tipo de operación: entrega de bienes o prestación de servicios
No sujeta
Importe no sujeto por reglas de localización: importe total de la factura en euros, sin incluir el IVA del otro Estado miembro.
Plazo presentación:4 días naturales excluidos sábados, domingos y festivos nacionales desde la expedición de la factura y en todo caso hasta el 15 del mes siguiente al periodo de liquidación en que se incluya la operación (casilla 123 del modelo 303).



Si no tienes identificación de destinatario deberías emitir la factura como la opción 1, R5 rectificativa de simplificada. Si la emites como R4 estás indicando que la factura original era completa. Pero en este caso deberías usar R1, que indica que la rectificación es por modificación de la base imponible debido a devoluciones o descuentos

rci 24-07-2024 17:37:19

Cita:

Empezado por sglorka (Mensaje 556818)
Si utilizas el asistente virtual del SII, ante este tipo de operación arroja la siguiente información.

Libro registro: Facturas emitidas
Identificación de la factura:
NIF del emisor: NIF del transmitente
Número de factura: número de factura
Fecha de expedición: fecha de expedición de factura
Tipo Factura: F1, F2
Importe total: importe total de la factura en euros,sin incluir en su caso, el IVA de otro Estado miembro.
Clave de régimen especial: 17
Contraparte: no debe consignar los datos de la contraparte si el tipo de factura es F2. Si es F1, consigne:
    NIF.
    En el caso de que el cliente no sea residente en España, IdOtro:
    Código país: identificación fiscal del país de residencia del cliente (consumidor final)
    Número de identificación fiscal en el país de residencia (claves 03…06)
Desglose, tipo de operación: entrega de bienes o prestación de servicios
No sujeta
Importe no sujeto por reglas de localización: importe total de la factura en euros, sin incluir el IVA del otro Estado miembro.
Plazo presentación:4 días naturales excluidos sábados, domingos y festivos nacionales desde la expedición de la factura y en todo caso hasta el 15 del mes siguiente al periodo de liquidación en que se incluya la operación (casilla 123 del modelo 303).



Si no tienes identificación de destinatario deberías emitir la factura como la opción 1, R5 rectificativa de simplificada. Si la emites como R4 estás indicando que la factura original era completa. Pero en este caso deberías usar R1, que indica que la rectificación es por modificación de la base imponible debido a devoluciones o descuentos

Muchas gracias sglorka. Seguramente lo enviaremos como la opción 1, aunque la factura original sea completa...



Sobre esto que comentas del R1, nosotros como no sabemos en cada factura el motivo de la rectificación para decidir el tipo y el usuario no lo puede escoger, siempre enviamos el tipo R4 y no hemos tenido ningún problema pero... puede que no sea del todo correcto ... :o


La franja horaria es GMT +2. Ahora son las 03:01:47.

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