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)

josecr 23-03-2017 10:29:50

Cita:

Empezado por keys (Mensaje 514605)
Segun creo toda facura tiene que tener un documento un identificador, ya sea nif, pasporte, etc. En las facturas recibidas es obligatorio rellenarlo.

Muchas Gracias, (en el libro de IVA actual , indicas tipo 06(otro) y no es necesario mas)

y nos llegan facturas que no tienen nada, por q en USA no debe ser obligado, en cualquier caso tampoco lo van a poder contrastar :D

Saludos.

APO 23-03-2017 11:07:07

Buenos días!!!
Antes de nada, muchas gracias a todos los foreros que estáis aportando toda vuestra inestimable ayuda con todo este tema de la AEAT, que en menudo jaleo nos ha metido a algunos como yo, porque hasta ahora había utilizado nada de Webservices.

Bueno, al grano, os quería comentar que llevo ya leídos y releídos los 22 posts de este tema, y aún sigo sin poder enviar una triste factura al entorno de pruebas (increíble!!!). En principio pensé que era error de certificado, pero no, los verifiqué, fecha de caducidad, etc... y todo correcto. También me he descargado la última versión del WSDL por si habían modificado algo, y modifiqué las líneas:

Código Delphi [-]
  
defWSDL = '...aeat/ssii/fact/ws/SuministroInmediatoInfo.wsdl';
  defSvc  = 'siiService';
  defPrt  = 'SuministroFacturasPruebas';

Pero nada, seguía igual. Entonces, me pareció interesante lo que comentaba el forero NASCAR, que en vez de utilizar los objetos y clases del Webservice para enviar los datos, sería mejor crear uno mismo el xml y luego enviarlo. Pero no sé exactamente cómo enviar el xml, porque antes la línea que se enviaba en el ejemplo era esta:

Código Delphi [-]
result := GetsiiSOAP(true,'',HTTPRIO1).SuministroLRFacturasEmitidas(ASuministroLRFacturasEmitidas);

Pero aquí no se puede enviar un xml. Supongo que se hará de otra manera, no??? Seguramente habré dicho alguna barbaridad porque como comentaba antes, ni idea de webservices.

Entonces, resumiendo, ¿sería alguien tan amable de adjuntar un ejemplo completo en Delphi de cómo enviar el xml? No hace falta poner la parte de construcción del xml (ya me buscaré la vida para montar el xml, aunque si se pone mejor jejejeje), pero sí de la conexión con el WebService y todo lo demás.

Muchas gracias!!!!!!

newtron 23-03-2017 13:11:44

Cita:

Empezado por APO (Mensaje 514607)
Buenos días!!!
Antes de nada, muchas gracias a todos los foreros que estáis aportando toda vuestra inestimable ayuda con todo este tema de la AEAT, que en menudo jaleo nos ha metido a algunos como yo, porque hasta ahora había utilizado nada de Webservices.

Bueno, al grano, os quería comentar que llevo ya leídos y releídos los 22 posts de este tema, y aún sigo sin poder enviar una triste factura al entorno de pruebas (increíble!!!). En principio pensé que era error de certificado, pero no, los verifiqué, fecha de caducidad, etc... y todo correcto. También me he descargado la última versión del WSDL por si habían modificado algo, y modifiqué las líneas:

Código Delphi [-] defWSDL = '...aeat/ssii/fact/ws/SuministroInmediatoInfo.wsdl'; defSvc = 'siiService'; defPrt = 'SuministroFacturasPruebas';


Pero nada, seguía igual. Entonces, me pareció interesante lo que comentaba el forero NASCAR, que en vez de utilizar los objetos y clases del Webservice para enviar los datos, sería mejor crear uno mismo el xml y luego enviarlo. Pero no sé exactamente cómo enviar el xml, porque antes la línea que se enviaba en el ejemplo era esta:

Código Delphi [-]result := GetsiiSOAP(true,'',HTTPRIO1).SuministroLRFacturasEmitidas(ASuministroLRFacturasEmitidas);


