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)

CMB 03-03-2017 21:19:44

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:
Saludos

Perdonad mi ignorancia pero no sé ni siquiera qué significa deserializando. Para mí es mucho más sencillo. Con mi Delphi construyo un XML exactamente igual que los ejemplos que pone la AEAT (con datos reales, NIF, nombre, etc), lo envío, y en un segundo recibo la respuesta. Todo correcto, o parcialmente, o todas las facturas duplicadas, da igual, pero la cosa funciona, tanto para emitidas como recibidas.

Copia y pega uno de los ejemplos del fichero SII_Descripcion_ServicioWeb_v0.5_es_es.pdf, tal cual, le pones datos de verdad, y lo envías. Recibirás la respuesta de inmediato (a menos que estén de obras, como el miércoles y jueves pasados :D ).

Saludos,

newtron 04-03-2017 19:45:19

Hola a tod@s.

He tenido esto unos días aparcado y ahora estoy tratando de ultimar (por lo menos) el tema de las facturas emitidas.

Cuando hay que indicar el código de pais en el caso de un cliente extranjero ¿hay que poner forzosamente el número?, que por cierto no sé de dónde se saca, ¿no hay forma de poner las letras del país? o en su defecto, ¿hay alguna tabla que los relacione?

Saludos

bartag 04-03-2017 20:38:32

Según la página 63 del documento 'SII_Descripcion_ServicioWeb_v0.5_es_es.pdf':

'CodigoPais -> Código del país asociado contraparte de la operación (cliente) de facturas expedidas -> Alfanumérico(2) (ISO 3166-1 alpha-2 codes) L17'

Y dentro del contenido 'L17 -> Código de País' (página 117) te aparecen las letra y la columna con el nombre país.

Al menos para las intracomunitarias, el código de país en .NET aparece con el código de letra de la página 117 (por ejemplo 'CountryMiembroType.DE' para Alemania).

jlegido 05-03-2017 11:06:11

Cita:

Empezado por bartag (Mensaje 513969)
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...


Para los que lo hacemos en VB.NET, esta claro que el .xml a enviar empieza o comprende el nodo <siiLR:SuministroLRFacturasEmtidas>, y que tiene que tener la siguiente estructura para poder ser enviado a AEAT:
Código:

<siiLR:SuministroLRFacturasEmitidas>
  <sii:Cabecera>
    <sii:IDVersionSii>0.1</sii:IDVersionSii>
        <sii:Titular>
        …

Yo entiendo que los prefijos –espacios de nombres- siiLR y sii en los diferentes elemntos son obligatorios.

Despues hemos de Deserializar dicho xml para asociarlo/cargarlo en un objeto tipo SuministroLRFacturasEmitidas que es el que enviaremos a AEAT (en mi caso Dim testF As New SuministroLRFacturasEmitidas)
Pero, y aquí viene el problema, en el xml hay 2 espacios de nombres: siiLR y sii que de alguna manera hay que indicar que se tengan en cuenta.
yo he intentado tu solucion bartag, es decir:

Código:

Dim x As New XmlSerializer(testF.GetType, "https://w**2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd") ', "https://w**2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd")
Dim reader As New FileStream(filename, FileMode.Open)
  testF = CType(x.Deserialize(reader), SuministroLRFacturasEmitidas)

pero no me funciona.
Que puede estar mal?. Si a ti te funciona, ¿puedes poner el codigo mas amplio?
Observo que en Dim x As New XmlSerializer(testF.GetType, "https://w**.agenciatributaria..., repites la misma cadena, aunque supongo que lo correcto como segunda cadena seria poner:
https://**2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd,
lo he probado tambien asi, pero sigue sin funcionar.

Muchas gracias por tu ayuda

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

bartag 05-03-2017 11:57:27

1 Archivos Adjunto(s)
Te pongo el código que utilizo. Básicamente lo que hace es tomar un archivo xml y lo envía. Debes por favor cumplimentar previamente los campos de dicho archivo pues en caso contrario te dará errores de validación.

Código:

        ' ----------------------------------------------------------------------------------------
        Dim store As Security.Cryptography.X509Certificates.X509Store = New Security.Cryptography.X509Certificates.X509Store("My")
        store.Open(Security.Cryptography.X509Certificates.OpenFlags.ReadOnly)

        Dim CertificadoCorrecto As New System.Security.Cryptography.X509Certificates.X509Certificate2
       
        For Each x In store.Certificates
            ListCert = ListCert & vbNewLine
        Next
        'RichTextBox1.Text = ListCert

        CertificadoCorrecto = store.Certificates(CInt(TextBoxNumeroOrdenCertificado.Text)) '(5)

        ' Objeto que almacenara la respuesta de la funcion del Web Service
        Dim resp As New ServiceReference1.RespuestaLRFEmitidasType

        ' Ws
        Dim Ws As New ServiceReference1.siiSOAPClient

        Ws.ClientCredentials.ClientCertificate.Certificate = CertificadoCorrecto
        Ws.ClientCredentials.UseIdentityConfiguration = True

        ' Asignamos el certificado:
        Ws.ClientCredentials.ClientCertificate.Certificate = CertificadoCorrecto
        ' ----------------------------------------------------------------------------------------


        ' ----------------------------------------------------------------------------------------
        Dim _SuministroLRFacturasEmitidas As New SuministroLRFacturasEmitidas
        '--------------------------------------------------------------------------
       
        Try

            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")

            ' 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

            ' SI QUEREMOS SOBREESCRIBIR EL XML ANTES DE ENVIAR:
            ' SOBREESCRIBIMOS DATS FORM ANTES SEND:
            _SuministroLRFacturasEmitidas.Cabecera.Titular.NombreRazon = Trim(TextBoxRazonSocialEmisor.Text)
            _SuministroLRFacturasEmitidas.Cabecera.Titular.NIF = Trim(TextBoxNIFEmisor.Text)

          '(...)

          '// se hace la llamada a la funcion suministrada por el WS
            resp = Ws.SuministroLRFacturasEmitidas(_SuministroLRFacturasEmitidas)

            Catch ex As Exception
            MsgBox(ex.Message)
            Respuesta2RichTextBox = ex.Message
        Finally
            'Me.Cursor = Cursors.Default
            'Threading.Thread.Sleep(5000)
            'ProgressBar1.Style = ProgressBarStyle.Continuous
            ''ProgressBar1.Value = ProgressBar1.Maximum
        End Try

Te adjunto también el archivo xml que debes cumplimentar donde indica '[A CUMPLIMENTAR]'.

Con esto, se toma la factura del archivo (fíjate que solamente tiene el nodo '<SuministroLRFacturasEmitidas>' y nada del encabezado SOAP para que no dé error al aplicar el Deserialize) y nos la convierte en un objeto serializado donde podemos acceder a los campos de la clase antes de enviar si lo deseamos; en caso contrario se envía y la propia llamada se encarga de insertar las cabeceras, los namespaces, etc.

jlegido 05-03-2017 20:28:34

Cita:

Empezado por bartag (Mensaje 514008)
Te pongo el código que utilizo. Básicamente lo que hace es tomar un archivo xml y lo envía. Debes por favor cumplimentar previamente los campos de dicho archivo pues en caso contrario te dará errores de validación.

Código:

        ' ----------------------------------------------------------------------------------------
        Dim store As Security.Cryptography.X509Certificates.X509Store = New Security.Cryptography.X509Certificates.X509Store("My")
        store.Open(Security.Cryptography.X509Certificates.OpenFlags.ReadOnly)

        Dim CertificadoCorrecto As New System.Security.Cryptography.X509Certificates.X509Certificate2
       
        For Each x In store.Certificates
            ListCert = ListCert & vbNewLine
        Next
        'RichTextBox1.Text = ListCert

        CertificadoCorrecto = store.Certificates(CInt(TextBoxNumeroOrdenCertificado.Text)) '(5)

        ' Objeto que almacenara la respuesta de la funcion del Web Service
        Dim resp As New ServiceReference1.RespuestaLRFEmitidasType

        ' Ws
        Dim Ws As New ServiceReference1.siiSOAPClient

        Ws.ClientCredentials.ClientCertificate.Certificate = CertificadoCorrecto
        Ws.ClientCredentials.UseIdentityConfiguration = True

        ' Asignamos el certificado:
        Ws.ClientCredentials.ClientCertificate.Certificate = CertificadoCorrecto
        ' ----------------------------------------------------------------------------------------


        ' ----------------------------------------------------------------------------------------
        Dim _SuministroLRFacturasEmitidas As New SuministroLRFacturasEmitidas
        '--------------------------------------------------------------------------
       
        Try

            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")

            ' 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

            ' SI QUEREMOS SOBREESCRIBIR EL XML ANTES DE ENVIAR:
            ' SOBREESCRIBIMOS DATS FORM ANTES SEND:
            _SuministroLRFacturasEmitidas.Cabecera.Titular.NombreRazon = Trim(TextBoxRazonSocialEmisor.Text)
            _SuministroLRFacturasEmitidas.Cabecera.Titular.NIF = Trim(TextBoxNIFEmisor.Text)

          '(...)

          '// se hace la llamada a la funcion suministrada por el WS
            resp = Ws.SuministroLRFacturasEmitidas(_SuministroLRFacturasEmitidas)

            Catch ex As Exception
            MsgBox(ex.Message)
            Respuesta2RichTextBox = ex.Message
        Finally
            'Me.Cursor = Cursors.Default
            'Threading.Thread.Sleep(5000)
            'ProgressBar1.Style = ProgressBarStyle.Continuous
            ''ProgressBar1.Value = ProgressBar1.Maximum
        End Try

Te adjunto también el archivo xml que debes cumplimentar donde indica '[A CUMPLIMENTAR]'.

Con esto, se toma la factura del archivo (fíjate que solamente tiene el nodo '<SuministroLRFacturasEmitidas>' y nada del encabezado SOAP para que no dé error al aplicar el Deserialize) y nos la convierte en un objeto serializado donde podemos acceder a los campos de la clase antes de enviar si lo deseamos; en caso contrario se envía y la propia llamada se encarga de insertar las cabeceras, los namespaces, etc.



Hola bartag.

Muchas gracias por tu rapida respuesta y tu aparte de codigo. Me habia encallado en ese tema y se supone que mañana debo hacer pruebas reales.

Me ha clarificado bastante tu codigo despues de analizarlo con detenimiento, y sobre todo tu frase “y la propia llamada se encarga de insertar las cabeceras, los namespaces, etc.”.

Finalmente he conseguido enviar y recibir respuesta de AEAT, aunque en la respuesta no recibo el esperado XML sino el siguiente texto:-pongo solo la parte inicial-

Código:

El tipo de contenido text/html del mensaje de respuesta no coincide con el tipo de contenido del enlace (text/xml; charset=utf-8). Si usa un codificador personalizado, asegúrese de que el método IsContentTypeSupported se implemente correctamente. Los primeros 1024 bytes de la respuesta fueron: '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
Y aunque he estado trabajando en App.config par modificar los bindings no he conseguido pasar de ahí de momento
No se si tu tambien has pasado por ese punto.

Salu2

newtron 06-03-2017 09:24:59

Cita:

Empezado por bartag (Mensaje 513998)
Según la página 63 del documento 'SII_Descripcion_ServicioWeb_v0.5_es_es.pdf':

'CodigoPais -> Código del país asociado contraparte de la operación (cliente) de facturas expedidas -> Alfanumérico(2) (ISO 3166-1 alpha-2 codes) L17'

Y dentro del contenido 'L17 -> Código de País' (página 117) te aparecen las letra y la columna con el nombre país.

Al menos para las intracomunitarias, el código de país en .NET aparece con el código de letra de la página 117 (por ejemplo 'CountryMiembroType.DE' para Alemania).

He visto ese apartado del documento, el problema es que (por lo menos en delphi) hay que poner el número que corresponde al país, no puedes asignar directamente las letras. Yo preguntaba si había alguna forma de asignar directamente las letras p.e. :

CountryMiembroType:='DE' o algo parecido

dimony 06-03-2017 09:46:23

Error al enviar
 
Hola a tod@s, en primer lugar muchas gracias por la ayuda que estais suministrando a la comunidad de afectados por el señor Montoro.
Esta maña me disponia a hacer el envio de una factura de prueba y me salta el siguiente error:

Código:

Codigo[-913].UNSUCCESSFUL EXECUTION CAUSED BY DEADLOCK OR TIMEOUT. REASON CODE 00C900BA, TYPE OF RESOURCE 00002006, AND RESOURCE NAME DBBUIDEN.TSBUIDEN.00000000. SQLCODE=-913, SQLSTATE=57033, DRIVER=4.19.57
¿Se puede tratar de un error de la AEAT?
Gracias.

keys 06-03-2017 09:48:10

Cita:

Empezado por newtron (Mensaje 514017)
He visto ese apartado del documento, el problema es que (por lo menos en delphi) hay que poner el número que corresponde al país, no puedes asignar directamente las letras. Yo preguntaba si había alguna forma de asignar directamente las letras p.e. :

CountryMiembroType:='DE' o algo parecido

Hola, la aeat quiere el orden del páis dentro de la tabla y no el nombre. Lo único que puedes hacer es sobrecargar la clase o hacer tu una función que pasandole las letras del pais te lo convierta a el codigo, que es lo que yo he hecho.

Un SAludo.

keys 06-03-2017 09:54:40

Cita:

Empezado por dimony (Mensaje 514019)
Hola a tod@s, en primer lugar muchas gracias por la ayuda que estais suministrando a la comunidad de afectados por el señor Montoro.
Esta maña me disponia a hacer el envio de una factura de prueba y me salta el siguiente error:

Código:

Codigo[-913].UNSUCCESSFUL EXECUTION CAUSED BY DEADLOCK OR TIMEOUT. REASON CODE 00C900BA, TYPE OF RESOURCE 00002006, AND RESOURCE NAME DBBUIDEN.TSBUIDEN.00000000. SQLCODE=-913, SQLSTATE=57033, DRIVER=4.19.57
¿Se puede tratar de un error de la AEAT?
Gracias.

Yo creo que es un problema de la aeat. Me ocurre lo mismo tanto desde nuestro programa como desde Wizdler.

Un saludo.

newtron 06-03-2017 10:01:04

Cita:

Empezado por keys (Mensaje 514020)
Hola, la aeat quiere el orden del páis dentro de la tabla y no el nombre. Lo único que puedes hacer es sobrecargar la clase o hacer tu una función que pasandole las letras del pais te lo convierta a el codigo, que es lo que yo he hecho.

Un SAludo.

Ya imaginaba que tendría que hacer algo parecido, gracias.

Por otro lado el servidor de la aeat no está muy fino, este sábado he estado haciendo pruebas y me daba errores en una de cada 2 ó 3 veces, no exactamente ese pero claramente era un problema del servidor.

Saludos

bartag 06-03-2017 15:21:54

Cita:

Empezado por jlegido (Mensaje 514010)
Hola bartag.

Muchas gracias por tu rapida respuesta y tu aparte de codigo. Me habia encallado en ese tema y se supone que mañana debo hacer pruebas reales.

Me ha clarificado bastante tu codigo despues de analizarlo con detenimiento, y sobre todo tu frase “y la propia llamada se encarga de insertar las cabeceras, los namespaces, etc.”.

Finalmente he conseguido enviar y recibir respuesta de AEAT, aunque en la respuesta no recibo el esperado XML sino el siguiente texto:-pongo solo la parte inicial-

Código:

El tipo de contenido text/html del mensaje de respuesta no coincide con el tipo de contenido del enlace (text/xml; charset=utf-8). Si usa un codificador personalizado, asegúrese de que el método IsContentTypeSupported se implemente correctamente. Los primeros 1024 bytes de la respuesta fueron: '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
Y aunque he estado trabajando en App.config par modificar los bindings no he conseguido pasar de ahí de momento
No se si tu tambien has pasado por ese punto.

Salu2

Has modificado el App.config indicando que use certificados y la versión SOAP 1.1?
Ahora no estoy en casa. Esta noche te paso el archivo por si pudiera venir de ahí el error.

bartag 06-03-2017 21:07:32

1 Archivos Adjunto(s)
Subo el archivo App.config.

Saludos

jlegido 06-03-2017 21:54:34

Como siempre “Muchas gracias” bartag por tu aporte y rápida respuesta.
Voy a mirarela en detalle y entenderla, pues veo que tut tienes tres <binding> diferentes.
Ya veo que uno de ellos, el siiBinding2, en realidad es un elemento sin contenido, que se ha quedado ahí, y probablemente tambien el siiBinding que es el que se crea inicialmente.
Ya habia buscado posibles soluciones y lo que tu pones coincide con alguna de las soluciones que halle, , que es crear el
<customBinding>
<binding name="siiBinding">
<textMessageEncoding messageVersion="Soap11" />
<httpsTransport />
</binding>
</customBinding>
Para definirle el protocolo Soap11.
Hos se supone que ya iba a tener el certificado y hacer pruebas reales, pero no lo tendre hasta el miercoles.
Ya te diré como va
Salu2

Carlos Garcia C 07-03-2017 12:46:02

SII Pruebas
 
Me presento soy Carlos y soy contable, siguiendo las 13 paginas de este foro he incluido los ejemplos y no tengo una respuesta válida por parte de AEAT. por último he copiado intergramente el ejemplo abajo indicado y recibo la Respuesta del servidor tambien fallida, ver abajo incluida.
¿podéis ayudarme a facilitarme un ejemplo que os haya funcionado, para ver posteriormente las consultas a los libros.
8.1.1.1.Ejemplo mensaje XML de alta, en la pagina 132 de 180 del
SII – Suministro Inmediato de Información
Autor : AEAT Fecha: 27/01/2017 Versión: 0.5



Gracias anticipadas por vuestra comprensión y colaboración.

CMB 07-03-2017 13:04:32

Cita:

Empezado por Carlos Garcia C (Mensaje 514068)
Me presento soy Carlos y soy contable, siguiendo las 13 paginas de este foro he incluido los ejemplos y no tengo una respuesta válida por parte de AEAT. por último he copiado intergramente el ejemplo abajo indicado y recibo la Respuesta del servidor tambien fallida, ver abajo incluida.
¿podéis ayudarme a facilitarme un ejemplo que os haya funcionado, para ver posteriormente las consultas a los libros.
8.1.1.1.Ejemplo mensaje XML de alta, en la pagina 132 de 180 del
SII – Suministro Inmediato de Información
Autor : AEAT Fecha: 27/01/2017 Versión: 0.5
Gracias anticipadas por vuestra comprensión y colaboración.

El ejemplo a que te refieres funciona bien con dos condiciones. (1) Que tengas en tu ordenador un certificado digital que coincida con el nombre y NIF del emisor (y si no es así, cambia los datos del emisor), y (2) Que los datos de las facturas incluidas contengan nombre y NIF registrados por Hacienda. No valen datos ficticios como los que incluye el ejemplo por razones obvias.

Pruébalo y publica la respuesta que recibes.

Saludos,

batuzail 07-03-2017 16:03:43

Cita:

Empezado por CMB (Mensaje 514069)
El ejemplo a que te refieres funciona bien con dos condiciones. (1) Que tengas en tu ordenador un certificado digital que coincida con el nombre y NIF del emisor (y si no es así, cambia los datos del emisor), y (2) Que los datos de las facturas incluidas contengan nombre y NIF registrados por Hacienda. No valen datos ficticios como los que incluye el ejemplo por razones obvias.

Pruébalo y publica la respuesta que recibes.

Saludos,

En referencia al certificado, para un grupo de empresas es necesario un certificado para cada empresa o es posible usar uno para todas cambiando los datos del emisor?

Carlos Garcia C 07-03-2017 16:13:12

SII Pruebas
 
1º- Muchas gracias por vuestros comentarios
2º- Vuelvo a tomar el 8.1.1.1, y me incluyo los datos reales.
3º- Aseguro el Certificado
4º- La Respuesta del Servidor es exactamente la misma; de nuevo la adjunto:



No se que puede fallarme..
De nuevo gracias anticipadas por vuestra colaboración.

keys 07-03-2017 16:21:55

Cita:

Empezado por batuzail (Mensaje 514081)
En referencia al certificado, para un grupo de empresas es necesario un certificado para cada empresa o es posible usar uno para todas cambiando los datos del emisor?

Los certifificados validos son los mismos que hay ahora mismo para presentar cualquier impuesto en hacienda. Si con ese certificado puedes presentar declaraciones de otras empresas (por ejmplo el 303 de iva), podrás presentar el sii de esa empresa.

Sino tendrás que tener un certificado distinto para cada empresa a presentar.


Un Saludo.

batuzail 07-03-2017 17:59:35

Gracias Keys.
Alguno que lo este haciendo en C#, lo tengo hecho en VB y me funciona, lo quiero pasar a C# y tengo un problema al redimensionar los arrays, en VB con Redim no tenia problemas pero en C# no me es posible redimensionar.

Cita:

SII_DetalleIVA.TipoImpositivo = "21";
SII_DetalleIVA.BaseImponible = "22.07";
SII_DetalleIVA.CuotaRepercutida = "4.63";
SII_DetalleIVA.TipoRecargoEquivalencia = "0";
SII_DetalleIVA.CuotaRecargoEquivalencia = "0";
//ReDim SII_SujetaNoExenta.DesgloseIVA (0)
Array.Resize(ref SII_SujetaNoExenta.DesgloseIVA , 2);

SII_SujetaNoExenta.DesgloseIVA[0] = SII_DetalleIVA;
Alguien puede decirme como lo ha hecho?

Saludos

ANDRES123 07-03-2017 18:08:21

Error JAVAX.SERVLET.SERVLETEXCEPTION
 
Gracias anticipadas por vuestra colaboración.

Estoy empezando a trabajar con el proyecto SII . Estoy probando las demos que habéis realizado.
Y cuando intento enviar los datos Me sale este error.

JAVAX.SERVLET.SERVLETEXCEPTION

Alguien sabe el motivo.

Gracias

batuzail 07-03-2017 18:48:00

Cita:

Empezado por batuzail (Mensaje 514089)
Gracias Keys.
Alguno que lo este haciendo en C#, lo tengo hecho en VB y me funciona, lo quiero pasar a C# y tengo un problema al redimensionar los arrays, en VB con Redim no tenia problemas pero en C# no me es posible redimensionar.



Alguien puede decirme como lo ha hecho?

Saludos

Ya lo he conseguido .
Si a alguien le pase que pregunte que un poco largo.

Gracias

Francisco1973 09-03-2017 16:21:42

Suministro de cobros
 
Hola a todos, ¿ alguien ha conseguido enviar cobros ?. Yo lo hago a través del WSDL importer construyendo el objeto, en el XML que se genera obtengo:

-<Cobros xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">
-<Cobro xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd">
<Fecha xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">01-01-2017</Fecha>
<Importe xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">20</Importe>
<Medio xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">01</Medio>
<Cuenta_O_Medio xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">ES00000000????</Cuenta_O_Medio>
</Cobro>
</Cobros>

En hacienda me dicen que los xsd que he marcado en rojo están intercambiados, o sea, en Cobros ha de ser SuministroLR.xsd y en Cobro SuministroInformacion.xsd. ¿ A alguien le ha pasado esto ?
Por otro lado, ¿ Sabeis como quitar las etiquetas xmlns de cada nodo e incluirlas solo en la etiqueta Envelope ?
Saludos,

keys 09-03-2017 16:38:44

En los libros de cobros como los de pagos. El delphi no genera bien el fichero, falta un xmlns en uno de los nodos y la aeat genera un error. Para solucionarlo he tenido que cambiar el fichero XML por codigo para incluirlo. En concreto son el nodo <Cobro> y <Pago>.

en Cobro hay que poner esto.

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

en pago hay que poner esto.

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

Los xmlns no se pueden ni se deben quitar ya que como no esten hacienda da error. En concreto en los cobros y pagos el error es que faltaba uno.

Se me olvidada. El nodo <cobros> y <pagos> no lleva xmlns

Igual es esto l oque te esta pasando.

Francisco1973 09-03-2017 16:44:52

Gracias por tu respuesta, es exactamente lo que me está pasando. ¿Y como lo cambias ? Tienes algún ejemplo?
Saludos

keys 09-03-2017 16:52:12

Lo que hago es en el objeto THTTPTRIO en el evento OnbeforeExecute capturar el xml y cambiarlo a mano.

Código Delphi [-]
    var
      ss:TFileStream;
      Fichero : TStringList;
      i : Integer;
     nficheroTemp : string;
   begin
     
     NficheroTemp := 'c:\tmp\LCFTemporal.Xml';
     if FileExists(NficheroTemp) then
         DeleteFile(NficheroTemp);

     ss := TFileStream.Create(NficheroTemp, fmCreate);
     SOAPRequest.Position := 0;
     ss.CopyFrom(SOAPRequest, SOAPRequest.size);
     ss.Free;
     SOAPRequest.Position := 0;

     Fichero := TStringList.Create;
     Fichero.LoadFromFile(NficheroTemp);
     for i := 0 to Fichero.Count - 1 do
       Fichero.Strings[i] := StringReplace(Fichero.Strings[i],'','', [rfReplaceAll]);
     Fichero.SaveToFile(NficheroTemp);

     SOAPRequest.Size:=0;
     ss:=TFileStream.Create(NficheroTemp, fmOpenRead);
     SOAPRequest.Position := 0;
     SOAPRequest.CopyFrom( ss, ss.Size);
     ss.Free;

     SOAPRequest.Position := 0;

Perdona el texto no sale bien en el codigo. es así

Fichero.Strings[i] := StringReplace(Fichero.Strings[i],'<Cobro>','<Cobro xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">', [rfReplaceAll]);

Por cierto esto tambien te sirve para guardar el xml en una carpeta y poder ver lo que estás enviando.

Nasca 09-03-2017 17:11:18

Yo sigo pensando, y haciendo, que es mejor olvidarse de los objetos y montar los xml a mano.
No es prácticamente código y terminas obviando todos esos detalles tontos.
El control sobre el resultado es completo.

Idem con las respuestas.

Y de carambola no generas dependencias de librerías externas al programa.

CMB 09-03-2017 17:48:53

Construir un XML y olvidarse de las clases
 
Cita:

Empezado por Nasca (Mensaje 514157)
Yo sigo pensando, y haciendo, que es mejor olvidarse de los objetos y montar los xml a mano.
No es prácticamente código y terminas obviando todos esos detalles tontos.
El control sobre el resultado es completo.
Idem con las respuestas.
Y de carambola no generas dependencias de librerías externas al programa.

Yo lo estoy haciendo así y me encuentro muy cómodo. Construir un XML con los namespaces que correspondan y los contenidos correctos es la mar de fácil. Un rato, con un poco de paciencia, y ya queda para siempre. Y si algún día hay que tocar algo, pues son unos minutos.

No soy un gran experto en Delphi aunque me defiendo bastante bien, pero no comprendo el interés que hay con tantos líos de clases y dependencias. Llevas toda la razón, El control sobre el resultado es completo. Y el envío a la AEAT me funciona a la perfección tanto con facturas emitidas como recibidas. Por lo menos de momento :)

Francisco1973 09-03-2017 18:13:42

Gracias Keys, funciona perfectamente !!

newtron 09-03-2017 18:21:42

Hola de nuevo.

¿Alguien ha resuelto las facturas de venta por alquileres de locales comerciales? No soy capaz de crear los objetos.

Me da error en esta línea:

Código Delphi [-]
          ARegistroLRFacturasEmitidas[N].FacturaExpedida.DatosInmueble:=DatosInmueble2.create;

Gracias y un saludo

Francisco1973 09-03-2017 18:28:56

Te pongo un ejemplo:
SetLength(ADatosInmueble, Inmuebles.RowsFetched);
Inmuebles.First;
for L := 0 to Inmuebles.RowsFetched - 1 do
Begin
ADatosInmueble[L]:=DetalleInmueble.Create;
ADatosInmueble[L].SituacionInmueble:=SituacionInmuebleType(InmueblesSITUACION.Value - 1);
ADatosInmueble[L].ReferenciaCatastral:=InmueblesREFCATASTRAL.Value;
Inmuebles.Next;
End;

ARegLRFacturasEmitidas[i].FacturaExpedida.DatosInmueble:=ADatosInmueble;

newtron 09-03-2017 18:40:49

Gracias por tu pronta respuesta.

Me da errores al intentar implantar tu ejemplo. ¿Cómo has declarado el array ADatosInmueble?

Gracias y un saludo

Edito: Ya lo he resuelto. Pero yo pregunto... ¿cómo averiguas que hay que crear un array con los valores para asignarlos?

newtron 09-03-2017 19:22:19

Y vuelvo con el tema....

¿Habéis probado a pasar una factura de alquiler de local de negocio sin referencia catastral? a mi me da error porque dice que no está informado la referencia catastral. :confused::confused:

Saludos

Nasca 09-03-2017 19:50:59

Cita:

Empezado por newtron (Mensaje 514168)
Y vuelvo con el tema....

¿Habéis probado a pasar una factura de alquiler de local de negocio sin referencia catastral? a mi me da error porque dice que no está informado la referencia catastral. :confused::confused:

Saludos

Revisa ClaveRegimenEspecialOTrascendencia, con 13 no debería ser obligatorio.

keys 10-03-2017 08:54:55

En las claves regimen especialOtrascendencia 13, 14, 15. Es obligatorio la referencia catastral a no ser que en situación del inmueble tengas la clave 3 situaciones anteriores pero sin referencia catastral

Un Saludo.

newtron 10-03-2017 08:57:56

Cita:

Empezado por keys (Mensaje 514183)
En las claves regimen especialOtrascendencia 13, 14, 15. Es obligatorio la referencia catastral a no ser que en situación del inmueble tengas la clave 3 situaciones anteriores pero sin referencia catastral

Un Saludo.

Eso entiendo pero estoy haciendo una prueba con clave 13 y 3 y me da error si no le meto la referencia catastral.

¿Podría alguien hacer una prueba a ver si estoy equivocado o algo falla?

Gracias y un saludo

keys 10-03-2017 09:13:12

Hola. Tienes razón. Si pones las claves 13, 14, y 15. Obliga a poner la referencia aunque la situación sea 3. Si te fijas en la descripcion pone que si es 13,14,15 son obligatorios los dos campos.

Creo que es una consulta para enviar a Hacienda.

Nasca 10-03-2017 09:20:07

Según sus FAQ:

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

Cita:

El arrendador registrará la factura expedida con la clave de régimen especial “13” o “14” según el arrendamiento esté o no sujeto a retención. En el caso de que se trate de un arrendamiento no sujeto a retención deberá cumplimentar adicionalmente los campos correspondientes a la situación del inmueble y a la referencia catastral.
El arrendatario se limitará a registrar la factura recibida con la clave de régimen especial “15”.

La 13 no debería dar error.

Pero igualmente estoy haciendo pruebas usando 4 combinaciones: 13-con ref, 13-sin ref, 14-con ref y 14-sin ref
Y me devuelve un error de validación general, no llega a pasar el filtro general de validación contra el xsd.

keys 10-03-2017 14:08:27

Respuesta de hacienda sobre las referencias catastrales.

este tema se soluciona en la próxima versión publicada (0.6) que entra en vigor el 15 de marzo.

Nasca 10-03-2017 14:46:03

La verdad es que tenía toda la pinta de ser algo así.


La franja horaria es GMT +2. Ahora son las 04:27:19.

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