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)

xamminf 03-07-2017 14:27:59

Cita:

Empezado por newtron (Mensaje 518897)
Hasta ahí llego compañero, yo preguntaba si había alguna manera de que, al enviar los datos hubiera alguna especie de transacción o algo que nosotros pudiéramos tocar para que no ocurra esto, porque me da la impresión de que está fuera de nuestra mano. Pregunto porque, con lo listos que deben de ser los que han montado ese chiringuito, deberían de tener esta posibilidad contemplada.

Saludos


El sistema es síncrono, es decir: petición y respuesta en el mismo viaje.

¿ No habría sido mejor montar un sistema asíncrono de manera que envias ahora y puedes tener la repuesta más tarde ?
Así el asunto sólo se trataría de enviar el .xml y ellos lo procesarían cuando pudieran y cuando lo hicieran colocarían un .xml que podríamos leer cuando conectasemos.

Es verdad que tiene alguna desventaja, pero tiene algunas otras, como este tema de los cortes.

En fin, pura informática ficción.

figo21 03-07-2017 15:07:45

Cita:

Empezado por xamminf (Mensaje 518902)
El sistema es síncrono, es decir: petición y respuesta en el mismo viaje.

¿ No habría sido mejor montar un sistema asíncrono de manera que envias ahora y puedes tener la repuesta más tarde ?
Así el asunto sólo se trataría de enviar el .xml y ellos lo procesarían cuando pudieran y cuando lo hicieran colocarían un .xml que podríamos leer cuando conectasemos.

Es verdad que tiene alguna desventaja, pero tiene algunas otras, como este tema de los cortes.

En fin, pura informática ficción.

Buenos días, a ver este problema que comentáis lo tenéis solucionado con las consultas.
Podéis implementar un sistema que haga una consulta y las facturas que te devuelva la consulta y no tengáis marcadas en vuestro sistema, las marcáis.
De hecho, si mal no recuerdo la consulta te devuelve todos los datos que se envían en el alta de la factura, más los propios de la consulta (contraste).


Un saludo.

jcapilla 03-07-2017 15:16:20

Cita:

Empezado por dgcapel (Mensaje 518894)
Buenas tardes,
alguno de vosotros ha conseguido deserializar una respuesta del servidor en formato texto, una vez que la tienes guardada como un fichero, ¿mediante las clases del SII Service? Uso C#, pero cualquier sugerencia en delphi es bienvenida. Es un problema con los Namespaces, pero no consigo dar con la tecla.

Código Delphi [-]
                
// File : Open
                XmlSerializer serializer = new XmlSerializer(typeof(RespuestaLRFRecibidasType));
                fs = new FileStream(xmlReponseUri, FileMode.Open);
                XmlReader reader = XmlReader.Create(fs);

                // Deserialize
                RespuestaLRFRecibidasType facturaRecibida = (RespuestaLRFRecibidasType)serializer.Deserialize(reader);

                // File : Close
                fs.Close();

                // Response
                Console.WriteLine("CSV: " + facturaRecibida.CSV);

Si cambias en el xml de respuesta RespuestaLRFacturasRecibidas por RespuestaLRFRecibidasType y quitas los tags de env: debe funcionar.

erojo 03-07-2017 15:21:23

sii aeat cobros facturas expedidas
 
Hola,

No consigo suministrar al SII la información de un cobro asociado a una factura expedida. El mensaje que me devuelve el Web Service de la AEAT es el siguiente:
Codigo[4124].Error La direccion no se corresponde con el fichero de entrada.
Pero no soy capaz de detectar dónde está el problema. ¿Sería alguien tan amable de adjuntar un ejemplo de suministro de cobro que funcione? Mi código está en VB .NET y es el siguiente:

Gracias,

Dim blnReturn As Boolean = True
Dim objCobroEmitido As New SuministroCobrosEmitidas.SuministroLRCobrosEmitidas

Try
Dim objCabecera As New SuministroCobrosEmitidas.CabeceraSiiCobrosPagos
objCabecera.IDVersionSii = SuministroCobrosEmitidas.VersionSiiType.Item10
Dim objTitular As New SuministroCobrosEmitidas.PersonaFisicaJuridicaESType
objTitular.NIF = "AAAAAAAAA"
objTitular.NombreRazon = "XXXXXXXXX XXXXXX"
objCabecera.Titular = objTitular
objCobroEmitido.Cabecera = objCabecera

Dim objRegistrosCobro As SuministroCobrosEmitidas.LRCobrosEmitidasType()
ReDim Preserve objRegistrosCobro(0)

