26 agosto, 2013
RPG. Llamada con parametro numérico desde línea de mandatos
Tanto en RPG como en ILERPG, cuando tenemos un parametro de entrada definido como campo numérico, no podemos llamarlo directamente poniendo un valor constante decimal sin encontrarnos el fastidioso mensaje de error de datos decimales.
Por ejemplo, en un programa tenemos definidos los siguientes parámetros de entrada
El segundo parámetro NUH es un campo que definimos como numérico de 7 dígitos sin decimales.
Si queremos hacer una llamada directa al programa pasándole unos valores constantes, no podemos indicar un valor decimal en la segunda posición tal como haríamos en el ejemplo de la siguiente imagen
Si hacemos esto, la respuesta que obtendremos será el fastidioso error de datos decimales
Para evitar esto hay una solución bien sencilla. Se trata de poner delante y detrás del valor que le estamos pasando el programa las constantes x’ y f’. De esta manera le indicamos al sistema que lo que está entre estas dos series es un valor numérico constante y se ejecutará correctamente.
En el caso anterior, si ponemos la llamada como muestra la imagen, el programa se ejecutará sin ningún tipo de error…. o al menos no por el paso de parámetros numéricos.
Muy buen consejo. Solo puntualizar que hay que poner el parámetro con los ceros a la izquierda que pudiera tener y que si el parámetro tuviese una longitud par, hay que añadirle un cero más a la izquierda para que funcione (es el bit del signo), de tal modo:
Si el campo es 7S0 –> x’00XXXXXf’
si el campo es de 8S0 –> x’0XXXXXXXXf’
Espero haber ayudado.
Gracias por la puntualización. Cualquier detalle se agradece.
Con el respeto de lo comentado de las instrucciones anteriores. Esa permite solo pasar los parametros, pero lo pasa mal y solo te permite ajustarlo una vez que está adentro en el debug. por lo que realmente no funciona. Lo que si funciona es sencillamente la siguiente, sin complicaciones, si el campo parm es
7s 0. Solo debes decirle por ejemplo un valor de 7 digitos en linea de parámetros : > 0030304F y listo, sin comillas ni apostrofes, eso si funciona y el parametro numerico que lo recibe, lo recibe tal cual se lo escribiste. Créalo… C Bellorin from Venezuela
Gracias por tu aporte… lo probaré.
Tks. a lot I can ran my program:
CALL PGM(WH9999) PARM(‘FX’ ‘FI’ ‘DIU927606’ ‘R1D4’ ‘0’ ‘0’ ‘0685926’ ‘001’
‘0000000010f’ ‘AGO_14’ ‘ ‘ ‘00000’)
Regards
Right! Thanks
Te felicito…muy buen dato…sirvió para recordar viejos tiempos…
Ejecute el programa con tres parametro numéricos y uno tipo caracter.
Como los dos primeros son pares les agregue un cero al inicio y si funcionó como lo indican al inicio.
*ENTRY PLIST
PARM wrkser 6 0
PARM wrklin 4 0
PARM wrksec 1 0
PARM FLAG 1
CALL PGM(SVG4593) PARM(x’0000400f’ x’00006f’ x’0f’ ‘ ‘)