Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

Tema Cerrado
 
Herramientas Buscar en Tema Desplegado
  #1061  
Antiguo 07-01-2024
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 166
Poder: 8
nincillo Va por buen camino
Cita:
Empezado por djatila Ver Mensaje
Leí en un post anterior que aquí había gente también en visual basic, así que respondo por aquí, así espero que sirva a mas gente. (si molesta, avísenme)

Para importar el wsdl en visual basic studio
-Proyecto -Agregar referencia de servicio - botón avanzadas - botón agregar referencia web
-en direccion = SistemaFacturacion.wsdl
-botón flechita - cambiar el nombre de la clase si queréis yo puse MiSFI -y agregar referencia

También esta la opción con el comando xsd de generar las clases.vb con los ficheros xsd, pero esto no es necesario si se importo el wsdl.

Aqui te pongo como estoy haciendo para generar el xml , este codigo funciona hasta el cierre de la cabecera.

Código:
        Dim altaFactuSistemaFacturacion As New AltaFactuSistemaFacturacion
        'Cabecera
        Dim cabecera As New MiSFI.Cabecera
        Dim obligadoEmision As New MiSFI.PersonaFisicaJuridicaESType
        Dim tipoRegistroAEAT As New MiSFI.TipoRegistroAEATType
        '/Cabecera
        Dim registroAltaFacturas As New MiSFI.FacturasEmitidasType
        Dim RegistroFacturacion(2) As MiSFI.RegistroFacturacionType
        Dim datosControl As New MiSFI.DatosControlType
        'idFactura
        Dim idFactura As New MiSFI.IDFacturaExpedidaType 'MiSFI.IDFacturaARType
        Dim idEmisorFactura As New MiSFI.IDFacturaExpedidaTypeIDEmisorFactura
        '/idFactura
        Dim Destinatarios As New MiSFI.PersonaFisicaJuridicaType
        Dim idDestinatario As New MiSFI.PersonaFisicaJuridicaESType
        Dim detalleDesglose As New MiSFI.DetalleType ' DetalleDesglose
        Dim encadenamientoRegistroAnterior As New MiSFI.EncadenamientoFacturaAnteriorType '.EncadenamientoRegistroAnterior
        Dim idEmisorFacturaRegistroAnterior As New MiSFI.EncadenamientoFacturaAnteriorTypeIDEmisorFacturaRegistroAnterior  '.IDEmisorFacturaRegistroAnterior
        Dim sistemaInformatico As New MiSFI.SistemaInformaticoType
        'Cabecera
        cabecera.IDVersion = MiSFI.VersionType.Item10  '"1.0"
        obligadoEmision.NombreRazon = "XXXXX"
        obligadoEmision.NIF = "XXXXX"
        tipoRegistroAEAT = MiSFI.TipoRegistroAEATType.T0 ' "T0"
        cabecera.ObligadoEmision = obligadoEmision
        cabecera.TipoRegistroAEAT = tipoRegistroAEAT
        '/Cabecera
        'RegistroAltaFacturas
        'RegistroFacturacion
        'IDFactura
        idEmisorFactura.NIF = "XXXXX"
        idFactura.NumSerieFacturaEmisor = "12345"
        idFactura.FechaExpedicionFacturaEmisor = "13-11-2023"
        idFactura.IDEmisorFactura = idEmisorFactura
        '/IDfactura  

        'Estas dan error
        'RegistroFacturacion(0).IDFactura = idFactura
        'RegistroFacturacion(0).NombreRazonEmisor = "certificado uno telematicas"
        'RegistroFacturacion(0).TipoRegistroSIF = MiSFI.TipoRegistroSIFType.S0 ' "S0"
        'RegistroFacturacion(0).TipoFactura = MiSFI.ClaveTipoFacturaType.F1 '"F1"
        'RegistroFacturacion(0).DescripcionOperacion = "Descripc"

        idDestinatario.NombreRazon = "XXXXX"
        idDestinatario.NIF = "XXXXX"

        datosControl.Huella = "Huella"
        datosControl.TipoHash = "01"


        registroAltaFacturas.RegistroFacturacion = RegistroFacturacion(0)
        registroAltaFacturas.DatosControl = datosControl


        altaFactuSistemaFacturacion.Cabecera = cabecera
        'esta da error 
        'altaFactuSistemaFacturacion.RegistroAltaFacturas = registroAltaFacturas

        Dim ns As New XmlSerializerNamespaces()
        ns.Add("soapenv", ".......")
        ns.Add("sum", "........SuministroLR.xsd")
        ns.Add("sum1", ".......SuministroInformacion.xsd")

        'serializamos
        Dim serializer As New XmlSerializer(GetType(MiSFI.AltaFactuSistemaFacturacion))
        Using writer As New StreamWriter("C:\xml\archivo.xml")
            serializer.Serialize(writer, altaFactuSistemaFacturacion, ns)
        End Using
tuve que quitar las url porque no tengo permisos....



Gracias por responder. pero en esas estoy y no lo consigo, algo estoy haciendo mal......
A ver si te sirve de ayuda. Así lo tengo yo en Delphi, pero lo gracioso es que sigo sin tener el elemento Cabecera...:
Código:
var
  regFactura : FacturasEmitidasType;
  result : Array_Of_RespuestaExpedidaType;
  arrayFacturasS : Array_Of_FacturasEmitidasType;

begin
  regFactura := FacturasEmitidasType.Create;

      regFactura.RegistroFacturacion := RegistroFacturacionType.Create;
...
        regFactura.RegistroFacturacion.IDFactura := IDFacturaExpedidaType.Create;
            regFactura.RegistroFacturacion.IDFactura.NumSerieFacturaEmisor := '23/123456';
....
try
    SetLength(arrayFacturas, 1);
    arrayFacturas[0] := regFactura;
    result := GetsfSOAP(true, '', HTTPRIO1).AltaFactuSistemaFacturacion(ArrayFacturas);
  finally
    regFactura.Destroy;
  end;
¿Podrías publicar de alguna manera el fichero que te genera al importar el wsdl a ver si encuentro las diferencias con el que genera en Delphi?.
  #1062  
Antiguo 07-01-2024
djatila djatila is offline
Registrado
 
Registrado: nov 2022
Posts: 9
Poder: 0
djatila Va por buen camino
ya lo conseguí.

Código:
<AltaFactuSistemaFacturacion xmlns:soapenv="......./envelope/"
xmlns:sum="............/SuministroLR.xsd"
 xmlns:sum1="...................................../SuministroInformacion.xsd">
<sum1:Cabecera>
<sum1:IDVersion>1.0</sum1:IDVersion>
<sum1:ObligadoEmision>
<sum1:NombreRazon>XXXXX</sum1:NombreRazon>
<sum1:NIF>XXXXX</sum1:NIF>
</sum1:ObligadoEmision>
<sum1:TipoRegistroAEAT>T0</sum1:TipoRegistroAEAT>
</sum1:Cabecera>
<sum:RegistroAltaFacturas>
<sum:RegistroFacturacion>
<sum1:IDFactura>
<sum1:IDEmisorFactura>
<sum1:NIF>XXXXX</sum1:NIF>
</sum1:IDEmisorFactura>
<sum1:NumSerieFacturaEmisor>12345</sum1:NumSerieFacturaEmisor>
<sum1:FechaExpedicionFacturaEmisor>13-11-2023</sum1:FechaExpedicionFacturaEmisor>
</sum1:IDFactura>
<sum1:NombreRazonEmisor>certificado uno telematicas</sum1:NombreRazonEmisor>
<sum1:TipoRegistroSIF>S0</sum1:TipoRegistroSIF>
<sum1:TipoFactura>F1</sum1:TipoFactura>
<sum1:DescripcionOperacion>Descripc</sum1:DescripcionOperacion>
<sum1:HusoHorarioGenRegistro>01</sum1:HusoHorarioGenRegistro>
</sum:RegistroFacturacion>
<sum:DatosControl>
<sum1:Huella>Huella</sum1:Huella>
<sum1:TipoHash>01</sum1:TipoHash>
</sum:DatosControl>
</sum:RegistroAltaFacturas>
</AltaFactuSistemaFacturacion>
(tuve que quitar las url)

ahora voy a rellenar los demás campos.

Cita:
Empezado por nincillo Ver Mensaje
¿Podrías publicar de alguna manera el fichero que te genera al importar el wsdl a ver si encuentro las diferencias con el que genera en Delphi?.
te lo intento pasar por privado que es un tocho
  #1063  
Antiguo 08-01-2024
Usuario0550 Usuario0550 is offline
Registrado
 
Registrado: dic 2023
Posts: 1
Poder: 0
Usuario0550 Va por buen camino
Cita:
Empezado por Maska10 Ver Mensaje
Una duda chorra (o no),

En el fichero de estructura de los ficheros, para, por ejemplo, el fichero de alta hay 3 formatos en 3 pestañas:

- Alta.VERIFACTU
- Alta.Requerimiento
- Alta.C-E

Entiendo que el primero es el formato que debemos usar si nuestro software está conectado a VERIFCATU.

Entiendo, por lógica, que el segundo es el formato que debemos usar si nuestro software NO está conectado a VERIFACTU.

Como podréis adivinar .. ¿para que carajos es el tercero? ¿que significa C-E? ¿está puesto en algun lado y soy tan tonto que no lo veo?
Esto es lo que me respondieron a mí:

Desde el punto de vista de remisión de información, existirán dos servicios web, uno para el alta y remisión inmediata, detallado en el Diseño de registro DR Alta.Verifactu, y otro para la remisión por requerimiento, detallado en el Diseño de registro DR Alta.Requerimiento (que son las "hojas" del DR sobre las que no tienen dudas).
Adicionalmente, y como elementos propios del SIF, existirá el Registro de Eventos, obligatoriamente en los sistemas no Veri*factu. Este Registro de Eventos es necesario para para que se consideren cumplidas las condiciones establecidas en el artículo 8.3 del Reglamento aprobado por el Real Decreto 1007/2023. Lo que se describe en el DR Evento.v.0.3 es la información estructurada que debe contener. Un ejemplo de acciones a registrar en el DR de Eventos puede ser: Instalación o puesta en marcha inicial del sistema informático, Detección de anomalías en la integridad, inalterabilidad y trazabilidad de registros de eventos, Exportación de registros de facturación generados en un periodo, entre otros. Este registro de Eventos, por el momento, se menciona en el artículo 8.3 de Disposición 24840 del BOE núm. 291 de 2023

Por último, también existirá como elemento propio del SIF, un DR Alta.C-E, que se denomina, Diseño de Registro de Alta Conservación y Exportación, o también su análogo para la anulación, que indica cómo se debe conservar los datos en el SIF y también, en su caso, cómo se debe exportar. Ambos son la base u origen de la información de los registros de facturación y comparten un contenido muy similar con los que se utilizarán para la remisión, ya sea inmediata o por requerimiento, pero su ámbito es el propio SIF.

Esperamos haberle aclarado su duda, no obstante, cuando se publique la OM se ofrecerá información más detallada sobre estas cuestiones (y muchas otras).
  #1064  
Antiguo 08-01-2024
Maska10 Maska10 is offline
Miembro
 
Registrado: abr 2020
Posts: 18
Poder: 0
Maska10 Va por buen camino
Cita:
Empezado por Usuario0550 Ver Mensaje
Esto es lo que me respondieron a mí:

Desde el punto de vista de remisión de información, existirán dos servicios web, uno para el alta y remisión inmediata, detallado en el Diseño de registro DR Alta.Verifactu, y otro para la remisión por requerimiento, detallado en el Diseño de registro DR Alta.Requerimiento (que son las "hojas" del DR sobre las que no tienen dudas).
Adicionalmente, y como elementos propios del SIF, existirá el Registro de Eventos, obligatoriamente en los sistemas no Veri*factu. Este Registro de Eventos es necesario para para que se consideren cumplidas las condiciones establecidas en el artículo 8.3 del Reglamento aprobado por el Real Decreto 1007/2023. Lo que se describe en el DR Evento.v.0.3 es la información estructurada que debe contener. Un ejemplo de acciones a registrar en el DR de Eventos puede ser: Instalación o puesta en marcha inicial del sistema informático, Detección de anomalías en la integridad, inalterabilidad y trazabilidad de registros de eventos, Exportación de registros de facturación generados en un periodo, entre otros. Este registro de Eventos, por el momento, se menciona en el artículo 8.3 de Disposición 24840 del BOE núm. 291 de 2023

Por último, también existirá como elemento propio del SIF, un DR Alta.C-E, que se denomina, Diseño de Registro de Alta Conservación y Exportación, o también su análogo para la anulación, que indica cómo se debe conservar los datos en el SIF y también, en su caso, cómo se debe exportar. Ambos son la base u origen de la información de los registros de facturación y comparten un contenido muy similar con los que se utilizarán para la remisión, ya sea inmediata o por requerimiento, pero su ámbito es el propio SIF.

Esperamos haberle aclarado su duda, no obstante, cuando se publique la OM se ofrecerá información más detallada sobre estas cuestiones (y muchas otras).
Correcto, es lo que pensaba mas o menos, ahora solo falta ver como hacen para que los ficheros xml sean válidos y solo haya un elemento de nivel superior.
  #1065  
Antiguo 08-01-2024
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.586
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por djatila Ver Mensaje
Leí en un post anterior que aquí había gente también en visual basic, así que respondo por aquí, así espero que sirva a mas gente. (si molesta, avísenme)

No molesta en absoluto.
Aunque este es un foro principalmente sobre Delphi, caben mensajes de otros lenguajes, Y aunque hay foros específicos de cada lenguaje, en temas como este, LeyAntifraude (SII o TicketBAI) se permite publicar en textos y códigos en otros lenguajes de programación, porque "prima" el tema sobre el que va el hilo (LeyAntifraude).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
  #1066  
Antiguo 08-01-2024
djatila djatila is offline
Registrado
 
Registrado: nov 2022
Posts: 9
Poder: 0
djatila Va por buen camino
Cita:
Empezado por Usuario0550 Ver Mensaje
Esto es lo que me respondieron a mí:

Desde el punto de vista de remisión de información, existirán dos servicios web, uno para el alta y remisión inmediata, detallado en el Diseño de registro DR Alta.Verifactu, y otro para la remisión por requerimiento, detallado en el Diseño de registro DR Alta.Requerimiento (que son las "hojas" del DR sobre las que no tienen dudas).
Adicionalmente, y como elementos propios del SIF, existirá el Registro de Eventos, obligatoriamente en los sistemas no Veri*factu. Este Registro de Eventos es necesario para para que se consideren cumplidas las condiciones establecidas en el artículo 8.3 del Reglamento aprobado por el Real Decreto 1007/2023. Lo que se describe en el DR Evento.v.0.3 es la información estructurada que debe contener. Un ejemplo de acciones a registrar en el DR de Eventos puede ser: Instalación o puesta en marcha inicial del sistema informático, Detección de anomalías en la integridad, inalterabilidad y trazabilidad de registros de eventos, Exportación de registros de facturación generados en un periodo, entre otros. Este registro de Eventos, por el momento, se menciona en el artículo 8.3 de Disposición 24840 del BOE núm. 291 de 2023

Por último, también existirá como elemento propio del SIF, un DR Alta.C-E, que se denomina, Diseño de Registro de Alta Conservación y Exportación, o también su análogo para la anulación, que indica cómo se debe conservar los datos en el SIF y también, en su caso, cómo se debe exportar. Ambos son la base u origen de la información de los registros de facturación y comparten un contenido muy similar con los que se utilizarán para la remisión, ya sea inmediata o por requerimiento, pero su ámbito es el propio SIF.

Esperamos haberle aclarado su duda, no obstante, cuando se publique la OM se ofrecerá información más detallada sobre estas cuestiones (y muchas otras).
Gracias por la aclaración, ahora que lo has mencionado leí algo a ese respecto en el primer enlace del post 1025 a partir de la pagina 32
  #1067  
Antiguo 08-01-2024
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 166
Poder: 8
nincillo Va por buen camino
Cita:
Empezado por djatila Ver Mensaje
Te lo intento pasar por privado que es un tocho
Recibido. Muchísimas gracias.

Estoy comparando y lo que tú me mandas tiene mucho más contenido que el que me ha generado a mi importándolo desde Delphi.

No solo no encuentro la cabecera que en el tuyo si:

Código:
'''<remarks/>
    <System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.8.9037.0"),  _
     System.SerializableAttribute(),  _
     System.Diagnostics.DebuggerStepThroughAttribute(),  _
     System.ComponentModel.DesignerCategoryAttribute("code"),  _
     System.Xml.Serialization.XmlTypeAttribute([Namespace]:="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicacion"& _ 
        "es/es/aeat/tike/cont/ws/SuministroInformacion.xsd")>  _
    Partial Public Class Cabecera
        
        Private iDVersionField As VersionType
        
        Private obligadoEmisionField As PersonaFisicaJuridicaESType
        
        Private tipoRegistroAEATField As TipoRegistroAEATType
        
        Private fechaFinVeriFactuField As String
        
        '''<remarks/>
        Public Property IDVersion() As VersionType
            Get
                Return Me.iDVersionField
            End Get
            Set
                Me.iDVersionField = value
            End Set
        End Property
        
        '''<remarks/>
        Public Property ObligadoEmision() As PersonaFisicaJuridicaESType
            Get
                Return Me.obligadoEmisionField
            End Get
            Set
                Me.obligadoEmisionField = value
            End Set
        End Property
        
        '''<remarks/>
        Public Property TipoRegistroAEAT() As TipoRegistroAEATType
            Get
                Return Me.tipoRegistroAEATField
            End Get
            Set
                Me.tipoRegistroAEATField = value
            End Set
        End Property
        
        '''<remarks/>
        Public Property FechaFinVeriFactu() As String
            Get
                Return Me.fechaFinVeriFactuField
            End Get
            Set
                Me.fechaFinVeriFactuField = value
            End Set
        End Property
    End Class
    
    '''<remarks/>
Sino que, algo tan sencillo como la definición de VersionType tampoco está.

Código:
    '''<remarks/>
    <System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.8.9037.0"),  _
     System.SerializableAttribute(),  _
     System.Xml.Serialization.XmlTypeAttribute([Namespace]:="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicacion"& _ 
        "es/es/aeat/tike/cont/ws/SuministroInformacion.xsd")>  _
    Public Enum VersionType
        
        '''<remarks/>
        <System.Xml.Serialization.XmlEnumAttribute("1.0")>  _
        Item10
    End Enum
    
    '''<remarks/>

¿Podrías mandar el link del wsdl que estás importando a ver si es que no estoy cogiendo el correcto?

¿Es normal que el mismo wsdl al importarlo desde dos lenguajes diferentes se "coma" cosas?

Un poco más abajo están las siguientes definiciones:

Código:
'''<remarks/>
    <System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.8.9037.0"),  _
     System.SerializableAttribute(),  _
     System.Diagnostics.DebuggerStepThroughAttribute(),  _
     System.ComponentModel.DesignerCategoryAttribute("code"),  _
     System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=true, [Namespace]:="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicacion"& _ 
        "es/es/aeat/tike/cont/ws/SuministroLR.xsd")>  _
    Partial Public Class AltaFactuSistemaFacturacion
        Inherits SistemaFacturacionAltaFact
        
        Private registroAltaFacturasField() As FacturasEmitidasType
        
        '''<remarks/>
        <System.Xml.Serialization.XmlElementAttribute("RegistroAltaFacturas")>  _
        Public Property RegistroAltaFacturas() As FacturasEmitidasType()
            Get
                Return Me.registroAltaFacturasField
            End Get
            Set
                Me.registroAltaFacturasField = value
            End Set
        End Property
    End Class

    '''<remarks/>
    <System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.8.9037.0"),  _
     System.SerializableAttribute(),  _
     System.Diagnostics.DebuggerStepThroughAttribute(),  _
     System.ComponentModel.DesignerCategoryAttribute("code"),  _
     System.Xml.Serialization.XmlTypeAttribute([Namespace]:="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicacion"& _ 
        "es/es/aeat/tike/cont/ws/SuministroInformacion.xsd")>  _
    Partial Public Class SistemaFacturacionAltaFact
        
        Private cabeceraField As Cabecera
        
        '''<remarks/>
        Public Property Cabecera() As Cabecera
            Get
                Return Me.cabeceraField
            End Get
            Set
                Me.cabeceraField = value
            End Set
        End Property
    End Class
    
    '''<remarks/>
  #1068  
Antiguo 08-01-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 1.351
Poder: 5
ermendalenda Va por buen camino
Cita:
Empezado por Usuario0550 Ver Mensaje
Esto es lo que me respondieron a mí:

Desde el punto de vista de remisión de información, existirán dos servicios web, uno para el alta y remisión inmediata, detallado en el Diseño de registro DR Alta.Verifactu, y otro para la remisión por requerimiento, detallado en el Diseño de registro DR Alta.Requerimiento (que son las "hojas" del DR sobre las que no tienen dudas).
Adicionalmente, y como elementos propios del SIF, existirá el Registro de Eventos, obligatoriamente en los sistemas no Veri*factu. Este Registro de Eventos es necesario para para que se consideren cumplidas las condiciones establecidas en el artículo 8.3 del Reglamento aprobado por el Real Decreto 1007/2023. Lo que se describe en el DR Evento.v.0.3 es la información estructurada que debe contener. Un ejemplo de acciones a registrar en el DR de Eventos puede ser: Instalación o puesta en marcha inicial del sistema informático, Detección de anomalías en la integridad, inalterabilidad y trazabilidad de registros de eventos, Exportación de registros de facturación generados en un periodo, entre otros. Este registro de Eventos, por el momento, se menciona en el artículo 8.3 de Disposición 24840 del BOE núm. 291 de 2023

Por último, también existirá como elemento propio del SIF, un DR Alta.C-E, que se denomina, Diseño de Registro de Alta Conservación y Exportación, o también su análogo para la anulación, que indica cómo se debe conservar los datos en el SIF y también, en su caso, cómo se debe exportar. Ambos son la base u origen de la información de los registros de facturación y comparten un contenido muy similar con los que se utilizarán para la remisión, ya sea inmediata o por requerimiento, pero su ámbito es el propio SIF.

Esperamos haberle aclarado su duda, no obstante, cuando se publique la OM se ofrecerá información más detallada sobre estas cuestiones (y muchas otras).
Gracias por compartir.

Hola estoy un poco espeso, he leido esta respuesta y me he quedado con la misma duda que tenua, a raiz de esta respuesta de la aeat, sabeis si realmente los sistemas SÍ VERIFACTU (O sea que envian directamente) tienen que crear algún evento. el de instalación inicio de envio...? no entiendo muy bien el mensaje
  #1069  
Antiguo 08-01-2024
djatila djatila is offline
Registrado
 
Registrado: nov 2022
Posts: 9
Poder: 0
djatila Va por buen camino
Cita:
Empezado por nincillo Ver Mensaje

¿Podrías mandar el link del wsdl que estás importando a ver si es que no estoy cogiendo el correcto?
https://prewww2.aeat.es/static_files...cturacion.wsdl

Última edición por Neftali [Germán.Estévez] fecha: 08-01-2024 a las 14:54:19. Razón: Añadir URL
  #1070  
Antiguo 08-01-2024
keno_71 keno_71 is offline
Miembro
 
Registrado: feb 2008
Posts: 49
Poder: 0
keno_71 Va por buen camino
Cita:
Empezado por ermendalenda Ver Mensaje
Gracias por compartir.

Hola estoy un poco espeso, he leido esta respuesta y me he quedado con la misma duda que tenua, a raiz de esta respuesta de la aeat, sabeis si realmente los sistemas SÍ VERIFACTU (O sea que envian directamente) tienen que crear algún evento. el de instalación inicio de envio...? no entiendo muy bien el mensaje
Hola, yo también me he quedado con la misma duda, pensaba que eso era independiente de si se enviaba inmediatamente o por requerimiento. Gracias a todos por toda la información
  #1071  
Antiguo 08-01-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 1.351
Poder: 5
ermendalenda Va por buen camino
Más sobre el QR

Al parecer en el pdf, según la OM propuesta), habrá que ponerle el enlace (Escribiendolo completo e integrandole el enlace) debajo o encima del dibujo del QR.
  #1072  
Antiguo 08-01-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 1.351
Poder: 5
ermendalenda Va por buen camino
ejemplo posible QR

Os adjunto un pdf con aproximación de como quedaría una factura con QR en pdf según los datos que nos dan en la OM.
Las medidas son 35x35 ya que como piden entree 30x30 y 40x40 me quedo justo en el centro para tener margen por si hay alguna putadilla con las medidas de la impresora.
Imágenes Adjuntas
Tipo de Archivo: pdf Fact_1_155-1-8_20240108_142519_2.00_A4.pdf (8,9 KB, 65 visitas)
  #1073  
Antiguo 08-01-2024
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 166
Poder: 8
nincillo Va por buen camino
Pues es el mismo que estoy importando yo desde Delphi...
No entiendo nada. ¿Será por culpa de la ñapa esa que hacemos para que no de el error de las cadenas más largas de 255 caracteres?
  #1074  
Antiguo 08-01-2024
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.586
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por nincillo Ver Mensaje
No entiendo nada. ¿Será por culpa de la ñapa esa que hacemos para que no de el error de las cadenas más largas de 255 caracteres?

No creo que sea por eso.
Ese error es de Delphi una vez importado, simplemente por cómo se ha formado el fichero (que está bien formado). Salvo que delphi no acepta esas cadenas largas.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
  #1075  
Antiguo 08-01-2024
antoine0 antoine0 is offline
Miembro
 
Registrado: oct 2021
Posts: 238
Poder: 4
antoine0 Va por buen camino
Cita:
Empezado por ermendalenda Ver Mensaje
Os adjunto un pdf con aproximación de como quedaría una factura con QR en pdf según los datos que nos dan en la OM.
¿Ha salido la Orden Ministerial? ¿Dónde está?
  #1076  
Antiguo 08-01-2024
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 166
Poder: 8
nincillo Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
No creo que sea por eso.
Ese error es de Delphi una vez importado, simplemente por cómo se ha formado el fichero (que está bien formado). Salvo que delphi no acepta esas cadenas largas.
Después de muchas pruebas, creo que al fin he encontrado "algo". Pero no se si es lo correcto. A ver si me lo podéis aclarar.

Acabo de volver a hacer las siguientes pruebas de importación del wsdl:
  1. Importación: Automatic SOAP Versioning (Recomended)
  2. Importación: Process only WSDL Binding extensions for the SOAP 1.1 Protocol
  3. Importación: Process only WSDL Binding extensions for the SOAP 1.2 Protocol

Con las dos primeras opciones aparentemente me genera lo mismo, mientras que sin lo importo con la última opción, entonces si que me genera un wsdl con la famosa CABECERA, VersionType, etc.

¿Puede ser posible que sólo por eso ya cambie tanto la importación del fichero WSDL?.

Ahora la llamada al SOAP la tengo que hacer así para que me compile:
Código:
var
  AltaFactuSistFact : AltaFactuSistemaFacturacion;
  result : RespuestaAltaFactuSistemaFacturacionType;

begin

  result := GetsfSOAP(true, '', HTTPRIO1).AltaFactuSistemaFacturacion(AltaFactuSistFact);
end
Mientras que antes, haciendo la importación Automática/1.1, los parámetros que se utilizaban en la llamada eran del tipo Array_Of_FacturasEmitidasType
  #1077  
Antiguo 09-01-2024
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.586
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
A mi los tres ficheros generados con esas opciones me resultan similares.
Completando el código que has puesto, la llamada podría ser similar a esta:

Código Delphi [-]
procedure TForm3.Button1Click(Sender: TObject);
var
  arrayDetalles : array of DetalleType;
  RegistroAltaFacturas: Array_Of_FacturasEmitidasType;
begin
  var alta:AltaFactuSistemaFacturacion := AltaFactuSistemaFacturacion.Create;

  // Cabecera
  var cab := Cabecera.Create;
  cab.IDVersion := VersionType._1_0;

  cab.ObligadoEmision := PersonaFisicaJuridicaESType.Create;
  cab.ObligadoEmision.NombreRazon := 'Empresa pruebas';
  cab.ObligadoEmision.NIF := '11111111H';
  cab.TipoRegistroAEAT := TipoRegistroAEATType.T0;
  cab.FechaFinVeriFactu := '01/01/2026';
  alta.Cabecera := cab;

  // Factura
  var fact:FacturasEmitidasType;
  fact := FacturasEmitidasType.Create;
  fact.RegistroFacturacion := RegistroFacturacionType.Create;
  fact.RegistroFacturacion.IDFactura := IDFacturaExpedidaType.Create;
  fact.RegistroFacturacion.IDFactura.NumSerieFacturaEmisor := '23/123456';
  fact.RegistroFacturacion.IDFactura.FechaExpedicionFacturaEmisor := '31/12/23';
  fact.RegistroFacturacion.IDFactura.IDEmisorFactura := IDEmisorFactura.Create;
  fact.RegistroFacturacion.IDFactura.IDEmisorFactura.NIF := '3333333';
  fact.RegistroFacturacion.DescripcionOperacion := 'venta de mercaderías';

  // Detalle
  var detalle := DetalleType.Create;
  detalle.CuotaRepercutida := '100';
  detalle.TipoImpositivo := '21';
  SetLength(arrayDetalles, 1);
  arrayDetalles[0] := detalle;

  // desglose
  var desglose: DesgloseType := DesgloseType.Create();
  SetLength(Desglose, 1);
  Desglose[0] := detalle;
  fact.RegistroFacturacion.Desglose := Desglose;

  // Lista de facturas del envío
  SetLength(RegistroAltaFacturas, 1);
  RegistroAltaFacturas[0] := fact;

  // Factura 1
  alta.RegistroAltaFacturas := RegistroAltaFacturas;

  // envío
  try
    var res:RespuestaAltaFactuSistemaFacturacion := RespuestaAltaFactuSistemaFacturacion.Create;
    res := GetsfSOAP(False, '', HTTPRIO1).AltaFactuSistemaFacturacion(alta);

    ShowMessage('Se ha realizado el envío; ' + sLineBreak +
                '   CSV: ' + res.CSV  + sLineBreak +
                '   TimeStamp: ' + res.DatosPresentacion.TimestampPresentacion
                );
  except
    on E:Exception do begin
      ShowMessage(Format('Error al realizar el envío; (%s)-%s',[E.ClassName, E.Message]));
    end;
  end;
end;

En este caso genera un fichero como este:

Código:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding">
    <SOAP-ENV:Body xmlns:NS1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SistemaFacturacion.wsdl" xmlns:NS2="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd" xmlns:NS3="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
        <NS1:AltaFactuSistemaFacturacion SOAP-ENV:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
            <AltaFactuSistemaFacturacion SOAP-ENC:id="1" xsi:type="NS2:AltaFactuSistemaFacturacion">
                <Cabecera SOAP-ENC:id="2" xsi:type="NS3:Cabecera">
                    <IDVersion xsi:type="NS3:VersionType">1.0</IDVersion>
                    <ObligadoEmision SOAP-ENC:id="3" xsi:type="NS3:PersonaFisicaJuridicaESType">
                        <NombreRazon xsi:type="xsd:string">Empresa pruebas</NombreRazon>
                        <NIF xsi:type="xsd:string">11111111H</NIF>
                    </ObligadoEmision>
                    <TipoRegistroAEAT xsi:type="NS3:TipoRegistroAEATType">T0</TipoRegistroAEAT>
                    <FechaFinVeriFactu xsi:type="xsd:string">01/01/2026</FechaFinVeriFactu>
                </Cabecera>
                <item SOAP-ENC:id="4" xsi:type="NS2:FacturasEmitidasType">
                    <RegistroFacturacion SOAP-ENC:id="5" xsi:type="NS3:RegistroFacturacionType">
                        <IDFactura SOAP-ENC:id="6" xsi:type="NS3:IDFacturaExpedidaType">
                            <IDEmisorFactura SOAP-ENC:id="7" xsi:type="NS3:IDEmisorFactura">
                                <NIF xsi:type="xsd:string">3333333</NIF>
                            </IDEmisorFactura>
                            <NumSerieFacturaEmisor xsi:type="xsd:string">23/123456</NumSerieFacturaEmisor>
                            <FechaExpedicionFacturaEmisor xsi:type="xsd:string">31/12/23</FechaExpedicionFacturaEmisor>
                        </IDFactura>
                        <NombreRazonEmisor xsi:type="xsd:string"/>
                        <TipoRegistroSIF xsi:type="NS3:TipoRegistroSIFType">S0</TipoRegistroSIF>
                        <TipoFactura xsi:type="NS3:ClaveTipoFacturaType">F1</TipoFactura>
                        <DescripcionOperacion xsi:type="xsd:string">venta de mercaderías</DescripcionOperacion>
                        <Desglose xsi:type="SOAP-ENC:Array" SOAP-ENC:itemType="NS3:DetalleType" SOAP-ENC:arraySize="1">
                            <item SOAP-ENC:id="8" xsi:type="NS3:DetalleType">
                                <ClaveRegimen xsi:type="NS3:IdOperacionesTrascendenciaTributariaType">01</ClaveRegimen>
                                <TipoImpositivo xsi:type="xsd:string">21</TipoImpositivo>
                                <BaseImponibleOimporteNoSujeto xsi:type="xsd:string"/>
                                <CuotaRepercutida xsi:type="xsd:string">100</CuotaRepercutida>
                            </item>
                        </Desglose>
                        <ImporteTotal xsi:type="xsd:string"/>
                        <EncadenamientoRegistroAnterior xsi:nil="true"/>
                        <SistemaInformatico xsi:nil="true"/>
                        <FechaGenRegistro xsi:type="xsd:string"/>
                        <HoraGenRegistro xsi:type="xsd:string"/>
                        <HusoHorarioGenRegistro xsi:type="NS3:HusoHorarioGenRegistroType">01</HusoHorarioGenRegistro>
                    </RegistroFacturacion>
                    <DatosControl xsi:nil="true"/>
                </item>
            </AltaFactuSistemaFacturacion>
        </NS1:AltaFactuSistemaFacturacion>
    </SOAP-ENV:Body>
 </SOAP-ENV:Envelope>

