Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Sintaxis] Valores numericos y editados (https://www.cobolforo.es/showthread.php?t=77)

Breew 23 de marzo de 2015 08:13

Valores numericos y editados
 
Hola amigos.


Tengo un reporte en un fichero con campos numericos que debo efectuar calculos.
al leerlo del fichero lo coloco en una tabla y me da el valor correcto.

por ejemplo:
Código COBOL:
  1. 01 tarifa1  pic x(7)  value "123,48".
  2. 01 tarifa redefines  tarifa1 pic 9(4)v99.

Pero a la hora de efectuar calculos con tarifa1, me da un valor erroneo.

He hecho multiples combinaciones, pero no hay manera, siempre me calcula mal.
Como deberia hacerlo ?

POWER COBOL 9.0

Kuk 23 de marzo de 2015 09:11

Breew, nunca he usado campos alfanumericos para guardar numeros pero de todos modos por que le haces un REDEFINES, con MOVE no funciona? Deberia funcionar. Pero si no, yo lo que probaria es primero moverlo a un PIC ZZZZ9,99 y luego desde aqui ya a un campo numerico.
Pero MOVE, no REDEFINES. En este caso yo diria que el REDEFINES no sirve de nada.

Josber 23 de marzo de 2015 12:30

Yo empezaría por mirar la alineación del campo alfanumérico, ésta es a la izquierda y los numéricos, es a la derecha, y en lo que has puesto, cuando pasas los números de un campo a otro, como son seis números y el tamaño es 7, se debe de hacer la picha un lío y en el primero o en el último, quizas te meta un null, si es éste el caso, pon un JUSTIFIED RIGHT al alfanumérico y prueba a ver, sino, la solución de Kuk puede funcioar también.

Un saliudo.-

Hrmcobol 23 de marzo de 2015 14:15

Yo haria lo siguiente:
Código COBOL:
  1. 01 Tarifa.
  2.      02  cpo-1    pic 999.
  3.      02  cpo-2    pic x
  4.      02  cpo-3    pic 99.
  5.  01 valor1   pic 9(5).
  6.  01 valor2   pic 999v99.
  7.      move cpo-1 to valor1(01:03)
  8.      move cpo-3 to valor1(04:02)
  9.      move valor1 to valor2

En valor dos es un campo numero que sirve para hacer cualquier tipo de cuenta.

Saludos y espero que sirva.

Kuk 23 de marzo de 2015 14:51

Hrmcobol, esto es en caso de que la coma decimal sea siempre fija. Si en algun caso hay 1 solo decimal o 3 ya no serviria y habria que montar un buscle para buscar la coma.

Por cierto, amigo Hrm, usa el TAG [ COBOL ] para codigo fuente ;)

Hrmcobol 23 de marzo de 2015 18:51

Si hay qu hacer un blucle para ubicar la coma,
Se me ocurre Otra, que pasa si defines un CmText con el RenderText de 999999,9999, le mueves el texto al "text" y luego el POW-NUMERIC a un campo pic 999999v9999 eso funciona, y no hay que hacer nada.



Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  01  campo pic x(7) value "123,48".
  3.  01  numer pic 9(6)v9(4).
  4.  01  zetas pic 999999,9999.
  5.  PROCEDURE       DIVISION.
  6.       move campo to "Text" OF cmtext1
  7.       MOVE POW-NUMERIC OF cmtext1  TO numer.
  8.       move numer to zetas.
  9.       display zetas

Breew 25 de marzo de 2015 23:06

Valores numericos
 
Hola Amigos.
Tengo el torpe subido , no lo consigo. Os detallo mas el tema.
Tengo un fichero plano con los valores.
ej .
Articulo1 18,36

Leo el fichero y defino el campo del valor como ZZZ9,99 o bien pic X(7).
Con dicho valor me gustaria operar con el , por ejemplo multiplicarlo por 4, y poder visualizar el resultado con formato de edicion Z.ZZ9,99.

El render text cuando le pongo un campo 9999v99 o bien ZZZ9,99 me da error:
Cita:

---------------------------
RenderTexts
---------------------------
RenderText properties cannot be set.

There is a possibility that the text adjustment made will not take effect.
---------------------------
Lo siento, estoy cabezon, cabezon.

Añadido despues de 9 minutos
Perdonar, he conseguido que opere bien, pero no consigo visualizar el resultado en un formato con coma decimal.
1836 en lugar de 18,36

Josber 26 de marzo de 2015 09:23

¿Has definido en SPECIAL-NAMES?

Código COBOL:
  1. SPECIAL-NAMES.
  2.          DECIMAL-POINT IS COMMA.

Un saludo.-

Breew 27 de marzo de 2015 15:13

Ostras, pues no.

Una vez definido, calcula bien, por fin. Pero tengo el problema de que no me deja modificar el Render.

El render text, cuando le pongo un campo 9999v99 o ZZZ9,99 me da error:
---------------------------
RenderTexts
---------------------------
RenderText properties cannot be set.

There is a possibility that the text adjustment made will not take effect.
---------------------------

Cita:

Citación del post de Josber (Mensaje 283)
¿Has definido en SPECIAL-NAMES?

Código COBOL:
  1. SPECIAL-NAMES.
  2.          DECIMAL-POINT IS COMMA.

Un saludo.-


Rapinto 27 de marzo de 2015 16:16

Breew,

Antes de mudar o RenderText poe espaços na Caption.
A Caption tem by default texto e não deixa colocar "pic 9" ou "pic Z" enquanto não limpar.

Saludos,
Rui Pinto


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

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