Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Colaboración Paypal con ClubDelphi

Tema Cerrado
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-12-2023
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 190
Poder: 10
nincillo Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Yo lo he hecho con Delphi 11.3 y con la 10.2.3 y me ha funcionado sin problemas.

Adjunto las units generadas (por si sirve).
¿Al intentar compilar el proyecto a ti también te da un error que que las cadenas no pueden tener más de 255 caracteres o algo así?

Gracias.
  #2  
Antiguo 28-12-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.437
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
¿Al intentar compilar el proyecto a ti también te da un error que que las cadenas no pueden tener más de 255 caracteres o algo así?

Si, no había compilado el proyecto.
Con los archivos generados también me da ese error:

[dcc32 Error] SistemaFacturacion.pas(1599): E2056 String literals may have at most 255 elements

Simplemente edita el fichero SistemaFacturacion.pas y divide esa cadena en 2.
Es decir, donde hay algo como esto y falla:

Código Delphi [-]
 InvRegistry.RegisterMethodInfo(TypeInfo(sfSOAP), 'AltaFactuSistemaFacturacion', '',
                                 '[ReturnName="RespuestaLinea", RequestNS="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd", ResponseNS="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/RespuestaSuministro.xsd"]', IS_OPTN or IS_UNBD);

Pon esto:
Código Delphi [-]

 InvRegistry.RegisterMethodInfo(TypeInfo(sfSOAP), 'AltaFactuSistemaFacturacion', '',
      '[ReturnName="RespuestaLinea",  RequestNS="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/' + 
     'es/aeat/tike/cont/ws/SuministroLR.xsd",   ResponseNS="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplic' + 
     ' aciones/es/aeat/tike/cont/ws/RespuestaSuministro.xsd"]',  IS_OPTN or IS_UNBD);
Lo he partido en varios trozos para que se vea bien.
__________________
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.
  #3  
Antiguo 28-12-2023
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 190
Poder: 10
nincillo Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Si, no había compilado el proyecto.
Con los archivos generados también me da ese error:

[dcc32 Error] SistemaFacturacion.pas(1599): E2056 String literals may have at most 255 elements

Simplemente edita el fichero SistemaFacturacion.pas y divide esa cadena en 2.
Es decir, donde hay algo como esto y falla:

Código Delphi [-]
 InvRegistry.RegisterMethodInfo(TypeInfo(sfSOAP), 'AltaFactuSistemaFacturacion', '',
                                 '[ReturnName="RespuestaLinea", RequestNS="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd", ResponseNS="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/RespuestaSuministro.xsd"]', IS_OPTN or IS_UNBD);

Pon esto:
Código Delphi [-]

 InvRegistry.RegisterMethodInfo(TypeInfo(sfSOAP), 'AltaFactuSistemaFacturacion', '',
      '[ReturnName="RespuestaLinea",  RequestNS="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/' + 
     'es/aeat/tike/cont/ws/SuministroLR.xsd",   ResponseNS="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplic' + 
     ' aciones/es/aeat/tike/cont/ws/RespuestaSuministro.xsd"]',  IS_OPTN or IS_UNBD);
Lo he partido en varios trozos para que se vea bien.
Si, gracias. Ya me había sugerido esa solución otro compañero en este mismo hilo

Era por asegurarme que siguiera pasando lo mismo.

Y el otro problema que tengo es con el elemento CABECERA, que como ya comenté anteriormente en éste hilo, no consigo acceder a él para meter los datos correspondientes. Sólo puedo meter el array con las facturas a enviar, pero seguro que al hacer el envío me lo darán para atrás por no tener la cabecera.
¿Será que se les ha olvidado definirlo?
  #4  
Antiguo 28-12-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.437
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
Y el otro problema que tengo es con el elemento CABECERA, que como ya comenté anteriormente en éste hilo, no consigo acceder a él para meter los datos correspondientes. Sólo puedo meter el array con las facturas a enviar, pero seguro que al hacer el envío me lo darán para atrás por no tener la cabecera.
¿Será que se les ha olvidado definirlo?

Según la unit que se genera al importar el WSDL no existe esa parte.
¿Exactamente cuando dices cabecera a qué te refieres?

He visto que en el EXCEL con los diseños de registro hay 3 de alta (DR=Diseño Registro):
  • DR Alta.VERIFACTU
  • DR Alta.Requerimiento
  • DR Alta.C-E
En los 2 primeros sí aparece una sección de Cabecera, pero no en el tercero.
¿?¿?¿?¿
__________________
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.
  #5  
Antiguo 28-12-2023
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 190
Poder: 10
nincillo Va por buen camino
Yo en el ejemplo que estaba haciendo para comparar con el wsdl del SII tengo esto código Delphi:

Código:
procedure TForm2.Button1Click(Sender: TObject);
var
  LRfacturasEmitidas : SuministroLRFacturasEmitidas;
  LRFacturaEmitida0, LRFacturaEmitida1 : LRfacturasEmitidasType;
  result : RespuestaLRFacturasEmitidas;
  arrayFacturas : Array_Of_LRfacturasEmitidasType;

begin

  LRfacturasEmitidas := SuministroLRFacturasEmitidas.Create;
  LRfacturasEmitidas.Cabecera := CabeceraSii.Create;
    LRfacturasEmitidas.Cabecera.Titular := PersonaFisicaJuridicaESType.Create;
      LRfacturasEmitidas.Cabecera.Titular.NombreRazon := 'NombreRazon';
      LRfacturasEmitidas.Cabecera.Titular.NIF := '10855497A';


  // genero las diferentes facturas
  SetLength(arrayFacturas, 2);

  LRFacturaEmitida0 := LRfacturasEmitidasType.Create;
  LRFacturaEmitida0.PeriodoImpositivo := PeriodoImpositivo.Create;
    LRFacturaEmitida0.PeriodoImpositivo.Ejercicio := '23';
    LRFacturaEmitida0.PeriodoImpositivo.Periodo := TipoPeriodoType._02;
  arrayFacturas[0] := LRFacturaEmitida0;

  LRFacturaEmitida1 := LRfacturasEmitidasType.Create;
  LRFacturaEmitida1.PeriodoImpositivo := PeriodoImpositivo.Create;
    LRFacturaEmitida1.PeriodoImpositivo.Ejercicio := '24';
    //LRFacturaEmitida.PeriodoImpositivo.Periodo := TipoPeriodoType._01;
  arrayFacturas[1] := LRFacturaEmitida1;


  LRfacturasEmitidas.RegistroLRFacturasEmitidas := arrayFacturas;



    try

      result := GetsiiSOAP(false, 'https://prewww1.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP', HTTPRIO1).SuministroLRFacturasEmitidas(LRfacturasEmitidas);
      ShowMessage('Estado envio: ' + result.RespuestaLinea[0].DescripcionErrorRegistro);
    finally

    end;
end;
Y me funciona correctamente, y puedo acceder al LRfacturasEmitidas.Cabecera sin problema.

Sin embargo, el de VeriFactu no encuentro el equivalente al SuministroLRFacturasEmitidas del SII.

Estoy revisando el wsdl por dentro y me he dado cuenta de una cosa quizás puedas ser la causa de no encontrar lo que estoy buscando.

En la parte superior del wsdl aparece:
Código:
// ************************************************************************ //
// The types declared in this file were generated from data read from the
// WSDL File described below:
// WSDL     : https://prewww2.aeat.es/static_files/common/internet/dep/aplicaciones/es/aeat/tikeV1.0/cont/ws/SistemaFacturacion.wsdl
//  >Import : https://prewww2.aeat.es/static_files/common/internet/dep/aplicaciones/es/aeat/tikeV1.0/cont/ws/SistemaFacturacion.wsdl>0
//  >Import : https://prewww2.aeat.es/static_files/common/internet/dep/aplicaciones/es/aeat/tikeV1.0/cont/ws/SuministroInformacion.xsd
//  >Import : https://prewww2.aeat.es/static_files/common/internet/dep/aplicaciones/es/aeat/tikeV1.0/cont/ws/SuministroLR.xsd
//  >Import : https://prewww2.aeat.es/static_files/common/internet/dep/aplicaciones/es/aeat/tikeV1.0/cont/ws/RespuestaSuministro.xsd
// Encoding : UTF-8
// Version  : 1.0
// (22/12/2023 10:00:16 - - $Rev: 112483 $)
// ************************************************************************ //
Mientras que luego en el resto del wsdl las urls siempre hacen referencia a: https://www2.agenciatributaria.gob.e.../tike/cont/ws/.... y resulta que esas páginas no existen a día de hoy. Podrá ser eso o estaré diciendo tonterías...

Si yo accedo a https://prewww2.aeat.es/static_files...nformacion.xsd hay si tengo un nodo CABECERA que quizás sea el que estoy buscando, pero el problema es que luego, en el resto del documento, la referencia se hace a: https://www2.agenciatributaria.gob.e...nformacion.xsd y esa url no funciona.

PD. Acabo de ver que mientras escribía mi post, @Neftali había editado el suyo, pero por si acaso pudiera servir de algo, lo posteo.
  #6  
