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)

jonortsal 31-03-2017 13:38:40

Gracias keys!!

jodaws 31-03-2017 15:43:22

Nueva
 
1 Archivos Adjunto(s)
Buenas tardes, me estoy poniendo con este proceso y he intentado leer todo el foro antes de continuar. Pero necesito algo de luz ya que soy bastante nueva en el tema.

Mi primera opción era generar los XML utilizando el XML Mapper y los ficheros de estructura XSD, y pensando (que no si será así...) que desde la web permitirán subir los XML generados. Pero veo que nos los crea correctamente, no me genera los XML correctamente.

Mi segunda opción y creo que la de la mayoría es importar el WSDL y trabajar directamnete con el WS. He intentado importar el WSDL para poder empezar a hacer pruebas, he empezado con el SuministroFactEmitidas.wsdl, pero ya ni me compila, os adjunto la unidad pas que me genera Delphi a ver si podéis echarme una mano, estoy utilizando Berlin para hacer una prueba simple.

Alguien lo ha hecho con Delphi 2007?? es que el más utilizamos.

Saludos

jodaws 31-03-2017 19:03:09

Parece que al importar del WSDL no lo hace correctamente. Me podéis indicar como lo hacéis? No sé porqué no me lo hace correctamente.

Muchas gracias de antemano

espinete 01-04-2017 12:35:36

Parece que has importado otro wsdl distinto. Prueba a importar este:

http://www.agenciatributaria.es/stat...tEmitidas.wsdl

CMB 01-04-2017 14:09:29

Cita:

Empezado por newtron (Mensaje 514632)
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.

Hola newtron:

En el documento SII_Descripcion_ServicioWeb_v0.6.pdf, página 190, dice

Cita:

Se podrán modificar facturas que están dadas de baja. El nuevo estado de la factura modificada será “Aceptada” o “Aceptada con errores”.
Ahora mismo he enviado solicitudes de cambio (no de rectificación, entiendo que podría ser algo distinto) de tres facturas que previamente había anulado, me ha aceptado las tres peticiones y han pasado a ser facturas aceptadas de nuevo. Ningún cambio en los datos, ni el número ni la fecha. Los mismos datos originales.

Es decir, que dar de baja una factura no es algo irreversible, ni siquiera hay que cambiar ninguno de sus datos para revertirlo. Lo único que no te permite es darla de alta de nuevo.

Saludos,

CMB 01-04-2017 19:31:50

Petición de baja de una factura recibida
 
Cuando pido la baja de facturas recibidas me devuelven sistemáticamente el error

Cita:

<faultstring>Codigo[4102].El XML no cumple el esquema. Falta informar campo obligatorio.: NombreRazon</faultstring>
Pero el XML de la petición, estoy cansado de repasarlo, parece correcto (datos falseados expresamente):

Código:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:siiLR="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd" xmlns:sii="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">
    <soapenv:Header/>
    <soapenv:Body>
        <siiLR:BajaLRFacturasRecibidas>
            <sii:Cabecera>
                <sii:IDVersionSii>0.6</sii:IDVersionSii>
                <sii:Titular>
                    <sii:NombreRazon>XXX XXX XXX</sii:NombreRazon>
                    <sii:NIF>99999999E</sii:NIF>
                </sii:Titular>
            </sii:Cabecera>
            <siiLR:RegistroLRBajaRecibidas>
                <sii:PeriodoImpositivo>
                    <sii:Ejercicio>2017</sii:Ejercicio>
                    <sii:Periodo>03</sii:Periodo>
                </sii:PeriodoImpositivo>
                <siiLR:IDFactura>
                    <sii:IDEmisorFactura>
                        <sii:NIF>88888888T</sii:NIF>
                    </sii:IDEmisorFactura>
                    <sii:NumSerieFacturaEmisor>123321</sii:NumSerieFacturaEmisor>
                    <sii:FechaExpedicionFacturaEmisor>16-03-2017</sii:FechaExpedicionFacturaEmisor>
                </siiLR:IDFactura>
            </siiLR:RegistroLRBajaRecibidas>
        </siiLR:BajaLRFacturasRecibidas>
    </soapenv:Body>
</soapenv:Envelope>

incluso (aunque no es obligatorio) he probado de añadir la línea

Cita:

<sii:NombreRazon>YYY YYY YYY</sii:NombreRazon>
dentro de <sii:IDEmisorFactura>, por si acaso, y el error que recibo es el mismo.

Curiosamente no me sucede con las bajas de facturas emitidas.

Ya que no existe en el manual ningún ejempo de baja de recibidas (sólo de emitidas), ¿tendría alguien la amabilidad de echarle una ojeada?

O alternativamente publicar un xml de una baja de factura recibida que no dé error.

Muchas gracias,

espinete 01-04-2017 20:49:52

A mi me pasó algo parecido con las recibidas y el problema estaba en NombreRazon pero NO de la cabecera (titular) sino de la Contraparte. Revisa que ambos campos tienen valor, y que si se trata de un NIF (persona física) tiene los apellidos antes que el nombre.

CMB 01-04-2017 22:43:36

Cita:

Empezado por espinete (Mensaje 515015)
A mi me pasó algo parecido con las recibidas y el problema estaba en NombreRazon pero NO de la cabecera (titular) sino de la Contraparte. Revisa que ambos campos tienen valor, y que si se trata de un NIF (persona física) tiene los apellidos antes que el nombre.

Pues era eso, el orden del nombre y apellidos. Lo curioso es que con bajas de facturas emitidas se lo traga y con bajas de recibidas no. Menuda tontería para perder media tarde y todo el buen humor. Cosas de programadores ;)

Muchas gracias por recordarme ese detalle. Lo sabía per no había caído.

jodaws 03-04-2017 09:15:12

Cita:

Empezado por espinete (Mensaje 515008)
Parece que has importado otro wsdl distinto. Prueba a importar este:

Buenos días, muchas gracias por tu respuesta. El WSDL me lo he bajado directamente de la página de la agencia tributaria y es el mismo del link que me has adjuntado. Al importar dejo todo por defecto, no se si tengo que hacer algo diferente.

Saludos

keys 03-04-2017 09:17:49

Te tienes que bajar lo wdsl y los xsd. Bajate todo y ponlo en la misma carpeta.

Un Saludo.

newtron 03-04-2017 09:40:50

Cita:

Empezado por jodaws (Mensaje 514997)
Alguien lo ha hecho con Delphi 2007?? es que el más utilizamos.
Saludos

Si no me equivoco, los que estamos por aquí no hemos conseguido ponerlo en marcha con Delphi 2007.

Cita:

Empezado por CMB (Mensaje 515009)
Hola newtron:

En el documento SII_Descripcion_ServicioWeb_v0.6.pdf, página 190, dice

Ahora mismo he enviado solicitudes de cambio (no de rectificación, entiendo que podría ser algo distinto) de tres facturas que previamente había anulado, me ha aceptado las tres peticiones y han pasado a ser facturas aceptadas de nuevo. Ningún cambio en los datos, ni el número ni la fecha. Los mismos datos originales.

Es decir, que dar de baja una factura no es algo irreversible, ni siquiera hay que cambiar ninguno de sus datos para revertirlo. Lo único que no te permite es darla de alta de nuevo.

Saludos,

Pues no sé, yo por lo que había leido daba la impresión de que una factura anulada ya se quedaba así para los restos, igual se me ha pasado ese párrafo o lo han cambiado después. Gracias por la aclaración.

Saludos

CMB 03-04-2017 10:45:50

Cita:

Empezado por newtron (Mensaje 515051)
Si no me equivoco, los que estamos por aquí no hemos conseguido ponerlo en marcha con Delphi 2007.

Ni tampoco con el antiguo (pero todavía muy utilizado) Delphi 7. El documento PAS que crea es muy corto y no sirve.

Saludos,

CMB 03-04-2017 10:50:11

Cita:

Empezado por newtron (Mensaje 515051)
Pues no sé, yo por lo que había leido daba la impresión de que una factura anulada ya se quedaba así para los restos, igual se me ha pasado ese párrafo o lo han cambiado después. Gracias por la aclaración.

A todos nos pasan estas cosas. Es todo muy liado y la información que la AEAT suministra tiene algunas deficiencias y contradicciones.

Pero lo he probado muchas veces. Cualquier factura anulada, sea emitida o recibida, se puede resuscitar enviando una petición de cambio. Incluso sin cambiar ningún dato. De modo que si alguien se equivoca lo puede solucionar con un cambio. Incluso el ciclo se puede repetir varias veces: baja, cambio, baja, cambio, etc. y funciona.

seccion_31 03-04-2017 11:12:40

Buenas, me vuelvo a incorporar a este tema, tras haberlo dejado un par de meses.

he leído alguno de los posteos pero no todos...

He notado:

que han jodido el interface de facturas recibidas,....

que han puesto en marcha la web SII para enviar XML y consultar lo enviado. Entiendo que les falta el formulario para introducirlas manualmente, AEAT me dice que estará durante este mes.

Ahora estoy re-adaptando el envio con las facturas recibidas y -...

con los cobros en metalico que creo es obligatorio comunicar ¿no? (atraves del envio de cobros)

Saludos !

y de aquí ya hasta Julio. Cualquier cosa en que pueda ayudar por aquí estare.

Virman 03-04-2017 11:45:55

Buenos días, alguno ha conseguido enviar un xml deserealizando uno de partida? Yo estoy intentando hacerlo y no hay forma.
He creado una clase Deserializador() donde creo un objeto XMLSerializer para facturas emitidas: XmlSerializer serializer = new XmlSerializer(typeof(SuministroLRFacturasEmitidas), "https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd");

Al que le paso un fichero XML como referencia. Lo primero que me encuentro es que me obliga a quitar todas las apariciones de la palabra <sii: en las etiquetas sino, me devuelve el error: "Error en el documento XML (2, 2)." Donde el primer dígito es la línea donde aparece un <sii:
Al quitar todos los sii: ya me deja ejecutar, pero me devuelve un objeto sin valores devueltos.

Mi clase sólo contiene lo siguiente:
Código:

try
{
                XmlSerializer serializer = new XmlSerializer(typeof(SuministroLRFacturasEmitidas), "https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd");

                FileStream fs = new FileStream(filename, FileMode.Open);
                XmlReader reader = XmlReader.Create(fs);

                SuministroLRFacturasEmitidas i;

                i = (SuministroLRFacturasEmitidas)serializer.Deserialize(reader);
                fs.Close();
                return i;
            }
            catch (System.Exception ex)

El fichero XML de entrada tiene la siguiente estructura (adjunto parte de él):
Código:

<?xml version="1.0" encoding="UTF-8"?>
<SuministroLRFacturasEmitidas xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd">
<Cabecera>
<IDVersionSii>0.6</IDVersionSii>
<Titular>
<NombreRazon>ENTIDAD XXXXXXXXXXXXXX</NombreRazon>
<NIF>XXXXXXXXX</NIF>
</Titular>
<TipoComunicacion>A0</TipoComunicacion>
</Cabecera>
<RegistroLRFacturasEmitidas>
<PeriodoImpositivo>
<Ejercicio>2015</Ejercicio>
<Periodo>01</Periodo>
</PeriodoImpositivo>
<IDFactura>
<IDEmisorFactura>
<NIF>XXXXXXXXX</NIF>
</IDEmisorFactura>
<NumSerieFacturaEmisor>2017032100000001</NumSerieFacturaEmisor>
<FechaExpedicionFacturaEmisor>15-01-2015</FechaExpedicionFacturaEmisor>
</IDFactura>
<FacturaExpedida>
<TipoFactura>F1</TipoFactura>
<ClaveRegimenEspecialOTrascendencia>01</ClaveRegimenEspecialOTrascendencia>
<ImporteTotal>26.70</ImporteTotal>

Alguien ha conseguido hacer una deserialización de xml?
Muchas gracias.

newtron 03-04-2017 12:41:08

Cita:

Empezado por seccion_31 (Mensaje 515056)
con los cobros en metalico que creo es obligatorio comunicar ¿no? (atraves del envio de cobros)

Negativo, si mal no recuerdo solo hay que enviar los cobros si se está incluido en la ley de la prorrata.

Saludos

CMB 03-04-2017 12:46:13

Consulta de facturas expedidas o recibidas
 
Cuando se envía una consulta, la respuesta contiene todas las facturas del período solicitado, que pueden ser docenas o cientos, hasta 10.000.

¿Existe la posibilidad de enviar una consulta referida a una factura concreta y recibir la respuesta solamente de esa factura?

El campo <ClavePaginacion> sólo permite indicar la factura a partir de la cual deseas la información, pero no tiene previsto indicar la última, de modo que se pudiera obtener solamente el estado de una factura concreta. O por lo menos yo no lo he podido encontrar.


Saludos,

keys 03-04-2017 12:56:22

Los cobros y pagos de las facturas sólo hay que declararlos si la empresa esta dentro del regimen de criterio de caja no del de prorrata. La prorrata es para el libro de bienes de inversión

Los cobros en metálico sólo hay que declararlos a final de año si han superado los 6000 euros por un cliente, en el libro de cobros en metalico dentro del libro de operaciones de transcendencia, que es lo que han cambiado en la versión 0.6.

newtron 03-04-2017 12:59:51

Cita:

Empezado por keys (Mensaje 515062)
Los cobros y pagos de las facturas sólo hay que declararlos si la empresa esta dentro del regimen de criterio de caja no del de prorrata. La prorrata es para el libro de bienes de inversión

Los cobros en metálico sólo hay que declararlos a final de año si han superado los 6000 euros por un cliente, en el libro de cobros en metalico dentro del libro de operaciones de transcendencia, que es lo que han cambiado en la versión 0.6.

Ves tú como no me fío mucho de mi memoria..... :rolleyes:

jcapilla 03-04-2017 13:39:11

Serializar objeto para el SII de la AEAT
 
Buenas a todos.

Yo no programo con Delphi. Estoy con .Net pero veo que aquí nos ayudamos todos. Veo que lo que hacéis mas que nada es coger un xml y deserializarlo en un objeto para enviarlo. Mi caso es al revés. Monto un objeto y lo serializo para obtener el xml que posteriormente otra empresa se encargará de enviarlo. El problema es que al serializarlo no me escribe los Namespaces SiiLR y Sii y no se como hacerlo.

Este es mi código:

Código:

Dim oSfe As New SuministroFactEmitidas.SuministroLRFacturasEmitidas
oSfe.Cabecera = New SuministroFactEmitidas.CabeceraSii
oSfe.Cabecera.IDVersionSii = SuministroFactEmitidas.VersionSiiType.Item06
oSfe.Cabecera.Titular = New SuministroFactEmitidas.PersonaFisicaJuridicaESType
oSfe.Cabecera.Titular.NombreRazon = "EMPRESA EMISORA"
oSfe.Cabecera.Titular.NIF = "A00000000"
oSfe.Cabecera.TipoComunicacion = SuministroFactEmitidas.ClaveTipoComunicacionType.A0
oSfe.RegistroLRFacturasEmitidas = New SuministroFactEmitidas.LRfacturasEmitidasType(0) {}
oSfe.RegistroLRFacturasEmitidas(0) = New SuministroFactEmitidas.LRfacturasEmitidasType
oSfe.RegistroLRFacturasEmitidas(0).PeriodoImpositivo = New SuministroFactEmitidas.RegistroSiiPeriodoImpositivo
oSfe.RegistroLRFacturasEmitidas(0).PeriodoImpositivo.Ejercicio = 2017
oSfe.RegistroLRFacturasEmitidas(0).PeriodoImpositivo.Periodo = SuministroFactEmitidas.TipoPeriodoType.Item01
oSfe.RegistroLRFacturasEmitidas(0).IDFactura = New SuministroFactEmitidas.IDFacturaExpedidaType
oSfe.RegistroLRFacturasEmitidas(0).IDFactura.IDEmisorFactura = New SuministroFactEmitidas.IDFacturaExpedidaTypeIDEmisorFactura
oSfe.RegistroLRFacturasEmitidas(0).IDFactura.IDEmisorFactura.NIF = "A00000000"
oSfe.RegistroLRFacturasEmitidas(0).IDFactura.NumSerieFacturaEmisor = "FA1700001"
oSfe.RegistroLRFacturasEmitidas(0).IDFactura.FechaExpedicionFacturaEmisor = Now.ToString("dd-MM-yyyy")
oSfe.RegistroLRFacturasEmitidas(0).FacturaExpedida = New SuministroFactEmitidas.FacturaExpedidaType
oSfe.RegistroLRFacturasEmitidas(0).FacturaExpedida.TipoFactura = SuministroFactEmitidas.ClaveTipoFacturaType.F1
oSfe.RegistroLRFacturasEmitidas(0).FacturaExpedida.FechaOperacion = Now.ToString("dd-MM-yyyy")
oSfe.RegistroLRFacturasEmitidas(0).FacturaExpedida.ClaveRegimenEspecialOTrascendencia = SuministroFactEmitidas.IdOperacionesTrascendenciaTributariaType.Item01
oSfe.RegistroLRFacturasEmitidas(0).FacturaExpedida.DescripcionOperacion = "Venta de mercaderia"
oSfe.RegistroLRFacturasEmitidas(0).FacturaExpedida.Contraparte = New SuministroFactEmitidas.PersonaFisicaJuridicaType
oSfe.RegistroLRFacturasEmitidas(0).FacturaExpedida.Contraparte.NombreRazon = "EMPRESA RECEPTORA"
oSfe.RegistroLRFacturasEmitidas(0).FacturaExpedida.Contraparte.Item = "B00000000"
oSfe.RegistroLRFacturasEmitidas(0).FacturaExpedida.TipoDesglose = New SuministroFactEmitidas.FacturaExpedidaTypeTipoDesglose
oSfe.RegistroLRFacturasEmitidas(0).FacturaExpedida.TipoDesglose.Item = New SuministroFactEmitidas.TipoSinDesgloseType
CType(oSfe.RegistroLRFacturasEmitidas(0).FacturaExpedida.TipoDesglose.Item, SuministroFactEmitidas.TipoSinDesgloseType).Sujeta = New SuministroFactEmitidas.SujetaType
CType(oSfe.RegistroLRFacturasEmitidas(0).FacturaExpedida.TipoDesglose.Item, SuministroFactEmitidas.TipoSinDesgloseType).Sujeta.NoExenta = New SuministroFactEmitidas.SujetaTypeNoExenta
CType(oSfe.RegistroLRFacturasEmitidas(0).FacturaExpedida.TipoDesglose.Item, SuministroFactEmitidas.TipoSinDesgloseType).Sujeta.NoExenta.TipoNoExenta = SuministroFactEmitidas.TipoOperacionSujetaNoExentaType.S1
CType(oSfe.RegistroLRFacturasEmitidas(0).FacturaExpedida.TipoDesglose.Item, SuministroFactEmitidas.TipoSinDesgloseType).Sujeta.NoExenta.DesgloseIVA = New SuministroFactEmitidas.DetalleIVAEmitidaType(0) {}
CType(oSfe.RegistroLRFacturasEmitidas(0).FacturaExpedida.TipoDesglose.Item, SuministroFactEmitidas.TipoSinDesgloseType).Sujeta.NoExenta.DesgloseIVA(0) = New SuministroFactEmitidas.DetalleIVAEmitidaType
CType(oSfe.RegistroLRFacturasEmitidas(0).FacturaExpedida.TipoDesglose.Item, SuministroFactEmitidas.TipoSinDesgloseType).Sujeta.NoExenta.DesgloseIVA(0).TipoImpositivo = "21"
CType(oSfe.RegistroLRFacturasEmitidas(0).FacturaExpedida.TipoDesglose.Item, SuministroFactEmitidas.TipoSinDesgloseType).Sujeta.NoExenta.DesgloseIVA(0).BaseImponible = "100"
CType(oSfe.RegistroLRFacturasEmitidas(0).FacturaExpedida.TipoDesglose.Item, SuministroFactEmitidas.TipoSinDesgloseType).Sujeta.NoExenta.DesgloseIVA(0).CuotaRepercutida = "21"

Dim xmlSerial As New XmlSerializer(oSfe.GetType(), "")
Dim SufijoFecha As String = String.Format("_{0:yyyyMMdd}_{1:HHmmssfff}", Now, Now)
Dim nombreFichero As String = String.Format("FE{0}", SufijoFecha)
Dim strWriter As New StreamWriter(String.Format("D:\Proyectos\IDI\S.I.I\PruebasGeneracionFicheros\{0}.xml", nombreFichero))
xmlSerial.Serialize(strWriter, oSfe)
strWriter.Close()


¿Alguien puede ayudarme?


La franja horaria es GMT +2. Ahora son las 12:40:32.

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