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)

keys 02-03-2017 09:19:25

Cita:

Empezado por newtron (Mensaje 513846)
Hola a tod@s.

¿Cuando habláis de cobros/pagos son de facturas o de cobros/pagos en metálico superiores a 6000 euros? Porque creo que los cobros/pagos normales de facturas no hay que enviarlos.

Saludos

Hola a todos. Solo hay que enviar los cobros y pagos cuando la empresa o el proveedor estan en el regimen de criterio de caja. En este caso una factura se declara cuando se realiza con la clave 08 en tipo de operación y luego tantos registros de cobros y pagos tenga la factura.

http://www.agenciatributaria.es/AEAT...del_SII_.shtml

Miraros las faqs que tienen varios ejemplos.

Un Saludo.

elcharlie 02-03-2017 09:51:01

Cita:

Empezado por keys (Mensaje 513892)
Hola a todos. Solo hay que enviar los cobros y pagos cuando la empresa o el proveedor estan en el regimen de criterio de caja. En este caso una factura se declara cuando se realiza con la clave 08 en tipo de operación y luego tantos registros de cobros y pagos tenga la factura.

http://www.agenciatributaria.es/AEAT...del_SII_.shtml

Miraros las faqs que tienen varios ejemplos.

Un Saludo.

Gracias por la aclaración. Por otro lado, parece que el Webservice no funciona bien, hoy me pasa que no envío nada, solo puedo consultar.
Saludos.

CMB 02-03-2017 09:59:03

Cita:

Empezado por bartag (Mensaje 513876)
Yo a primera hora de la mañana he enviado facturas emitidas sin problemas, pero por la tarde me ha sido imposible. Además cero recordar que me salía el mismo error de Java, así que no descartó que con el comienzo del mes de marzo hayan hecho cambios. A ver si hay más gente en la misma situación.
Las consultas en cambio me las hace sin problemas.

Yo estoy igual desde ayer a las 15 h. Ya empezaba a preocuparme.

angelhorse 02-03-2017 10:01:15

SIIHacienda
 
Cita:

Empezado por jlegido (Mensaje 513773)
Hola angelhorse,

