Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   Cocina PowerCOBOL (https://www.cobolforo.es/forumdisplay.php?f=24)
-   -   [PowerCOBOL] Código para recibir archivo json y leerlo (https://www.cobolforo.es/showthread.php?t=1301)

fastpho 16 de abril de 2021 23:16

Código para recibir archivo json y leerlo
 
1 Archivos Adjunto(s)
Este es un ejemplo desarrollado en powercobol 5 para descargar un archivo en formato json desde una url usando el control Script y leerlo-procesarlo con el control ocx de chilkat que es free toda la documentación de este control esta en el siguiente link
https://www.chilkatsoft.com/refdoc/x...ObjectRef.html
Adjunto el programa
Saludos

Fito 17 de abril de 2021 22:58

holaaaa:

Muy bueno. De dónde se descarga ese actvivex ?

Saludos

Fito...

fastpho 17 de abril de 2021 23:19

Dejo el link de descarga del activex es una dll hay que registrarla
https://chilkatdownload.com/9.5.0.86....5.0-win32.zip

Saludos

Fito 20 de abril de 2021 00:08

Hola:

Resulta que quise abrir tu proyecto esperando que me diera error que no tenía en activex, y vaya sorpresa el error no me lo dió. Me fijo y ya tenía instalado ese activex. Tengo instalado el Atube Catcher para bajar videos de Youtube y se ve que usa los productos de Chilkat... :rofl:

Ya me voy a poner a revisarlo, porque tengo que hacer un programa para consumir una api web y creo que esto me va a servir. Muchas Gracias

Saludos...

Fito...

fastpho 20 de abril de 2021 14:44

Hola @Fito, me alegro que sirva , esta dll trae un monton de librerias no todas son free y algunas otras free interesentes (xml), paso el link de todas las librerias
https://www.chilkatsoft.com/refdoc/activex.asp
Saludos

AHidalgo 21 de julio de 2021 16:31

@fastpho, buen dia!, por casualidad, te pasó que algún campo no lo levante?, o sea, yo veo varios campos que tengo en el Json pero algunos de ellos me devuelven vacío cuando en realidad hay datos. Ya he visto que en cadenas muy complejas solo levanta la primer cadena de datos, pero estando en la misma cadena (nivel) algunos campos no los devuelve.
SI te pasó, como lo solucionaste?.

Saludos
Ana

fastpho 21 de julio de 2021 22:40

Cita:

Citación del post de AHidalgo (Mensaje 6876)
@fastpho, buen dia!, por casualidad, te pasó que algún campo no lo levante?, o sea, yo veo varios campos que tengo en el Json pero algunos de ellos me devuelven vacío cuando en realidad hay datos. Ya he visto que en cadenas muy complejas solo levanta la primer cadena de datos, pero estando en la misma cadena (nivel) algunos campos no los devuelve.
SI te pasó, como lo solucionaste?.

Saludos
Ana

Hola Ana no he tenido problema con Chilkat pq los json que tuve que trabajar eran muy sencillos ...
la cantidad de objetos te los esta mostrando bien ?
Saludos

AHidalgo 22 de julio de 2021 00:29

@fastpho, si, si, la cantidad de objetos me lo muestra bien, la cuestión es cuando quiero recuperar los campos, algunos me los trae y otros no.
Bueno, gracias!!!, seguiré probando a ver como lo puedo solucionar.

Saludos
Ana

fastpho 22 de julio de 2021 00:41

@AHidalgo, cual es campo que te da vacio ?
te dejo un link que uso es muy util para parsear json
Best JSON Parser Online
Saludos

AHidalgo 22 de julio de 2021 06:19

@fastpho, gracias!!, esta muy bueno!!. Los campos que no puedo levantar los veo con contenido.
Sigo probando y buscando soluciones para que me levante todo, quizas es un JSON muy complejo, tiene varios niveles anidados.

Saludos
Ana

AHidalgo 26 de julio de 2021 23:23

Ayuda: parsear un Json en PowerCobol
 
1 Archivos Adjunto(s)
@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

fastpho 27 de julio de 2021 16:42

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

AHidalgo 28 de julio de 2021 01:11

@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

Mane9mb 14 de junio de 2022 12:29

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

JCantero 14 de junio de 2022 16:38

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                "
    ]
  }


