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.

Kuk 2 de enero de 2023 13:38

@Socavi, definitivamente se trata de un problema de muestreo del componente. Algo se coloca mal, el control se esconde debajo de un otro o algo así

fastpho 2 de enero de 2023 19:59

Cita:

Citación del post de Socavi (Mensaje 8515)
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.

Hola @Socavi, parace ser un problema de diseño , manda un pantallazo del Editor del Form , a ver donde
esta el control en cuestion (V-TOTSUP) y si podes un pantallazo de las propiedades del control (V-TOTSUP) :flipa:
, me imagino que esta visible ???? ( como te indique en el post #2 )

Saludos ...

Socavi 3 de enero de 2023 09:13

2 Archivos Adjunto(s)
Hola Fastpho, acompaño pantallas solicitadas, si necesitas algo mas, dimelo por favor.

[ATTACH=CONFIG]849[/ATTACH][ATTACH=CONFIG]850[/ATTACH]

Josber 3 de enero de 2023 10:49

@Socavi, en el modo de edición del form, si pulsas F5, ¿el control se ve o no?

Un salu2.-

Socavi 4 de enero de 2023 11:00

Hola Josber, buenos días.

Al pulsar F5 en modo edición, no se ve nada

Josber 4 de enero de 2023 11:24

@Socavi, ¿No se ve nada que es?, ¿Qué no ves lo que se tiene que ver?, ¿Qué no hace nada?, ...
Ten en cuenta que F5 es una previsualización de cómo va a quedar el Form, si no hace nada, pulsa con el botón derecho en cualquier sitio del Form en el que no haya nada, (ni imágenes, ni controles), y pulsa en "Preview", a ver si se ve lo que debe de verse. Porque tú, en modo edición, lo ves todo, incluidos los controles que estén ocultos.

Socavi 4 de enero de 2023 19:26

1 Archivos Adjunto(s)
buenas tardes Josber, al presionar F5 sale esta imagen. [ATTACH=CONFIG]854[/ATTACH]

Josber 4 de enero de 2023 19:35

@Socavi, ¿Me puedes enviar el form que le dé un vistazo", a ver si así hay más suerte

Un salu2.-

Josber 5 de enero de 2023 14:01

2 Archivos Adjunto(s)
@Socavi,

El problema, lo tienes en que el control, tiene desmarcada la propiedad "Visible", una vez marcada, sin problemas
Tienes que darle con el botón derecho al control, luego Properties, Pestaña Common y, ahí veras la opción Visible, la marcas y ya está. Esa opción es para que cuando cargas un form, de entrada, al inicio, se vea o no el elemento deseado.

En caso de que lo quieras hacer visible por programa, sería

Código COBOL:
  1. MOVE 1 TO "Visible" OF V-TOTSUP.

(0 para invisible, 1 para visible)


Un salu2.-


[ATTACH=CONFIG]855[/ATTACH]
[ATTACH=CONFIG]856[/ATTACH]

Socavi 5 de enero de 2023 17:51

Muchas gracias Josber, ni se me habría ocurrido la verdad es que utilizo bastante éste tipo de sumas y nunca me habia encontrado hasta ahora con el problema.

todo ok. gracias.


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

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