Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   COBOL - General (https://www.cobolforo.es/forumdisplay.php?f=44)
-   -   [Duda] Sumar decimales (https://www.cobolforo.es/showthread.php?t=1577)

Socavi 31 de diciembre de 2022 11:06

Sumar decimales
 
1 Archivos Adjunto(s)
Tengo un problema que no he podido resolver, sumar una columna de ListView.
La variable global, la tengo definida como : TOTSUP PIC S9(5)V99 COMP-5 (He probado con COMP-3 y COMP-4) pero no me suma la columna o no aparece la suma donde tengo previsto.
Trabajo en Windos-11 con PWCobol v.9

fastpho 31 de diciembre de 2022 16:56

3 Archivos Adjunto(s)
Hola @Socavi, dos cuestiones sin ver el codigo , la primera la columna 4 del ListView es declarada como numerica?
segunda el campo donde debes mostrar el total de las superficies esta visible es decir POW-TRUE



De todas maneras te paso un simple ejemplo que suma las columnas 3 , 4 , 5 y las muestra en un TextBox


Saludos ....

Socavi 31 de diciembre de 2022 17:57

Buenas tardes Fastpho y muchas gracias por tu ayuda. A mi me resulta extraño que sume correctamente la columna(3) de la población, pero no la (4) de Superficie
las variables global creo que estan bien declaradas y no se dónde encontrar el error.

Código COBOL:
  1.      OPEN INPUT MUNICI
  2.      invoke Lista 'Clear'
  3.      move ' ' to finfic move 0 to cuantos
  4.      perform until finfic = 's'
  5.         read MUNICI NEXT RECORD AT END MOVE 's' to finfic
  6.            not at end
  7.            IF MUNICOM = WZMU
  8.               INVOKE Lista 'Add' USING 1 1 RETURNING RETORNO
  9.               MOVE 'ListItems'(RETORNO) OF Lista TO LINEA
  10.               MOVE MUNICOD TO 'Text'   (1) OF LINEA
  11.               MOVE MUNINOM TO 'Text'   (2) OF LINEA
  12.               MOVE MUNIPOB TO 'Numeric'(3) OF LINEA
  13.               MOVE MUNISUP TO 'Numeric'(4) of linea
  14.               PERFORM CALCUL THRU FI-CALCUL
  15.               move V-COE   TO 'Numeric'(5) OF LINEA
  16.               MOVE MUNIALT TO 'Numeric'(6) OF LINEA
  17.               MOVE IDESCAT TO 'Numeric'(7) OF LINEA
  18.               ADD  MUNIPOB TO TOTPOB
  19.               ADD  MUNISUP TO TOTSUP
  20.               add 1 to cuantos
  21.            END-IF
  22.         end-read
  23.      end-perform.
  24.      close MUNICI.
  25.      move cuantos   TO 'Caption'   of CmStatic32.
  26.      move TOTPOB  TO pow-numeric OF V-TOTPOB.
  27.      MOVE TOTSUP  TO pow-numeric OF V-TOTSUP.
  28.      PERFORM COMPROVA THRU FI-COMPROVA.
  29.      
  30.      EXIT PROGRAM.

Feliz y Próspero Año Nuevo 2.023 !!!

Josber 31 de diciembre de 2022 18:41

@Socavi, supongo que sí pero, tienen la misma PICTURE en la WORKING que en la tabla, ¿no?, de todas maneras, creo recordar que el listview, trabaja a 4 decimales, le pongas lo que le pongas.

Un salu2.-

fastpho 31 de diciembre de 2022 22:27

Cita:

Citación del post de Socavi (Mensaje 8507)
Buenas tardes Fastpho y muchas gracias por tu ayuda. A mi me resulta extraño que sume correctamente la columna(3) de la población, pero no la (4) de Superficie
las variables global creo que estan bien declaradas y no se dónde encontrar el error.

Código COBOL:
  1.      OPEN INPUT MUNICI
  2.      invoke Lista 'Clear'
  3.      move ' ' to finfic move 0 to cuantos
  4.      perform until finfic = 's'
  5.         read MUNICI NEXT RECORD AT END MOVE 's' to finfic
  6.            not at end
  7.            IF MUNICOM = WZMU
  8.               INVOKE Lista 'Add' USING 1 1 RETURNING RETORNO
  9.               MOVE 'ListItems'(RETORNO) OF Lista TO LINEA
  10.               MOVE MUNICOD TO 'Text'   (1) OF LINEA
  11.               MOVE MUNINOM TO 'Text'   (2) OF LINEA
  12.               MOVE MUNIPOB TO 'Numeric'(3) OF LINEA
  13.               MOVE MUNISUP TO 'Numeric'(4) of linea
  14.               PERFORM CALCUL THRU FI-CALCUL
  15.               move V-COE   TO 'Numeric'(5) OF LINEA
  16.               MOVE MUNIALT TO 'Numeric'(6) OF LINEA
  17.               MOVE IDESCAT TO 'Numeric'(7) OF LINEA
  18.               ADD  MUNIPOB TO TOTPOB
  19.               ADD  MUNISUP TO TOTSUP
  20.               add 1 to cuantos
  21.            END-IF
  22.         end-read
  23.      end-perform.
  24.      close MUNICI.
  25.      move cuantos   TO 'Caption'   of CmStatic32.
  26.      move TOTPOB  TO pow-numeric OF V-TOTPOB.
  27.      MOVE TOTSUP  TO pow-numeric OF V-TOTSUP.
  28.      PERFORM COMPROVA THRU FI-COMPROVA.
  29.      
  30.      EXIT PROGRAM.

Feliz y Próspero Año Nuevo 2.023 !!!

@Socavi viendo tu codigo , agrega esta linea para ver que valor tiene TOTSUP

Código COBOL:
  1.  
  2.    display "Total Superficie : " , TOTSUP
  3.    MOVE TOTSUP  TO pow-numeric OF V-TOTSUP
Saludos ....

Socavi 1 de enero de 2023 11:04

Gracias Josber, confirmado, si están bien declaradas (creo),
Código COBOL:
  1.     02 TOTPOB PIC S9(7)      COMP-5.
  2.     02 TOTSUP PIC S9(5)V99 COMP-5.

Hola Fastpho, realizada la prueba sugerida, la Superficie muestra +0014575, sin separación de coma, pero sigue sin mostrarla en V-TOTSUP., Muchas gracias a ambos.

Kuk 1 de enero de 2023 15:50

@Socavi, estás seguro que no se trata de un problema de muestreo del control? Estos componentes, incluído el V-TOTSUP los tienes en un CmFrame? Muevele un 0 tal cual al principio a ver si se ve, si no, al final del tratamiento, un simple
Código COBOL:
  1. MOVE 0 TO POW-NUMERIC OF V-TOTSUP
A ver qué tal

Socavi 1 de enero de 2023 16:38

Hola Kuk, puesta en practica tu sugerencia, no pasa el valor 0, y debería porque la variable, esta declarada en la Working-storage como

Código COBOL:
  1.  01 VARIABLES GLOBAL.    
  2.      02 TOTPOB PIC S9(7)      COMP-5.
  3.      02 TOTSUP PIC S9(5)V99 COMP-5.

Kuk 2 de enero de 2023 11:38

@Socavi, la cuestión no es el valor sino la posición, el orden de capas. Me parece que el control que tengas con el nombre V-TOTSUP (imagino que es un CmStatic) se mete por detrás del CmFrame.

Haz lo siguiente, añade esta líne en tu código al final del tratamiento, después de moverle el 0

Código COBOL:
  1.      INVOKE V-TOTSUP "ZOrder" USING 0

Socavi 2 de enero de 2023 13:15

Buenos días Kuk, tampoco hace nada, es curioso, que el display que sugirio el amigo Fastpho da la suma correcta de la superficie, pero no la 'coloca en el lugar prevísto, cosa rara, pero es lo que hay, lo seguire intentando.


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

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