Pero aquí no se puede enviar un xml. Supongo que se hará de otra manera, no??? Seguramente habré dicho alguna barbaridad porque como comentaba antes, ni idea de webservices.

Entonces, resumiendo, ¿sería alguien tan amable de adjuntar un ejemplo completo en Delphi de cómo enviar el xml? No hace falta poner la parte de construcción del xml (ya me buscaré la vida para montar el xml, aunque si se pone mejor jejejeje), pero sí de la conexión con el WebService y todo lo demás.

Muchas gracias!!!!!!

Hola.

Yo en particular prefiero hacerlo usando los objetos del webservice, a mi me resulta más cómodo y a la hora de las actualizaciones que están haciendo es más fácil corregir que si generas el xml "a pelo".

¿No has podido poner en marcha ninguno de los ejemplos que se han subido a este hilo?

Saludos

APO 23-03-2017 15:26:44

Cita:

Empezado por newtron (Mensaje 514614)
Hola.

Yo en particular prefiero hacerlo usando los objetos del webservice, a mi me resulta más cómodo y a la hora de las actualizaciones que están haciendo es más fácil corregir que si generas el xml "a pelo".

¿No has podido poner en marcha ninguno de los ejemplos que se han subido a este hilo?

Saludos

Gracias Newtron por responder,
pues no, todavía sigo sin poner en marcha ninguno. Con el que estoy luchando es con el 'Ejemplo Sii.zip' que puso Keys en la página 5 de este hilo. Sin tocar nada de código, compilo, selecciono el certificado, relleno el nif, nombre y demás y al enviar me sale el siguiente error:

'javax.servlet.ServletException'

Entonces, pruebo de importar el nuevo SuministroInmediatoInfo.wsdl

Compilo y en la línea donde pone: IDEmisorFactura:= IDEmisorFactura3.Create; me da el siguiente error:
Incompatible types: 'IDEmisorFactura2' and 'IDEmisorFactura3'

Y aquí sigo estancando...

keys 23-03-2017 15:34:14

Hola. Al importar los ficheros wsdl de nuevo, hay clases que las cambia de nombre. Tienes que cambiar esas lineas a los nombres de las clases nuevas.

Por ejemplo

IDEmisorFactura:= IDEmisorFactura3.Create; tiene que ser IDEmisorFactura:= IDEmisorFactura2.Create; que es el error que te da el compilador.

Por cierto mi ejemplo esta compilado en Delphi 10.1 berlin. No se is en otras versiones anteriores funcionará.

APO 23-03-2017 15:45:58

Cita:

Empezado por keys (Mensaje 514618)
Hola. Al importar los ficheros wsdl de nuevo, hay clases que las cambia de nombre. Tienes que cambiar esas lineas a los nombres de las clases nuevas.

Por ejemplo

IDEmisorFactura:= IDEmisorFactura3.Create; tiene que ser IDEmisorFactura:= IDEmisorFactura2.Create; que es el error que te da el compilador.

Por cierto mi ejemplo esta compilado en Delphi 10.1 berlin. No se is en otras versiones anteriores funcionará.

Ostras!!! Muchas gracias Keys,
Vaya tela con la AEAT, simplificando la cosa... jejeje

Por fin ya he podido compilar, y ahora ya me otro error que tiene más sentido. Creo que ya empiezo a ir por el buen camino. Me dice:

'Error La direccion no se corresponde con el fichero de entrada'

Supongo que esto ya deben ser error de no configurar bien los parámetros de la factura o alguna dirección del WebService, no se... Yo he puesto las de siempre:

defWSDL ='... es/aeat/ssii/fact/ws/SuministroCobrosEmitidas.wsdl';
defURL = 'https://www7.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactCOBV1SOAP';
defSvc = 'siiService';
defPrt = 'SuministroCobrosEmitidasPruebas';

keys 23-03-2017 15:48:23

Al cargar los wdsl otra de las cosas que se pierden son las direcciones de las web services.

Para emitidas son

