Ver la Versión Completa : [Sintaxis] Valores numericos y editados
Breew
23 de marzo de 2015, 08:13
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:
01 tarifa1 pic x(7) value "123,48".
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:
01 Tarifa.
02 cpo-1 pic 999.
02 cpo-2 pic x
02 cpo-3 pic 99.
01 valor1 pic 9(5).
01 valor2 pic 999v99.
move cpo-1 to valor1(01:03)
move cpo-3 to valor1(04:02)
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.
WORKING-STORAGE SECTION.
01 campo pic x(7) value "123,48".
01 numer pic 9(6)v9(4).
01 zetas pic 999999,9999.
PROCEDURE DIVISION.
move campo to "Text" OF cmtext1
MOVE POW-NUMERIC OF cmtext1 TO numer.
move numer to zetas.
display zetas
Breew
25 de marzo de 2015, 23:06
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:
---------------------------
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?
SPECIAL-NAMES.
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.
---------------------------
¿Has definido en SPECIAL-NAMES?
SPECIAL-NAMES.
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
Breew
30 de marzo de 2015, 15:33
Hola .
Vaya Fallo, No doy una con los numericos.
Comienzo a entender el tema de las variables numericas.
De todas maneras, me estoy calentando la cabeza y no consigo hacerlo funcionar bien.
Si quisiera hacer que dos numeros tecleados en pantalla con formato numerico de edicion me de el resultado en un tercer campo tambien visualizados como edicion, no me sale ni a tiros.
En el Form he creado 2 CmText donde introduzo el formato ZZZ9,99 y el resultado seria un tercer CmText tambien con ZZZ9,99
la procedure seria la siguiente
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 campo1 pic 9999v99.
01 campo2 pic 9999v99.
PROCEDURE DIVISION.
move "text" of cmtext1 to campo1.
move "text" of cmtext2 to campo2.
Add campo1 to Campo2.
Move campo2 to "text" of cmtext3.
He hecho varias pruebas con decimal point is comma y no consigo saber si en los CmText debo tambien marcarlo o que es lo que debo de hacer.
Gracias de antemano por el incordio que os estoy dando.
Kuk
30 de marzo de 2015, 16:28
Breew, "Text" no vale para calculos. Debes usar siempre POW-NUMERIC. Ya es el propio control el que se encarga de darle formato que has establecido. Haz lo siguiente:
*******************************
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 campo1 pic 9999v99.
01 campo2 pic 9999v99.
PROCEDURE DIVISION.
move POW-NUMERIC of cmtext1 to campo1.
move POW-NUMERIC of cmtext2 to campo2.
Add campo1 to Campo2.
Move campo2 to POW-NUMERIC of cmtext3.
O incluso puedes hacer esto:
ADD POW-NUMERIC OF CmText1 TO POW-NUMERIC OF CmText2
GIVING POW-NUMERIC OF CmText3
O tambien con COMPUTE:
COMPUTE POW-NUMERIC OF CmText3 =
POW-NUMERIC OF CmText1 + POW-NUMERIC OF CmText2
Breew
30 de marzo de 2015, 21:30
Muchas gracias a todos.
Bueno, ya voy perfilando el tema, desconocia totalmente el artibuto de pow-numeric.
Como decia, lo voy perfilando, pero aun me queda un gran problema, la coma decimal.
No acaba de funcionar, he definido en el form decimal point is comma.
Tambien en el render text y he configurado ZZZ9,99 pero cuando tecleo el numero no me funciona el punto decimal , en cambio la coma si.
¿ Como podria hacer funcionar el punto decimal del teclado numerico ?
Perdonad el machaque.
Kuk
30 de marzo de 2015, 23:17
Breew, en el evento "KeyPress" del/de los CmText que quieras hacer eso le pones el siguiente codigo:
IF POW-ARG-KEYASCII = 46 *> punto
MOVE 44 TO POW-ARG-KEYASCII *> coma
END-IF
Asi cuando teclees punto decimal, te saldra coma.
Breew
30 de marzo de 2015, 23:51
Hola.
Todo funciona por fin !!!! :apl:
Casi he dado una voltereta de alegria. Muchisimas gracias.
Por cierto, ya para rizar el rizo, me haria falta alinear a la derecha el contenido de los cmtext .
Algun consejo ??? :)
Saludos Cordiales
Josber
31 de marzo de 2015, 08:51
Por cierto, ya para rizar el rizo, me haria falta alinear a la derecha el contenido de los cmtext .
Algun consejo ??? . 0:-)
En las propiedades, pestaña Single Line, marcas Editable Label y un poco más abajo En Alignment lo tienes.
Un saludo.-
Kuk
31 de marzo de 2015, 09:56
A mi no me gusta mucho Editable Label, porque no toma apariencia "moderna".
Yo lo que hago es fijar fuente Courier New, con esto queda en posiciones fijas. Luego si alguno es mas largo por diseño del Form, le meto unas B-s y listo. Por ejemeplo:
ZZZZ9,99
BBZZ9,99
Josber
31 de marzo de 2015, 15:46
A mi tampoco me gusta el Editable Label Kuk, de vez en cuando, hace "cosas raras", pero algunas veces, por narices hay que usarlo.
Un saludo.-
Kuk
31 de marzo de 2015, 16:33
Josber, prueba el metodo de ajustar con B-s (poniendo fuente Courier New). Los nuemros normalmente no deben ser ajustados en el centro, sino en la derecha. Y para otra cosa que no sea el ajuste realmente no sirve para nada el Editable ese, que ademas como decias, efectivamente falla bastante.
Si tienes varios CmText uno debajo del otro, y alguno es mas largo que los otros, a esos otros les pones tantas B-s por delante cuantas Z-s demas tenga el mas largo.
BBBZZZ9,99.
BBBZZZ9,99.
BBZZZZ9,99.
ZZZZZZ9,99.
Asi queda todo bien ajustado en la derecha! ;)
vBulletin v3.8.7, Derechos ©2000-2026, Jelsoft Enterprises Ltd.