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

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