defWSDL = 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroFactEmitidas.wsdl';
defURL = 'https://www7.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP';
defSvc = 'siiService';
defPrt = 'SuministroFactEmitidasPruebas';

APO 23-03-2017 16:00:03

Por fin!!!!!!!! Muchas gracias Keys
Ya he podido enviar una factura. Es cierto, tenía que cambiar las direcciones de las web services. Vaya empanada que llevo!

Pues nada, ahora que ya he logrado conectar y enviar una factura, voy a seguir haciendo pruebas y seguro que me surgirán más dudas, que intentaré ir resolviendo.

De nuevo, gracias a todos por vuestra ayuda!!!

CMB 23-03-2017 18:39:39

Baja de una factura
 
Al enviar por webservice la petición de baja de una factura emitida recibo una respuesta que considera la operación como correcta.

Pero al parecer esa operación es irreversible. Pues al dar nuevamente de alta la misma factura (con cambios o sin ellos) el webservice ya no la admite, diciendo "Factura duplicada". Y si intento darla de baja otra vez, dice que la factura no existe.

Por favor, ¿alguien puede confirmar, o desmentir, esa suposición?

Cuando hay que modificar una factura, ¿es imprescindible enviarla como modificaciones en vez de dar de baja y de alta?

Muchas gracias.

Saludos,

newtron 23-03-2017 18:49:32

Cita:

Empezado por CMB (Mensaje 514631)
Al enviar por webservice la petición de baja de una factura emitida recibo una respuesta que considera la operación como correcta.

Pero al parecer esa operación es irreversible. Pues al dar nuevamente de alta la misma factura (con cambios o sin ellos) el webservice ya no la admite, diciendo "Factura duplicada". Y si intento darla de baja otra vez, dice que la factura no existe.

Por favor, ¿alguien puede confirmar, o desmentir, esa suposición?

Cuando hay que modificar una factura, ¿es imprescindible enviarla como modificaciones en vez de dar de baja y de alta?

Muchas gracias.

Saludos,

Cuando das una factura de baja no podrás usar el mismo número ni hacer nada más con ella, la nueva factura tendrá que tener otro número. Si lo que quieres es modificarla tendrás que enviar una factura de rectificación.

Saludos

Nasca 23-03-2017 18:51:48

Cita:

Empezado por CMB (Mensaje 514631)
Al enviar por webservice la petición de baja de una factura emitida recibo una respuesta que considera la operación como correcta.

Pero al parecer esa operación es irreversible. Pues al dar nuevamente de alta la misma factura (con cambios o sin ellos) el webservice ya no la admite, diciendo "Factura duplicada". Y si intento darla de baja otra vez, dice que la factura no existe.

Por favor, ¿alguien puede confirmar, o desmentir, esa suposición?

Cuando hay que modificar una factura, ¿es imprescindible enviarla como modificaciones en vez de dar de baja y de alta?

Las modificaciones siempre como modificaciones. Puedes cambiar cualquier cosa, incluida contraparte en facturas emitidas.
La contraparte en facturas recibidas no tendría mucho sentido, ya que a todos los efectos es una factura totalmente nueva.

La baja anula la factura, y por lo que dices es imposible volver a activar la misma.
No lo he comprobado pero la verdad es que es coherente con la documentación, que dice expresamente que ese número de factura no puede reutilizarse.

Hay que tener presente que la clave primaria de cada registro de facturas está compuesto de: NIF/IDOtro, FechaExpedicion y NumFactura

Cualquier modificación en cualquiera de esos datos supone a todos los efectos una factura nueva.

Entiendo que si te has equivocado en una factura recibida asignando un proveedor incorrecto, lo lógico es como lo establece la AEAT, anular y en un registro totalmente independiente hacer el alta correcta.

En emitidas no se me ocurre ningún caso que no pueda resolverse con una modificación. Si acaso, si has equivocado la fecha.

P.D. Acabo de comprobar que una factura emitida con mismo número y diferente fecha cuela sin problemas. En este caso toca anular una de ellas. Y se puede hacer sin problemas.

