rpg tutorial

Upload: jorgealexr

Post on 30-Oct-2015

355 views

Category:

Documents


18 download

TRANSCRIPT

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    1

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    2

    Naci la idea de desarrollar este Tutorial una noche embarcado en la Fragata A.R.A LIBERTAD Atlntico Sur, lo comenc a escribir a bordo del velero 'Goleta Sarandi' en Buenos Aires Argentina y lo finalice a bordo del velero 'Sudaca forever ' Michigan EEUU. Dedicado a mis hijos Diego Andres y Juan Alberto, a mi Madre, a Galicia en memoria de mi Padre, a toda mi familia y amigos en Argentina, Espaa y United State of America.

    Daniel Hugo Enriquez Leivas

    25 de Septiembre de 2002 Buenos Aires Argentina

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    3

    INDICE

    1. INTRODUCCION 2. OPERACIONES ARITMETICAS.

    Operacin ADD. Operacin DIV. Operacin MULT. Operacin MVR. Operacin SQRT. Operacin SUB. Operacin XFOOT. Operacin Z-ADD. Operacin Z-SUB.

    3. OPERACIONES DE MOVIMIENTO

    Operacin MOVE. Operacin MOVEA. Operacin MOVEL

    4. OPERACIONES DE MOVIMIENTO DE ZONA Operacin MHHZO. Operacin MHLZO. Operacin MLHZO. Operacin MLLZO.

    5. OPERACIONES DE ESTABLECIMIENTO DE INDICADOR. Operacin SETON. Operacin SETOF 6. OPERACIONES CON SERIES

    Operacin CAT. Operacin check. Operacin CHECR. Operacin SCAN. Operacin SUBST. Operacin XLATE.

    7. OPERACIONES DE MATRIZ

    Operacin LOKUP. Operacin MOVEA. Operacin SORTA. Operacin XFOOT.

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    4

    8. OPERACIONES DE COMPARACION

    Operacin COMP. Operacin Fis. Operacin AND. Operacin Hors. Operacin CABxx. Operacin CASxx. Operacin DOUxx. Operacin DOWxx. Operacin Ex.

    9. OPERACIONES DE SUBRUTINA

    Operacin BEGSR. Operacin ENDSR. Operacin EXSR. Operacin CASxx.

    10. PROCESO DE BASE DE DATOS

    Definiciones externas e internas. Archivos de solo lectura. Archivos de Salida. Archivos de actualizacin.

    11. OPERACIONES CON BASES DE DATOS

    Operacin SETLL. Operacin READ. Operacin SETGT. Operacin READP. Operacin READE. Operacin READC. Operacin CHAIN. Operacin WRITE. Operacin UPDAT. Operacin DELET. Operacin OPEN. Operacin CLOSE. Operacin FEOD. Operacin UNLCK. Operacin EXCPT.

    12. OPERACIONES DE LLAMADA Y DECLARATIVAS

    Operacion CALL. Operacion FREE. Operacin PARM. Operacin PLIST. Operacin RETRN. Operacin KFLD. Operacin KLIST.

    13. OPERACIONES DE AREA DE DATOS

    Operacion IN. Operacion OUT. Operacin UNLCK. 14. OPERACIONES DE INICIALIZACION

    Operacin CLEAR. Operacin RESET.

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    5

    15. OPERACIONES DE INFORMACION

    Operacin DEBUG. Operacin DUMP. Operacin SHTDN. Operacin TIME.

    16. OPERACIONES DE BITS Operacin BITOF. Operacin BITON. Operacin TESTB.

    17. OPERACIONES DECLARATIVAS Y DE LLAMADA

    Operacin CALL. Operacin PARM. Operacin PLIST. Operacin RETRN. Operacin FREE. Operacin DEFN. Operacin KLIST. Operacin KFLD.

    18. SUBFILE

    Formato de registro SFL. Formato de registro SFLCTL. SLFSIZ . SFLPAG. SFLEND. SFLCLR. Inicializacin de subfile. Grabar un subfile. Actualizar un subfile. Desplegar un subfile.

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    6

    1. INTRODUCCION Ha transcurrido mas de treinta aos desde que naciera tmidamente el lenguaje RPG. En sus albores fue concebido simplemente para realizar reportes de datos debido a su fcil y rpida programacin en comparacin a los extensos y tediosos programas en COBOL. En la dcada del setenta se contaba con maquinas como las IBM 360 o el sistema 3 de la misma compaa. Al ver el xito de este lenguaje la empresa IBM lo potencio y comenz a difundirse por sobre todo en sus sistemas IBM/34, IBM/36, IBM/38 hasta llegar a nuestros das, donde se le utiliza en las diversas aplicaciones en IBM AS/400. Fueron los aos y la tecnologa lo que permiti su evolucin, primero al RPG II luego el RPG III en el S/38, hasta nuestros das con el RPG/400, RPG IV y RPG ILE. Desde su nacimiento este lenguaje cuenta con un ciclo propio de procesamiento y una sintaxis en su codificacin estructurada y facilitada por medio de formularios (Hojas) que cumplen determinadas funciones. Es as como tenemos una hoja para definir los archivos o bases de datos a utilizar en los programas identificada con 'F' -FILE-, una hoja I -INPUT- donde realizamos las definiciones internas, la hoja 'C' - CALC - donde realizamos las operaciones de calculo y procesamiento de archivos y una hoja 'O' OUTPUT - donde establecemos las salidas de datos. Adems por medio del AS/400 que nos permite trabajar con bases de datos relacionales cuenta con definiciones externas de las mismas, definiciones externas de pantallas y de reportes de impresin. Tambin no olvidaremos las hojas E - Extensin - para definir tablas y matrices como la Hoja - L - que nos permite establecer longitudes de formularios no standart. Estos formularios cuentan con una serie de columnas que deberemos codificar respetando estrictamente la sintaxis. Algunas de estas columnas sern opcionales, por lo tanto no necesaria su codificacin y otras obligatorias, siempre considerando lo que estamos programando y el objetivo deseado.

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    7

    El RPG identifica cada una de estas hojas ya que las mismas llevan en la columna numero 6 su identificacin segn corresponda, una F para la hoja File, una C para la hoja Calc,etc. El xito de una buena codificacin y programacin no solo se deber al cumplimiento del uso de una correcta sintaxis sino tambin al buen dominio de las diferentes sentencias y comandos de este lenguaje. Desarrollaremos cada una de las formas de codificacin y veremos en el transcurso de este manual todos los comandos y su manera de emplearlos. En el ultimo capitulo analizaremos una serie de programas que nos permitirn obtener una acabada forma de la codificacin y utilizacin del RPG/400.

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    8

    2. OPERACIONES ARITMETICAS Las operaciones aritmticas son: ADD sumar DIV dividir MULT multiplicar MVR mover resto SQRT raiz cuadrada SUB restar XFOOT sumar los elementos de una matriz Z-ADD establecer a cero y sumar Z-SUB borar a cero y restar En el RPG/400 cuando usted quiere trabajar con operaciones aritmticas, las mismas se podrn realizar con campos numricos. Estas operaciones se realizan en formato decimal empaquetado y los datos contenidos en otros factores tambin se convierten en formato decimal empaquetado. Al realizar cualquier operacin de suma, resta, divisin, multiplicacin todo campo que se ubique en el campo de resultado sustituye los datos que hubiera en dicho campo. Deber considerar que este campo de resultado debe ser lo suficientemente grande como para almacenar el resultado de la operacin. Cuando realizamos una operacin aritmtica tenemos la posibilidad de establecer un redondeo de los valores decimales excepto en la operacin MVR ( mover resto. Todas las operaciones aritmticas tienen signo ( un signo mas es una F hexadecimal y un signo menos es una D hexadecimal. El signo ocupa la parte de byte de orden inferior. Veremos a continuacin cada una de las operaciones aritmeticas que podemos realizar con este lenguaje.

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    9

    ADD ( sumar ) Para realizar la operacin de suma en RPG/400 deberemos utilizar la operacin ADD. Esta operacin suma el contenido del factor 1 al del factor 2 y almacena el resultado de la misma en el campo de resultado. Por ejemplo si quisiramos sumar al campo STOCK la cantidad que nos han remitido por la ultima compra efectuada de un determinado articulo, campa COMPRA, en la columna factor 1 pondramos STOCK, en la columna cdigo de operacin la instruccin ADD, en la columna factor 2 COMPRA y en el campo de resultado STOCK. Supongamos que en la base de datos de los artculos de nuestra empresa el campo STOCK es igual a 1025 TN y la cantidad que ingresa por una nueva compra es 65 TN, la operacin aritmtica suma codificada en la hoja de calculo del RPG/400 ser la siguiente, 0026.00 C*------------------------------------------------- 0027.00 C* HOJA DE CALCULO 0028.00 C*------------------------------------------------- 0028.01 C STOCK ADD COMPRA STOCK 0028.02 C* 0028.03 C* ADICIONA EL CONTENIDO DEL CAMPO COMPRA AL CAMPO STOCK 28.04 C* Observe la edicin de la sentencia 0028.01 Prompt type . . . C Sequence number . . . 0028.01 Level N01N02N03 Factor 1 Operation Factor 2 Result STOCK ADD COMPRA STOCK Decimal Length Positions H/N/P HI LO EQ Comment

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    10

    Luego que el RPG/400 realice la operacin ADD el nuevo contenido del campo STOCK en el campo de resultado ser 1090. 0026.00 C*------------------------------------------------ 0027.00 C* HOJA DE CALCULO 0028.00 C*------------------------------------------------ 0028.01 C STOCK ADD COMPRA STOCK 0028.02 C* 1025 + 65 1090 Otra cuestin a considerar en las aperaciones de suma son los signos que contienen cada uno de los factores. Si el factor 1 y el factor 2 tienen el mismo signo, el signo campo de resultados es el mismo. Si el factor 1 y el factor 2 tienen distinto signo, el signo del campo de resultado es el mismo que el signo del factor con mayor valor absoluto. Ampliaremos estos conceptos analizando los siguientes ejemplos que nos permitirn clarificar las reglas de los signos en los clculos aritmticos del operando suma.

    CAMPO CONTENIDO

    CAMPO CONTENIDO

    CAMP01

    2.00 CAMP02

    10.00

    CAMP03

    55.00 CAMP04

    -20

    CAMP05

    0,5 CAMP06

    8.85

    TAB 2 , 4.6 , 7 Para los ejemplo utilizaremos campos auxiliares ( auxxx) definidos en la hoja de calculo como numricos de nueve posiciones con 0, 2 y 4 decimales respectivamente.

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    11

    Prompt type . . . C Sequence number . . . 0028.01 Level N01N02N03 Factor 1 Operation Factor 2 Result CAMP01 ADD CAMP02 AUX01 Decimal Length Positions H/N/P HI LO EQ Comment

    9 2 0026.00 C*------------------------------------------------- 0027.00 C* HOJA DE CALCULO 0028.00 C*------------------------------------------------- 0028.01 C CAMP01 ADD CAMP02 AUX01 92 0028.02 C CAMP05 ADD CAMP06 AUX02 90 0028.03 C CAMP03 ADD CAMP04 AUX03 94 0028.04 C* 0028.05 C*

    Factor 1 Operacin Factor 2 Campo de resultado

    RESULTADO

    CAMP01 ADD CAMP02 AUX01 9 2 57.00 CAMP05 ADD CAMP06 AUX02 9 0 8 CAMP03 ADD CAMP04 AUX03 9 4 35.00 ADD CAMP05 CAMP03 10,05

    Las operaciones de suma entre los campos CAMP05 y CAMP06 arroja como resultado 8 debido a que el campo de resultado AUX02 fue definido con nueve posiciones con cero decimal quedando truncada las posiciones decimales. Todo campo auxiliar y cualquier otro campo sea numrico o alfanumrico que no este definido por medio de una definicin externa o interna deberemos definirlo en la hoja de calculo estableciendo su longitud en todos los casos y para aquellos campos numricos la cantidad de decimales. Esta cantidad de decimales es la que le indica al RPG/400 que el campo es numerico, por ejemplo si deseamos definir un campo numerico entero de nueve posiciones codificaremos su longitud ( 9) y cero decimal ( 0.

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    12

    0026.00 C*------------------------------------------------- 0027.00 C* HOJA DE CALCULO 0028.00 C*------------------------------------------------- 0028.01 C* 0028.02 C* 0028.03 C ADD CAMP05 CAMPO3 0028.04 C* 0028.05 C* En el ejemplo observara que no hemos codificado ningn campo en el factor 1, deseamos sumar el contenido del CAMP05 al CAMP03 y guardar su resultado en el CAMP03, por lo que nos es necesario su codificacin en el factor en cuestin, ya que el RPG/400 al no codificar ningn campo en el factor 1 asume que el valor actual del campo de resultado debe sumarle el valor del factor 2 y guardarlo en el campo de resultado. SUB ( restar) La operacin aritmtica resta, se realiza por medio del comando SUB. Esta operacin resta el contenido del factor 2 al factor 1 y el resultado se almacena en el campo de resultado. En la operacin de sustraccin deber cambiar el signo del factor 2 y aplicar las reglas de la adicin. 0026.00 C*------------------------------------------------- 0027.00 C* HOJA DE CALCULO 0028.00 C*------------------------------------------------- 0028.01 C CAMP02 SUB CAMP05 AUX01 92 0028.02 C SUB CAMP06 AUX02 112 0028.03 C CAMP03 SUB CAMP05 AUX03 122 0028.04 C CAMP03 SUB CAMP06 AUX04 92 0028.05 C*

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    13

    Factor 1 Operacin Factor 2 Campo de

    resultado L D RESULTADO

    CAMP02 SUB CAMP05 AUX01 9 2 1.50 SUB CAMP06 AUX02 1

    1 2 -8.95

    CAMP03 SUB CAMP05 AUX03 12

    2 75.00

    CAMP03 SUB CAMP06 AUX04 9 2 46.05 Observara en el ejemplo que en la sentencia donde restamos el CAMP06 se ha omitido el factor 1, deber entender que es lo mismo que codificar lo siguiente AUX02 SUB CAMP06 AUX02 11 2 -8.95 MULT ( multiplicar) La operacin aritmtica multiplicar se realiza por medio del operando MULT. Esta operacin multiplica el contenido del factor 1 por el contenido del factor 2 y almacena el resultado en el campo de resultado. Deber observar en esta operacin la siguiente regla: Si el factor 1 y el factor 2 tienen signos iguales, el signo del campo de resultados es ( +. Si el factor 1 y el factor 2 tienen signos distintos, el signo del campo de resultados es ( - ) 0026.00 C*------------------------------------------------- 0027.00 C* HOJA DE CALCULO 0028.00 C*------------------------------------------------- 0028.01 C CAMP02 MULT CAMP05 AUX01 92 0028.03 C CAMP03 MULT CAMP05 AUX03 110 0028.04 C CAMP01 MULT CAMP04 AUX04 92H 0028.05 C* 0028.06 C*

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    14

    Factor 1 Operacin Factor 2 Campo de

    resultado L D RESULTADO

    CAMP02 MULT CAMP05 AUX01 9 2 5.00 CAMP03 MULT CAMP05 AUX03 1

    1 0 27

    CAMP01 MULT CAMP04 AUX04 9 2 -80.00 Observe en la hoja 'C' en la sentencia 0028.04 el campo de resultado AUX04 se ha codificado con una 'H' que le indica al RPG/400 que deber redondear los resultados de la operacin. 0028.06 C* Prompt type . . . C Sequence number . . . 0028.04 Level N01N02N03 Factor 1 Operation Factor 2 Result CAMP01 MULT CAMP04 AUX04 Decimal Length Positions H/N/P HI LO EQ Comment 9 2 H Z-ADD ( establecer a cero y sumar) Esta operacin primero pone a ceros el campo de resultados y luego le adiciona el contenido del campo indicado en el factor 2. Si previo a la ejecucin esta operacin el campo de resultado contiene algn valor, el mismo ser restablecido a ceros y luego se le adicionara el campo del factor 2. 0026.00 C*------------------------------------------------- 0027.00 C* HOJA DE CALCULO 0028.00 C*------------------------------------------------- 0028.01 C Z-ADDCAMP05 AUX01 92 0028.03 C Z-ADDCAMP06 CAMPO3 0028.05 C* 0028.06 C*

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    15

    Factor 1 Operacin Factor 2 Campo de

    resultado L D RESULTADO

    Z-ADD CAMP05 AUX01 9 2 0,50 Z-ADD CAMP06 CAMP03 11 2 8.95 DIV ( dividir) La operacin aritmtica de dividir esta representada por la operacin DIV. Esta operacin divide el contenido del factor 1 por el contenido del factor 2 y almacena el resultado en el campo de resultado. Durante la ejecucin de esta sentencia el RPG/400 observar la siguiente regla: Si el factor 1 y el factor 2 tienen signos iguales, el signo del campo de resultados es mas ( + ). Si el factor 1 y el factor 2 tienen signos distintos, el signo del campo de resultados es ( - ). 0026.00 C*----------------------------------------------- 0027.00 C* HOJA DE CALCULO 0028.00 C*----------------------------------------------- 0028.01 C CAMP02 DIV CAMP05 AUX01 92 0028.03 C CAMP04 DIV CAMP01 AUX03 114 0028.04 C CAMP06 DIV CAMP03 AUX04 126 0028.05 C* 0028.06 C* 0028.07 C CAMP04 DIV CAMP01 AUX03 114H Factor 1 Operacin Factor 2 Campo de

    resultado L D RESULTADO

    CAMP02 DIV CAMP05 AUX01 9 2 20.00 CAMP04 DIV CAMP01 AUX03 11 4 0,3636 CAMP06 DIV CAMP03 AUX04 12 6 0.162727

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    16

    En la ltima sentencia hemos repetido la divisin del campo CAMP04 dividido CAMP01 pero le hemos pedido al RPG/400 que redondee el resultado de la operacin mediante la codificacin en la respectiva columna de la letra H, en este caso el resultado almacenado en el campo AUX03 ser 0,3640. Deber recordar que para las operaciones ADD, SUB, MULT y DIV, el factor 1 no es necesario. Si no se especifica el factor 1, la operacin se realiza como si el factor 1 y el campo de resultados fuesen el mismo campo. SQRT ( raz cuadrada ) Esta operacin nos permite extraer la raiz cuadrada de un campo y almacenar su resultado en el campo de resultados. FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 0027.00 C* HOJA DE CALCULO 0028.00 C*------------------------------------------------- 0028.01 C SQRT CAMP01 AUX01 92 0028.03 C SQRT CAMP02 CAMP03 0028.04 C* 0028.05 C* RESULTADO DESPUES DE REALIZAR LA SENTENCIA 28.01 ES 0028.06 C* 1.41 0028.07 C* RESULTADO DESPUES DE REALIZAR LA SENTENCIA 28.03 ES 0028.08 C* 3.16 XFOOT ( sumar elementos de una matriz ) Con la operacin XFOOT podemos realizar la suma de series o matrices. El resultado de sumar los elementos de las las series o matrices codificadas en el factor 2 se almacena en el campo de resultado. En el siguiente ejemplo sumaremos todos los elementos de la serie TAB y este resultado lo almacenaremos en el campo de resultados que contiene al campo AUX01definido como numrico de 9 posiciones en total y dos de las cuales son decimales.

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    17

    0026.00 C*------------------------------------------------- 0027.00 C* HOJA DE CALCULO 0028.00 C*------------------------------------------------- 0028.01 C XFOOTTAB AUX01 92 0028.04 C* 0028.06 C* 0028.08 C* Las series o matrices se definen en la Hoja 'E'. En la medida que desarrollemos otros ejemplos s vera la forma de definirlas en esta hoja. Ejemplos sobre distintas operaciones aritmticas 0026.00 C*------------------------------------------------- 0027.00 C* HOJA DE CALCULO 0028.00 C*------------------------------------------------- 0028.01 C Z-ADD*ZEROS AUX01 0028.02 C Z-ADD*ZEROS AUX02 0028.03 C* 0028.04 C CAMP01 ADD CAMP02 AUX01 0028.05 C AUX01 MULT CAMP03 AUX02 0028.06 C 05 SQRT AUX01 AUX01 0028.07 C CAMP02 DIV AUX01 CAMP03 0028.08 C* 0028.09 C*PRIMERO HEMOS PUESTO A CERO LOS CAMPOS AUX01 Y AUX02 0028.10 C*POR MEDIO DE *ZEROS QUE MUEVE CEROS A UN CAMPO NUMERICO 0028.11 C* 0028.12 C*OBSERVE LA SENTENCIA 28.06 VEMOS LA OPERACION SQRT. LA 0028.13 C*EJECUCION DE ESTA LINEA SE ENCUENTRA CONDICIONADA POR UN 0028.14 C*INDICADOR ( EN ESTE CASO 05 ). SI ESTE INDICADOR SE ENCUENTRA 0028.15 C*ACTIVO LA SENTENCIA SE EJECURA, EN CASO CONTRARIO EL RPG/400 0028.16 C*IGNORARA LO CODIFICADO EN LA LINEA 28.06 0028.17 C*

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    18

    Supongamos que debemos calcular un descuento del 10 % en el total de una factura de servicios telefonicos. El total bruto antes de realizar las operaciones para calcular descuento se encuentra en el campo TOTBRU cuyo monto es de 1.153 .00 pesos y almacenaremos el total con descuento en el campo TOTNET, sobre este ultimo campo calcularemos el IVA segn la alcuota que aplica Telefnica de Espaa en Argentina del 27 % por sus prestaciones de telefona, bueno si le parece algo elevado esta alcuota mejor ni le cuento el valor del pulso telefnico. Veremos a continuacin como codificaramos estas sentencias para que puedan ser interpretadas y ejecutadas en el lenguaje RPG/400. Observara que en las primeras sentencias s inicializan los campos auxiliares que utilizaremos ya que las mismas pueden ser parte de un programa que ejecutar este calculo por cada registro de una base de datos que contiene millones de usuarios y deberemos asegurarnos que esos campos se encuentren sin valores de clculos de registros anteriores. 0026.00 C*------------------------------------------------- 0027.00 C* HOJA DE CALCULO 0028.00 C*------------------------------------------------- 0028.01 C Z-ADD*ZEROS AUX01 112 0028.02 C Z-ADD*ZEROS TOTNET 112 0028.03 C Z-ADD*ZEROS TOTIVA 112 0028.04 C Z-ADD*ZEROS TOTFAC 112 0028.05 C* 0028.06 C TOTBRU MULT 0.10 AUX01 0028.07 C TOTBRU SUB AUX01 TOTNET 0028.08 C TOTNET MULT 0.27 TOTIVA 0028.09 C TOTNET ADD TOTIVA TOTFAC 0028.10 C* 0028.11 C*PRIMERO HEMOS PUESTO A CERO LOS CAMPOS AUX01, TOTNET 0028.12 C*TOTIVA, TOTFAC. 0028.13 C*----------- 0028.14 C*RESULTADOS: 0028.15 C*----------- 0028.16 C*AUX01 = 115.30 0028.17 C*TOTNET = 1037.70 0028.18 C*TOTIVA = 280.18 0028.19 C*TOTFAC = 1317.88 0028.20 C* 0028.21 C*

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    19

    Con la intencin de analizar distintas situaciones que clarifiquen el uso y codificacin de las operaciones aritmticas por unos minutos nos convertiremos en agentes burstiles y realizaremos algunos clculos sobre las operaciones de compra y venta de acciones de la empresa VITALCARIE COOPORATION. Operacin de compra: Precio por accin: 10 dolares Cantidad comprada: 500 Comisin de compra: 1% Operacin de Venta: Precio por accin: 12 dolares Cantidad vendida: 500 Comisin de Venta: 1% Deseamos saber cual es la ganancia antes de aplicarle la alcuota de impuestos a las ganancias, que ha obtenido el inversor luego de un periodo de tres meses. FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 *************** Beginning of data *************** 001.00 H*------------------------------------------------- 002.00 H* SISTEMA : EJEMPLOS RPG/400 TUTORIAL I 003.00 H* BS. AS. ARGENTINA 004.00 H* DANIEL HUGO ENRIQUEZ LEIVAS 005.00 H* PROGRAMA: PROG10 006.00 H* FECHA : 2002 007.00 F*------------------------------------------------- 008.00 F* HOJA FILE 009.00 F*------------------------------------------------- 010.00 FACCION IF F 256 6AI 1 DISK 012.00 FLISTA O E 60 PRINTER 026.00 C*------------------------------------------------- 027.00 C* CALCULO ACCIONES DE VITALCARIE S.A. 28.0 C*-------------------------------------------------

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    20

    Observemos las sentencias de calculo en la Hoja 'C' y los comentarios insertados en ella por medio de codificar un asterisco a continuacin de la letra C que identifica dicha hoja. Esto es una buena forma de documentar o comentar determinados clculos o acciones dentro de un programa RPG/400. 028.01 C Z-ADD*ZEROS AUX01 112 028.02 C Z-ADD*ZEROS AUX02 112 0028.03 C Z-ADD*ZEROS AUX03 112 0028.04 C Z-ADD*ZEROS AUX04 112 0028.05 C* 0028.06 C* PRECC = PRECIO UNITARIO POR ACCION A LA COMPRA 0028.07 C* PRECV = PRECIO UNITARIO POR ACCION A LA VENTA 0028.08 C* CANTC = CANTIDAD COMPRADA 0028.09 C* CANTV = CANTIDAD VENDIDA 0028.10 C* COMIC = COMISION DE COMPRA 0028.11 C* COMIV = COMISION DE VENTA 0028.12 C* TOTCOM = IMPORTE DE COMPRA + COMISIONES 0028.13 C* TOTVEN = IMPORTE DE VENTA - COMISIONES 0028.14 C* TOTGAN = TOTAL GANANCIA ANTES DE IMPUESTOS 0028.15 C* 0028.16 C CANTC MULT PRECC AUX01 0028.17 C AUX01 MULT COMIC AUX02 0028.18 C AUX01 ADD AUX02 TOTCOM 0028.19 C* 0028.20 C CANTV MULT PRECV AUX03 0028.21 C AUX03 MULT COMIV AUX04 0028.22 C AUX03 SUB AUX04 TOTVEN 0028.23 C* 0028.24 C TOTVEN SUB TOTCOM TOTGAN 0028.25 C* 0028.26 C* 0028.29 C*----------- 0028.30 C*RESULTADOS: 0028.31 C*----------- 0028.32 C*AUX01 = 5000.00 0028.33 C*AUX02 = 50.00 0028.34 C*AUX03 = 6000.00 0028.35 C*AUX04 = 60.00 0028.36 C* 0028.37 C*TOTCOM = 5050.00 0028.38 C*TOTVEN = 5940.00 0028.39 C*TOTGAN = 890.00 0028.40 C*

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    21

    2. OPERACIONES DE MOVIMIENTO Las operaciones de movimiento son: MOVE ( Mover ) MOVEL ( Mover por la izquierda ) MOVEA ( Mover Matriz ) MOVE ( Mover ) Estas operaciones nos permiten transferir caracteres contenidos dentro de un campo o constante literal desde el Factor 2 al campo de resultados. MOVE ( Mover ) En la operacin MOVE la transferencia comienza por el carcter mas a la derecha del factor 2. 0026.00 C*------------------------------------------------- 0027.00 C* OPERACION MOVE 0028.00 C*------------------------------------------------- 0028.01 C MOVE 'LIMA' AUX01 4 0028.02 C MOVE 'LIMA' AUX02 6 0028.03 C MOVE AUX02 AUX03 6 0028.04 C* 0028.05 C*

    Factor 1 Operacin Factor 2 Campo de resultado

    L D RESULTADO

    MOVE 'LIMA' AUX01 4 LIMA MOVE 'LIMA' AUX02 6 LIMA

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    22

    Observara que en la primera operacin MOVE el campo de resultado tiene todas sus posiciones con caracteres esto se debe a que su longitud es de 4 caracteres y la constante 'LIMA' tambin lo es. En la segunda operacin MOVE vemos en el campo de resultado de 6 posiciones la constante literal 'LIMA' ha quedado alineada por la derecha y los dos primeras posiciones estn en blanco. En la ultima movemos el contenido de un campo en este caso AUX02 al campo de resultados AUX03. MOVEL ( Mover por la izquierda) Esta operacin transfiere caracteres desde el Factor 2 al campo de resultados. La transferencia comienza por el carcter mas a la derecha del factor 2. 0026.00 Cha------------------------------------------------- 0027.00 C* OPERACION MOVEL 0028.00 C*------------------------------------------------- 0028.01 C MOVEL'LIMA' AUX01 4 0028.02 C MOVEL'LIMA' AUX02 6 0028.03 C MOVEL'LIMA' AUX03 6 0028.04 C* 0028.05 C* Factor 1

    Operacin

    Factor 2

    Campo de resultado

    L D RESULTADO

    MOVEL 'LIMA' AUX01 4 LIMA MOVEL 'LIMA' AUX02 6 LIMA MOVEL 'LIMA' AUX03 6 LIMAXX La primera operacin MOVEL 'LIMA' mueve a un campo de longitud cuatro caracteres de longitud, por lo tanto ocupa todas las posiciones del campo de resultados. La segunda operacin MOVEL 'LIMA' mueve a un campo de longitud 6 caracteres y por lo tanto los dos caracteres de la derecha queda en blanco si el campo AUX02 estaba vaci (inicializado. El la tercer operacin MOVEL 'LIMA' a AUX03 tenemos que el campo AUX03 antes de la operacin MOVEL contena 'XXXXXX' por lo tanto despus de esta operacin su contenido es 'LIMAXX'.

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    23

    Suponga que necesitamos acceder a un archivo por medio de una clave compuesta por numero de cliente, tipo de comprobante y numero. Para ello necesitaremos armar una clave de acceso que contenga esos datos. 0026.00 C*------------------------------------------------- 0027.00 C* OPERACIONES MOVEL Y MOVE 0028.00 C*------------------------------------------------- 0028.01 C MOVELCLIEN CLAVE 14 0028.02 C MOVEL'FC' AUX01 8 0028.03 C MOVE CPBTE AUX01 0028.04 C MOVE AUX01 CLAVE 0028.05 C* 0028.06 C* CLIEN = CAMPO CON EL NUMERO DE CLIENTE DE 6 POSICIONES 0028.07 C* FC =CONSTANTE LITERAL COMPROBANTE FACTURA 0028.08 C* CPBTE = NUMERO DE COMPROBANTE DE 6 POSICIONES 0028.09 C* AUX01 = CAMPO AUXILIAR 0028.11 C* PRIMERA OPERACION MOVEL CLAVE = '001287________' 0028.12 C* SEGUNDA OPERACION MOVEL AUX01 = 'FC______' 0028.13 C* PRIMERA OPERACION MOVE AUX01 = 'FC528734' 0028.14 C* SEGUNDA OPERACION MOVE CLAVE = '001287FC528734' MOVEA ( Mover matriz ) Esta operacin transfiere valores de caracteres alfabticos o numricos del factor 2 al campo de resultado. Puede utilizar MOVEA con una matriz empaquetada binaria, con zona o de caracteres. Con MOVEA podemos mover varios elementos contiguos de una matriz de caracteres a un nico campo de caracteres. Mover un nico campo de caracteres a varios elementos contiguos de una matriz de caracteres. Mover elementos contiguos de una matriz a elementos contiguos de otra matriz. Cuando utilizamos MOVEA para mover caracteres tanto el factor 2 como el campo de resultados deben definirse como de caracteres. Cuando la utilizamos con datos numricos debemos observar que, las matrices deben estar definidas por la misma longitud numrica. Supongamos que tenemos las siguientes matrices.

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    24

    Contenido: Nombre :MATX Un elemento dos caracteres 1 2 3 4 5 6 7 8 9 0 Nombre: MATY Contenido: Un elemento de caracteres A A B B C C D D E E F F Observemos, tenemos dos matrices sin indexar, de diferente longitud de matriz e igual longitud de elementos 0026.00 C*------------------------------------------------ 0027.00 C* OPERACION MOVEA 0028.00 C*------------------------------------------------ 0028.01 C MOVEAMATY MATX 0028.02 C* Factor 1

    Operacin Factor 2 Campo de resultado

    L D

    MOVEA MATX MATY Resultado despus de MOVEA 1 2 3 4 5 6 7 8 9 0 F F Mover matriz a matriz con campo de resultado indexado. 0026.00 C*------------------------------------------------- 0027.00 C* OPERACION MOVEA 0028.00 C*------------------------------------------------- 0028.01 C MOVEAMATY MATX,3 28.02 C*

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    25

    Factor 1

    Operacin Factor 2 Campo de resultado

    L D

    MOVEA MATX MATY,3 Resultado A A B B 1 2 3 4 5 6 Mover matriz a matriz , sin indexar y elementos de matriz de longitud diferentes. MATX elemento dos caracteres, MATY elementos 3 caracteres. Factor 1

    Operacin

    Factor 2

    Campo de resultado

    L D

    MOVEA MATX MATY MATX 1 2 3 4 5 6 7 8 9 0 MATY A A A B B B C C C D D D Resultado 1 2 3 4 5 6 7 8 9 0 D D 3. OPERACIONES DE MOVIMIENTO DE ZONA MHHZO ( Mover zona de la parte superior a la parte superior) MHLZO ( Mover zona de la parte superior a la parte inferior)

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    26

    MLHZO ( Mover zona de la parte inferior a la parte superior) MLLZO ( Mover zona de la parte inferior a la parte inferior) MHHZO ( Mover zona de la parte superior a la parte superior) Esta operacin mueve la parte de zona de un carcter desde la zona mas a la izquierda del factor 2 a la zona extrema izquierda del campo de resultados. Tanto el factor 2 como el campo de resultados deben ser campos definidos de tipo carcter. MHLZO ( Mover zona de la parte superior a la parte inferior ) Esta operacin mueve la parte de zona de un carcter desde la zona mas a la izquierda del factor 2 a la zona extrema derecha del campo de resultados. Tanto el factor 2 como el campo de resultados deben ser campos definidos de tipo carcter. MLHZO ( Mover zona de la parte inferior a la parte superior ) Esta operacin mueve la parte de zona de un carcter desde la zona mas a la derecha del factor 2 a la zona extrema izquierda del campo de resultados. Tanto el factor 2 como el campo de resultados deben ser campos definidos de tipo carcter. MLLZO ( Mover zona de la parte inferior a la parte inferior ) Esta operacin mueve la parte de zona de un carcter desde la zona mas a la derecha del factor 2 a la zona extrema derecha del campo de resultados. Tanto el factor 2 como el campo de resultados deben ser campos definidos de tipo carcter.

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    27

    4. OPERACIONES DE ESTABLECIMIENTO DE INDICADOR SETON ( ACTIVAR INDICADOR ) SETOF ( DESACTIVAR INDICADOR ) Las operaciones SETON y SETOF activan o desactivan respectivamente los indicadores establecidos en las columnas 54 a 58 de la hoja de calculo. Los indicadores 1P , MR, KA A KN no pueden activarse por medio de la operacin SETON. Los indicadores 1P y MR no pueden desactivarse mediante la operacin SETOF. Podemos activar o desactivar los indicadores L1 a L9 mediante una operacin SETON o SETOF pero en este caso no se activaran o desactivaran los indicadores de corte de control inferiores. 0026.00 C*------------------------------------------------- 0027.00 C* OPERACIONES SETON Y SETOF 0028.00 C*------------------------------------------------- 0028.01 C SETON 20 0028.02 C 20 08 SETOF 10 0028.03 C 20 0028.04 COR N10 SETON 50 0028.05 C* La primera sentencia SETON se ejecutara cada vez que el programa procese la misma ya que esta no se encuentra condicionada. En cambio en la sentencia siguiente, se observa que se activara el indicador 10 o sea se procesara la operacin SETON siempre y cuando se encuentren activados los indicadores 20 y 08. Estos indicadores condicionan la ejecucin de esta operacin y al estar codificados en la misma lnea debemos interpretar que se deber cumplir la condicin de que el indicador 20 este activado -Y- el indicador 08 tambin. En la ultima operacin SETON vemos que se encuentra condicionada por el estado de dos indicadores - el indicador 20 activado - O - el indicador 10 desactivado (N10) -. Observe a continuacin esta sentencia en modo de edicin.

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    28

    Prompt type . . . C Sequence number . . . 0028.03 Level N01N02N03 Factor 1 Operation Factor 2 Res 20 Decimal Length Positions H/N/P HI LO EQ Comment Prompt type . . . C Sequence number . . . 0028.04 Level N01N02N03 Factor 1 Operation Factor 2 Result OR N10 SETON Decimal Length Positions H/N/P HI LO EQ Comment 50

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    29

    5. OPERACIONES DE SERIE CAT ( Concatenar dos series de caracteres ) CHECK ( Comprobar caracteres ) CHECR ( Comprobar caracteres hacia atrs) SCAN ( Explorar Serie de caracteres) SUBST ( Subserie ) XLATE ( Convertir ) CAT (Concatenar dos series de caracteres) La operacin CAT concatena la serie de caracteres especificada en el factor 2 al final de la serie de caracteres especificada en el factor 1 y lo coloca en el campo de resultado. El factor 1 puede contener una serie de caracteres, un nombre de campo, un elemento de una matriz, una constante con nombre, una estructura de datos, un nombre de tabla o un literal. El factor 2 puede contener una serie de caracteres o puede contener el numero de blancos a insertar entre las series concatenadas.

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    30

    0026.00 C*------------------------------------------------ 0027.00 C* OPERACION CAT 0028.00 C*------------------------------------------------ 0028.01 C 'DIEGO' CAT 'Y JUAN' AUX01 12 0028.02 C* 0028.03 C*RESULTADO 'DIEGO Y JUAN' 0028.04 C* 0028.05 C MOVEL'AS/400' AUX02 6 0028.06 C MOVEL'RPG' AUX03 6 0028.07 C AUX02 CAT AUX03:1 AUX04 9 0028.08 C* 0028.09 C*RESULTADO 'AS/400 RPG' 0028.10 C* 0028.11 C MOVEL*BLANK AUX02 0028.12 C MOVEL'JAIME' AUX02 0028.13 C MOVEL*BLANK AUX05 15 0028.14 C 'MASTER' CAT AUX02:2 AUX05 0028.15 C* 0028.16 C*RESULTADO 'MASTER JAIME' 0028.17 C* CHECK ( Comprobar caracteres ) La operacin CHECK verifica que cada carcter de la serie del factor 2 este entre los caracteres indicados en la serie del factor 1. Comienza la verificacin en el carcter mas a la izquierda del factor 2 y continua carcter por carcter, desde la izquierda hacia la derecha. 0026.00 C*------------------------------------------------- 0027.00 C* OPERACION CHECK 0028.00 C*------------------------------------------------- 0028.01 C Z-ADD *ZEROS N 20 0028.02 C MOVEL*BLANK AUX01 6 0028.03 C MOVE 'MI' AUX01 0028.04 C ' ' CHECKAUX01 N 0028.05 C*

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    31

    Como en el factor 1 tenemos un blanco (' '), CHECK nos indicara la primera posicin que no es blanco, en el ejemplo N ser igual a 5. 0026.00 C*------------------------------------------------- 0027.00 C* OPERACION CHECK 0028.00 C*------------------------------------------------- 0028.01 C* 0028.02 C Z-ADD *ZEROS N 20 0028.03 C MOVEL'0123' AUX01 4 0028.04 C MOVEL'$1032.' AUX02 6 0028.05 C AUX01 CHECKAUX02:2 N 90 0028.06 C* En este ejemplo le hemos indicado que CHECK comenzara en la posicin 2 ( obsrvese el factor 2 ) y hemos utilizado el indicador de resultado encontrado 90, que se encender cuando encuentre el primer carcter distinto de los contenidos en AUX01, en este caso ser el carcter ' . ' que har que se active dicho indicador. CHEKR ( Comprobar caracteres hacia atrs) La operacin CHEKR verifica que cada carcter de la serie (factor 2) este entre los caracteres indicados en el factor 1. Esta verificacin se produce comenzando por el carcter mas a la derecha del factor 2 y continua carcter a carcter de derecha a izquierda. 0026.00 C*------------------------------------------------- 0027.00 C* OPERACION CHECKR 0028.00 C*------------------------------------------------- 0028.01 C* 0028.02 C Z-ADD *ZEROS N 20 0028.03 C MOVEL'ABCD ' AUX01 5 0028.05 C ' ' CHEKR AUX01:2 N 90 0028.06 C* El factor 1 es un carcter blanco, en este caso CHEKR nos indica la posicin del primer carcter que no es blanco, para este ejemplo N=4

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    32

    SCAN ( Explorar serie de caracteres ) Esta operacin explora una serie de caracteres contenida en el factor 2 para una subserie contenida en el factor 1 Esta exploracin comienza en la posicin especificada en el factor 2. Se entender claramente con un ejemplo. 0026.00 C*------------------------------------------------- 0027.00 C* OPERACION SCAN 0028.00 C*------------------------------------------------- 0028.01 C* 0028.02 C Z-ADD2 X 20 0028.03 C Z-ADD3 Y 20 0028.04 C Z-ADD*ZEROS L 20 0028.05 C Z-ADD*ZEROS N 20 0028.06 C MOVEL'ESLORA' AUX01 6 0028.07 C MOVEL'NORESTE' AUX02 6 0028.08 C MOVEL'OREN' AUX03 4 0028.09 C ORA SCAN AUX01 L 90 0028.10 C* 0028.11 C*RESULTADO L=4 INDICADOR 90 ACTIVADO 0028.12 C* 0028.13 C AUX03:Y SCAN AUX02:X N 90 0028.14 C* 0028.15 C*RESULTADO N=2 INDICADOR 90 ACTIVADO 0028.16 C*AUX03 CONSIDERANDO 3 POSICIONES '0RE' 0028.17 C*AUX02 COMENZANDO EN LA POSICION X=2 0028.18 C*

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    33

    SUBST ( Subserie ) La operacin SUBST devuelve una subserie del factor 2, empezando en la ubicacin especificada en este mismo factor y para una longitud especificada en el factor 1, colocando la subserie en el campo de resultado. 0026.00 C*------------------------------------------------- 0027.00 C* OPERACION SUBST 0028.00 C*------------------------------------------------- 0028.01 C Z-ADD 2 N 20 0028.02 C MOVE *BLANK AUX02 8 0028.03 C MOVEL'PIRATA' AUX01 6 0028.04 C 3 SUBST AUX01:2 AUX02 55 0028.05 C* 0028.06 C*RESULTADO 'IRA' 0028.07 C* Esta operacin SUBST extrae una subserie del factor 2 o sea del campo AUX01 comenzando en la posicin 2 y con una longitud de 3 especificada en el factor 1. Observese la utilizacion de un indicador en este caso el 55, pociones 56 y 57 de la hoja de calculo, el cual se activara si se produce un error durante la ejecucion de esta operacin. 0026.00 C*------------------------------------------------- 0027.00 C* OPERACION SUBST 0028.00 C*------------------------------------------------- 0028.01 C Z-ADD2 N 20 0028.02 C MOVE *BLANK AUX02 8 0028.03 C MOVEL'PIRATA' AUX01 6 0028.04 C 7 SUBSTAUX01:2 AUX02 55 0028.05 C* 0028.06 C*RESULTADO ERROR 0028.07 C* En este otro ejemplo se activa el indicador 55 ya que queremos extrae una subserie del campo AUX01 a partir de la posicion 2 y desplazandonos 7 posiciones, las que exceden la totalidad de caracteres de la serie.

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    34

    XLATE ( Convertir ) Esta operacion nos permite convertir los caracteres de una serie del factor 2 de acuerdo con las series DE y A y se situan en el campo de resultados. El factor 1 debera contener las series DE ( convertir de ) y A ( convertir a ). Estas series pueden ser un nombre de campo, un elemento de matriz, una constante con nombre, una estructura de datos o un literal. Si el factor 2 fuese menor que el campo de resultados una P en la posicion 53n indica que el campo de resultados debera rellenarse por la derecha con blancos despues de la conversion. Se podea utilizar indicadores del 01 al 99 en las posiciones 56 y 57 para determinar si se produce un error. 0026.00 C*------------------------------------------------- 0027.00 C* OPERACION XLATE 0028.00 C*------------------------------------------------- 0028.01 C* 0028.02 C MOVE *BLANK AUX02 8 0028.03 C MOVEL'658 2130'AUX01 8 0028.04 C' ':'-' XLATE AUX01 AUX02 55 0028.05 C* 0028.06 C*RESULTADO 658-2130 Queremos convertir las letras minusculas del campo AUX01 a mayusculas y almacenar esta conversion en el campo AUX02. 0026.00 C*------------------------------------------------- 0027.00 C* OPERACION XLATE 0028.00 C*------------------------------------------------- 0028.01 C* 0028.02 C MOVEL*BLANK AUX02 10 0028.06 C MOVEL'abcdej' MI 6 0028.07 C MOVEL'ABCDEJ' MA 6 0028.08 C MOVEL'jacobo' AUX01 6 0028.09 C MI:MA XLATEAUX01 AUX02 28.10 C* 0028.11 C*RESULTADO AUX02 = 'JACoBo' 0028.12 C*

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    35

    Ahora veremos un ejemplo donde definimos 2 constantes literales en la hoja I ( input ) las cuales nos permitaran convertir letras mayusculas a minusculas o vice versa. 0012.01 I*------------------------------------------------- 0012.02 I* DEFINICION DE CONSTANTES LITERALES 0012.03 I*------------------------------------------------- 0012.04 I 'abcdefghijklmnopqrs -C MI 0012.05 I 'tuvwxyz' 0012.06 I 'ABCDEFGHIJKLMNOPQRS -C MA 0026.00 I 'TUVWXYZ' 0027.00 I* 0028.00 C*------------------------------------------------- 0028.01 C*CONVERSION DE MAYUSCULAS A MINUSCULAS Y VICEVERSA 0028.02 C*------------------------------------------------- 0028.03 C MOVEL*BLANKS AUX04 10 0028.04 C MOVEL*BLANKS AUX05 10 0028.05 C MOVEL*BLANKS AUX06 10 0028.06 C* 0028.07 C MOVEL'BsaS' AUX01 4 0028.08 C MOVEL'MIcHiGaN'AUX02 8 0028.09 C MOVEL'ViGo' AUX03 4 0028.10 C* 0028.11 C MI:MA XLATEAUX01 AUX04 0028.12 C MA:MI XLATEAUX02 AUX05 0028.13 C MI:MA XLATEAUX03 AUX06 0028.14 C* 0028.15 C*RESULTADO AUX04 = 'BSAS' 0028.16 C*RESULTADO AUX05 = 'michigan' 0028.17 C*RESULTADO AUX06 = 'VIGO' 0028.18 C*

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    36

    6. OPERACIONES DE MATRIZ

    LOKUP (Buscar) MOVEA (Mover Matriz) SORTA (Clasificar una matriz) XFOOT (Sumar elementos de una matriz) LOKUP (Buscar) Esta operacion nos permite buscar un elemento en particular dentro de una matriz o tabla. El factor 1 es el argumento de busqueda y en el factor 2 el nombre de la matriz o tabla. Podemos codificar indicadores de resultados igual , menor y mayor. El indicador de resultado por mayor, columnas 54 y 55, le indica al programa que busque la entrada mayor mas proxima, el indicador por menor, columnas 56 y 57, la entrada menor mas proxima y el indicador por igual la entrada igual al argumento de busqueda. En este ejemplo deseamos conocer si se encuentra un elemento en la matriz EST que sea igual al contenido del campo AUX01, cuando la operacion LOKUP encuentre un elemento coicidente, se activara el indicador 47. FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 .. 0028.01 C*OPERACION LOKUP 0028.02 C*------------------------------------------------- 0028.03 C Z-ADD 1 X 20 0028.04 C MOVEL'VELA' AUX01 4 0028.05 C MOVEL'ALFA' AUX02 4 0028.10 C* 0028.11 C AUX01LOKUPEST 47 0028.12 C* 0028.13 C AUX02LOKUPEST,X 26 0028.14 C*

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    37

    Ahora deseamos conocer si existe un elemento de tabla o matriz coincidente y en que elemento de la matriz se encuentra. Cuando la operacion es satisfactoria se activara el indicador 26, el subindice X contedra el numero de elemento dentro de la tabla o matriz que es coincidente con el argumento de busqueda. MOVEA (Mover Matriz) Esta operacion transfiere valores numericos y/o de caracteres del factor 2 al campo de resultado. El factor 2 y el campo de resultado deben contener una matriz. No podemos especificar aunque este indexada la misma matriz en el factor 2 y el campo de resultado. Esta operacion comienza a mover los datos por el primer elemento de una matriz si esta no esta indexada o con el elemento especificado si lo esta. 0028.00 C*------------------------------------------------- 0028.01 C*OPERACION MOVEA 0028.02 C*------------------------------------------------- 0028.03 C* 0028.04 C MOVEAMATB MATC 0028.05 C* Antes de MOVEA MATB 56 84 90 16 22 48 MATC 10 11 12 13 14 15 Despues de MOVEA MATB

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    38

    56 84 90 16 22 48 MATC 56 84 90 16 22 48 0028.00 C*------------------------------------------------- 0028.01 C*OPERACION MOVEA 0028.02 C*------------------------------------------------- 0028.03 C* 0028.04 C MOVEAMATB MATC,4 0028.05 C* Antes de MOVEA MATB 56 84 90 16 22 48 MATC 10 11 12 13 14 15 Despues de MOVEA MATB 56 84 90 16 22 48

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    39

    MATC 10 11 12 56 84 90 0028.00 C*------------------------------------------------- 0028.01 C*OPERACION MOVEA 0028.02 C*------------------------------------------------- 0028.03 C Z-ADD2 X 20 0028.04 C MOVEAMATB,X MATC 0028.05 C* Antes de MOVEA MATB 56 84 90 16 22 48 AUX01 100B Despues de MOVEA MATB 56 84 90 16 22 48 AUX01 5684

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    40

    SORTA (Clasificar una matriz) mna 16 una F ( Full procedure ) Columna 19 una ' E' que le indica al RPG/400 que la definicin de la base de datos es Externa o sea su definicin se encuentra en una DDS ( Data description Specification ). ColumnEsta operacin nos permite clasificar una matriz. Esta matriz definida en la hoja 'E' (especificaciones adicionales) podr clasificarse en orden ascendente o descendente segn lo codificado en la columna 45 de esta hoja. MATB HDEFABC Vemos la codificacin de la letra A columna 45 que le indicara al RPG/400 la clasificacin de esta matriz en orden ascendente 0012.01 E*------------------------------------------------- 0012.02 E MATB 8 1 A 0028.00 C*------------------------------------------------- 0028.01 C*OPERACION SORTA 0028.02 C*------------------------------------------------- 0028.03 C Z-ADD2 X 20 0028.04 C SORTAMATB 0028.05 C* RESULTADO ABCDEFH

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    41

    7. OPERACIONES DE COMPARACION COMP ( comparar ) IFxx (SI) AND ( Y ) ORxx ( O ) CABxx ( comparar y bifurcar ) CASxx ( llamada condicional a una sub rutina ) DOUxx ( hacer hasta ) DOWxx ( hacer mientras ) WHxx ( cuando sea verdadero seleccionar ) En las operaciones ANDxx, CABxx, DOUxx, Ifxx, Orxx y WHxx, xx puede ser : XX SIGNIFICADO GT El factor 1 es mayor que el factor 2 LT El factor 1 es menor que el factor 2 EQ El factor 1 es igual al factor 2 NE El factor 1 no es igual que el factor 2 GE El factor 1 es mayor o igual que el factor 2 LE El factor 1 es menor o igual que el factor 2 Las operaciones de comparacion prueban campos para determinar ciertas condiciones. Los indicadores resultantes utilizados en las posiciones 54 a 59 de la hoja de calculo se activan o no, segn los resultados de la operacin, o bien se produce una bifurcacin basada en los resultados. Todas estas operaciones no cambian ningn valor de ningn campo.

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    42

    COMP ( compar ) La operacin COMP compara el factor 1 con el factor 2. El factor 1 y 2 pueden contener un literal , una constante con nombre, un nombre de campo, un nombre de tabla, un elemento de matriz o una estructura de datos. El factor 1 y factor 2 deben ser ambos numricos o de caracteres. Al realizar la comparacin, se activan los indicadores de la siguiente forma: Indicador Columna Condicin Mayor 54 55 El factor 1 es mayor que el factor 2 Menor 56 57 El factor 1 es menor que el factor 2 Igual 58 59 El factor 1 es igual al factor 2 0028.00 C*------------------------------------------------- 0028.01 C*OPERACION COMPARACION COMP 0028.02 C*------------------------------------------------- 0028.03 C Z-ADD23 AUX01 60 0028.04 C Z-ADD56 AUX02 60 0028.05 C AUX01 COMP AUX02 505152 0028.06 C* 0028.07 C*SE ACTIVARA EL INDICADOR 51 ( MENOR ) 0028.08 C*FACTOR 1 MENOR QUE EL FACTOR 2 0028.09 C* 0028.10 C* 0028.11 C AUX02 COMP AUX01 707172 0028.12 C* 28.11 C*SE ACTIVARA EL INDICADOR 70 ( MAYOR ) 0028.08 C*FACTOR 1 MENOR QUE EL FACTOR 2 0028.09 C*

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    43

    Ahora compararemos dos campos y segn se activen los indicadores de resultado realizaremos otras operaciones que estarn condicionadas por dichos indicadores. FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... ************* Beginning of data ************* 001.00 H*------------------------------------------------- 002.00 H* SISTEMA : EJEMPLOS RPG/400 TUTORIAL I 003.00 H* : MICHIGAN . EEUU 004.00 H* AUTOR : DANIEL HUGO ENRIQUEZ LEIVAS 005.00 H* PROGRAMA: PROG15 006.00 H* FECHA : 2002 007.00 F*------------------------------------------------- 008.00 F* HOJA FILE 009.00 F*------------------------------------------------- 010.00 FSTOCK IF E K DISK 012.00 FLISTA O E 60 PRINTER 012.01 E*------------------------------------------------- 012.02 I 'NO COMPRAR -C LEY01 012.03 I 'COMPRAR -C LEY02 012.04 I 'CRITICO COMPRAR URG.-C LEY03 0028.00 C*------------------------------------------------- 0028.01 C*OPERACION COMPARACION COMP 0028.02 C*------------------------------------------------- 0028.03 C MOVEL*BLANKS LEYEN 20 0028.04 C STOCK COMP PUNTOR 807978 0028.05 C 80 MOVELLEY01 LEYEN 0028.06 C 78 MOVELLEY03 LEYEN 0028.07 C 79 MOVELLEY02 LEYEN 0028.08 C* 0028.09 C*SEGUN EL STOCK SEA MAYOR, MENOR O IGUAL 0028.10 C*AL PUNTO DE REPOSICION SE ACTIVARAN LOS 0028.11 C*INDICADORES 80,79,78 RESPECTIVAMENTE. 0028.12 C* 0028.13 C*LUEGO MOVEREMOS LA LEYENDA QUE CORRESPONDA 0028.14 C*SEGUN LOS INDICADORES. OBSERVE QUE ESTOS 0028.15 C*INDICADORES DE RESULTADO LUEGO SE TRANSFORMAN 28.16 C*EN INDICADORES QUE CONDICIONAN O NO 28.17 C*DETERMINADAS OPERACIONES

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    44

    0028.19 C*SE EJECUTARA LA SENTENCIA 28.05 SIEMPRE Y CUANDO 0028.20 C*EL INDICADOR DE RESULTADO 80 ESTE ACTIVADO, 0028.21 C*NO EJECUTANDOSE LAS OPERACIONES CONDICIONADAS 0028.22 C*POR LOS RESTANTES INDICADORES 0028.23 C* IFxx (SI ) La operacin IFxx permite que se procese un grupo de clculos si existe una relacin determinada, especificada en xx, entre el factor 1 y el factor 2. El factor 1 y el factor 2 deben contener una constante con nombre, un literal, un nombre de tabla, un elemento de matriz, un nombre de estructura de datos o un nombre de campo. Las entradas del factor 1 y factor 2 deben ser ambas numricas o de caracteres. Si la relacin que especificamos por IFxx no existe, el RPG pasara el control a la operacin de calculo inmediatamente despus de la operacin ENDIF que cierra el grupo de sentencias. Si dentro de un IFxx se especifica la operacin ELSE ( en caso contrario hacer ), el control pasa a la siguiente operacin de calculo despus de la operacin ELSE hasta ejecutar todas las sentencias comprendidas entre esta y el ENDIF. 0009.00 F*------------------------------------------------- 0010.00 FSTOCK IF E K DISK 0012.00 FLISTA O E 60 PRINTER 0012.01 E*------------------------------------------------- 0012.02 I 'NO COMPRAR -C LEY01 0012.03 I 'COMPRAR -C LEY02 0012.04 I 'CRITICO COMPRAR URG. -C LEY03 0028.00 C*------------------------------------------------- 0028.01 C*OPERACION COMPARACION IFxx 0028.02 C*------------------------------------------------- 0028.03 C MOVEL*BLANKS LEYEN 20 0028.04 C STOCK IFGT PUNTOR 0028.05 C MOVELLEY01 LEYEN 0028.06 C ENDIF 0028.07 C STOCK IFEQ PUNTOR 0028.08 C MOVELLEY02 LEYEN 0028.09 C ENDIF 0028.10 C STOCK IFLT PUNTOR 0028.11 C MOVELLEY03 LEYEN 0028.12 C ENDIF 0028.15 C*

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    45

    En la primera sentencia IFxx (IFGT es mayor que) preguntamos si el campo stock es mayor que el campo punto de reposicin, si as lo fuere se ejecutara la sentencia que mueve LEY01 al campo LEYEN. En la segunda sentencia IFxx I (IFEQ es igual a) preguntamos si el campo stock es igual al campo punto de reposicin, si as lo fuere se ejecutara la sentencia que mueve LEY02 al campo LEYEN. En la ultima sentencia IFxx (IFLT es menor que) preguntamos si el campo stock es menor que el campo punto de reposicin, si as lo fuere se ejecutara la sentencia que mueve el campo LEY03 al campo LEYEN. Tambin podramos codificar estas distintas acciones de la siguiente manera incorporando el uso de la operacin ELSE. 0028.02 C*------------------------------------------------- 0028.03 C MOVEL*BLANKS LEYEN 20 0028.04 C STOCK IFGT PUNTOR 0028.05 C MOVELLEY01 LEYEN 0028.06 C ELSE 0028.07 C STOCK IFEQ PUNTOR 0028.08 C MOVELLEY02 LEYEN 0028.09 C ELSE 0028.10 C STOCK IFEQ PUNTOR 0028.11 C MOVELLEY03 LEYEN 0028.12 C ENDIF 0028.13 C ENDIF 0028.14 C ENDIF 0028.15 C* En nuestro primer IFxx preguntamos si el campo STOCK es mayor que el campo PUNTOR, si lo es se ejecutara/n la/s sentencias comprendidas dentro del grupo IFxx caso contrario se ejecutaran las sentencias comprendidas entre ELSE (caso contrario hacer) y el correspondiente ENDIF. Si no se cumpliera la condicin del primer IFxx ejecutara las sentencias despus del ELSE que en este caso es otro IFxx. Observe que por cada grupo IFxx se deber codificar su correspondiente ENDIF.

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    46

    En este punto el lector entender que podramos mejorar nuestra programacin escribiendo las sentencias de la siguiente manera optimizando los IFxx anidados. 0028.02 C*------------------------------------------------- 0028.03 C MOVEL*BLANKS LEYEN 20 0028.04 C STOCK IFGT PUNTOR 0028.05 C MOVELLEY01 LEYEN 0028.06 C ELSE 0028.07 C STOCK IFEQ PUNTOR 0028.08 C MOVELLEY02 LEYEN 0028.09 C ELSE 0028.11 C MOVELLEY03 LEYEN 0028.12 C ENDIF 0028.13 C ENDIF 0028.15 C* ANDxx (Y) La operacin ANDxx es una operacin optativa , la misma debe codificarse despus de una operacin IFxx, DOUxx, DOWxx, WHxx y antes de la codificacin de la sentencia de fin de grupo. La operacin ANDxx tiene una mayor prioridad que la operacin Orxx. 0001.00 H*------------------------------------------------- 0002.00 H* SISTEMA EJEMPLOS RPG/400 TUTORIAL 0003.00 H* MICHIGAN . EEUU 0003.01 H* TIERRA DE VOLVERINES 0005.00 H* PROGRAMA: PROG16 0006.00 H* FECHA : 2002 0007.00 F*------------------------------------------------- 0008.00 F* HOJA FILE 0009.00 F*------------------------------------------------- 0010.00 FSTOCK IF E K DISK 0012.00 FLISTA O E 60 PRINTER 0012.01 E*------------------------------------------------- 0012.02 I 'ARGENTINA BUENOS AIR-C LEY01 0012.03 I 'ES' 0012.04 I 'MICHIGAN EEUU -C LEY02 0028.00 C*------------------------------------------------- 0028.01 C*OPERACION COMPARACION IFXX, ANDXX 0028.02 C*------------------------------------------------- 0028.03 C Z-ADD 3567 AUX01 82

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    47

    0028.04 C Z-ADD 2047 AUX02 82 0028.05 C AUX01 IFGE 3000 0028.06 C AUX02 ANDGT2000 0028.07 C MOVELLEY01 LEYEN 30 0028.08 C ELSE 0028.09 C MOVELLEY02 LEYEN 0028.14 C ENDIF 0028.17 C* Ahora queremos seleccionar todos los registros historicos de venta del articulo 0032 , vendidos por el vendedor 55 en de la zona 10. Para ello codificaremos en nuestra hoja de calculo lo siguiente: FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+. 0028.02 C*------------------------------------------------- 0028.03 C Z-ADD 32 ARTIS 60 0028.04 C Z-ADD 55 VENDS 60 0028.05 C Z-ADD 10 ZONAS 60 0028.06 C ARTIC IFEQ ARTIS 0028.07 C VENDE ANDEQVENDS 0028.08 C ZONA ANDEQZONAS 0028.09 C EXSR PROCE 0028.10 C EXSR PRIN1 0028.11 C ENDIF 0028.17 C* 0028.18 C*SE PROCESARAN LAS SENTENCIAS DENTRO DEL 0028.19 C*GRUPO IFXX SIEMPRE Y CUANDO EL CAMPO 0028.20 C*ARTIC=32 Y VENDE=55 Y ZONA=10 0028.21 C* ORxx (O ) La operacin Orxx es una operacin optativa y se utiliza con las operaciones IFxx, DOUxx, DOWxx, WHxx y ANDxx. Nos permite programar la condicin lgica (O).

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    48

    FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ... 028.02 C*----------------------------------------------- 028.03 C Z-ADD32 ARTIS 60 028.04 C Z-ADD55 VENDS 60 028.05 C Z-ADD10 ZONAS 60 028.06 C ARTIC IFEQ ARTIS 028.07 C VENDE OREQ VENDS 028.08 C ZONA OREQ ZONAS 028.09 C EXSR PROCE 028.10 C EXSR PRIN1 028.11 C ENDIF 28.12 C* 028.13 C ARTIC IFGE ARTIS 028.14 C VENDE ORLT VENDS 028.15 C ZONA ORGT ZONAS 028.16 C EXSR PROCE 028.17 C EXSR PRIN1 028.18 C ENDIF Tambin podemos combinar en una operacin IFxx, DOUxx, DOWxx, las operaciones ANDxx y Orxx. Observe el siguiente ejemplo: 028.12 C* 028.13 C AUX01 IFGE 50 028.14 C VENDE ORLT VENDS 028.15 C AUX02 ANDLT 110 028.16 C EXSR PROCE 028.17 C EXSR PRIN1 028.18 C ENDIF CASxx ( Llamada condicional a una subrutina) 0028.00 C*------------------------------------------------- 0028.01 C*OPERACION CASXX 0028.02 C*------------------------------------------------- 0028.03 C Z-ADD25 AUX01 92 0028.04 C Z-ADD56 AUX02 92 0028.05 C Z-ADD34 AUX03 92

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    49

    0028.06 C AUX01 CASGE25 SUBR01 0028.07 C AUX02 CASEQ56 SUBR02 0028.08 C AUX03 CASLE34 SUBR03 0028.09 C ENDCS 0028.10 C* 0028.11 C* Nuestra operacion CASxx compara AUX01 si es mayor o igual a 25, de ser verdadero ejecutara la subrutina SUBR01, luego de procesar esta subrutina el control del programa regresa a la prxima sentencia donde compara AUX02 si es igual a 56, en este caso no es verdadero por lo que no ejecutara la subrutina SUBR02, continua y la prxima sentencia comprueba si AUX03 es menor o igual a 34 de ser verdadero ejecuta la subrutina SUBR03. Para finalizar el grupo toda operacin CASxx debe finalizar con una operacin ENDCS. En el ejemplo siguiente procesaremos distintas subrutinas de calculo segn el precio de compra de las acciones sea , mayor , igual, o menor que el precio actual del mercado en la bolsa de New York. 0028.00 C*------------------------------------------------- 0028.01 C*OPERACION CASXX 0028.02 C*------------------------------------------------- 0028.05 C* 0028.06 C VALOC CASGTVALORA CALC01 0028.07 C AUX02 CASEQVALORA CALC02 0028.08 C AUX03 CASLEVALORA CALC03 0028.09 C ENDCS 0028.10 C* 0028.11 C* 0028.12 C* DOUxx (Hacer hasta) Esta operacin comienza un grupo de operaciones que se desean procesar mas de una vez y por lo menos una vez. El factor 1 y el factor 2 deben contener, una constante con nombre, un nombre de campo,

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    50

    un literal, un nombre de tabla, una estructura de datos o un elemento de matriz. 0063.00 C*------------------------------------------------- 0064.00 C* RUTINA DE CALCULO 0065.00 C*------------------------------------------------- 0066.00 C CALCU BEGSR 0066.01 C Z-ADD1 TASAP 86 0066.02 C Z-ADDCANPER N 60 0066.03 C N DOUEQ0 0066.04 C TASA MULT TASAP TASAP 0066.05 C SUB 1 N 0066.06 C ENDDO 0066.07 C ENDSR En el ejemplo anterior tenemos un capital de 100000 dlares que lo invertimos en un plazo fijo en el banco 'XXX' por el termino de 10 aos a un inters anual de 6.5 %. Con DOUxx realizamos en calculo de la tasa de inters a aplicar por el periodo determinado en el campo CANPER , luego al abandonar el DOUxx en el campo TASAP tendremos la tasa a aplicar y realizamos el calculo del capital. DOWxx ( hacer mientras ) Esta operacin encierra un grupo de operaciones que se desea procesar mientras exista una relacin xx entre los factores 1 y 2. A diferencia de DOUxx no procesara ni una vez las operaciones si no existe la relacin xx entre los factores. Veremos el uso de esta operacin por medio de un ejemplo. El lector observara a continuacin, la definicin del archivo Maestro de operaciones - MAEPRO en su correspondiente DDS (Data Descripcin Source) y el printer file -LISTA- que utilizaremos en nuestro ejemplo: File . . . . . . QDDSSRC Library . . . . V40LBDHE Position to . . . . . Type options, press Enter. 2=Edit 3=Copy 4=Delete 5=Display 6=Print 7=Rename 8=Display description 9=Save 13=Change text 14=Compile 15=Create module...

  • Lenguaje RPG400

    2002 Daniel Hugo Enrquez Leivas Buenos Aires - Argentina Reproducido con el permiso de su autor para Recursos As/400 -Barcelona - Espaa.

    http://www.recursos-as400.com

    51

    Opt Member Type Text LISTA PRTF LISTADO DE OPERACIONES A PLAZO FIJO MAEOPE PF MAESTRO DE OPERACIONES A PLAZO FIJO PANT01 DPSF PANTALLA EJEMPLO PANT02 DSPF PANTALLA EJEMPLO Para este ejemplo veremos la DDS que define el archivo de operaciones a plazo f