Dim objRegistroCobro As New SuministroCobrosEmitidas.LRCobrosEmitidasType
Dim objIdFactura As New SuministroCobrosEmitidas.IDFacturaExpedidaBCType
Dim objIdEmisor As New SuministroCobrosEmitidas.IDFacturaExpedidaBCTypeIDEmisorFactura
objIdEmisor.NIF = "AAAAAAAAA"

objIdFactura.IDEmisorFactura = objIdEmisor
objIdFactura.NumSerieFacturaEmisor = "FA1700002"
objIdFactura.FechaExpedicionFacturaEmisor = Now.ToString("dd-MM-yyyy") '"21-06-2017"
objRegistroCobro.IDFactura = objIdFactura

Dim objDatosPago As SuministroCobrosEmitidas.DatosPagoCobroType()
ReDim Preserve objDatosPago(0)

Dim objDatoPago As New SuministroCobrosEmitidas.DatosPagoCobroType
objDatoPago.Fecha = Now.ToString("dd-MM-yyyy") '"21-06-2017"
objDatoPago.Importe = "100"
objDatoPago.Medio = SuministroCobrosEmitidas.MedioPagoType.Item04
'objDatoPago.Cuenta_O_Medio = "Al contado"

objDatosPago.ToList.Add(objDatoPago)
objRegistroCobro.Cobros = objDatosPago

objRegistrosCobro.ToList.Add(objRegistroCobro)

objCobroEmitido.RegistroLRCobros = objRegistrosCobro

Dim objSIIService As New SuministroCobrosEmitidas.siiService
objSIIService.ClientCertificates.Add(obtenerCertificadoSIIAEAT)
objSIIService.Url = "https://www7.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP"
objSIIService.Timeout = 10000

Dim objRespCobrosEmitidos As New SuministroCobrosEmitidas.RespuestaLRCobrosEmitidasType
objRespCobrosEmitidos = objSIIService.SuministroLRCobrosEmitidas(objCobroEmitido)

Select Case objRespCobrosEmitidos.EstadoEnvio
Case SuministroCobrosEmitidas.EstadoEnvioType.Correcto
MsgBox("Correcto")
Case SuministroCobrosEmitidas.EstadoEnvioType.Incorrecto
MsgBox("Incorrecto")
Case SuministroCobrosEmitidas.EstadoEnvioType.ParcialmenteCorrecto
MsgBox("Parcialmente Correcto")
End Select



Catch ex As Exception
blnReturn = False
Finally
If Not objCobroEmitido Is Nothing Then
objCobroEmitido = Nothing
End If
End Try

RafaSerMed 03-07-2017 16:24:35

Cita:

Empezado por erojo (Mensaje 518905)
Hola,

No consigo suministrar al SII la información de un cobro asociado a una factura expedida. El mensaje que me devuelve el Web Service de la AEAT es el siguiente:
Codigo[4124].Error La direccion no se corresponde con el fichero de entrada.
Pero no soy capaz de detectar dónde está el problema. ¿Sería alguien tan amable de adjuntar un ejemplo de suministro de cobro que funcione? Mi código está en VB .NET y es el siguiente:

Gracias,

Dim blnReturn As Boolean = True
Dim objCobroEmitido As New SuministroCobrosEmitidas.SuministroLRCobrosEmitidas

Try
Dim objCabecera As New SuministroCobrosEmitidas.CabeceraSiiCobrosPagos
objCabecera.IDVersionSii = SuministroCobrosEmitidas.VersionSiiType.Item10
Dim objTitular As New SuministroCobrosEmitidas.PersonaFisicaJuridicaESType
objTitular.NIF = "AAAAAAAAA"
objTitular.NombreRazon = "XXXXXXXXX XXXXXX"
objCabecera.Titular = objTitular
objCobroEmitido.Cabecera = objCabecera

Dim objRegistrosCobro As SuministroCobrosEmitidas.LRCobrosEmitidasType()
ReDim Preserve objRegistrosCobro(0)

Dim objRegistroCobro As New SuministroCobrosEmitidas.LRCobrosEmitidasType
Dim objIdFactura As New SuministroCobrosEmitidas.IDFacturaExpedidaBCType
Dim objIdEmisor As New SuministroCobrosEmitidas.IDFacturaExpedidaBCTypeIDEmisorFactura
objIdEmisor.NIF = "AAAAAAAAA"