CMB 23-03-2017 19:56:12

Para newtron y Nasca:

Dos respuestas que aclaran totalmente la cuestión. La verdad es que en la documentación de la AEAT hay algunas cosas ambiguas y otras que difícilmente las encuentras (o entiendes).

¡Muchas gracias a ambos!

keys 24-03-2017 08:17:47

Buenos días. Si el problema es que se ha registrado una factura incorrectamente, por ejemplo te has equivocado en el tipo de operación, importes, etcc, es decir no hay otra factura que rectifique a esta, lo que se puede hacer es mandar un registro de tipo A1 Modificación de facturas/registros (errores registrales). Que sirve para esto.

Un saludo.

CMB 24-03-2017 09:20:42

Modificación de facturas
 
Magníficas respuestas las de newtron, Nasca y keys sobre la modificación de facturas. La curva de aprendizaje es cada vez más horizontal a medida que vas progresando, y en este momento creo que la cosa ya va de bajada para la mayoría de nosotros.

Muchas gracias de nuevo.

Saludos,

Fèlix Ruiz 27-03-2017 11:11:50

1 Archivos Adjunto(s)
Hola.
Estoy desarrollando un módulo para el envio de facturas al SII. La primera fase fue que generase los ficheros XML tal como indica la AEAT en su documentación.
Ahora estoy con la fase de envío con la AEAT, pero llevo varios días intentando enviar una factura y no hay manera. A ver si me pueden ayudar...
Estoy programando en C#, y he probado tanto cargar desde fichero XML como generando la factura directamente contra el servicio web.
En ambos casos, al enviar los datos me retorna un error:
Código:

The content type text/html of the response message does not match the content type of the binding (text/xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 1024 bytes of the response were: ...
Lo bueno es que usando el portal de pruebas de Hacienda, el fichero XML sí se carga (he de cambiar este a formato a SOAP). Por lo tanto problema del certificado no es.
Os adjunto los ficheros para revisar (el que generé por primera vez y se carga en el portal, el que se crea con Serialize, y el que cargo con Deserialize), e incluso adjunto el código C# usado.
Lo servicios WEB que uso son los proporcionados en el portal de SII: V_06/SuministroFactEmitidas.wsdl
Ya estoy desesperado, no se que hacer... Necesito ayuda.
Gracias.
Menos mal que existe este foro...

CMB 27-03-2017 11:28:12

Cita:

Empezado por Fèlix Ruiz (Mensaje 514726)
Hola.
Estoy desarrollando un módulo para el envio de facturas al SII. La primera fase fue que generase los ficheros XML tal como indica la AEAT en su documentación.
Ahora estoy con la fase de envío con la AEAT, pero llevo varios días intentando enviar una factura y no hay manera. A ver si me pueden ayudar...
Estoy programando en C#, y he probado tanto cargar desde fichero XML como generando la factura directamente contra el servicio web.
En ambos casos, al enviar los datos me retorna un error:
Código:

The content type text/html of the response message does not match the content type of the binding (text/xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 1024 bytes of the response were: ...
Lo bueno es que usando el portal de pruebas de Hacienda, el fichero XML sí se carga (he de cambiar este a formato a SOAP). Por lo tanto problema del certificado no es.
Os adjunto los ficheros para revisar (el que generé por primera vez y se carga en el portal, el que se crea con Serialize, y el que cargo con Deserialize), e incluso adjunto el código C# usado.
Lo servicios WEB que uso son los proporcionados en el portal de SII: V_06/SuministroFactEmitidas.wsdl
Ya estoy desesperado, no se que hacer... Necesito ayuda.
Gracias.
Menos mal que existe este foro...

Podrían haber más cosas, pero te falta rellenar el Tag <siiDescripcionOperacion>, que es obligatorio.

Fèlix Ruiz 27-03-2017 11:44:20

Cita:

Empezado por CMB (Mensaje 514727)
Podrían haber más cosas, pero te falta rellenar el Tag <siiDescripcionOperacion>, que es obligatorio.

Gracias por responder tan rápido.
En el XML que cargo en el portal está el TAG pero no hay datos. De todas formas este no da problemas, se carga.
El problema es si voy por código, tanto por Serialize o Deserialize, sí que está el TAG y con datos. En estos casos es cuando me da problemas...

Virman 27-03-2017 13:05:04

Saludos! Después de conseguir que me envíe correctamente las facturas emitidas con el nuevo web service, estoy teniendo problemas para rellenar las facturas recibidas.
El problema me surge a la hora de rellenar el Detalle de IVA, pues me devuelve null a la hora de crear la variable de tipo array.
Lo hago de la siguiente forma:
factRecibida.DesgloseFactura = new DesgloseFacturaRecibidasType();
factRecibida.DesgloseFactura.DesgloseIVA = new DetalleIVARecibidaType[1];

Me intenta crear el elemento DesgloseIVA[0], pero es null, por lo que no me deja rellenar el tipo impositivo, base imponible, cuota soportada, etc. Y al ser campos obligatorios no me permite enviar la factura recibida.

Alguna sugerencia? Porque en versiones anteriores del web service si podía crear el detalle de IVA.

Muchas gracias.

keys 27-03-2017 13:57:33

Yo no lo estoy haciendo en VB pero esa propiedad factRecibida.DesgloseFactura.DesgloseIVA es un array y me imagino que primero tendrás que declarar su tamaño.

Te pongo como es en delphi por si te sirve de algo

Código Delphi [-]
           SetLength(DesgloseOp, Tamanio);
           FacturaRecibida.DesgloseFactura.DesgloseIVA := DesgloseOp;

           for z := 0 to Tamanio - 1 do
             begin

                  DesgloseOp[z] := DetalleIVARecibidaType.Create;
                  DesgloseOp[z].TipoImpositivo := TratarCampoImporte(Desglose.TIPOIMPOSITIVO);
                  DesgloseOp[z].BaseImponible := TratarCampoImporte(Desglose.BASEIMPONIBLE);
                  DesgloseOp[z].CuotaSoportada := TratarCampoImporte(Desglose.CUOTAREPERCUTIDA);
                                  
             end;

Virman 27-03-2017 16:00:10

Cita:

Empezado por keys (Mensaje 514737)
Yo no lo estoy haciendo en VB pero esa propiedad factRecibida.DesgloseFactura.DesgloseIVA es un array y me imagino que primero tendrás que declarar su tamaño.

Te pongo como es en delphi por si te sirve de algo

Código Delphi [-]
           SetLength(DesgloseOp, Tamanio);
           FacturaRecibida.DesgloseFactura.DesgloseIVA := DesgloseOp;

           for z := 0 to Tamanio - 1 do
             begin

                  DesgloseOp[z] := DetalleIVARecibidaType.Create;
                  DesgloseOp[z].TipoImpositivo := TratarCampoImporte(Desglose.TIPOIMPOSITIVO);
                  DesgloseOp[z].BaseImponible := TratarCampoImporte(Desglose.BASEIMPONIBLE);
                  DesgloseOp[z].CuotaSoportada := TratarCampoImporte(Desglose.CUOTAREPERCUTIDA);
                                  
             end;

Gracias por la respuesta keys, En esta línea: factRecibida.DesgloseFactura.DesgloseIVA = new DetalleIVARecibidaType[1];
Es dónde le indico el tamaño que tiene que tener el array de DesgloseIVA, lo que pasa que me devuelve esto:
factRecibida.DesgloseFactura.DesgloseIVA[0]=null;
Luego no puedo rellenar las variables que componen esa struct. A alguien más le ha pasado? Gracias.

Edit1: Ya he encontrado mi fallo, que malos son los Lunes, jejejeje.
Me faltaba esta línea: factRecibida.DesgloseFactura.DesgloseIVA[0] = new DetalleIVARecibidaType();

Gracias keys por enseñarme el fallo.


La franja horaria es GMT +2. Ahora son las 01:11:28.

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