Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol Cocina Casera Cocina PowerCOBOL
Cocina PowerCOBOL Rutinas y ejemplos codificados por nuestros foreros.
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Sintaxis] Leer dato en un archivo Json con Chilkat... Fito PowerCOBOL (ActiveX, v4 - v11) 12 7 de agosto de 2024 19:20
[PowerCOBOL] Código para crear archivo Json fastpho Cocina PowerCOBOL 11 16 de noviembre de 2021 20:24
[Duda] JSON en Cobol... Fito PowerCOBOL (ActiveX, v4 - v11) 20 2 de julio de 2021 22:07
[Compilador] Json & Powercobol Joseg PowerCOBOL (ActiveX, v4 - v11) 1 12 de abril de 2021 14:13
[Sintaxis] Enviar y Recibir Mail fastpho PowerCOBOL (ActiveX, v4 - v11) 1 14 de octubre de 2017 09:07

Respuesta
 
Herramientas

  #11
Antiguo 26 de julio de 2021, 23:23
AHidalgo
Forero Junior
Última Actividad 10.09.2025 23:34
Posts Posts: 13
Likes enviados Enviados: 4
Likes recibidos Recibidos: 0
Predeterminado Ayuda: parsear un Json en PowerCobol
0 Inactivo Inactivo

@fastpho, Hola, buenas tardes!, me podrás ayudar haciendo una prueba para ver si tenes el mismo error? (así descarto error humano). De los 4 campos que quiero recuperar solo me trae 2.

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01 FILA                      PIC 9(8).
  5.  01 WFEC-AMD         PIC X(10).
  6.  01 TIMPTOT             PIC X(9).
  7.  01 WS.
  8.    02 WS-NRO             PIC X(7).
  9.    02 WS-NRO-ORD    REDEFINES WS-NRO PIC 9(7).
  10.    02 WS-ID                  PIC X(3).
  11.    02 WS-IDMPAGO    REDEFINES WS-ID  PIC 9(3).
  12.  01 WGET-VTA-FEC    PIC X(20) IS GLOBAL VALUE "C:\APi\APIRFech1.TXT".
  13.  PROCEDURE       DIVISION.
  14.  INICIO.
  15.      INVOKE ChilkatJsonObject1 "LoadFile" USING WGET-VTA-FEC RETURNING ReturnValue.
  16.      IF ReturnValue NOT = 1 THEN
  17.         INVOKE pow-self "DisplayMessage" USING "error"
  18.         EXIT PROGRAM
  19.      END-IF.
  20. *
  21.      INVOKE ChilkatJsonObject1 "SizeOfArray" USING "Objeto" RETURNING IndiceArray.
  22.      MOVE ZEROS TO FILA FI-LA.
  23.      PERFORM VARYING FILA FROM FILA BY 1 UNTIL FILA = IndiceArray OR FILA > 10
  24. *
  25.            MOVE SPACES TO ObJsolicitar
  26.            STRING "Objeto["     delimited by size
  27.                   FILA          delimited by size
  28.                   "]"           delimited by size
  29.                   "."           delimited by size
  30.                   "concretado"  delimited by size
  31.                   into ObJsolicitar
  32.            END-STRING
  33.            INVOKE ChilkatJsonObject1 "StringOf" USING ObJsolicitar RETURNING WFEC-AMD
  34. *
  35.            MOVE SPACES TO ObJsolicitar
  36.            STRING "Objeto["     delimited by size
  37.                   FILA          delimited by size
  38.                   "]"           delimited by size
  39.                   "."           delimited by size
  40.                   "idModoDePago" delimited by size
  41.                   into ObJsolicitar
  42.            END-STRING
  43.            INVOKE ChilkatJsonObject1 "StringOf" USING ObJsolicitar RETURNING WS-ID
  44. *
  45.            INITIALIZE TIMPTOT WS-NRO WS-ID WFEC-AMD
  46.            MOVE SPACES TO ObJsolicitar
  47.            STRING "Objeto["     delimited by size
  48.                   FILA          delimited by size
  49.                   "]"           delimited by size
  50.                   "."           delimited by size
  51.                   "idVenta"     delimited by size
  52.                   into ObJsolicitar
  53.            END-STRING
  54.            INVOKE ChilkatJsonObject1 "StringOf" USING ObJsolicitar  RETURNING WS-NRO
  55.  
  56.            MOVE SPACES TO ObJsolicitar
  57.            STRING "Objeto["     delimited by size
  58.                   FILA          delimited by size
  59.                   "]"           delimited by size
  60.                   "."           delimited by size
  61.                   "total"       delimited by size
  62.                   into ObJsolicitar
  63.            END-STRING
  64.            INVOKE ChilkatJsonObject1 "StringOf" USING ObJsolicitar RETURNING TIMPTOT
  65. *
  66.            DISPLAY WFEC-AMD " , " WS-ID " , " TIMPTOT " , " WS-NRO " , fila " fila
  67.      END-PERFORM.
  68.      EXIT PROGRAM.

Si podes probar te lo voy a agradecer.
Cualquier ayuda es bienvenida!!
Saludos
Ana
Archivos Adjuntos
Tipo de Archivo: txt APIRFech1.txt (537,3 KB)Descargas: 150
AHidalgo is offline   Responder Con Cita
  #12
Antiguo 27 de julio de 2021, 16:42
fastpho
El Foro es mi casa
Innovación: Por aportar innovaciones - Issue reason: SQLite + OO Cobol class Concurso: Primer puesto: Ganador/a del Primer puesto en un concurso - Issue reason: Acceso a datos Cobol vía web 
Última Actividad 21.08.2026 18:08
Posts Posts: 365
Likes enviados Enviados: 252
Likes recibidos Recibidos: 243

Hola @AHidalgo, corri tu ejemplo y el unico valor que no me da es el total , para que te lo lea te
paso un ejemplo leyendo los dos primeros registros
Código COBOL:
  1.  INVOKE ChilkatJsonObject1 "StringOf" USING "Objeto[0].total.moneda" RETURNING string-total
  2.           display "total moneda :" , string-total
  3.           INVOKE ChilkatJsonObject1 "StringOf" USING "Objeto[0].total.valor" RETURNING string-total
  4.           display "total valor :" , string-total
  5.  
  6.           INVOKE ChilkatJsonObject1 "StringOf" USING "Objeto[0].total.idComercio" RETURNING string-total
  7.           display "total idComercio :" , string-total
  8.  
  9.           INVOKE ChilkatJsonObject1 "StringOf" USING "Objeto[1].total.moneda" RETURNING string-total
  10.           display "total moneda :" , string-total
  11.           INVOKE ChilkatJsonObject1 "StringOf" USING "Objeto[1].total.valor" RETURNING string-total
  12.           display "total valor :" , string-total
  13.  
  14.           INVOKE ChilkatJsonObject1 "StringOf" USING "Objeto[1].total.idComercio" RETURNING string-total
  15.           display "total idComercio :" , string-total
de tu ejemplo la linea
Código COBOL:
  1.  INITIALIZE TIMPTOT WS-NRO WS-ID WFEC-AMD
esta mal ubicada
Saludos
fastpho is offline   Responder Con Cita
  #13
Antiguo 28 de julio de 2021, 01:11
AHidalgo
Forero Junior
Última Actividad 10.09.2025 23:34
Posts Posts: 13
Likes enviados Enviados: 4
Likes recibidos Recibidos: 0

@fastpho, Gracias!!, también he comprobado ejecutar con un control un VBScript con el parseo y funciona bien, pero intentaba hacerlo en cobol puro.
Saludos
Ana
AHidalgo is offline   Responder Con Cita
  #14
Antiguo 14 de junio de 2022, 12:29
Mane9mb
Acabo de llegar...
Última Actividad 05.07.2022 17:21
Posts Posts: 3
Likes enviados Enviados: 2
Likes recibidos Recibidos: 1

Buenas en mi caso necesito crear un JsonArray y dentro los JsonObject i no encuentro ningun ejemplo... alguien sabe la manera de poder declarar un JsonArray en netcobol
Mane9mb is offline   Responder Con Cita
  #15
Antiguo 14 de junio de 2022, 16:38
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

Por ejemplo, para rellenar una tabla (concretamente de postgresql) que tiene una clave y tres campos con array alfabetico de 13, 3 y 3 elementos tal como así:

Código SQL:
  1. CREATE TABLE entidadejercicio.configuracion4 (
  2.     clave numeric(1,0) NOT NULL,
  3.     arqueo character varying(55) [13] NOT NULL,
  4.     pie character varying(55) [3] NOT NULL,
  5.     firma character varying(55) [3] NOT NULL
  6. );

Lo relleno con este codigo, para despues realizar un INSERT en la base de datos:

Código COBOL:
  1.            INITIALIZE msql
  2.              
  3.            STRING "INSERT INTO " delimited by size
  4.                     esquema delimited by " "
  5.                     "configuracion4    VALUES(0, '{" DELIMITED BY SIZE
  6.                  '"' delimited by size
  7.                  mun00-arqueo(1)
  8.                  '", "' delimited by size
  9.                  mun00-arqueo(2)
  10.                  '", "' delimited by size
  11.                  mun00-arqueo(3)
  12.                  '", "' delimited by size
  13.                  mun00-arqueo(4)
  14.                  '", "' delimited by size
  15.                  mun00-arqueo(5)
  16.                  '", "' delimited by size
  17.                  mun00-arqueo(6)
  18.                  '", "' delimited by size
  19.                  mun00-arqueo(7)
  20.                  '", "' delimited by size
  21.                  mun00-arqueo(8)
  22.                  '", "' delimited by size
  23.                  mun00-arqueo(9)
  24.                  '", "' delimited by size
  25.                  mun00-arqueo(10)
  26.                  '", "' delimited by size
  27.                  mun00-arqueo(11)
  28.                  '", "' delimited by size
  29.                  mun00-arqueo(12)
  30.                  '", "' delimited by size
  31.                  mun00-arqueo(13)
  32.                  '"}' delimited by size
  33.                  "'," delimited by size
  34.                  "'{" DELIMITED BY SIZE
  35.                  '"' delimited by size
  36.                  mun00-pie(1)
  37.                  '", "' delimited by size
  38.                  mun00-pie(2)
  39.                  '", "' delimited by size
  40.                  mun00-pie(3)
  41.                  '"}' delimited by size
  42.                  "'," delimited by size
  43.                  "'{" DELIMITED BY SIZE
  44.                  '"' delimited by size
  45.                  mun00-firmas(1)
  46.                  '", "' delimited by size
  47.                  mun00-firmas(2)
  48.                  '", "' delimited by size
  49.                  mun00-firmas(3)
  50.                  '"}' delimited by size
  51.                  "');" delimited by size
  52.                    INTO msql
  53.            perform insertar


Básicamente el JSON generado es algo como así:


Código:
{
    "clave": 0,
    "arqueo": [
      "                                                       ",
      "                                                       ",
      "                                                       ",
      "                                                       ",
      "                                                       ",
      "                                                       ",
      "                                                       ",
      "                                                       ",
      "                                                       ",
      "                                                       ",
      "                                                       ",
      "                                                       ",
      "                                                       "
    ],
    "pie": [
      "                                                       ",
      "                                                       ",
      "                                                       "
    ],
    "firma": [
      "               EL PRESIDENTE                ",
      "               EL INTERVENTOR               ",
      "                EL TESORERO                 "
    ]
  }
JCantero is offline   Responder Con Cita
  #16
Antiguo 14 de junio de 2022, 17:26
fastpho
El Foro es mi casa
Innovación: Por aportar innovaciones - Issue reason: SQLite + OO Cobol class Concurso: Primer puesto: Ganador/a del Primer puesto en un concurso - Issue reason: Acceso a datos Cobol vía web 
Última Actividad 21.08.2026 18:08
Posts Posts: 365
Likes enviados Enviados: 252
Likes recibidos Recibidos: 243

Hola @Mane9mb, te paso un ejemplo en visual basic , no es muy dificil pasarlo a cobol
usando el control ocx de chilkat
Código VB:
  1. Dim jArray As New ChilkatJsonArray
  2. success = jArray.AddObjectAt(0)
  3. Dim json As ChilkatJsonObject
  4. Set json = jArray.ObjectAt(0)
  5.  
  6. success = json.UpdateString("groupId","")
  7. success = json.UpdateString("sku","")
  8. success = json.UpdateString("title","")
  9. success = json.UpdateString("barcode","")
  10. success = json.UpdateString("category","")
  11. success = json.UpdateString("description","")
  12. success = json.UpdateString("images[0]","url1")
  13. success = json.UpdateString("images[1]","url...")
  14. success = json.UpdateString("isbn","")
  15. success = json.UpdateString("link","")
  16. success = json.UpdateString("linkLomadee","")
  17. success = json.UpdateString("prices[0].type","")
  18. success = json.UpdateNumber("prices[0].price","0")
  19. success = json.UpdateNumber("prices[0].priceLomadee","0")
  20. success = json.UpdateNumber("prices[0].priceCpa","0")
  21. success = json.UpdateNumber("prices[0].installment","0")
  22. success = json.UpdateNumber("prices[0].installmentValue","0")
  23. success = json.UpdateString("productAttributes.""Atributo 1""","Valor 1")
  24. success = json.UpdateString("productAttributes.""Atributo ...""","Valor ...")
  25. success = json.UpdateString("technicalSpecification.""Especificação 1""","Valor")
  26. success = json.UpdateString("technicalSpecification.""Especificação ...""","Valor ...")
  27. success = json.UpdateNumber("quantity","0")
  28. success = json.UpdateNumber("sizeHeight","0")
  29. success = json.UpdateNumber("sizeLength","0")
  30. success = json.UpdateNumber("sizeWidth","0")
  31. success = json.UpdateNumber("weightValue","0")
  32. success = json.UpdateNumber("declaredPrice","0")
  33. success = json.UpdateNumber("handlingTimeDays","0")
  34. success = json.UpdateBool("marketplace",0)
  35. success = json.UpdateString("marketplaceName","")
  36.  
  37. jArray.EmitCompact = 0
  38. Debug.Print jArray.Emit()
  39.  
  40. ' The output of this program is:
  41.  
  42. ' [
  43. '   {
  44. '     "groupId": "",
  45. '     "sku": "",
  46. '     "title": "",
  47. '     "barcode": "",
  48. '     "category": "",
  49. '     "description": "",
  50. '     "images": [
  51. '       "url1",
  52. '       "url..."
  53. '     ],
  54. '     "isbn": "",
  55. '     "link": "",
  56. '     "linkLomadee": "",
  57. '     "prices": [
  58. '       {
  59. '         "type": "",
  60. '         "price": 0,
  61. '         "priceLomadee": 0,
  62. '         "priceCpa": 0,
  63. '         "installment": 0,
  64. '         "installmentValue": 0
  65. '       }
  66. '     ],
  67. '     "productAttributes": {
  68. '       "Atributo 1": "Valor 1",
  69. '       "Atributo ...": "Valor ..."
  70. '     },
  71. '     "technicalSpecification": {
  72. '       "Especificação 1": "Valor",
  73. '       "Especificação ...": "Valor ..."
  74. '     },
  75. '     "quantity": 0,
  76. '     "sizeHeight": 0,
  77. '     "sizeLength": 0,
  78. '     "sizeWidth": 0,
  79. '     "weightValue": 0,
  80. '     "declaredPrice": 0,
  81. '     "handlingTimeDays": 0,
  82. '     "marketplace": false,
  83. '     "marketplaceName": ""
  84. '   }
  85. ' ]
Saludos ....
fastpho is offline   Responder Con Cita
  #17
Antiguo 14 de junio de 2022, 17:30
Mane9mb
Acabo de llegar...
Última Actividad 05.07.2022 17:21
Posts Posts: 3
Likes enviados Enviados: 2
Likes recibidos Recibidos: 1

Hola JCantero

Entiendo, pero en este caso solo tengo que tractar JSON han comentado en este post sobre el ocx de Chillkat JsonObject que facilita a la hora de tractar objetos JsON pero que empiece como un Json Array no lo encontrado por eso si teneis un ejemplo os lo agradezco, lo que me muestras es para hacer un insert a la base de datos? no trabajo con base de datos en cobol todo se guarda en archivos...

perdonadme es mi primer año que toco cobol ja que jo estoy encargado de la parte de lAPI @JCantero,

Código COBOL:
  1. MOVE 0 TO "EmitCompact" OF ChilkatJsonArray1.
Código COBOL:
  1. MOVE 0 TO "EmitCompact" OF ChilkatJsonObject2.
Código COBOL:
  1.  INVOKE ChilkatJsonArray1 "AddArrayAt" USING "customerStatus"              "Prospect"            RETURNING Success0.
Código COBOL:
  1. INVOKE ChilkatJsonObject2 "AppendString" USING "customerType"              "Individual"          RETURNING Success1.
Mane9mb is offline   Responder Con Cita
  #18
Antiguo 14 de junio de 2022, 18:08
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

Fuera del destino del uso del JSON, o de su generación, yo he puesto un ejemplo de uso para su mejor comprension.

Quieres un ejemplo ?

Tienes un ejemplo de JSON con array en mi post. Al final....

Y @fastpho, tambien te ha puesto otro ejemplo de JSON con array al final de su post, lo que está en verde.
JCantero is offline   Responder Con Cita
  #19
Antiguo 15 de junio de 2022, 09:28
Mane9mb
Acabo de llegar...
Última Actividad 05.07.2022 17:21
Posts Posts: 3
Likes enviados Enviados: 2
Likes recibidos Recibidos: 1

@JCantero, Gracias por los ejemplos de verdad, pero lo que necesito es más como tractar esos objetos que define @fastpho, con el ocx que explica.

No he querido ni mucho menos menospreciar tu ayuda perdon si mhe explicado mal

Os lo agradezco mucho!

---------- Post añadido el 16 de junio de 2022 a las 14:17 ----------

Gracias, por su ayuda en tu ejemplo he podido pasarlo a cobol i que funcione,
Código COBOL:
  1. INVOKE ChilkatJsonArray1 "AddObjectCopyAt" USING jsonArray ChilkatJsonObject2
con esta linea si ya tienes el json creado lo insertas dentro del array

Un saludo!
Mane9mb is offline   Responder Con Cita
  #20
Antiguo 11 de octubre de 2022, 05:21
Fito
Guardián del Foro
Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros Guardián del Foro: Guardián del espíritu y clima del Foro - Issue reason: Por el Avatar Activista del Foro: Activista del Foro - Issue reason: Por aportar ideas 
Última Actividad 22.09.2026 04:22
Posts Posts: 458
Likes enviados Enviados: 269
Likes recibidos Recibidos: 243

Hola amigos:

Tengo el siguiente ejemplo de un json que quiero decodificar.

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  
  5.  01  wcobranza.
  6.      02 pic x(50)    value '{'.
  7.      02 pic x(50)    value '  "ALUMNO": "Chiavazza Adolfo Carlos",'.
  8.      02 pic x(50)    value '  "DNI": "22222222",'.
  9.      02 pic x(50)    value '  "FECHA": "10-03-2022",'.
  10.      02 pic x(50)    value '  "COBRANZA": ['.
  11.      02 pic x(50)    value '    {'.
  12.      02 pic x(50)    value '      "TIPO": 1,'.
  13.      02 pic x(50)    value '      "PERIODO": "03-2022",'.
  14.      02 pic x(50)    value '      "IMPORTE": 5000'.
  15.      02 pic x(50)    value '    },'.
  16.      02 pic x(50)    value '    {'.
  17.      02 pic x(50)    value '      "TIPO": 2,'.
  18.      02 pic x(50)    value '      "PERIODO": "03-2022",'.
  19.      02 pic x(50)    value '      "IMPORTE": 1000.02'.
  20.      02 pic x(50)    value '    }'.
  21.      02 pic x(50)    value '  ]'.
  22.      02 pic x(50)    value '}'.
  23.      
  24.  01  jfecha                 pic x(10).
  25.  01  redefines jfecha.
  26.      02 jfecha-dd           pic 99.
  27.      02                     pic x.
  28.      02 jfecha-mm           pic 99.
  29.      02                     pic x.
  30.      02 jfecha-aa           pic 9999.
  31.      
  32.  01  wfecha                 pic 9(8).
  33.  01  redefines wfecha.
  34.      02 wfecha-aa           pic 9999.
  35.      02 wfecha-mm           pic 99.
  36.      02 wfecha-dd           pic 99.
  37.  
  38.  01  indA                   pic s9(9) comp-5 value zeros.
  39.  01  w--ii                  pic 9(8).
  40.  01  dato                   pic x(200).
  41.  
  42.  01  wdatos.
  43.      02 wtipo               pic 999.
  44.      02 wperiodo            pic x(7).
  45.      02 wimporte            pic 9(9)v99.
  46.      02 l-importe           pic z(9),zz.
  47.  
  48.  PROCEDURE       DIVISION.
  49.  
  50.  comienzo.
  51.      invoke json "Clear".
  52.  
  53.      invoke json "Load" using wcobranza.
  54.      
  55.      invoke json "StringOf" using "FECHA" returning jfecha.
  56.  
  57.      display jfecha.
  58.          
  59.      invoke json "SizeOfArray" using "COBRANZA" returning indA.
  60.          
  61.      perform varying w--ii from zeros by 1 until w--ii = indA
  62.         move spaces      to dato
  63.         string "COBRANZA["    delimited by size
  64.                   w--ii       delimited by size
  65.                   "]"         delimited by size
  66.                   "."         delimited by size
  67.                   "TIPO"      delimited by size              
  68.                   into dato
  69.         end-string
  70.         invoke Json "StringOf" using dato  returning wtipo
  71.  
  72.         move spaces      to dato
  73.         string "COBRANZA["    delimited by size
  74.                   w--ii       delimited by size
  75.                   "]"         delimited by size
  76.                   "."         delimited by size
  77.                   "PERIODO"   delimited by size              
  78.                   into dato
  79.         end-string
  80.         invoke Json "StringOf" using dato  returning wperiodo
  81.      
  82.         move spaces      to dato
  83.         string "COBRANZA["    delimited by size
  84.                   w--ii       delimited by size
  85.                   "]"         delimited by size
  86.                   "."         delimited by size
  87.                   "IMPORTE"   delimited by size              
  88.                   into dato
  89.         end-string
  90.         invoke Json "StringOf" using dato  returning wimporte
  91.         move wimporte    to l-importe
  92.        
  93.         display wtipo, "   ", wperiodo, "   ", l-importe
  94.      
  95.      end-perform.
  96.      
  97.      exit program.

El problema que tengo es que no me "detecta" el punto decimal. El campo l-importe me muestra en el primer elemento del array 5000 (está bien porque no tiene punto) pero en el segundo elemento me muestra 100002,00 como que todo es entero.

El campo wimporte que uso para tomar el dato, además de poner el pic como está en ese ejemplo, probé

Código COBOL:
  1.      02 wimporte            pic S9(9) COMP-5.
  2.  
  3.      02 wimporte            COMP-2.
  4.  
  5.      02 wimporte            pic S9(10)V9(4) COMP-5.

Con ninguna de esas opciones logré que funcionara.

Alguna idea al respecto?.

Muchas gracias.

Saludos...

Fito...
Fito is offline   Responder Con Cita
Respuesta



Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 23:02.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.