Adjunto los 3 ficheros generados al importar el WSDL y el propio fichero WSDL.
Archivos Adjuntos
Tipo de Archivo: zip FicherosWSDLGenerados.zip (33,0 KB, 77 visitas)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
  #1078  
Antiguo 09-01-2024
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.595
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
A mi los tres ficheros generados con esas opciones me resultan similares.
Completando el código que has puesto, la llamada podría ser similar a esta:

Código Delphi [-]procedure TForm3.Button1Click(Sender: TObject); var arrayDetalles : array of DetalleType; RegistroAltaFacturas: Array_Of_FacturasEmitidasType; begin var alta:AltaFactuSistemaFacturacion := AltaFactuSistemaFacturacion.Create; // Cabecera var cab := Cabecera.Create; cab.IDVersion := VersionType._1_0; cab.ObligadoEmision := PersonaFisicaJuridicaESType.Create; cab.ObligadoEmision.NombreRazon := 'Empresa pruebas'; cab.ObligadoEmision.NIF := '11111111H'; cab.TipoRegistroAEAT := TipoRegistroAEATType.T0; cab.FechaFinVeriFactu := '01/01/2026'; alta.Cabecera := cab; // Factura var fact:FacturasEmitidasType; fact := FacturasEmitidasType.Create; fact.RegistroFacturacion := RegistroFacturacionType.Create; fact.RegistroFacturacion.IDFactura := IDFacturaExpedidaType.Create; fact.RegistroFacturacion.IDFactura.NumSerieFacturaEmisor := '23/123456'; fact.RegistroFacturacion.IDFactura.FechaExpedicionFacturaEmisor := '31/12/23'; fact.RegistroFacturacion.IDFactura.IDEmisorFactura := IDEmisorFactura.Create; fact.RegistroFacturacion.IDFactura.IDEmisorFactura.NIF := '3333333'; fact.RegistroFacturacion.DescripcionOperacion := 'venta de mercaderías'; // Detalle var detalle := DetalleType.Create; detalle.CuotaRepercutida := '100'; detalle.TipoImpositivo := '21'; SetLength(arrayDetalles, 1); arrayDetalles[0] := detalle; // desglose var desglose: DesgloseType := DesgloseType.Create(); SetLength(Desglose, 1); Desglose[0] := detalle; fact.RegistroFacturacion.Desglose := Desglose; // Lista de facturas del envío SetLength(RegistroAltaFacturas, 1); RegistroAltaFacturas[0] := fact; // Factura 1 alta.RegistroAltaFacturas := RegistroAltaFacturas; // envío try var res:RespuestaAltaFactuSistemaFacturacion := RespuestaAltaFactuSistemaFacturacion.Create; res := GetsfSOAP(False, '', HTTPRIO1).AltaFactuSistemaFacturacion(alta); ShowMessage('Se ha realizado el envío; ' + sLineBreak + ' CSV: ' + res.CSV + sLineBreak + ' TimeStamp: ' + res.DatosPresentacion.TimestampPresentacion ); except on E:Exception do begin ShowMessage(Format('Error al realizar el envío; (%s)-%s',[E.ClassName, E.Message])); end; end; end;


En este caso genera un fichero como este:

Código:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding">
    <SOAP-ENV:Body xmlns:NS1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SistemaFacturacion.wsdl" xmlns:NS2="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd" xmlns:NS3="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
        <NS1:AltaFactuSistemaFacturacion SOAP-ENV:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
            <AltaFactuSistemaFacturacion SOAP-ENC:id="1" xsi:type="NS2:AltaFactuSistemaFacturacion">
                <Cabecera SOAP-ENC:id="2" xsi:type="NS3:Cabecera">
                    <IDVersion xsi:type="NS3:VersionType">1.0</IDVersion>
                    <ObligadoEmision SOAP-ENC:id="3" xsi:type="NS3:PersonaFisicaJuridicaESType">
                        <NombreRazon xsi:type="xsd:string">Empresa pruebas</NombreRazon>
                        <NIF xsi:type="xsd:string">11111111H</NIF>
                    </ObligadoEmision>
                    <TipoRegistroAEAT xsi:type="NS3:TipoRegistroAEATType">T0</TipoRegistroAEAT>
                    <FechaFinVeriFactu xsi:type="xsd:string">01/01/2026</FechaFinVeriFactu>
                </Cabecera>
                <item SOAP-ENC:id="4" xsi:type="NS2:FacturasEmitidasType">
                    <RegistroFacturacion SOAP-ENC:id="5" xsi:type="NS3:RegistroFacturacionType">
                        <IDFactura SOAP-ENC:id="6" xsi:type="NS3:IDFacturaExpedidaType">
                            <IDEmisorFactura SOAP-ENC:id="7" xsi:type="NS3:IDEmisorFactura">
                                <NIF xsi:type="xsd:string">3333333</NIF>
                            </IDEmisorFactura>
                            <NumSerieFacturaEmisor xsi:type="xsd:string">23/123456</NumSerieFacturaEmisor>
                            <FechaExpedicionFacturaEmisor xsi:type="xsd:string">31/12/23</FechaExpedicionFacturaEmisor>
                        </IDFactura>
                        <NombreRazonEmisor xsi:type="xsd:string"/>
                        <TipoRegistroSIF xsi:type="NS3:TipoRegistroSIFType">S0</TipoRegistroSIF>
                        <TipoFactura xsi:type="NS3:ClaveTipoFacturaType">F1</TipoFactura>
                        <DescripcionOperacion xsi:type="xsd:string">venta de mercaderías</DescripcionOperacion>
                        <Desglose xsi:type="SOAP-ENC:Array" SOAP-ENC:itemType="NS3:DetalleType" SOAP-ENC:arraySize="1">
                            <item SOAP-ENC:id="8" xsi:type="NS3:DetalleType">
                                <ClaveRegimen xsi:type="NS3:IdOperacionesTrascendenciaTributariaType">01</ClaveRegimen>
                                <TipoImpositivo xsi:type="xsd:string">21</TipoImpositivo>
                                <BaseImponibleOimporteNoSujeto xsi:type="xsd:string"/>
                                <CuotaRepercutida xsi:type="xsd:string">100</CuotaRepercutida>
                            </item>
                        </Desglose>
                        <ImporteTotal xsi:type="xsd:string"/>
                        <EncadenamientoRegistroAnterior xsi:nil="true"/>
                        <SistemaInformatico xsi:nil="true"/>
                        <FechaGenRegistro xsi:type="xsd:string"/>
                        <HoraGenRegistro xsi:type="xsd:string"/>
                        <HusoHorarioGenRegistro xsi:type="NS3:HusoHorarioGenRegistroType">01</HusoHorarioGenRegistro>
                    </RegistroFacturacion>
                    <DatosControl xsi:nil="true"/>
                </item>
            </AltaFactuSistemaFacturacion>
        </NS1:AltaFactuSistemaFacturacion>
    </SOAP-ENV:Body>
 </SOAP-ENV:Envelope>
Adjunto los 3 ficheros generados al importar el WSDL y el propio fichero WSDL.



Gracias Germán por el ejemplo. El problema es que ese código a mi no me compila en mi Delphi Berlín, se ve que este tipo de instrucciones no le gustan:


Código Delphi [-]


  var alta:AltaFactuSistemaFacturacion := AltaFactuSistemaFacturacion.Create;

¿Hay alguna forma de modificar eso para que compile en Delphi Berlín?

Gracias de nuevo y un saludo.

__________________
Be water my friend.
  #1079  
Antiguo 09-01-2024
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 166
Poder: 8
nincillo Va por buen camino
Cita:
Empezado por newtron Ver Mensaje
Gracias Germán por el ejemplo. El problema es que ese código a mi no me compila en mi Delphi Berlín, se ve que este tipo de instrucciones no le gustan:


Código Delphi [-]


  var alta:AltaFactuSistemaFacturacion := AltaFactuSistemaFacturacion.Create;

¿Hay alguna forma de modificar eso para que compile en Delphi Berlín?

Gracias de nuevo y un saludo.

Prueba a poner:
Código:
var
  alta :   AltaFactuSistemaFacturacion;
....

begin
  alta := AltaFactuSistemaFacturacion.Create;
....
end

Última edición por nincillo fecha: 09-01-2024 a las 12:04:38.
  #1080  
Antiguo 09-01-2024
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 166
Poder: 8
nincillo Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
A mi los tres ficheros generados con esas opciones me resultan similares.

Aquí vuelve el pesado de turno da dar la brasa. Disculpas por anticipado si estoy diciendo tonterías, pero entiendo que cambios si que ha habido.

En su momento posteaste los ficheros generados tras importar la wsdl: https://www.clubdelphi.com/foros/sho...&postcount=971 y si los comparas con los que posteas ahora podrás ver que no son iguales. Los "antiguos" tienen 1713 líneas y los "nuevos" tienen 2112 líneas. Así que algo si que ha cambiado entre ambas importaciones,

A mi me genera la importación de 1713 líneas si lo hago en automático o 1.1 y la de 2112 si la hago en modo 1.2.
Tema Cerrado



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Hijo de Informáticos gluglu Humor 3 13-03-2007 12:05:35
Adictos informaticos ... Trigger Humor 2 11-10-2004 13:18:32
Nosotros los Informáticos Trigger Humor 1 10-10-2004 15:58:09
Patrón de los Informáticos. obiwuan Varios 20 10-09-2003 15:44:54
Chistes Informaticos jhonny Humor 2 11-08-2003 22:59:09


La franja horaria es GMT +2. Ahora son las 20:09:59.


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
Copyright 1996-2007 Club Delphi