fastpho 14 de junio de 2022 17:26

Json
 
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 ....

Mane9mb 14 de junio de 2022 17:30

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.

JCantero 14 de junio de 2022 18:08

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.

Mane9mb 15 de junio de 2022 09:28

@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! :)

Fito 11 de octubre de 2022 05:21

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...

fastpho 11 de octubre de 2022 17:28

1 Archivos Adjunto(s)
Hola @Fito, probe tu ejemplo solamente cambiando la coma por punto y funciona perfecto , modifique el valor de 1000.02 por 21000.02 y tambien lo toma
Código COBOL:
  1. 01  wdatos.
  2.      02 wtipo                pic 999.
  3.      02 wperiodo            pic x(7).
  4.      02 wimporte            pic 9(9)v99.
  5.      02 l-importe            pic z(9).zz.   *> Cambia la coma por punto y funciona perfecto
Me parece que el problema es la configuracion regional.....
te mando un pantalllazo
Saludos ...

Fito 11 de octubre de 2022 20:53

Hola @fastpho

Si Sr., el problema es la configuración regional. La tengo con coma decimal y el ocx me pide con puntos. Ahora que recuerdo, en algún otro post se habló de ese tema.

Le agregué para que cambia a punto al comienzo y después que trabajo el json lo vuelvo a coma y anduvo a la perfección.

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  
  5. *... variables para verificar la configuración regional...
  6.  01  caracter        pic x(255).
  7.  01  buffer          pic s9(9) comp-5.
  8.  01  retcode         pic s9(9) comp-5.
  9.  01  estilo          pic s9(9) comp-5.
  10.  77  wsep-dec        pic x.
  11.  77  wsep-mil        pic x.
  12.  
  13.  01  wcobranza.
  14.      02 pic x(50)    value '{'.
  15.      02 pic x(50)    value '  "ALUMNO": "Chiavazza Adolfo Carlos",'.
  16.      02 pic x(50)    value '  "DNI": "22222222",'.
  17.      02 pic x(50)    value '  "FECHA": "10-03-2022",'.
  18.      02 pic x(50)    value '  "COBRANZA": ['.
  19.      02 pic x(50)    value '    {'.
  20.      02 pic x(50)    value '      "TIPO": 1,'.
  21.      02 pic x(50)    value '      "PERIODO": "03-2022",'.
  22.      02 pic x(50)    value '      "IMPORTE": 5000'.
  23.      02 pic x(50)    value '    },'.
  24.      02 pic x(50)    value '    {'.
  25.      02 pic x(50)    value '      "TIPO": 2,'.
  26.      02 pic x(50)    value '      "PERIODO": "03-2022",'.
  27.      02 pic x(50)    value '      "IMPORTE": 1000.02'.
  28.      02 pic x(50)    value '    }'.
  29.      02 pic x(50)    value '  ]'.
  30.      02 pic x(50)    value '}'.
  31.      
  32.  01  jfecha                 pic x(10).
  33.  01  redefines jfecha.
  34.      02 jfecha-dd           pic 99.
  35.      02                     pic x.
  36.      02 jfecha-mm           pic 99.
  37.      02                     pic x.
  38.      02 jfecha-aa           pic 9999.
  39.      
  40.  01  wfecha                 pic 9(8).
  41.  01  redefines wfecha.
  42.      02 wfecha-aa           pic 9999.
  43.      02 wfecha-mm           pic 99.
  44.      02 wfecha-dd           pic 99.
  45.  
  46.  01  indA                   pic s9(9) comp-5 value zeros.
  47.  01  w--ii                  pic 9(8).
  48.  01  dato                   pic x(200).
  49.  
  50.  01  wdatos.
  51.      02 wtipo               pic 999.
  52.      02 wperiodo            pic x(7).
  53.      02 wimporte            pic 9(12)v99.
  54.      02 l-importe           pic z(12),zz.
  55.  
  56.  PROCEDURE       DIVISION.
  57.  
  58.  comienzo.
  59.      perform pone-punto.
  60.      
  61.      invoke json "Clear".
  62.  
  63.      invoke json "Load" using wcobranza.
  64.      
  65.      invoke json "StringOf" using "FECHA" returning jfecha.
  66.  
  67.      display jfecha.
  68.          
  69.      invoke json "SizeOfArray" using "COBRANZA" returning indA.
  70.          
  71.      perform varying w--ii from zeros by 1 until w--ii = indA
  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.                   "TIPO"      delimited by size              
  78.                   into dato
  79.         end-string
  80.         invoke Json "StringOf" using dato  returning wtipo
  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.                   "PERIODO"   delimited by size              
  88.                   into dato
  89.         end-string
  90.         invoke Json "StringOf" using dato  returning wperiodo
  91.      
  92.         move spaces      to dato
  93.         string "COBRANZA["    delimited by size
  94.                   w--ii       delimited by size
  95.                   "]"         delimited by size
  96.                   "."         delimited by size
  97.                   "IMPORTE"   delimited by size              
  98.                   into dato
  99.         end-string
  100.         invoke Json "StringOf" using dato  returning wimporte
  101.         move wimporte    to l-importe
  102.        
  103.         display wtipo, "   ", wperiodo, "   ", l-importe
  104.      
  105.      end-perform.
  106.      
  107.      perform pone-coma.
  108.  
  109.      exit program.
  110.      
  111.      
  112.  pone-coma.    
  113.      *>... Seteo en Windows el separador decimal
  114.      move spaces        to caracter.
  115.      move ","           to caracter(1:1).
  116.      move X"00"         to caracter(2:1).  
  117.      call "SetLocaleInfoA" with stdcall linkage
  118.         using by value 1024
  119.               by value 14
  120.               by reference caracter
  121.         returning retcode.
  122.      cancel "SetLocaleInfoA".          
  123.    
  124.       *>... Seteo en Windows el separador de miles
  125.      move spaces        to caracter.
  126.      move "."           to caracter(1:1).
  127.      move X"00"         to caracter(2:1).  
  128.      call "SetLocaleInfoA" with stdcall linkage
  129.         using by value 1024
  130.               by value 15
  131.               by reference caracter
  132.         returning retcode.
  133.      cancel "SetLocaleInfoA".          
  134.  
  135.  pone-punto.    
  136.      *>... Seteo en Windows el separador decimal
  137.      move spaces        to caracter.
  138.      move "."           to caracter(1:1).
  139.      move X"00"         to caracter(2:1).  
  140.      call "SetLocaleInfoA" with stdcall linkage
  141.         using by value 1024
  142.               by value 14
  143.               by reference caracter
  144.         returning retcode.
  145.      cancel "SetLocaleInfoA".          
  146.    
  147.       *>... Seteo en Windows el separador de miles
  148.      move spaces        to caracter.
  149.      move ","           to caracter(1:1).
  150.      move X"00"         to caracter(2:1).  
  151.      call "SetLocaleInfoA" with stdcall linkage
  152.         using by value 1024
  153.               by value 15
  154.               by reference caracter
  155.         returning retcode.
  156.      cancel "SetLocaleInfoA".          

Pensando un poco, trabajando con un servidor con escritorio remoto, desde un usuario cambio la configuración regional, se le cambia automáticamente a todos los usuarios, o solamente a este?

Si bien el proceso es rápido, y enseguida vuelve todo a la normalidad, no sea cosa que este cambio afecte a otro usuario que esté haciendo otra cosa, como un excel o listado.

Muchas gracias

Saludos...

Fito...

Kuk 13 de octubre de 2022 16:05

@Fito, según dicen, el Locale se cambia a nivel sistema y no a nivel del usuario: Set language per user Solved - Windows 10 Forums

fastpho 13 de octubre de 2022 17:14

Hola @Kuk, @Fito, la configuracion regional , el idioma , el escritorio etc es a nivel usuario de windows , NO a nivel sistema
el cambio si puede afectar al usuario que por ejemplo este realizando algun proceso al mismo tiempo que tu programa , como pusiste de ejemplo Excel
Saludos ....

Fito 13 de octubre de 2022 21:35

Hola Amigos.

Excelente, entonces no voy a tener ningún problema. Aunque en este caso tampoco lo hubiera tenido porque en este servidor solamente corre el programa para servidor web, no se loguea ningún usuario

Saludos..

Fito,,,,


La franja horaria es GMT +2. Ahora son las 23:41.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.