Antiguo 28-12-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.437
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
Y el otro problema que tengo es con el elemento CABECERA, que como ya comenté anteriormente en éste hilo, no consigo acceder a él para meter los datos correspondientes. Sólo puedo meter el array con las facturas a enviar, pero seguro que al hacer el envío me lo darán para atrás por no tener la cabecera.
¿Será que se les ha olvidado definirlo?

Me respondo a mi mismo.
He descargado el XSD desde aquí.
Lo he subido al FTP junto al resto de la documentación.

Importándolo en un proyecto de Delphi (XML Data Binding) y con un poco de código:

Código Delphi [-]
procedure TForm3.Button2Click(Sender: TObject);
var
  fAlta:IXMLSistemaFacturacionAltaFact;
begin

  fAlta := NewFacturaAlta;
  fAlta.Cabecera.IDVersion := '1.0';
  fAlta.Cabecera.ObligadoEmision.NombreRazon := 'EMPRESA PRUEBAS';
  fAlta.Cabecera.ObligadoEmision.NIF := '11111111H';
  fAlta.Cabecera.TipoRegistroAEAT := 'S0';

  ...

  var sXML:string;
  fAlta.OwnerDocument.SaveToXML(sXML);
  Memo1.Lines.Text := sXML;

end;

Se genera la parte de la cabecera sin problemas...

Código PHP:
<?xml version="1.0"?>
<FacturaAlta xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
    <Cabecera>
        <IDVersion>1.0</IDVersion>
        <ObligadoEmision>
            <NombreRazon>EMPRESA PRUEBAS</NombreRazon>
            <NIF>11111111H</NIF>
        </ObligadoEmision>
        <TipoRegistroAEAT>S0</TipoRegistroAEAT>
    </Cabecera>