Yo tambien estoy haciendo este tema en VB.net (muy similar a c#), pero no consigo crear bien el archivo XML
Parto de la base de que el archivo XML a generar debe seguir el modelo cuyo ejemplo hay en SII_Descripcion_ServicioWeb_v0.5_es_es.pdf en apartado 8.1.1.1.Ejemplo mensaje de XML de alta.
Yo siguiendo las directrices de los compañeros de Delphi he adaptado su codigo (usando el ejemplo de seccion_31 que colgo WebServices AEAT Berlin_3.rar.
Lo hago usando este codigo (solo pongo parte)
Dim i As Long
Dim ASuministroLRFacturasEmitidas As SuministroLRFacturasEmitidas
Dim ARegistroLRFacturasEmitidas() As LRfacturasEmitidasType
'===========================================================================
'generacion info factura/s emitidas----------------------------------------------------------------
ASuministroLRFacturasEmitidas = New SuministroLRFacturasEmitidas()
ASuministroLRFacturasEmitidas.Cabecera = New CabeceraSii()

'DATOS Cabecera--------------------------------------------------------------------------
ASuministroLRFacturasEmitidas.Cabecera.IDVersionSii = ClienteSII1.VersionSiiType.Item05 '0.5 version actual del SII
ASuministroLRFacturasEmitidas.Cabecera.Titular = New PersonaFisicaJuridicaESType()
'Nombre del presentador
ASuministroLRFacturasEmitidas.Cabecera.Titular.NombreRazon = "Empresa XXX"
'el NIF del presentador (DEBE COINCIDIR CON EL CERTIFICADO SELECCIONADO)
ASuministroLRFacturasEmitidas.Cabecera.Titular.NIF = "A84532501"
'Tipo de comunicacion: ' A0 - ALTA ' A1- MODIFICACION ' A4- MODIFICACION REGIMEN VIAJEROS
ASuministroLRFacturasEmitidas.Cabecera.TipoComunicacion = ClaveTipoComunicacionType.A0
Etc. etc.
El problema es que no encuentro la forma de agregar la cabecera:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope .....> <soapenv:Header/>
Ademas en las etiquetas no hay forma de ponerle el namespace sii o siiLR
Que es imprescindible.

La pregunta es por tanto ¿Estoy usando el metodo adecuado y hay pasos que desconozco ¿ o deberia generear el XML manualmente a base de ir concatenado trozos de cadena y despues guardarlo como archivo?

¿Cómo lo has hecho tu?
Gracias de antemano por cualquier info que pueda dar luz al tema

Buenas!
Yo lo he hecho a base de XElements (Estructura XML) y Strings.
Te digo más o menos como lo he hecho (Que supongo que no será la forma más óptima pero es como se me ha ocurrido)

Para poner los prefijos de Sii, SiiLR y demás he usado esto:
public static XNamespace NAMESPACE = @"*/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd";

Para crear los nodos XElement con sus prefijos:
XElement root = new XElement(NAMESPACE + "SuministroLRFacturasEmitidas");

Para poner la cabecera yo he usado esto:
XElement Envelope = new XElement(soapenv + "Envelope",
new XAttribute(XNamespace.Xmlns + "soapenv", @"*schemas.xmlsoap.org/soap/envelope/"),
new XAttribute(XNamespace.Xmlns + "siiLR", @"*/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd"),
new XAttribute(XNamespace.Xmlns + "sii", @"*/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd"));

XElement Header = new XElement(soapenv + "Header");
Envelope.Add(Header);

String file = Utilidades.CreateXMLFile(Envelope, i, "Alta Facturas Emitidas");

Mi Utilidades.CreateXMLFile:

XmlTextWriter writer = new XmlTextWriter(archivoPath, Encoding.UTF8); //Con esto de aquí le pones la primera línea esa "<?xml version="1.0" encoding="UTF-8"?>"
writer.WriteStartDocument();
writer.Formatting = Formatting.Indented;
xml.WriteTo(writer);
writer.Flush();
writer.Close();

Espero haberte ayudado.
P.D. donde pongo * me refiero a una enlace (No me deja copiarlos tal cual) xD

jlegido 02-03-2017 15:08:24

Cita:

Empezado por angelhorse (Mensaje 513897)
Buenas!
Yo lo he hecho a base de XElements (Estructura XML) y Strings.
Te digo más o menos como lo he hecho (Que supongo que no será la forma más óptima pero es como se me ha ocurrido)

Para poner los prefijos de Sii, SiiLR y demás he usado esto:
public static XNamespace NAMESPACE = @"*/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd";

Para crear los nodos XElement con sus prefijos:
XElement root = new XElement(NAMESPACE + "SuministroLRFacturasEmitidas");

Para poner la cabecera yo he usado esto:
XElement Envelope = new XElement(soapenv + "Envelope",
new XAttribute(XNamespace.Xmlns + "soapenv", @"*schemas.xmlsoap.org/soap/envelope/"),
new XAttribute(XNamespace.Xmlns + "siiLR", @"*/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd"),
new XAttribute(XNamespace.Xmlns + "sii", @"*/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd"));

XElement Header = new XElement(soapenv + "Header");
Envelope.Add(Header);

String file = Utilidades.CreateXMLFile(Envelope, i, "Alta Facturas Emitidas");

Mi Utilidades.CreateXMLFile:

XmlTextWriter writer = new XmlTextWriter(archivoPath, Encoding.UTF8); //Con esto de aquí le pones la primera línea esa "<?xml version="1.0" encoding="UTF-8"?>"
writer.WriteStartDocument();
writer.Formatting = Formatting.Indented;
xml.WriteTo(writer);
writer.Flush();
writer.Close();

Espero haberte ayudado.
P.D. donde pongo * me refiero a una enlace (No me deja copiarlos tal cual) xD

Hola angelhorse,
Si, muchas gracias,me ha sido util tu codigo. Yo tenia ya algo parecido hecho con XmlWriter.
De todas formas , me faltaria saber que contiene la variable soapenv, que tu pones en varias partes del codigo, p.e.
Código:

XElement Header = new XElement(soapenv + "Header");
Otra duda, dado que tu generas el xml de esta forma, ¿ como lo envias a AEAT ?, usando un metodo HttpRequest o Serializar y usas las clases generadas mediante wsdl.exe, enviandolo asi

Código:

  resul = proxy.SuministroLRFacturasEmitidas(AsuminstroFacturasEmitidas)
Gracias de nuevo.

bartag 02-03-2017 15:27:19

Cita:

Empezado por CMB (Mensaje 513896)
Yo estoy igual desde ayer a las 15 h. Ya empezaba a preocuparme.

Esta mañana me han confirmado que era una incidencia de ellos y que ya estaba solucionado.

paquimd 02-03-2017 16:38:56

Cita:

Empezado por jlegido (Mensaje 513901)
Hola angelhorse,
Si, muchas gracias,me ha sido util tu codigo. Yo tenia ya algo parecido hecho con XmlWriter.
De todas formas , me faltaria saber que contiene la variable soapenv, que tu pones en varias partes del codigo, p.e.
Código:

XElement Header = new XElement(soapenv + "Header");
Otra duda, dado que tu generas el xml de esta forma, ¿ como lo envias a AEAT ?, usando un metodo HttpRequest o Serializar y usas las clases generadas mediante wsdl.exe, enviandolo asi

Código:

  resul = proxy.SuministroLRFacturasEmitidas(AsuminstroFacturasEmitidas)
Gracias de nuevo.

En este último punto es en el que me encuentro yo. Tengo generado el XML, para enviarlo, intento hacerlo como tú:

resul = proxy.SuministroLRFacturasEmitidas(AsuminstroFacturasEmitidas)

pero al serializar me da errores.

Gracias

CMB 02-03-2017 16:53:59

Cita:

Empezado por bartag (Mensaje 513902)
Esta mañana me han confirmado que era una incidencia de ellos y que ya estaba solucionado.

Pues no les costaría tanto mandar una respuesta diciendo "estamos en obras". Y todos tranquilos.

elcharlie 02-03-2017 17:03:29

Cita:

Empezado por CMB (Mensaje 513914)
Pues no les costaría tanto mandar una respuesta diciendo "estamos en obras". Y todos tranquilos.

Completamente de acuerdo contigo, ayer me volví loco pensando que había destrozado mi código.
Pero no hay mal que por bien no venga, de esta manera descubrí el Wizdler. Que gozaba!! Todavía estoy flipandolo!

jlegido 02-03-2017 17:57:42

Cita:

Empezado por javi_valencia44 (Mensaje 513838)
Tengo el mismo problema...

Hola javi_valencia44 y paquimd,

Ambos teneis el mismo problema que es que al Deserializar. Deserializar(es decir convertir un xml –en esencia un string – a un Objeto) os da errores.

Por ejemplo, hecho en codigo VB. Cargo un archivo llamado alta_factura.xml que he generado
Código:

      Dim filename As String = "G:\alta_factura.xml" 
      Dim reader As FileStream = New FileStream(filename, FileMode.Open)
      Dim ser As System.Xml.Serialization.XmlSerializer
      Dim facturas As New SuministroLRFacturasEmitidas
      ser = New System.Xml.Serialization.XmlSerializer(facturas.GetType())
      facturas = CType(ser.Deserialize(reader), SuministroLRFacturasEmitidas)

esto me dara error al serializarlo, ¿Por qué?: porque el nodo raiz de alta_factura.xml es
Código:

<soapenv:Envelope xmlns:soapenv="*://schemas.xmlsoap.org/soap/envelope/" xmlns:siiLR="*://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd" xmlns:sii="https://*.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">
Pero el nodo raiz que admite un objeto tipo SuministroLRFacturasEmitidas es <siiLR:SuministroLRFacturasEmitidas>. Es decir que si generamos el xml por otros metodos distintos del uso de Objetos, no debemos poner ese primer nodo, si despues lo queremos enviar a AEAT de la forma
Código:

      Dim resul As RespuestaLRFEmitidasType
      resul = proxy.SuministroLRFacturasEmitidas(facturas)

Espero sea de ayuda

P.D. donde pongo * me refiero a un enlace (No tengo permiso para poner enlaces de forma normal)

javi_valencia44 02-03-2017 18:59:31

Cita:

Empezado por jlegido (Mensaje 513919)
Hola javi_valencia44 y paquimd,

Ambos teneis el mismo problema que es que al Deserializar. Deserializar(es decir convertir un xml –en esencia un string – a un Objeto) os da errores.

Por ejemplo, hecho en codigo VB. Cargo un archivo llamado alta_factura.xml que he generado
Código:

      Dim filename As String = "G:\alta_factura.xml" 
      Dim reader As FileStream = New FileStream(filename, FileMode.Open)
      Dim ser As System.Xml.Serialization.XmlSerializer
      Dim facturas As New SuministroLRFacturasEmitidas
      ser = New System.Xml.Serialization.XmlSerializer(facturas.GetType())
      facturas = CType(ser.Deserialize(reader), SuministroLRFacturasEmitidas)

esto me dara error al serializarlo, ¿Por qué?: porque el nodo raiz de alta_factura.xml es
Código:

<soapenv:Envelope xmlns:soapenv="*://schemas.xmlsoap.org/soap/envelope/" xmlns:siiLR="*://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd" xmlns:sii="https://*.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">
Pero el nodo raiz que admite un objeto tipo SuministroLRFacturasEmitidas es <siiLR:SuministroLRFacturasEmitidas>. Es decir que si generamos el xml por otros metodos distintos del uso de Objetos, no debemos poner ese primer nodo, si despues lo queremos enviar a AEAT de la forma
Código:

      Dim resul As RespuestaLRFEmitidasType
      resul = proxy.SuministroLRFacturasEmitidas(facturas)

Espero sea de ayuda

P.D. donde pongo * me refiero a un enlace (No tengo permiso para poner enlaces de forma normal)

Poniéndolo así da el error:

'siiLR' es un prefijo no declarado

paquimd 03-03-2017 08:49:14

Cita:

Empezado por javi_valencia44 (Mensaje 513926)
Poniéndolo así da el error:

'siiLR' es un prefijo no declarado

A mi me ocurría lo mismo. Para que te deserialice tienes que quitar todos los prefijos Sii: del xml, dejarlo así:


Código:

<SuministroLRFacturasEmitidas>
            <Cabecera>
                <IDVersionSii>0.5</IDVersionSii>
                <Titular>

Yo ya lo he conseguido, pero el problema ahora es que me genera un objeto vacío, que lógicamente me da errores al intentar subirlo. Creo que me he saltado un paso, pero ¿cuál?


Gracias de antemano a todos.

javi_valencia44 03-03-2017 09:13:00

Cita:

Empezado por paquimd (Mensaje 513945)
A mi me ocurría lo mismo. Para que te deserialice tienes que quitar todos los prefijos Sii: del xml, dejarlo así:


Código:

<SuministroLRFacturasEmitidas>
            <Cabecera>
                <IDVersionSii>0.5</IDVersionSii>
                <Titular>

Yo ya lo he conseguido, pero el problema ahora es que me genera un objeto vacío, que lógicamente me da errores al intentar subirlo. Creo que me he saltado un paso, pero ¿cuál?


Gracias de antemano a todos.

Haciendo eso me dice:

El XML no cumple el esquema. Falta informar campo obligatorio.: Cabecera

:(:(

CMB 03-03-2017 09:42:24

Cita:

Empezado por javi_valencia44 (Mensaje 513946)
Haciendo eso me dice:
El XML no cumple el esquema. Falta informar campo obligatorio.: Cabecera
:(:(

El webservice espera recibir esto, tal cual:

Código:

        <siiLR:SuministroLRFacturasEmitidas>
            <sii:Cabecera>
                <sii:IDVersionSii>0.5</sii:IDVersionSii>
                <sii:Titular>


javi_valencia44 03-03-2017 10:00:24

Cita:

Empezado por CMB (Mensaje 513948)
El webservice espera recibir esto, tal cual:

Código:

        <siiLR:SuministroLRFacturasEmitidas>
            <sii:Cabecera>
                <sii:IDVersionSii>0.5</sii:IDVersionSii>
                <sii:Titular>


Poniéndolo así me dice que no están declarados los prefijos siiLR y sii

Los estoy importando pero ni por esas:

Imports <xmlns:siiLR="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd">
Imports <xmlns:sii="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">

CMB 03-03-2017 10:39:52

Cita:

Empezado por javi_valencia44 (Mensaje 513949)
Poniéndolo así me dice que no están declarados los prefijos siiLR y sii
Los estoy importando pero ni por esas:
Imports <xmlns:siiLR="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd">
Imports <xmlns:sii="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">

Yo estoy mandando el XML ya hecho, con los namespaces, y me los ha aceptado docenas de veces. Ahora mismo lo he probado de nuevo con uno de ellos y recibo sin problemas la respuesta.

javi_valencia44 03-03-2017 10:47:53

Cita:

Empezado por CMB (Mensaje 513950)
Yo estoy mandando el XML ya hecho, con los namespaces, y me los ha aceptado docenas de veces. Ahora mismo lo he probado de nuevo con uno de ellos y recibo sin problemas la respuesta.

Deserializandolo?

En ninguna parte del código agregas los namespaces?

CMB 03-03-2017 11:28:16

Cita:

Empezado por javi_valencia44 (Mensaje 513951)
Deserializandolo?
En ninguna parte del código agregas los namespaces?

Sí los agrego. Construyo el XML, con iteración de facturas, y pongo el namespace que corresponde a cada línea. Una vez completado el XML, lo mando y obtengo la respuesta esperada. Todo correcto, u otras cosas, como Factura duplicada si vuelvo a mandar el mismo.

paquimd 03-03-2017 18:08:06

Cita:

Empezado por CMB (Mensaje 513952)
Sí los agrego. Construyo el XML, con iteración de facturas, y pongo el namespace que corresponde a cada línea. Una vez completado el XML, lo mando y obtengo la respuesta esperada. Todo correcto, u otras cosas, como Factura duplicada si vuelvo a mandar el mismo.

Entiendo que tú lo que haces es construir un objeto que es el que envías. Nosotros lo que intentamos hacer, yo en principio estoy probando con el de ejemplo de la AEAT, es subir un archivo .xml que estamos deserializando. Para ello tiene que ser con el formato que envié esta mañana:

Código:

<SuministroLRFacturasEmitidas>
            <Cabecera>
                <IDVersionSii>0.5</IDVersionSii>
                <Titular>

El problema es el mensaje que ya indicó javi_valencia44, que el objeto que crea está vacío, va sin cabecera ni nada. Ahí es donde me pierdo.


Saludos

bartag 03-03-2017 19:53:41

Cita:

Empezado por paquimd (Mensaje 513967)
Entiendo que tú lo que haces es construir un objeto que es el que envías. Nosotros lo que intentamos hacer, yo en principio estoy probando con el de ejemplo de la AEAT, es subir un archivo .xml que estamos deserializando. Para ello tiene que ser con el formato que envié esta mañana:

Código:

<SuministroLRFacturasEmitidas>
            <Cabecera>
                <IDVersionSii>0.5</IDVersionSii>
                <Titular>

El problema es el mensaje que ya indicó javi_valencia44, que el objeto que crea está vacío, va sin cabecera ni nada. Ahí es donde me pierdo.


Saludos

Yo he hecho pruebas partiendo de un xml y deserializando/enviando posteriormente tras cumplimentar los datos deseados y no me ha dado problemas.

Creo que el error de las cabeceras os puede venir porque:
- El objeto deserializer no admite campos soap. Por dicho motivo y como bien dices, debes tomar la parte del xml que comprende el nodo <SuministroLRFacturasEmitidas>
- No le estáis pasando el namespace al XmlSerializer.

El mío lo tengo así (para el registro facturas emitidas):
Código:

Dim x As New XmlSerializer(_SuministroLRFacturasEmitidas.GetType, "https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd") ', "https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd")

            ' A FileStream is needed to read the XML document.
            Dim filename As String = "facturaEmitidaMODEL.XML"


            Using reader As New FileStream(filename, FileMode.Open)
                _SuministroLRFacturasEmitidas = CType(x.Deserialize(reader), SuministroLRFacturasEmitidas)
            End Using

Todo lo anterior es -si no te he entendido mal- para hacer el envío partiendo de un xml previo...


La franja horaria es GMT +2. Ahora son las 15:48:47.

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