objIdFactura.IDEmisorFactura = objIdEmisor
objIdFactura.NumSerieFacturaEmisor = "FA1700002"
objIdFactura.FechaExpedicionFacturaEmisor = Now.ToString("dd-MM-yyyy") '"21-06-2017"
objRegistroCobro.IDFactura = objIdFactura

Dim objDatosPago As SuministroCobrosEmitidas.DatosPagoCobroType()
ReDim Preserve objDatosPago(0)

Dim objDatoPago As New SuministroCobrosEmitidas.DatosPagoCobroType
objDatoPago.Fecha = Now.ToString("dd-MM-yyyy") '"21-06-2017"
objDatoPago.Importe = "100"
objDatoPago.Medio = SuministroCobrosEmitidas.MedioPagoType.Item04
'objDatoPago.Cuenta_O_Medio = "Al contado"

objDatosPago.ToList.Add(objDatoPago)
objRegistroCobro.Cobros = objDatosPago

objRegistrosCobro.ToList.Add(objRegistroCobro)

objCobroEmitido.RegistroLRCobros = objRegistrosCobro

Dim objSIIService As New SuministroCobrosEmitidas.siiService
objSIIService.ClientCertificates.Add(obtenerCertificadoSIIAEAT)
objSIIService.Url = "https://www7.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP"
objSIIService.Timeout = 10000

Dim objRespCobrosEmitidos As New SuministroCobrosEmitidas.RespuestaLRCobrosEmitidasType
objRespCobrosEmitidos = objSIIService.SuministroLRCobrosEmitidas(objCobroEmitido)

Select Case objRespCobrosEmitidos.EstadoEnvio
Case SuministroCobrosEmitidas.EstadoEnvioType.Correcto
MsgBox("Correcto")
Case SuministroCobrosEmitidas.EstadoEnvioType.Incorrecto
MsgBox("Incorrecto")
Case SuministroCobrosEmitidas.EstadoEnvioType.ParcialmenteCorrecto
MsgBox("Parcialmente Correcto")
End Select



Catch ex As Exception
blnReturn = False
Finally
If Not objCobroEmitido Is Nothing Then
objCobroEmitido = Nothing
End If
End Try

Fijate a donde lo estas enviando, en el código aparece "https://www7.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP" cuando la url de pruebas para cobros de facturas expedidas es: "https://www7.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactCOBV1SOAP"

seccion_31 03-07-2017 16:55:34

nosotros estamos enviando sin problemas. tal cual días anteriores, sin mas inconvenientes.

Lo que no tengo es la dirección del menú de opciones en la web de la AEAT de la nueva versión 7
¿alguien la sabe?

Saludos y muchas gracias a todos por vuestras aportaciones y comentarios. Es una distinción especial pertenecer a los programadores Delphi.

newtron 03-07-2017 17:49:02

Cita:

Empezado por seccion_31 (Mensaje 518910)
nosotros estamos enviando sin problemas. tal cual días anteriores, sin mas inconvenientes.

Lo que no tengo es la dirección del menú de opciones en la web de la AEAT de la nueva versión 7
¿alguien la sabe?

Saludos y muchas gracias a todos por vuestras aportaciones y comentarios. Es una distinción especial pertenecer a los programadores Delphi.

¿Nueva versión 7? No sé a qué te refieres, si preguntas por la página donde se seleccionan los formularios de altas, consultas, etc de producción ya la puso alguien por aquí...

https://www.agenciatributaria.gob.es...ini/G417.shtml

Saludos

barnarasta 03-07-2017 20:32:54

Buenas tardes compañeros, tengo una duda sobre Consulta Facturas Emitidas que segun repase la documentacion parece imposible, pero igual se me paso algun detalle y alguien esta en identica situacion.

Supongamos una pequeña cadena de supermercados con 18 establecimientos en la provincia (por suerte no es canarias), cada centro tiene su propia numeracion de Facturas tipos F1, F2, F4.

La numeracion de las facturas tienen el formato [letra]-[ocho numeros] ---> A-00000000

Y el motivo de la consulta es:
se puede realizar una consulta en la que se reciba respuesta unicamente de un establecimiento?, es decir,
una consulta de un periodo de todas las factura que empiecen por A-.

Cualquier orientacion/idea sera bien recibida.
Gracias

CMB 03-07-2017 21:59:20

Cita:

Empezado por figo21 (Mensaje 518903)
Buenos días, a ver este problema que comentáis lo tenéis solucionado con las consultas.
Podéis implementar un sistema que haga una consulta y las facturas que te devuelva la consulta y no tengáis marcadas en vuestro sistema, las marcáis.
De hecho, si mal no recuerdo la consulta te devuelve todos los datos que se envían en el alta de la factura, más los propios de la consulta (contraste).Un saludo.

Dado que se trata de situaciones excepcionales, cuando la transmisión se corte (sea por culpa de la AEAT, o de la conexión a internet, o un bug del programa) y no se sepa qué facturas han sido enviadas y cuáles no, no merece la pena desarrollar rutinas tan complejas.

El usuario debe enviar de nuevo todas las facturas no marcadas. Una parte de ellas será rechazada por "duplicada". ¿Y qué hacer ahora con esas? Pues muy sencillo, se mandan como cambios, y el servidor suministrará un nuevo CSV. No importa que no haya habido cambios reales, por lo menos en el servidor de prueba las acepta igualmente.

Saludos,

figo21 04-07-2017 08:06:29

Cita:

Empezado por CMB (Mensaje 518915)
Dado que se trata de situaciones excepcionales, cuando la transmisión se corte (sea por culpa de la AEAT, o de la conexión a internet, o un bug del programa) y no se sepa qué facturas han sido enviadas y cuáles no, no merece la pena desarrollar rutinas tan complejas.

El usuario debe enviar de nuevo todas las facturas no marcadas. Una parte de ellas será rechazada por "duplicada". ¿Y qué hacer ahora con esas? Pues muy sencillo, se mandan como cambios, y el servidor suministrará un nuevo CSV. No importa que no haya habido cambios reales, por lo menos en el servidor de prueba las acepta igualmente.

Saludos,

Hola CMB, sí esa es otra solución. Yo tengo implementadas las dos.


Un saludo.

newtron 04-07-2017 09:04:39

Cita:

Empezado por CMB (Mensaje 518915)
Dado que se trata de situaciones excepcionales, cuando la transmisión se corte (sea por culpa de la AEAT, o de la conexión a internet, o un bug del programa) y no se sepa qué facturas han sido enviadas y cuáles no, no merece la pena desarrollar rutinas tan complejas.

El usuario debe enviar de nuevo todas las facturas no marcadas. Una parte de ellas será rechazada por "duplicada". ¿Y qué hacer ahora con esas? Pues muy sencillo, se mandan como cambios, y el servidor suministrará un nuevo CSV. No importa que no haya habido cambios reales, por lo menos en el servidor de prueba las acepta igualmente.

Saludos,

Es una buena solución aunque no sé si levantará suspicacias en la aeat modificar muchas facturas.

Saludos

seccion_31 04-07-2017 09:22:57

Cita:

Empezado por newtron (Mensaje 518912)
¿Nueva versión 7? No sé a qué te refieres, si preguntas por la página donde se seleccionan los formularios de altas, consultas, etc de producción ya la puso alguien por aquí...

https://www.agenciatributaria.gob.es...ini/G417.shtml

Saludos

:)

perdón me referia la nueva versión 1.

gracias x el enlace.

CMB 04-07-2017 09:44:18

Cita:

Empezado por newtron (Mensaje 518922)
Es una buena solución aunque no sé si levantará suspicacias en la aeat modificar muchas facturas. Saludos

Es probable que despierte suspicacias, pero tienes una buena explicación para darles.

RafaSerMed 04-07-2017 09:47:21

Cita:

Empezado por CMB (Mensaje 518915)
Dado que se trata de situaciones excepcionales, cuando la transmisión se corte (sea por culpa de la AEAT, o de la conexión a internet, o un bug del programa) y no se sepa qué facturas han sido enviadas y cuáles no, no merece la pena desarrollar rutinas tan complejas.

El usuario debe enviar de nuevo todas las facturas no marcadas. Una parte de ellas será rechazada por "duplicada". ¿Y qué hacer ahora con esas? Pues muy sencillo, se mandan como cambios, y el servidor suministrará un nuevo CSV. No importa que no haya habido cambios reales, por lo menos en el servidor de prueba las acepta igualmente.

Saludos,

Si, yo lo comentaba igual en algún post anterior. Pero ojo, como decía también no es la opción mas optima. Algunos softwares contables muy extendidos (no daré nombres...) no hacen la comprobación de duplicidad de facturas a la hora de introducirlas en dicho software. Por lo que el error de factura duplicada puede que no sea porque se envía la misma factura, sino porque enviamos otra que tiene el mismo numero (por error al introducirlo o lo que sea).

Como ha comentado otro usuario, la opción mas fiable, es realizar una consulta de la información enviada. Yo esto lo hago si detecto que existe un error en la transmisión. Se activa una opción de validación de datos entre los datos introducidos y los datos enviados a la AEAT.

xamminf 04-07-2017 09:51:08

Cita:

Empezado por CMB (Mensaje 518927)
Es probable que despierte suspicacias, pero tienes una buena explicación para darles.

Ya, pero cuando vas en carretera, lo mejor, es que la GC no te pare, porque aplicando reglamentación ¡ te pueden sacar de todo ! ¿ No sabías que España se generan más de un millón de líneas de leyes al año ? ¡ Como para estar al día !

batuzail 04-07-2017 11:19:31

Cita:

Empezado por jcapilla (Mensaje 518904)
Si cambias en el xml de respuesta RespuestaLRFacturasRecibidas por RespuestaLRFRecibidasType y quitas los tags de env: debe funcionar.

Hola,
Para convertir en xml la respuesta yo uso
Código:

        public  bool GetXMLFromObject(object o)
        {
            StringWriter sw = new StringWriter();
            XmlTextWriter tw = null;
            try
            {
                XmlSerializer serializer = new XmlSerializer(o.GetType());
                tw = new XmlTextWriter(sw);
                serializer.Serialize(tw, o);
            }
            catch (Exception ex)
            {
                //Handle Exception Code
                return false;
            }
            finally
            {
                sw.Close();
                if (tw != null)
                {
                    tw.Close();
                }
            }

            using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\tmp\" + o.ToString() + ".xml"))
            {
                file.WriteLine(sw.ToString());

            }
            return true;
        }


jcapilla 04-07-2017 20:20:53

Cita:

Empezado por batuzail (Mensaje 518932)
Hola,
Para convertir en xml la respuesta yo uso
Código:

        public  bool GetXMLFromObject(object o)
        {
            StringWriter sw = new StringWriter();
            XmlTextWriter tw = null;
            try
            {
                XmlSerializer serializer = new XmlSerializer(o.GetType());
                tw = new XmlTextWriter(sw);
                serializer.Serialize(tw, o);
            }
            catch (Exception ex)
            {
                //Handle Exception Code
                return false;
            }
            finally
            {
                sw.Close();
                if (tw != null)
                {
                    tw.Close();
                }
            }

            using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\tmp\" + o.ToString() + ".xml"))
            {
                file.WriteLine(sw.ToString());

            }
            return true;
        }


Creo que el problema es que el xml que devuelve AEAT (fichero) al deserializarlo con el objeto falla. Yo me encontre con el problema hace tiempo e incluso creo recordar que consulte por aqui. Si haces el replace digamos que el xml tiene el formato que espera la deserializacion.

CMB 04-07-2017 22:02:16

Factura recibida simplificada
 
Al registrar una factura recibida simplificada hay que poner TipoFactura = F2, pero ¿se pueden omitir los datos de la contraparte (NombreRazon y NIF) del mismo modo que con facturas emitidas?

Saludos y gracias,

APO 05-07-2017 09:05:28

Cita:

Empezado por joefrommalaka (Mensaje 515193)
Hola a todos. Antes de nada agradeceros a todos por la ayuda ofrecida que me ha sido de mucha utilidad.

jacju no se si solucionaste ya este problema, "El sistema no puede encontrar el archivo especificado. - URL: https://www7.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP", a mi también me estaba dando el mismo error y tras dar muchas vueltas al final me di cuenta que el mismo ejecutable con el mismo certificado en unas maquinas me funcionaba y en otras no. El problema es la versión de Internet Explorer, en mi caso por ejemplo en Internet Explorer 8 el certificado parece que no funciona correctamente, para solucionarlo debes tener instalado Internet Explorer 11.

Un saludo

Muchas gracias por el aporte porque me he encontrado con la misma situación.

Entonces, ¿entiendo que no se pueden realizar envíos al SII con un Windows XP, ya que no se pueden instalar versiones superiores a Explorer 8?

elcharlie 05-07-2017 10:10:45

Buenos días,
¿Alguien sabe que es el campo <NumRegistroAcuerdoFacturacion> de las factura emitidas y recibidas? En la documentación pone que es
Este campo será el número de registro obtenido al enviar el acuerdo de facturación correspondiente. Pero la verdad es que no sé lo que es, ni para que se usa. Sé que es un campo opcional, pero me gustaría conocer para que se usa, no sea que lo este haciendo mal.
Saludos a tod@s.


La franja horaria es GMT +2. Ahora son las 16:06:31.

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