</FacturaAlta>
Os adjunto el fichero generado.
Archivos Adjuntos
Tipo de Archivo: zip SuministroInformacionV1_0.zip (22,2 KB, 36 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.
  #7  
Antiguo 28-12-2023
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 190
Poder: 10
nincillo Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Me respondo a mi mismo.
He descargado el XSD desde aquí.
Lo he subido al FTP junto al resto de la documentación.

Importándolo en un proyecto de Delphi (XML Data Binding) y con un poco de código:

Código Delphi [-]
procedure TForm3.Button2Click(Sender: TObject);
var
  fAlta:IXMLSistemaFacturacionAltaFact;
begin

  fAlta := NewFacturaAlta;
  fAlta.Cabecera.IDVersion := '1.0';
  fAlta.Cabecera.ObligadoEmision.NombreRazon := 'EMPRESA PRUEBAS';
  fAlta.Cabecera.ObligadoEmision.NIF := '11111111H';
  fAlta.Cabecera.TipoRegistroAEAT := 'S0';

  ...

  var sXML:string;
  fAlta.OwnerDocument.SaveToXML(sXML);
  Memo1.Lines.Text := sXML;

end;

Se genera la parte de la cabecera sin problemas...

Código PHP:
<?xml version="1.0"?>
<FacturaAlta xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
    <Cabecera>
        <IDVersion>1.0</IDVersion>
        <ObligadoEmision>
            <NombreRazon>EMPRESA PRUEBAS</NombreRazon>
            <NIF>11111111H</NIF>
        </ObligadoEmision>
        <TipoRegistroAEAT>S0</TipoRegistroAEAT>
    </Cabecera>
</FacturaAlta>
Os adjunto el fichero generado.
Ante todo, muchas gracias por tu paciencia.
Esto a base de pegarme cabezazos todo el fin de semana, ya lo había conseguido encontrar, pero entonces me atascaba en el momento de querer hacer el envío, ya que en el método GetsfSOAP requiere que sea un objeto de tipo Array_Of_RespuestaExpedidaType y no se como "calzarle" el cabecera.

Código:
try
    SetLength(arrayFacturas, 1);
    arrayFacturas[0] := regFactura;
    result := GetsfSOAP(true, '', HTTPRIO1).AltaFactuSistemaFacturacion(ArrayFacturas);
  #8  
Antiguo 28-12-2023
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 4.214
Poder: 24
newtron Va camino a la fama
Germán.


Sigo tus instrucciones del XML Data Binding pero solo me genera dos archivos, uno .pas y otro .xdb. ¿El fichero .xsd cómo se genera?


Gracias y un saludo.
__________________
Be water my friend.
  #9  
Antiguo 28-12-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.437
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 newtron Ver Mensaje
Sigo tus instrucciones del XML Data Binding pero solo me genera dos archivos, uno .pas y otro .xdb. ¿El fichero .xsd cómo se genera?
El XSD es el fichero de esquema. Te lo deben dar.
Se descarga desde aquí y lo he copiado aquí en el FTP.
Archivos Adjuntos
Tipo de Archivo: zip SuministroInformacion.XSD.zip (6,3 KB, 14 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.

Última edición por Neftali [Germán.Estévez] fecha: 28-12-2023 a las 17:56:26.
  #10  
Antiguo 28-12-2023
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 190
Poder: 10
nincillo Va por buen camino
Cita:
Empezado por newtron Ver Mensaje
Germán.


Sigo tus instrucciones del XML Data Binding pero solo me genera dos archivos, uno .pas y otro .xdb. ¿El fichero .xsd cómo se genera?


Gracias y un saludo.
El .xsd, que yo sepa, como mucho lo tendrás que guardar una vez abierto en el navegador. ¿Te refieres a eso?
  #11  
Antiguo 28-12-2023
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 4.214
Poder: 24
newtron Va camino a la fama
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
El XSD es el fichero de esquema. Te lo deben dar.
Se descarga desde aquí y lo he copiado aquí en el FTP.

Gracias Germán.



Cita:
Empezado por nincillo Ver Mensaje
El .xsd, que yo sepa, como mucho lo tendrás que guardar una vez abierto en el navegador. ¿Te refieres a eso?

Efectivamente. Entiendo que el fichero .xsd solo se usa para generar el .pas


Seguimos probando.


Gracias a los dos.
__________________
Be water my friend.
  #12  
Antiguo 16-01-2024
_Io _Io is offline
Miembro
 
Registrado: ene 2024
Posts: 114
Poder: 3
_Io Va por buen camino
Buenos días.

Perdonarme, soy bastante nuevo en esto de programación utilizando xsd,wsdl...
Estoy un poco o un mucho perdido.
He llegado hasta aquí, para generar el xml de una factura, pero no sé de dónde sale o cómo hacer la función NewFacturaAlta
Código Delphi [-]
procedure TForm3.Button2Click(Sender: TObject);
var
  fAlta:IXMLSistemaFacturacionAltaFact;
begin

  fAlta := NewFacturaAlta;
  fAlta.Cabecera.IDVersion := '1.0';
  fAlta.Cabecera.ObligadoEmision.NombreRazon := 'EMPRESA PRUEBAS';
  fAlta.Cabecera.ObligadoEmision.NIF := '11111111H';
  fAlta.Cabecera.TipoRegistroAEAT := 'S0';

  ...

  var sXML:string;
  fAlta.OwnerDocument.SaveToXML(sXML);
  Memo1.Lines.Text := sXML;

end;

Muchas Gracias.
  #13  
Antiguo 16-01-2024
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.437
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 _Io Ver Mensaje
Perdonarme, soy bastante nuevo en esto de programación utilizando xsd,wsdl...
Estoy un poco o un mucho perdido.
He llegado hasta aquí, para generar el xml de una factura, pero no sé de dónde sale o cómo hacer la función NewFacturaAlta

Aquí hemos puesto algo de código.
Una vez importado el WSDL. A ver si te sirve...
__________________
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.
  #14  
Antiguo 16-01-2024
_Io _Io is offline
Miembro
 
Registrado: ene 2024
Posts: 114
Poder: 3
_Io Va por buen camino
Hola Neftali, buenos días.
Muchas gracias por tu rápida respuesta.

Cita:
Aquí hemos puesto algo de código.
Una vez importado el WSDL. A ver si te sirve...
Ya he visto este código y en mi poco conocimiento en el tema, creo que es para enviar la factura a hacienda, he conseguido generarlo, gracias a vosotros, claro.

Cita:
procedure TForm3.Button2Click(Sender: TObject);
var
fAlta:IXMLSistemaFacturacionAltaFact;
begin

fAlta := NewFacturaAlta;
fAlta.Cabecera.IDVersion := '1.0';
fAlta.Cabecera.ObligadoEmision.NombreRazon := 'EMPRESA PRUEBAS';
fAlta.Cabecera.ObligadoEmision.NIF := '11111111H';
fAlta.Cabecera.TipoRegistroAEAT := 'S0';

...

var sXML:string;
fAlta.OwnerDocument.SaveToXML(sXML);
Memo1.Lines.Text := sXML;

end;
Entiendo que este código que pusistes es para generar el xml de la factura y es lo que intentaba hacer, pero no sé exactamente de dónde sale NewFacturaAlta, es por eso el post.

Salu2.
Tema Cerrado


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 11:05:35
Adictos informaticos ... Trigger Humor 2 11-10-2004 12:18:32
Nosotros los Informáticos Trigger Humor 1 10-10-2004 14:58:09
Patrón de los Informáticos. obiwuan Varios 20 10-09-2003 14:44:54
Chistes Informaticos jhonny Humor 2 11-08-2003 21:59:09


La franja horaria es GMT +2. Ahora son las 19:58:02.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi