You are on page 1of 141

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

Lenguaje RPG400

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

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

Lenguaje RPG400

INDICE
1. 2. INTRODUCCION 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.

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

Lenguaje RPG400

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.

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.

OPERACIONES CON BASES DE DATOS

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.

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

Lenguaje RPG400

15.

OPERACIONES DE INFORMACION

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

16.

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

17.

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

OPERACIONES DECLARATIVAS Y DE LLAMADA

18.

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

SUBFILE

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

Lenguaje RPG400

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.

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

Lenguaje RPG400

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.

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

Lenguaje RPG400

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.

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

Lenguaje RPG400

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 . . . Level

Sequence number . . . 0028.01

N01N02N03 Factor 1 Operation Factor 2 Result STOCK ADD COMPRA STOCK Decimal Length Positions H/N/P HI LO EQ Comment

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

Lenguaje RPG400

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 0027.00 0028.00 0028.01 0028.02 C*-----------------------------------------------C* HOJA DE CALCULO C*-----------------------------------------------C STOCK ADD COMPRA STOCK 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 CAMP0 1 CAMP0 3 CAMP0 5 TAB

CONTENID O 2.00 55.00 0,5 2 , 4.6 , 7

CAMPO CAMP0 2 CAMP0 4 CAMP0 6

CONTENID O 10.00 -20 8.85

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.

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

Lenguaje RPG400

11

Prompt type . . . Level

Sequence number . . . 0028.01

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 0027.00 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05

C*------------------------------------------------C* HOJA DE CALCULO C*------------------------------------------------C CAMP01 ADD CAMP02 AUX01 92 C CAMP05 ADD CAMP06 AUX02 90 C CAMP03 ADD CAMP04 AUX03 94 C* C*

Factor 1 CAMP01 CAMP05 CAMP03

Operacin Factor 2 ADD ADD ADD ADD CAMP02 CAMP06 CAMP04 CAMP05

Campo de resultado AUX01 AUX02 AUX03 CAMP03

RESULTADO 9 9 9 2 0 4 57.00 8 35.00 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.

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

Lenguaje RPG400

12

0026.00 0027.00 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05

C*------------------------------------------------C* HOJA DE CALCULO C*------------------------------------------------C* C* C ADD CAMP05 CAMPO3 C* 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 0027.00 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05

C*------------------------------------------------C* HOJA DE CALCULO C*------------------------------------------------C CAMP02 SUB CAMP05 AUX01 C SUB CAMP06 AUX02 C CAMP03 SUB CAMP05 AUX03 C CAMP03 SUB CAMP06 AUX04 C*

92 112 122 92

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

Lenguaje RPG400

13

Factor 1 CAMP02

Operacin Factor 2 SUB SUB SUB SUB CAMP05 CAMP06 CAMP05 CAMP06

Campo de resultado AUX01 AUX02 AUX03 AUX04

L 9 1 1 1 2 9

D RESULTADO 2 2 2 2 1.50 -8.95 75.00 46.05

CAMP03 CAMP03

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 0027.00 0028.00 0028.01 0028.03 0028.04 0028.05 0028.06

C*------------------------------------------------C* HOJA DE CALCULO C*------------------------------------------------C CAMP02 MULT CAMP05 AUX01 92 C CAMP03 MULT CAMP05 AUX03 110 C CAMP01 MULT CAMP04 AUX04 92H C* C*

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

Lenguaje RPG400

14

Factor 1 CAMP02 CAMP03 CAMP01

Operacin MULT MULT MULT

Factor 2 CAMP05 CAMP05 CAMP04

Campo de resultado AUX01 AUX03 AUX04

L 9 1 1 9

D RESULTADO 2 0 2 5.00 27 -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 . . .

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 0027.00 0028.00 0028.01 0028.03 0028.05 0028.06

C*------------------------------------------------C* HOJA DE CALCULO C*------------------------------------------------C Z-ADDCAMP05 AUX01 92 C Z-ADDCAMP06 CAMPO3 C* C*

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

Lenguaje RPG400

15

Factor 1

Operacin Factor 2 Z-ADD Z-ADD CAMP05 CAMP06

Campo de resultado AUX01 CAMP03

L 9 11

D 2 2

RESULTADO 0,50 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 0027.00 0028.00 0028.01 0028.03 0028.04 0028.05 0028.06 0028.07 C*----------------------------------------------C* HOJA DE CALCULO C*----------------------------------------------C CAMP02 DIV CAMP05 AUX01 C CAMP04 DIV CAMP01 AUX03 C CAMP06 DIV CAMP03 AUX04 C* C* C CAMP04 DIV CAMP01 AUX03

92 114 126

114H

Factor 1 CAMP02 CAMP04 CAMP06

Operacin DIV DIV DIV

Factor 2 CAMP05 CAMP01 CAMP03

Campo de resultado AUX01 AUX03 AUX04

L 9 11 12

D 2 4 6

RESULTADO 20.00 0,3636 0.162727

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

Lenguaje RPG400

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.

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

Lenguaje RPG400

17

0026.00 0027.00 0028.00 0028.01 0028.04 0028.06 0028.08

C*------------------------------------------------C* HOJA DE CALCULO C*------------------------------------------------C XFOOTTAB AUX01 92 C* C* 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 0027.00 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05 0028.06 0028.07 0028.08
0028.09 0028.10 0028.11 0028.12 0028.13 0028.14 0028.15 0028.16 0028.17

C*------------------------------------------------C* HOJA DE CALCULO C*------------------------------------------------C Z-ADD*ZEROS AUX01 C Z-ADD*ZEROS AUX02 C* C CAMP01 ADD CAMP02 AUX01 C AUX01 MULT CAMP03 AUX02 C 05 SQRT AUX01 AUX01 C CAMP02 DIV AUX01 CAMP03 C*
C*PRIMERO HEMOS PUESTO A CERO LOS CAMPOS AUX01 Y AUX02 C*POR MEDIO DE *ZEROS QUE MUEVE CEROS A UN CAMPO NUMERICO C* C*OBSERVE LA SENTENCIA 28.06 VEMOS LA OPERACION SQRT. LA C*EJECUCION DE ESTA LINEA SE ENCUENTRA CONDICIONADA POR UN C*INDICADOR ( EN ESTE CASO 05 ). SI ESTE INDICADOR SE ENCUENTRA C*ACTIVO LA SENTENCIA SE EJECURA, EN CASO CONTRARIO EL RPG/400 C*IGNORARA LO CODIFICADO EN LA LINEA 28.06 C*

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

Lenguaje RPG400

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 0027.00 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05 0028.06 0028.07 0028.08 0028.09 0028.10
0028.11 0028.12 0028.13 0028.14 0028.15 0028.16 0028.17 0028.18 0028.19

C*------------------------------------------------C* HOJA DE CALCULO C*------------------------------------------------C Z-ADD*ZEROS AUX01 112 C Z-ADD*ZEROS TOTNET 112 C Z-ADD*ZEROS TOTIVA 112 C Z-ADD*ZEROS TOTFAC 112 C* C TOTBRU MULT 0.10 AUX01 C TOTBRU SUB AUX01 TOTNET C TOTNET MULT 0.27 TOTIVA C TOTNET ADD TOTIVA TOTFAC C*
C*PRIMERO HEMOS PUESTO A CERO LOS CAMPOS AUX01, TOTNET C*TOTIVA, TOTFAC. C*----------C*RESULTADOS: C*----------C*AUX01 = 115.30 C*TOTNET = 1037.70 C*TOTIVA = 280.18 C*TOTFAC = 1317.88

0028.20 0028.21

C* C*

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

Lenguaje RPG400 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%

19

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*-------------------------------------------------

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

Lenguaje RPG400

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 028.02 0028.03 0028.04 0028.05 0028.06 0028.07 0028.08 0028.09 0028.10 0028.11 0028.12 0028.13 0028.14 0028.15 0028.16 0028.17 0028.18 0028.19 0028.20 0028.21 0028.22 0028.23 0028.24 0028.25 0028.26 0028.29 0028.30 0028.31 0028.32 0028.33 0028.34 0028.35 0028.36 0028.37 0028.38 0028.39 0028.40 C Z-ADD*ZEROS AUX01 112 C Z-ADD*ZEROS AUX02 112 C Z-ADD*ZEROS AUX03 112 C Z-ADD*ZEROS AUX04 112 C* C* PRECC = PRECIO UNITARIO POR ACCION A LA COMPRA C* PRECV = PRECIO UNITARIO POR ACCION A LA VENTA C* CANTC = CANTIDAD COMPRADA C* CANTV = CANTIDAD VENDIDA C* COMIC = COMISION DE COMPRA C* COMIV = COMISION DE VENTA C* TOTCOM = IMPORTE DE COMPRA + COMISIONES C* TOTVEN = IMPORTE DE VENTA - COMISIONES C* TOTGAN = TOTAL GANANCIA ANTES DE IMPUESTOS C* C CANTC MULT PRECC AUX01 C AUX01 MULT COMIC AUX02 C AUX01 ADD AUX02 TOTCOM C* C CANTV MULT PRECV AUX03 C AUX03 MULT COMIV AUX04 C AUX03 SUB AUX04 TOTVEN C* C TOTVEN SUB TOTCOM TOTGAN C* C* C*----------C*RESULTADOS: C*----------C*AUX01 = 5000.00 C*AUX02 = 50.00 C*AUX03 = 6000.00 C*AUX04 = 60.00 C* C*TOTCOM = 5050.00 C*TOTVEN = 5940.00 C*TOTGAN = 890.00 C*
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

Lenguaje RPG400

21

2. OPERACIONES DE MOVIMIENTO Las operaciones de movimiento son: MOVE MOVEL MOVEA MOVE ( Mover ) ( Mover por la izquierda ) ( Mover Matriz ) ( 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 0027.00 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05 Factor 1 C*------------------------------------------------C* OPERACION MOVE C*------------------------------------------------C MOVE 'LIMA' AUX01 4 C MOVE 'LIMA' AUX02 6 C MOVE AUX02 AUX03 6 C* C* Operacin MOVE MOVE Factor 2 'LIMA' 'LIMA' Campo de resultado AUX01 AUX02 L 4 6 D RESULTADO LIMA LIMA

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

Lenguaje RPG400

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 0027.00 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05 Cha------------------------------------------------C* OPERACION MOVEL C*------------------------------------------------C MOVEL'LIMA' AUX01 4 C MOVEL'LIMA' AUX02 6 C MOVEL'LIMA' AUX03 6 C* C*

Factor 1

Operaci n MOVEL MOVEL MOVEL

Factor 2 'LIMA' 'LIMA' 'LIMA'

Campo de resultado AUX01 AUX02 AUX03

L 4 6 6

RESULTADO LIMA LIMA 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'.

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

Lenguaje RPG400 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 0027.00 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05
0028.06 0028.07 0028.08 0028.09

23

C*------------------------------------------------C* OPERACIONES MOVEL Y MOVE C*------------------------------------------------C MOVELCLIEN CLAVE 14 C MOVEL'FC' AUX01 8 C MOVE CPBTE AUX01 C MOVE AUX01 CLAVE C*
C* CLIEN C* FC C* CPBTE C* AUX01 = CAMPO CON EL NUMERO DE CLIENTE DE 6 POSICIONES =CONSTANTE LITERAL COMPROBANTE FACTURA = NUMERO DE COMPROBANTE DE 6 POSICIONES = CAMPO AUXILIAR

0028.11 0028.12 0028.13 0028.14

C* PRIMERA OPERACION MOVEL CLAVE = '001287________' C* SEGUNDA OPERACION MOVEL AUX01 = 'FC______' C* PRIMERA OPERACION MOVE AUX01 = 'FC528734' 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.

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

Lenguaje RPG400 Contenido: Nombre :MATX Un elemento dos caracteres

24

Nombre: MATY Contenido: Un elemento de caracteres

Observemos, tenemos dos matrices sin indexar, de diferente longitud de matriz e igual longitud de elementos 0026.00 0027.00 0028.00 0028.01 0028.02 Factor 1 C*-----------------------------------------------C* OPERACION MOVEA C*-----------------------------------------------C MOVEAMATY MATX C* Operacin MOVEA Factor 2 MATX Campo de resultado MATY L D

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 0027.00 0028.00 0028.01 28.02

C*------------------------------------------------C* OPERACION MOVEA C*------------------------------------------------C MOVEAMATY MATX,3 C*


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

Lenguaje RPG400

25

Factor 1

Operacin MOVEA

Factor 2 MATX

Campo de resultado 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

Operaci n MOVEA

Factor 2 MATX

Campo de resultado 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)
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

Lenguaje RPG400 MLHZO ( Mover zona de la parte inferior a la parte superior) MLLZO ( Mover zona de la parte inferior a la parte inferior)

26

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.

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

Lenguaje RPG400

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 0027.00 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05 C*------------------------------------------------C* OPERACIONES SETON Y SETOF C*------------------------------------------------C SETON 20 C 20 08 SETOF 10 C 20 COR N10 SETON 50 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.

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

Lenguaje RPG400

28

Prompt type . . . Level

Sequence number . . . 0028.03 Res

N01N02N03 Factor 1 Operation Factor 2 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 OR N10 SETON Decimal Length Positions H/N/P HI LO EQ Comment 50

Result

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

Lenguaje RPG400

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.

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

Lenguaje RPG400

30

0026.00 0027.00 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05 0028.06 0028.07 0028.08 0028.09 0028.10 0028.11 0028.12 0028.13 0028.14 0028.15 0028.16 0028.17

C*-----------------------------------------------C* OPERACION CAT C*-----------------------------------------------C 'DIEGO' CAT 'Y JUAN' AUX01 12 C* C*RESULTADO 'DIEGO Y JUAN' C* C MOVEL'AS/400' AUX02 6 C MOVEL'RPG' AUX03 6 C AUX02 CAT AUX03:1 AUX04 9 C* C*RESULTADO 'AS/400 RPG' C* C MOVEL*BLANK AUX02 C MOVEL'JAIME' AUX02 C MOVEL*BLANK AUX05 15 C 'MASTER' CAT AUX02:2 AUX05 C* C*RESULTADO 'MASTER JAIME' 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 0027.00 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05

C*------------------------------------------------C* OPERACION CHECK C*------------------------------------------------C Z-ADD *ZEROS N 20 C MOVEL*BLANK AUX01 6 C MOVE 'MI' AUX01 C '' CHECKAUX01 N C*

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

Lenguaje RPG400

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 0027.00 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05 0028.06

C*------------------------------------------------C* OPERACION CHECK C*------------------------------------------------C* C Z-ADD *ZEROS N 20 C MOVEL'0123' AUX01 4 C MOVEL'$1032.' AUX02 6 C AUX01 CHECKAUX02:2 N 90 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 0027.00 0028.00 0028.01 0028.02 0028.03 0028.05 0028.06 C*------------------------------------------------C* OPERACION CHECKR C*------------------------------------------------C* C Z-ADD *ZEROS N 20 C MOVEL'ABCD ' AUX01 5 C ' ' CHEKR AUX01:2 N 90 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

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

Lenguaje RPG400

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 0027.00 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05 0028.06 0028.07 0028.08 0028.09 0028.10 0028.11 0028.12 0028.13 0028.14 0028.15 0028.16 0028.17 0028.18

C*------------------------------------------------C* OPERACION SCAN C*------------------------------------------------C* C Z-ADD2 X 20 C Z-ADD3 Y 20 C Z-ADD*ZEROS L 20 C Z-ADD*ZEROS N 20 C MOVEL'ESLORA' AUX01 6 C MOVEL'NORESTE' AUX02 6 C MOVEL'OREN' AUX03 4 C ORA SCAN AUX01 L 90 C* C*RESULTADO L=4 INDICADOR 90 ACTIVADO C* C AUX03:Y SCAN AUX02:X N 90 C* C*RESULTADO N=2 INDICADOR 90 ACTIVADO C*AUX03 CONSIDERANDO 3 POSICIONES '0RE' C*AUX02 COMENZANDO EN LA POSICION X=2 C*

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

Lenguaje RPG400 SUBST ( Subserie )

33

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 0027.00 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05 0028.06 0028.07 C*------------------------------------------------C* OPERACION SUBST C*------------------------------------------------C Z-ADD 2 N 20 C MOVE *BLANK AUX02 8 C MOVEL'PIRATA' AUX01 6 C 3 SUBST AUX01:2 AUX02 55 C* C*RESULTADO 'IRA' 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 0027.00 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05 0028.06 0028.07

C*------------------------------------------------C* OPERACION SUBST C*------------------------------------------------C Z-ADD2 N 20 C MOVE *BLANK AUX02 8 C MOVEL'PIRATA' AUX01 6 C 7 SUBSTAUX01:2 AUX02 55 C* C*RESULTADO ERROR 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.

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

Lenguaje RPG400

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 0027.00 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05 0028.06

C*------------------------------------------------C* OPERACION XLATE C*------------------------------------------------C* C MOVE *BLANK AUX02 8 C MOVEL'658 2130'AUX01 8 C' ':'-' XLATE AUX01 AUX02 55 C* C*RESULTADO 658-2130

Queremos convertir las letras minusculas del campo AUX01 a mayusculas y almacenar esta conversion en el campo AUX02. 0026.00 0027.00 0028.00 0028.01 0028.02 0028.06 0028.07 0028.08 0028.09 28.10 0028.11 0028.12 C*------------------------------------------------C* OPERACION XLATE C*------------------------------------------------C* C MOVEL*BLANK AUX02 C MOVEL'abcdej' MI C MOVEL'ABCDEJ' MA C MOVEL'jacobo' AUX01 C MI:MA XLATEAUX01 AUX02 C* C*RESULTADO AUX02 = 'JACoBo' C*

10 6 6 6

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

Lenguaje RPG400

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 0012.02 0012.03 0012.04 0012.05 0012.06 0026.00 0027.00 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05 0028.06 0028.07 0028.08 0028.09 0028.10 0028.11 0028.12 0028.13 0028.14 0028.15 0028.16 0028.17 0028.18 I*------------------------------------------------I* DEFINICION DE CONSTANTES LITERALES I*------------------------------------------------I 'abcdefghijklmnopqrs -C MI I 'tuvwxyz' I 'ABCDEFGHIJKLMNOPQRS -C MA I 'TUVWXYZ' I* C*------------------------------------------------C*CONVERSION DE MAYUSCULAS A MINUSCULAS Y VICEVERSA C*------------------------------------------------C MOVEL*BLANKS AUX04 10 C MOVEL*BLANKS AUX05 10 C MOVEL*BLANKS AUX06 10 C* C MOVEL'BsaS' AUX01 4 C MOVEL'MIcHiGaN'AUX02 8 C MOVEL'ViGo' AUX03 4 C* C MI:MA XLATEAUX01 AUX04 C MA:MI XLATEAUX02 AUX05 C MI:MA XLATEAUX03 AUX06 C* C*RESULTADO AUX04 = 'BSAS' C*RESULTADO AUX05 = 'michigan' C*RESULTADO AUX06 = 'VIGO' C*

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

Lenguaje RPG400

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 0028.11 0028.12 0028.13 0028.14 C* C AUX01LOKUPEST C* C AUX02LOKUPEST,X C* 47 26

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

Lenguaje RPG400 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.

37

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 0028.01 0028.02 0028.03 0028.04 0028.05 C*------------------------------------------------C*OPERACION MOVEA C*------------------------------------------------C* C MOVEAMATB MATC C*

Antes de MOVEA MATB 56 84 90 16 22 48

MATC 10 11 12 13 14 15

Despues de MOVEA MATB


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

Lenguaje RPG400 56 84 90 16 22 48

38

MATC 56 84 90 16 22 48

0028.00 0028.01 0028.02 0028.03 0028.04 0028.05

C*------------------------------------------------C*OPERACION MOVEA C*------------------------------------------------C* C MOVEAMATB MATC,4 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

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

Lenguaje RPG400

39

MATC 10 11 12 56 84 90

0028.00 0028.01 0028.02 0028.03 0028.04 0028.05

C*------------------------------------------------C*OPERACION MOVEA C*------------------------------------------------C Z-ADD2 X 20 C MOVEAMATB,X MATC C*

Antes de MOVEA MATB 56 84 AUX01 100B

90

16

22

48

Despues de MOVEA MATB 56 84 AUX01 5684

90

16

22

48

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

Lenguaje RPG400

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 0012.02 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05 E*------------------------------------------------E MATB 8 1 A C*------------------------------------------------C*OPERACION SORTA C*------------------------------------------------C Z-ADD2 X 20 C SORTAMATB C*

RESULTADO ABCDEFH

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

Lenguaje RPG400

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 GT LT EQ NE GE LE

SIGNIFICADO El factor 1 es mayor que el factor 2 El factor 1 es menor que el factor 2 El factor 1 es igual al factor 2 El factor 1 no es igual que el factor 2 El factor 1 es mayor o igual que el factor 2 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.

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

Lenguaje RPG400

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 Mayor Menor Igual

Columna 54 55 56 57 58 59

Condicin El factor 1 es mayor que el factor 2 El factor 1 es menor que el factor 2 El factor 1 es igual al factor 2

0028.00 0028.01 0028.02 0028.03 0028.04 0028.05 0028.06 0028.07 0028.08 0028.09 0028.10 0028.11 0028.12 28.11 0028.08 0028.09

C*------------------------------------------------C*OPERACION COMPARACION COMP C*------------------------------------------------C Z-ADD23 AUX01 60 C Z-ADD56 AUX02 60 C AUX01 COMP AUX02 505152 C* C*SE ACTIVARA EL INDICADOR 51 ( MENOR ) C*FACTOR 1 MENOR QUE EL FACTOR 2 C* C* C AUX02 COMP AUX01 707172 C* C*SE ACTIVARA EL INDICADOR 70 ( MAYOR ) C*FACTOR 1 MENOR QUE EL FACTOR 2 C*

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

Lenguaje RPG400

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

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

Lenguaje RPG400

44

0028.19 0028.20 0028.21 0028.22 0028.23

C*SE EJECUTARA LA SENTENCIA 28.05 SIEMPRE Y CUANDO C*EL INDICADOR DE RESULTADO 80 ESTE ACTIVADO, C*NO EJECUTANDOSE LAS OPERACIONES CONDICIONADAS C*POR LOS RESTANTES INDICADORES 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 0010.00 0012.00 0012.01 0012.02 0012.03 0012.04 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05 0028.06 0028.07 0028.08 0028.09 0028.10 0028.11 0028.12 0028.15 F*------------------------------------------------FSTOCK IF E K DISK FLISTA O E 60 PRINTER E*------------------------------------------------I 'NO COMPRAR -C LEY01 I 'COMPRAR -C LEY02 I 'CRITICO COMPRAR URG. -C LEY03 C*------------------------------------------------C*OPERACION COMPARACION IFxx C*------------------------------------------------C MOVEL*BLANKS LEYEN 20 C STOCK IFGT PUNTOR C MOVELLEY01 LEYEN C ENDIF C STOCK IFEQ PUNTOR C MOVELLEY02 LEYEN C ENDIF C STOCK IFLT PUNTOR C MOVELLEY03 LEYEN C ENDIF C*

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

Lenguaje RPG400

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 0028.03 0028.04 0028.05 0028.06 0028.07 0028.08 0028.09 0028.10 0028.11 0028.12 0028.13 0028.14 0028.15 C*------------------------------------------------C MOVEL*BLANKS LEYEN 20 C STOCK IFGT PUNTOR C MOVELLEY01 LEYEN C ELSE C STOCK IFEQ PUNTOR C MOVELLEY02 LEYEN C ELSE C STOCK IFEQ PUNTOR C MOVELLEY03 LEYEN C ENDIF C ENDIF C ENDIF 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.

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

Lenguaje RPG400 En este punto el lector entender que podramos mejorar nuestra programacin escribiendo las sentencias de la siguiente manera optimizando los IFxx anidados.

46

0028.02 0028.03 0028.04 0028.05 0028.06 0028.07 0028.08 0028.09 0028.11 0028.12 0028.13 0028.15 ANDxx (Y)

C*------------------------------------------------C MOVEL*BLANKS LEYEN 20 C STOCK IFGT PUNTOR C MOVELLEY01 LEYEN C ELSE C STOCK IFEQ PUNTOR C MOVELLEY02 LEYEN C ELSE C MOVELLEY03 LEYEN C ENDIF C ENDIF C*

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 0002.00 0003.00 0003.01 0005.00 0006.00 0007.00 0008.00 0009.00 0010.00 0012.00 0012.01 0012.02 0012.03 0012.04 0028.00 0028.01 0028.02 0028.03 H*------------------------------------------------H* SISTEMA EJEMPLOS RPG/400 TUTORIAL H* MICHIGAN . EEUU H* TIERRA DE VOLVERINES H* PROGRAMA: PROG16 H* FECHA : 2002 F*------------------------------------------------F* HOJA FILE F*------------------------------------------------FSTOCK IF E K DISK FLISTA O E 60 PRINTER E*------------------------------------------------I 'ARGENTINA BUENOS AIR-C LEY01 I 'ES' I 'MICHIGAN EEUU -C LEY02 C*------------------------------------------------C*OPERACION COMPARACION IFXX, ANDXX C*------------------------------------------------C Z-ADD 3567 AUX01 82
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

Lenguaje RPG400 0028.04 0028.05 0028.06 0028.07 0028.08 0028.09 0028.14 0028.17 C C AUX01 C AUX02 C C C C C* Z-ADD 2047 AUX02 82 IFGE 3000 ANDGT2000 MOVELLEY01 LEYEN 30 ELSE MOVELLEY02 LEYEN ENDIF

47

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 0028.03 0028.04 0028.05 0028.06 0028.07 0028.08 0028.09 0028.10 0028.11 0028.17 0028.18 0028.19 0028.20 0028.21 ORxx (O )

C*------------------------------------------------C Z-ADD 32 ARTIS 60 C Z-ADD 55 VENDS 60 C Z-ADD 10 ZONAS 60 C ARTIC IFEQ ARTIS C VENDE ANDEQVENDS C ZONA ANDEQZONAS C EXSR PROCE C EXSR PRIN1 C ENDIF C* C*SE PROCESARAN LAS SENTENCIAS DENTRO DEL C*GRUPO IFXX SIEMPRE Y CUANDO EL CAMPO C*ARTIC=32 Y VENDE=55 Y ZONA=10 C*

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).

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

Lenguaje RPG400

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 028.14 028.15 028.16 028.17 028.18 C ARTIC C VENDE C ZONA C C C IFGE ARTIS ORLT VENDS ORGT ZONAS EXSR PROCE EXSR PRIN1 ENDIF

Tambin podemos combinar en una operacin IFxx, DOUxx, DOWxx, las operaciones ANDxx y Orxx. Observe el siguiente ejemplo:

028.12 028.13 028.14 028.15 028.16 028.17 028.18

C* C AUX01 IFGE 50 C VENDE ORLT VENDS C AUX02 ANDLT 110 C EXSR PROCE C EXSR PRIN1 C ENDIF

CASxx ( Llamada condicional a una subrutina)

0028.00 0028.01 0028.02 0028.03 0028.04 0028.05

C*------------------------------------------------C*OPERACION CASXX C*------------------------------------------------C Z-ADD25 AUX01 92 C Z-ADD56 AUX02 92 C Z-ADD34 AUX03 92

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

Lenguaje RPG400

49

0028.06 0028.07 0028.08 0028.09 0028.10 0028.11

C C C C C* C*

AUX01 AUX02 AUX03

CASGE25 CASEQ56 CASLE34 ENDCS

SUBR01 SUBR02 SUBR03

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 0028.01 0028.02 0028.05 0028.06 0028.07 0028.08 0028.09 0028.10 0028.11 0028.12 C*------------------------------------------------C*OPERACION CASXX C*------------------------------------------------C* C VALOC CASGTVALORA CALC01 C AUX02 CASEQVALORA CALC02 C AUX03 CASLEVALORA CALC03 C ENDCS C* C* 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,
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

Lenguaje RPG400 un literal, un nombre de tabla, una estructura de datos o un elemento de matriz. 0063.00 0064.00 0065.00 0066.00 0066.01 0066.02 0066.03 0066.04 0066.05 0066.06 0066.07 C*------------------------------------------------C* RUTINA DE CALCULO C*------------------------------------------------C CALCU BEGSR C Z-ADD1 TASAP 86 C Z-ADDCANPER N 60 C N DOUEQ0 C TASA MULT TASAP TASAP C SUB 1 N C ENDDO C ENDSR

50

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...
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

Lenguaje RPG400

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 fijo llamado MAEOP

DDS ARCHIVO MAEOP (MAESTRO DE OPERACIONES) FMT A* .....A*. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 *************** Beginning of data ******************************* 0000.10 A* ARCHIVO DE OPERACIONES A PLAZO FIJO 00.20 A* SISTEMA GENERAL DEL BANCO BANKROBO 00.21 A* PRESIDENTE FERNANDO EN LA RUA NOS DEJASTE A TODOS 00.22 A* FECHA 2001 AO DE CORRALITO ARGENTINO 0000.22 A* AUTOR DANIEL HUGO ENRIQUEZ LEIVAS 000.22.03 A* -------------------------------------------------------------------------------0000.23 A* ARCHIVO MAEOPE 0000.24 A*--------------------------------------------------------------------------------0000.40 A R ROPER 0000.41 A CODOPE 10 0 TEXT('APELLIDO Y NOMBRE') 0000.42 A FECOPE 8 0 TEXT('FECHA OPERACION') 0000.43 A CPDCLI 6 0 TEXT('CODIGO DE CLIENTE') 0000.44 A AYN 40 TEXT('APELLIDO Y NOMBRE') 0000.45 A CAPITA 12 2 TEXT('CAPITAL') 0000.46 A TASA 6 4 TEXT('TASA DE INTERES') 0000.47 A CANPER 3 0 TEXT('CANT.DE PERIODOS') 0000.48 A K CODOPE 0000.90 A Observe la definicin de registro (R) llamado ROPER, luego a continuacin definimos los campos del archivo con sus respectivas longitudes y si son numricos con la cantidad de decimales correspondientes. Este archivo tiene una clave que es el campo CODOPE definida por una 'K'.

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

Lenguaje RPG400

52

A continuacin podr observar un printer file que utilizaremos para generar nuestro listado con las operaciones a plazo fijo.

PRINTER FILE

LISTA

FMT DP .....AAN01N02N03T.Name++++++RLen++TDpBLinPosFunctions++ *************** Beginning of data ********************* 0000.01 A REF(MAEOPE) 0000.03 A R TITU 0000.04 A SKIPB(001) 0000.06 A LIN01 132 1 0000.07 A SPACEA(1) 0000.08 A TIT01 13 1 0000.09 A TIT02 17 +5 0000.10 A TIT03 17 +5 0000.11 A TIT04 7 +5 0000.12 A TIT05 4 +5 0000.13 A TIT06 8 +5 0000.14 A TIT07 9 +5 0000.15 A SPACEA(1) 0000.16 A LIN02 132 1 0000.17 A SPACEA(1) 0000.18 A R DETA 0000.19 A CODOPE R 1 0000.20 A CPDCLI R +5 0000.21 A AYN R +5 0000.22 A CAPITA R +5 EDTCDE(1) 0000.23 A TASA R +5 EDTCDE(1) 0000.24 A CANPER R +5 EDTCDE(1) 0001.00 A CAPIT 11 2 +5 EDTCDE(1) 0002.00 A SPACEA(1) ****************** End of data *******************

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

Lenguaje RPG400

53

PROGRAMA RPG/400

0001.00 0002.00 0002.01 0003.00 0003.01 0004.00 0005.00 0006.00 0009.00 0010.00 0012.00 0012.01 0012.02 0012.03 0012.04 0012.05 0012.06 0012.07 0012.08 0028.00 0028.01 0028.02 0028.03 0028.04 0028.05 0028.06 0028.07 0028.08 0028.09 0028.10 0028.11 0028.12 0028.13 0028.14 0028.15 0028.16 0028.17 0028.18 0028.19 0028.20 0028.21 0028.22 0028.23 0028.24

H*------------------------------------------------H* SISTEMA : SISTEMA GENERAL DEL BANCO H* BANCO : BANKROBO H* PRESID. : FERNANDO EN LA RUA ( NOS DEJASTE ) H* : CALCULO DE OPERACIONES A PLAZO FIJO H* AUTOR : DANIEL HUGO ENRIQUEZ LEIVAS H* PROGRAMA: PROG30 H* FECHA : 2002 F*------------------------------------------------FMAEOPE IF E K DISK FLISTA O E 60 PRINTER I*------------------------------------------------I 'COD.OPERACION' C TIT1 I 'CODIGO DE CLIENTE' C TIT2 I 'APELLIDO Y NOMBRE' C TIT3 I 'CAPITAL' C TIT4 I 'TASA' C TIT5 I 'PERIODOS' C TIT6 I 'CAP.TOTAL' C TIT7 C*------------------------------------------------C*OPERACION DOUXX C*------------------------------------------------C MOVELTIT1 TIT01 C MOVELTIT2 TIT02 C MOVELTIT3 TIT03 C MOVELTIT4 TIT04 C MOVELTIT5 TIT05 C MOVELTIT6 TIT06 C MOVELTIT7 TIT07 C MOVE *ALL'-' LIN01 C MOVE *ALL'-' LIN02 C WRITETITU C* C *LOVAL SETLLMAEOPE 90 C READ ROPER 90 C *IN90 DOWEQ*OFF C EXSR CALCU C CAPITA MULT TASAP CAPIT C EXSR PRI01 C READ ROPER 90 C *IN90 IFEQ *ON C LEAVE C ENDIF C ENDDO
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

Lenguaje RPG400 0028.25 C* 0028.26 C MOVE *ON *INLR 0028.27 C* 0053.00 C*------------------------------------------------0054.00 C* RUTINA DE IMPRESION 0055.00 C*------------------------------------------------0056.00 C PRI01 BEGSR 0056.01 C *IN60 IFEQ *ON 0058.00 C WRITETITU 0059.00 C MOVE *OFF *IN60 0060.00 C ENDIF 0061.00 C WRITEDETA 0062.00 C ENDSR 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 DOWNE0 0066.04 C TASA MULT TASAP TASAP 0066.05 C SUB 1 N 0066.06 C ENDDO 0066.07 C ENDSR ****************** End of data *******************

54

En la hoja - F - tenemos definidos el maestro de operaciones a plazo fijo MAEOPE y el printer file LISTA . Al comenzar el ciclo logico del RPG abrir la base de datos y el printer file. Luego en la hoja - I encontramos la declaracin de constantes que sern utilizadas en los ttulos del reporte que se imprimirn por primera vez por medio de la sentencia 28.12 que imprimir el formato de registro - TITU - de nuestro printer file. A continuacin nos situamos en el comienzo del archivo por medio de la sentencia *LOVAL SETLL y realizamos Nuestra primer lectura por medio de la operacin READ la que tiene asignado el indicador 90 por lectura de fin de archivo. Si el indicador 90 no esta activo el control del programa ingresa dentro del DOWxx sentencia 28.16 he inmediatamente despus pasa a bifurcar a la rutina de calculo y al regresar realiza las operaciones aritmticas de la sentencia 28.18 y en la 28.19 bifurca hacia la rutina de impresin de los datos correspondiente ha ese registro. Luego al regresar realiza la lectura de un nuevo registro y si el indicador 90 esta activo abandona el DOWxx por medio de la operacin LEAVE y si no lo estuviera se repetir las operaciones contenidas en el grupo DOWxx hasta alcanzar el final de archivo.

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

Lenguaje RPG400

55

Ahora supongamos que estamos leyendo una base de datos que contiene los registros de ventas de los ltimos 5 aos y debemos seleccionar las ventas del articulo 47 en todas las zonas de venta y para el vendedor 10.

0028.16 0028.17 0028.18 0028.19 0028.20 0028.21 0028.22 0028.23 0028.24 0028.25

C C C C C C C C C C

*IN90 ARTIC VEND

*IN90

DOWEQ*OFF IFEQ 47 ANDEQ10 EXSR PROCE ENDIF READ RVENT IFEQ *ON LEAVE ENDIF ENDDO

90

Este operacin DOWxx se ejecutara hasta que el indicador 90 que estamos utilizando para determinar el final del archivo VENTAS no este activado. En las paginas siguiente cuando abordemos el uso de archivos completaremos este ejemplo con las operaciones de lectura.

WHxx ( Seleccionar cuando sea verdadero)

Esta operacin en el lenguaje RPG determina donde pasara el control del programa segn el grupo de seleccin. La operacin WHxx debe comenzar siempre con una sentencia SELECT y finalizar con una sentencia ENDSL.

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

Lenguaje RPG400

56

0063.00 0064.00 0065.00 0066.00 0066.01 0066.02 0066.03 0066.04 0066.05 0066.06 0066.07 0066.08 0066.09 0066.10

C*------------------------------------------------C*RUTINA OPERACION WHXX - SELEC - ENDSL C*------------------------------------------------C BIFU BEGSR C SELEC C AUX01 WHEQ 10 C EXSR IMPRE C AUX02 WHNE 'E' C EXSR PROCE C EXSR IMPRI C *IN40 WHEQ *ON C EXSR PANTA C ENDSL C ENDSR

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

Lenguaje RPG400

57

9. Operaciones de Subrutina Una subrutina es un conjunto de sentencias especificadas en la hoja de calculo dentro de un programa RPG que puede procesarse varias veces. Una subrutina puede ser llamada desde cualquier punto de la hoja de calculo. Las sentencias relacionadas con subrutinas son: BEGSR ( Comenzar una subrutina ) ENDSR ( Finalizar una subrutina ) EXSR ( Ejecutar una subrutina ) CASxx ( Llamada condicional a una subrutina )

BEGSR ( Comenzar una subrutina ) Esta operacin determina el comienzo de una subrutina del RPG/400. En el factor 1 escribiremos el nombre de esta subrutina. 0053.00 0054.00 0055.00 0056.00 0056.01 0058.00 0059.00 0060.00 0061.00 0062.00 0063.00 C*------------------------------------------------C* RUTINA DE IMPRESION C*------------------------------------------------C PRI01 BEGSR C *IN60 IFEQ *ON C WRITETITU C MOVE *OFF *IN60 C ENDIF C WRITEDETA C ENDSR C*-------------------------------------------------

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

Lenguaje RPG400

58

En este ejemplo en nombre de la subrutina es PRI01 y en ella estamos ejecutando la impresin de un listado. El RPG ejecutara las sentencias comprendidas en la subrutina y luego volver al flujo principal del programa, a la sentencia inmediatamente posterior a la que bifurco en la subrutina. Toda subrutina comienza con la operacin BEGSR y finaliza con una operacin ENDSR. Usted ya estar familiarizado con el ejemplo siguiente, observe en el mismo como el flujo principal del programa bifurca a la rutina CALCU ( rutina de calculo) y PRI01 (rutina de impresin) por medio de la operacin EXSR. Luego cada subrutina comienza con una operacin BEGSR y finaliza con una operacin ENDSR. Cuando bifurque a ejecutar la rutina CALCU al finalizar las operaciones comprendidas en ella, volver al flujo principal y ejecutara la sentencia MULT donde multiplicamos los campos CAPITA y TASAP, luego bifurcara a otra subrutina que en este ejemplo es PRI01.

0028.14 0028.15 0028.16 0028.17 0028.18 0028.19 0028.20 0028.21 0028.22 0028.23 0028.24 0028.25 0028.26 28.27

C *LOVAL C C *IN90 C C CAPITA C C C *IN90 C C C C* C C*

SETLLMAEOPE 90 READ ROPER 90 DOWEQ*OFF EXSR CALCU MULT TASAP CAPIT EXSR PRI01 READ ROPER 90 IFEQ *ON LEAVE ENDIF ENDDO MOVE *ON *INLR

0053.00 0054.00 0055.00 0056.00 0056.01 0058.00 0059.00 0060.00

C*------------------------------------------------C* RUTINA DE IMPRESION C*------------------------------------------------C PRI01 BEGSR C *IN60 IFEQ *ON C WRITETITU C MOVE *OFF *IN60 C ENDIF
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

Lenguaje RPG400 0061.00 C WRITEDETA 0062.00 C ENDSR 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 DOWNE0 0066.04 C TASA MULT TASAP TASAP 0066.05 C SUB 1 N 0066.06 C ENDDO 0066.07 C ENDSR ****************** End of data********************** CASxx (Llamada condicional a una subrutina)

59

Esta operacin nos permite seleccionar condicionalmente una subrutina para su procesamiento. La seleccin de la subrutina se base en la relacin entre el factor 1 y el factor 2 segn la condicin xx. Toda operacin CASxx deber terminar con una operacin ENDCS. En este ejemplo observamos las diferentes comparaciones de la operacin CASxx y adems la sentencia 28.06 esta condicionada su ejecucin si se encuentran activos los indicadores 25 y 36.

0028.16 0028.17 0028.18 0028.19 0028.20 0028.21 0028.22 0028.23

C* C* C STOCK C 25 36 COMPRA C STOCK C C* C*

CASLTVENTA CASEQAUX01 CASGEVENTA ENDCS

SUBR01 SUBR02 CALCU

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

Lenguaje RPG400

60

10. PROCESO DE BASES DE DATOS En RPG/400 como en otras versiones de RPG definimos en la hoja 'F' ( file ) archivos o Bases de datos de definicin interna o externa, pantallas y printer file ( archivos de impresin ) que utilizaremos en nuestros programas. Esta definicin puede ser tanto interna como externa. Comenzaremos viendo como codificamos en la hoja 'F' los archivos a utilizar que poseen definiciones externas. Hoja 'F' 0006.00 0007.00 0008.00 0009.00 0010.00 0011.00 0012.00 0013.00 F*------------------------------------------------F* HOJA FILE DESCRIPTION F*------------------------------------------------FCLIENT IF E K DISK FLISTA O E 60 PRINTER C*------------------------------------------------C* HOJA DE CALCULO C*------------------------------------------------Sequence number . . . 0009.00

Prompt type . . . FX

File File End of File Filename Type Designation File Sequence Format CLIENT I F E Mode of Record Processing Address Type Device Continuation K DISK File File Exit Entry Addition Condition

Columnas 7 a 14 se coloca el nombre de la base de datos (CLIENT). Columna 15 una 'I' ( Input ) para aquellas bases de datos que solamente se utilizaran como entradas Columna 31 una 'K' que determina que la base de datos tiene una clave. Columnas 40 a 46 el dispositivo donde se encuentra la base de datos, en este caso DISK ( disco ).

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

Lenguaje RPG400

61

Hoja 'F' Prompt type . . . F Sequence number . . . 0010.00 File Sequence E Record Address Type

File File End of Filename Type Designation LISTA O Record Mode of Length of Length Processing Key Field

File

Forma

File Overflow Key Field Extn Organization Indicator Start Loc Code Device 60 PRINTER File File Continuation Exit Entry Addition Condition Ahora definimos en la hoja 'F' un printer file o sea un archivo de impresin llamado LISTA observemos la letra ' O' que le indica al RPG/400 que es un archivo de salida en el dispositivo impresora y cuya definicin es externa y la codificacin de un indicador ( de 01 a 99 ) que se activara cuando se produzca el overflow en el formulario de impresin.

0001.00 0002.00 0003.00 0004.00 0005.00 0006.00 0007.00 0008.00 0009.00 0010.00 0011.00

H*------------------------------------------------H* SISTEMA : EJEMPLOS RPG/400 TUTORIAL I H* AUTOR : DANIEL HUGO ENRIQUEZ LEIVAS H* PROGRAMA: PROG01 H* FECHA : 2002 F*------------------------------------------------F* HOJA FILE DESCRIPTION F*------------------------------------------------FCLIENT IF E K DISK FLISTA O E 60 PRINTER C*-------------------------------------------------

Nuestro programa leera el archivo CLIENT y por cada registro ledo verificara que el crdito actual no sea mayor al limite de crdito otorgado, si es mayor el control del programa bifurca a la subrutina de impresin, la que se encargara de imprimir el reporte LISTA segn el

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

Lenguaje RPG400

62

formato definido en este printer file. Observe en la sentencia del printer file en la hoja 'F' el uso del indicador 60 ( podra ser cualquier indicador del 01 al 99 ) este indicador le permite identificar al RPG/400 el overflow de pgina (desbordamiento de pagina) cuando esta activado el mismo.

Hoja 'C' 0011.00 0012.00 0013.00 0014.00 0015.00 0016.00 0017.00 0018.00 0019.00 0020.00 0021.00 0022.00 0023.00 0024.00 0025.00 0026.00 0027.00 0028.00 0029.00 0030.00 0031.00 0032.00 0033.00 0033.01 0034.00 0035.00 0036.00 C*------------------------------------------------C* HOJA DE CALCULO C*------------------------------------------------C *LOVAL SETLLCLIENT 90 C WRITETITU C READ RCLI 90 C *IN90 DOWEQ*OFF C CREDITIFGT LIMCRE C EXSR IMPR01 C ENDIF C READ RCLI 90 C *IN90 IFEQ *ON C LEAVE C ENDIF C ENDDO C MOVE '1' *INLR C WRITEFIN C*------------------------------------------------C* RUTINA DE IMPRESION C*------------------------------------------------C IMPR01 BEGSR C *IN60 IFEQ *ON C WRITETITU C MOVE '0' *IN60 C ENDIF C WRITEDETA C ENDSR

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

Lenguaje RPG400

63

En el siguiente ejemplo hemos adicionado al ejemplo anterior un archivo de salida llamado CREDEX. Hoja 'F' Columns . . . : 1 71 Edit V40LBDHE/QRPGSRC SEU==> PROG02 FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 *************** Beginning ofdata********************* 0001.00 H*------------------------------------------------0002.00 H* SISTEMA : EJEMPLOS RPG/400 TUTORIAL I 0003.00 H* : BUENOS AIRES ARGENTINA 0004.00 H* AUTOR : DANIEL HUGO ENRIQUEZ LEIVAS 0005.00 H* PROGRAMA: PROG02 0006.00 H* FECHA : 2002 0007.00 F*------------------------------------------------0008.00 F* HOJA FILE 0009.00 F*------------------------------------------------0010.00 FCLIENT IF E K DISK 0011.00 FLISTA O E 60 PRINTER 0012.00 FCREDEX O E DISK 0013.00 C*------------------------------------------------0014.00 C* HOJA DE CALCULO 0015.00 C*------------------------------------------------0016.00 C *LOVAL SETLLCLIENT 90 (C) COPYRIGHT IBM CORP. 1981, 2000.

Hoja 'C' 0013.00 0014.00 0015.00 0016.00 0017.00 0018.00 0019.00 0020.00 0021.00 0022.00 0023.00 0024.00 0025.00 0020.00 0021.00 0022.00 C*------------------------------------------------C* HOJA DE CALCULO C*------------------------------------------------C *LOVALSETLLCLIENT 90 C WRITETITU C READ RCLI 90 C *IN90 DOWEQ*OFF C CREDIT IFGT LIMCRE C EXSR IMPR01 C EXSR GRABA C ENDIF C READ RCLI 90 C *IN90 IFEQ *ON C CREDITIFGT LIMCRE C EXSR IMPR01 C EXSR GRABA
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

Lenguaje RPG400 0023.00 C ENDIF 0024.00 C READ RCLI 90 0025.00 C *IN90 IFEQ *ON 0026.00 C LEAVE 0027.00 C ENDIF 0028.00 C ENDDO 0029.00 C MOVE '1' *INLR 0030.00 C WRITEFIN 0031.00 C*------------------------------------------------0032.00 C* RUTINA DE IMPRESION 0033.00 C*------------------------------------------------0034.00 C IMPR01 BEGSR 0035.00 C *IN60 IFEQ *ON 0036.00 C WRITETITU 0037.00 C MOVE '0' *IN60 0038.00 C ENDIF 0039.00 C WRITEDETA 0040.00 C ENDSR 0041.00 C*------------------------------------------------0042.00 C* RUTINA DE GRABACION 0043.00 C*------------------------------------------------0044.00 C GRABA BEGSR 0045.00 C WRITERCREX 0046.00 C ENDSR ***************** End of data************************

64

Ahora hemos agregado a nuestro programa una pantalla, observe el archivo de definicin externa PANTA, lleva una C ( combinado ) en la columna 15 , 'F' (Full procedure) en la culumna 16 , cuya definicin es externa a travs de una DDS que define la estructura de campos de entrada, salida y constantes y su dispositivo es una Work station ( WORKSTN). Le pediremos a travs de la pantalla el rango de clientes a procesar en nuestro programa. 0009.00 0009.01 0010.00 0011.00 0012.00 0013.00 F*------------------------------------------------FPANTA CF E WORKSTN FCLIENT IF E K DISK FLISTA O E 60 PRINTER FCREDEX O E DISK C*------------------------------------------------Sequence number . . . 0010.00 File Sequence E

Prompt type . . . FX

File File End of Filename Type Designation PANTA C F Mode of Record

File

Format

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

Lenguaje RPG400 Processing Address Type Device WORKSTN File File Entry Addition Condition Continuation

65

Exit

Sistemas S.A.

20/02/2002

Clientes excedidos del lmite de Crdito Cliente desde: 00001 Cliente hasta: 08000

Mdto 3 = Exit

0016.01 0016.02 0016.03 0016.04 0016.05 0017.00 0018.00 0019.00

C C C C C C C C

DOWNE*ON EXFMTPAN01 *INKC IFEQ *ON LEAVE ENDIF *LOVAL SETLLCLIENT WRITETITU READ RCLI

*INKC

90 90

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

Lenguaje RPG400

66

Apertura y cierre de archivos durante las operaciones de calculo En muchas oportunidades los programas utilizan ciertas bases de datos bajo determinadas condiciones, es decir que no es necesario tener dichas bases de datos abiertas en forma permanente. En el RPG/400 podemos realizar la apertura y cierre de base de datos a voluntad, eludiendo la apertura por omisin en la hoja 'F'. Columns . . . : 1 71 Edit V40LBDHE/QRPGSRC SEU==> PROG03 FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 *************** Beginning of data*************** 0001.00 H*------------------------------------------------0002.00 H*EJEMPLOS RPG/400 TUTORIAL I 0003.00 H*BUENOS AIRES ARGENTINA 0004.00 H*DANIEL HUGO ENRIQUEZ LEIVAS 0005.00 H*PROGRAMA: PROG04 0006.00 H*FECHA : 2002 0007.00 F*------------------------------------------------0008.00 F* HOJA FILE 0009.00 F*------------------------------------------------0010.00 FPANTA CF E WORKSTN 0011.00 FCLIENT I F E K DISK UC 0012.00 FLISTA O E 60 PRINTER 0013.00 FCREDEX O E DISK 0014.00 C*------------------------------------------------0015.00 C* HOJA DE CALCULO 0016.00 C*-------------------------------------------------

Vemos en el programa en la hoja 'F', que la base de datos CLIENT tendra su apertura y cierre durante el calculo indicada por la codificacin en las columnas 71 y 72 de 'UC'.

Prompt type . . . FX

Sequence number . . . 0011.00

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

Lenguaje RPG400

67

File File End of Filename Type Designation File CLIENT I F Mode of Record Processing Address Type Device K DISK File File Exit Entry Addition Condition UC

File Sequence Format E Continuation

Si necesitramos actualizar un archivo, por ejemplo CLIENT (maestro de clientes) codificaramos en la hoja 'F' el archivo de la siguiente manera. FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 *************** Beginning of data********************* 0001.00 H*------------------------------------------------0002.00 H* SISTEMA : EJEMPLOS RPG/400 TUTORIAL I 0003.00 H* : BUENOS AIRES ARGENTINA 0004.00 H* AUTOR : DANIEL HUGO ENRIQUEZ LEIVAS 0005.00 H* PROGRAMA: PROG05 0006.00 H* FECHA : 2002 0007.00 F*------------------------------------------------0008.00 F* HOJA FILE 0009.00 F*------------------------------------------------0010.00 FPANTA CF E WORKSTN 0011.00 FCLIENT UF E K DISK A 0012.00 FLISTA O E 60 PRINTER 0013.00 FCREDEXO E DISK 0014.00 C*------------------------------------------------0015.00 C* HOJA DE CALCULO 0016.00 C*-------------------------------------------------

Columna 15 'U' por update y en la columna 66 una 'A' adicin, esto significa que podemos modificar un registro existente o borrar y adicionar aquellos que sean necesarios. Si necesitaramos grabar registros en una base de datos por numero relativo de registro, la codificacin en la hoja 'F' seria de la siguiente forma:

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

Lenguaje RPG400

68

FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 0009.00 F*------------------------------------------------0010.00 FPANTA CF E WORKSTN 0011.00 FF0002 O E K DISK KRECNO RRN 0012.00 FLISTA O E 60 PRINTER 0013.00 FCREDEXO E DISK 0014.00 C*------------------------------------------------0015.00 C* HOJA DE CALCULO 0016.00 C*------------------------------------------------0016.01 C *INKC DOWNE*ON 0016.02 C EXFMTPAN01

Vemos que la base de datos F0002 se ha abierto de salida y se ha especificado en la columna 53 una 'K' continuacin de especificaciones, la palabra clave RECNO indicando que se procesara por numero relativo de registro y a continuacin el nombre de campo que contendra el numero relativo de registro en este caso RRN. En la hoja de calculo deber establecerse el valor de RRN o sea del numero relativo de registro a procesar. Para poder efectuar esta adicin aleatoria en una base de datos, esta deber haber sido inicializada con el comando INZPFM (CL) con la cantidad de registros necesaria.

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

Lenguaje RPG400

69

0001.00 0002.00 0004.00 0005.00 0006.00 0009.00 0010.00 0010.01 0012.00 0012.01 0012.02

H.------------------------------------------------H* SISTEMA : SISTEMA GENERAL DEL BANCO H* AUTOR : DANIEL HUGO ENRIQUEZ LEIVAS H* PROGRAMA: PROG32 H* FECHA : 2001 F*------------------------------------------------FPRG32FM CF E WORKSTN F NRR1 KSFILE RPRG01 FGJHL1 IF E K DISK FPRG32PF O E 60 PRINTER I*-------------------------------------------------

Obsrvese la codificacin del archivo WORKSTN donde en la lnea de continuacin definimos el campo RRN1 que contendr el numero relativo de registro para el control del subfile del archivo de pantalla PRG32FM , formato de registro RPRG01.

Definiciones internas Hoja 'F' 0007.00 0008.00 0009.00 0010.00 0011.00 0012.00 0012.01 F*------------------------------------------------F* HOJA FILE F*------------------------------------------------FGJHX01 IF F 256 6AI 1 DISK FCLIENT IF E K DISK FPRO03P O E 60 PRINTER F*-------------------------------------------------

FMT F .....FFilenameIPEAF....RlenLK1AIOvKlocEDevice+......KExit++Entry+A....U 0010.00 FGJHX01 IF F 256 6AI 1 DISK 0011.00 FCLIENT IF E K DISK 0012.00 FPRO03P O E 60 PRINTER

Prompt type . . .

Sequence number . . . 0010.00

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

Lenguaje RPG400 File File End of File Filename Type Designation File Sequence Format GJHX01 I F F Record Mode of Length of Record Length Processing Key Field Address Type 256 6 A File Overflow Key Field Extn Organization Indicator Start Loc Code Device I 1 DISK File File Continuation Exit Entry Addition Condition

70

F3=Exit F4=Prompt F5=Refresh F11=Previous record F12=Cancel F23=Select prompt F24=More keys que contiene el archivo y sus respectivas longitudes. Ahora deberemos definir por medio de la hoja 'I' los campos

Hoja 'I' 0012.01 0012.02 0012.03 0012.04 0012.05 0012.06 0012.07 0012.08 0012.09 0012.10 0012.11 0012.12 0012.13 F*------------------------------------------------F* HOJA INPUT F*------------------------------------------------IGJHX01 NS 01 I 1 60 CAMP01 I 7 12 CAMP02 I 13 20 2CAMP03 I 21 21 CAMP04 I P 22 27 2CAMP05 I 28 28 CAMP06 I 28 56 CAMP07 I 57 652CAMP08 I 256 256 CAMP20

Observe el la hoja 'F' que definimos la longitud del registro en este caso 256, la longitud de la clave de 6 posiciones y que comienza en la posicion 1 del registro. Luego en la hoja I se definen el nombre del archivo y los campos con sus posiciones de comienzo y fin, como as tambin sus posiciones decimales en el caso de ser campos numricos y/o empaquetados.

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

Lenguaje RPG400

71

11. OPERACIONES DE ARCHIVO SETLL ( Situar lmite inferior ) READ (Leer un registro ) SETGT (Situar en mayor que ) READP (Leer registro anterior) READE (Leer clave igual ) REAPE (Leer registro anterior igual ) READC (Leer el siguiente registro modificado ) CHAIN (Recuperacion al azar ) WRITE (Grabar un registro) UPDAT (Modificar un registro) DELET (Borrar un registro) OPEN (Abrir archivo) CLOSE (Cerrar archivo) FEOD (Forzar fin de datos) UNLCK (Liberar un registro o desbloquear un area de datos)

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

Lenguaje RPG400

72

SETLL ( Situar lmite inferior ) La operacin SETLL sita en una Base de datos en el siguiente registro que tiene una clave o numero relativo de registro que es mayor que o igual al argumento de bsqueda ( clave o numero relativo de registro ) especificado en el factor 1. Esta base de datos debe ser definida en la hoja 'F' como de procedimiento completo codificando para ello una 'F' en la columna 16. El factor 1 es necesario. Si se accede al archivo por clave, el factor 1 puede ser un nombre de campo, una constante con nombre, una constante figurativa o un literal que se utiliza como argumento de bsqueda al situar el archivo. Tambin el programador puede especificar un nombre de KLIST en el factor 1 para un archivo descrito externamente. El factor 2 es necesario y debe contener un nombre de archivo. En la hoja 'C' los indicadores resultantes reflejan el estado de la operacin. Si se especifica un indicador en las columnas 54 y 55, este se activara cuando el argumento de bsqueda sea mayor que la mayor clave o numero relativo de registro del archivo. Si especificamos un indicador en las columnas 56 y 57, este se activara cuando la operacin no se complete con xito y si especificamos un indicador en las columnas 58 y 59 este se activara cuando este presente un registro cuya clave o numero relativo de registro sea igual al argumento de bsqueda. Podemos utilizar constantes figurativas para situarnos en la base de datos, *LOVAL nos sita en la clave mas baja y *HIVAL en la clave mas alta. Si la operacin SETLL no tiene xito (condicin de registro no encontrado) nos situaremos en el final de archivo. Luego de alcanzar el final de archivo con una operacin SETLL podemos emitir otra sentencia SETLL para resituar el archivo.

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

Lenguaje RPG400

73

SETLL no accede a un registro de datos determinado, si se deseara verificar la existencia o no de un registro podemos utilizar esta operacin con un indicador de igual, posiciones 58 y 59 pero el RPG/400 tiene una operacin especifica para estos casos permitindonos un mayor rendimiento , esa operacin es la operacin CHAIN que veremos mas adelante. Este ejemplo ya le es familiar, debemos leer la base de datos CLIENT . Para eso debemos situarnos al principio de la base de datos y acceder por clave, en este caso la mas baja por lo que utilizaremos SETLL y en el factor 1 la constante figurativa *LOVAL.

FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 *********Beginning of data******* 0001.00 H*------------------------------------------------0002.00 H* EMPRESA :BOBAGALOS SAICA HNOS 0004.00 H* AUTOR : DANIEL H. ENRQUEZ 0005.00 H* PROGRAMA: PROG33 0006.00 H* FECHA : 2002 0009.00 F*------------------------------------------------0010.00 FFCL005 IF E K DISK 0012.01 FFCL005P O E 60 PRINTER 0012.02 F*------------------------------------------------0012.03 E TIT 1 1 80 0028.00 C*------------------------------------------------0028.01 C* 0028.02 C*------------------------------------------------0028.03 C EXSR INI 0028.13 C* 0028.14 C *LOVAL SETLLFCL005L1 90 028.15 C READ RFC05 90 028.16 C* 028.17 C* 028.18 C *IN90 DOWEQ*OFF 028.19 C CODVTA IFNE *ZEROS 028.20 C EXSR PRIN01 028.21 C ENDIF 028.22 C READ RFC05 90 028.23 C *IN90 IFEQ *ON

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

Lenguaje RPG400

74

En el ejemplo anterior vemos la utilizacin de SETLL con una contante figurativa *LOVAL lo que nos asegura posicionarnos en la clave mas baja de la base de datos, para luego leerla por medio de la sentencia READ en orden ascendente hasta finalizar la misma.

READ ( Leer un registro ) La operacin READ lee un registro de una base de datos la cual debe haber sido definida en la hoja 'F' como full procedure columna 16. El factor 2 deber contener un nombre de archivo o un nombre de formato de registro siempre y cuando en este ultimo caso en archivo fuese definido como externo. Deber especificar un indicador en las columnas 58 y 59 para determinar si se ha producido el final de archivo. Este indicador se activa o desactiva cada vez que se procesa una operacin READ. El programador puede establecer un indicador de resultado en las columnas 56 y 57 para que se active si la operacin READ no ha finalizado con xito. Si el archivo del cual se esta leyendo es un archivo en disco de actualizacin, podremos especificar una 'N" en las columna 53 de la hoja de calculo, la cual le indicara al RPG/400 que no se desea ningn bloqueo de registro cuando se lee.

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

Lenguaje RPG400

75

FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ********* Beginning of data********* 0001.00 H*------------------------------------------------0002.00 H* EMPRESA BOBAGALOS SAICA HNOS 0004.00 H* DANIEL HUGO ENRIQUEZ LEIVAS 0005.00 H* PROGRAMA: PROG33 0006.00 H* FECHA : 2002 0009.00 F*------------------------------------------------0010.00 FFCL005 IF E K DISK 0012.01 FFCL005P O E 60 PRINTER 0012.02 F*------------------------------------------------0012.03 E TIT 1 1 80 0028.00 C*------------------------------------------------0028.01 C* 0028.02 C*------------------------------------------------0028.03 C EXSR INI 0028.13 C* 0028.14 C *LOVAL SETLLFCL005L1 90 028.15 C READ RFC05 90 028.16 C* 028.17 C* 028.18 C *IN90 DOWEQ*OFF 028.19 C CODVTA IFNE *ZEROS 028.20 C EXSR PRIN01 028.21 C ENDIF 028.22 C READ RFC05 90 028.23 C *IN90 IFEQ *ON 0028.19 C CODVTA IFNE *ZEROS 0028.20 C EXSR PRIN01 0028.21 C ENDIF 0028.22 C READ RFC05 90 0028.23 C *IN90 IFEQ *ON 0028.24 C LEAVE 0028.25 C ENDIF 0028.33 C ENDDO 0028.34 C* 0028.35 C MOVE *ON *INLR 0028.36 C* En este ejemplo nos situamos en el inicio de archivo con una operacin SETLL y leemos El primer registro, si no se activa el indicador 90 ( o sea si no ha alcanzado fin de archivo ) el control del programa pasara al DOWxx el que se encuentra condicionado para su
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

Lenguaje RPG400 ejecucin por el indicador 90 siempre que este desactivado o sea en *OFF. Una vez dentro del DOWxx se realizaran las operaciones correspondientes al primer registro y luego leer el siguiente registro, si no se activa el indicador 90 seguir procesando las sentencias dentro de este grupo, caso contrario se ejecutara la operacin LEAVE la cual nos permitir abandonar el DOWxx y ejecutar la/s sentencias inmediatamente posteriores.

76

SETGT ( Situar en mayor que )

Esta operacin nos sita dentro de la base de datos en el siguiente registro cuya clave o numero relativo de registro es mayor a la clave o numero relativo de registro especificada en el factor 1. El factor 1 es necesario y si accedemos por clave este factor debe ser un nombre de campo, una constante figurativa, una constante con nombre, un literal o especificar un nombre KLIST. El factor 2 es obligatorio y debe contener un nombre de archivo o un nombre de registro. Podemos especificar un indicador en las columnas 54 y 55 para que se active si no se encuentra ningn registro con una clave o numero relativo de registro que sea mayor a la clave de bsqueda que especificamos en el factor 1 y tambin podemos codificar en las columnas 56 y 57 un indicador que se activara cuando se produzca un error en la lectura del archivo. Si la operacin de bsqueda no es satisfactoria o se no se encontr el registro nos situaremos al final del archivo.

El campo CLAVE contiene el numero 1983 de cliente 0028.02 0028.03 0028.04 0028.05 C*------------------------------------------------C CLAVE SETGTCLIENTE 90 C READ RCLI 90 C*

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

Lenguaje RPG400

77

198 0 198 3 198 4 199 1

CARLOS GONZALEZ JHON SIMPSON DIEGO ANDRES JUAN ALBERTO

Con la operacin SETGT quedara posicionado para leer el registro cuyo numero de cliente es 1984. Luego la operacin READ leer este registro.

Tambin podemos utilizar las constantes figurativas *LOVAL y *HIVAL. Si tenemos un archivo con clave en orden descendente podemos situarnos mediante *HIVAL de manera que se sita en el primer registro del archivo o si usramos *LOVAL nos situaremos en el ultimo registro. 0028.14 0028.14 C C *HIVAL *LOVAL SETGTFCL005L1 90 SETGTFCL005L1 90

READP (Leer registro anterior) Esta operacin lee el registro anterior en un archivo definido en la hoja 'F' como Full procedure. El factor 2 deber contener el nombre de un archivo o formato de registro. Cuando la operacin READP es satisfactoria nos situamos en el siguiente registro que satisface la lectura. En las posiciones 58 y 59 de la hoja de calculo debemos codificar un indicador que se activara cuando no existan registros anteriores en el archivo. Podemos adems codificar un indicador en las posiciones 56 y 57 el cual se activara cuando se produzca un error en la lectura del archivo.

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

Lenguaje RPG400 En el siguiente ejemplo trabajaremos con una archivo con clave en orden descendente y deseamos posicionarnos en el ultimo registro y leer todo el archivo hasta llegar al primer registro. 0028.02 0028.05 0028.06 0028.13 0028.14 0028.15 0028.16 0028.17 0028.18 0028.19 0028.20 0028.21 0028.22 C*------------------------------------------------C* C EXSR INI C* C *HIVAL SETGTFCL005L1 90 C READPRFC05 90 C* C* C *IN90 DOWEQ*OFF C CODVTA IFNE *ZEROS C EXSR PRIN01 C ENDIF C READPRFC05 90

78

READE ( leer clave igual ) Esta operacin recupera el siguiente registro si la clave del registro coincide con el argumento de bsqueda. Si la clave no coincide con el argumento de bsqueda, el indicador que se especifica en las columnas 58 y 59 se activa y el registro no se devuelve al programa. En el argumento de bsqueda que es opcional puede especificarse un nombre de campo, un literal, una constante con nombre o una constante figurativa. Si dejramos el argumento de bsqueda en blanco y la clave completa del siguiente registro es igual a la del registro actual, se recuperara el siguiente registro. El factor 2 deber contener el nombre del archivo a recuperar o un nombre de formato de registro. Si estamos leyendo un archivo en disco de actualizacin Podemos especificar una 'N' en la columna 53 de la hoja de calculo con lo que le indicaremos al RPG que no coloque ningn bloqueo en el registro que se lee. Tambin podemos especificar una indicador en las columnas 56 y 57 para que se active cuando se produce Un error en la lectura o no se completa con xito la operacin.

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

Lenguaje RPG400

79

En el siguiente ejemplo tenemos una base de datos indexada por numero de cliente y numero de comprobante, ( clave compuesta) se ingresa por pantalla los argumentos de bsqueda y debemos leer todos los registros que coincidan con el argumento en cuestin. Campa clave = 001955 + 00345271 Nos posicionamos en la clave mas baja con *LOVAL SETLL , luego con el campo CLAVE ejecutamos la operacin READE , si el indicador no esta activo o sea hemos encontrado una registro de igual clave el programa ejecutara el DOWxx, luego bifurcara a la rutina CALCU y PRIN01, volver a leer y procesara esta secuencia hasta que la clave del siguiente registro sea distinta al argumento de bsqueda o sea procesara hasta que se active el indicador 90. 0028.05 0028.06 0028.13 0028.14 0028.15 0028.16 0028.17 0028.18 0028.19 0028.22 0028.23 0028.24 028.25 028.26 028.33 028.34 028.35 028.36 C* C EXSR INI C* C *LOVAL SETLL MOVI 90 C READERMOVI 90 C* C* C *IN90 DOWNE*ON C EXSR CALCU C EXSR PRIN01 C READE RMOVI 90 C *IN90 IFEQ *ON C LEAVE C ENDIF C ENDDO C* C MOVE *ON *INLR C*

REAPE ( Leer registro anterior igual ) Esta operacin nos permite recuperar el siguiente registro anterior de un archivo de procesamiento completo ( full procedure ) si la clave del registro coincide con el argumento de bsqueda. Si la clave no coincide con el argumento de bsqueda el indicador que definamos
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

Lenguaje RPG400

80

en las columnas 58 y 59 se activara y el registro no se devuelve al programa. El factor 1 o sea el argumento de bsqueda puede ser un literal, una constante figurativa, un nombre de campo o una KLIST. El factor 2 deber contener el nombre del archivo o el formato de registro que deseamos recuperar. Deberemos especificar un indicador resultante en las columnas 58 y 59 el cual se activara si no se encuentra ninguna clave de registro coincidente. Opcionalmente podemos definir un indicador de resultados en las columnas 56 y 57 el cual se activara si se produce un error durante la operacin de lectura. Si estuviramos leyendo un archivo en disco de actualizacin podemos codificar una 'N' en la columna 53 para indicarle al RPG que no deseamos el bloqueo del registro. Sobre el ejemplo anterior leeremos el mismo archivo pero nos posicionaremos en la clave mas alta con *HIVAL SETLL y leeremos los registros coincidentes. 0028.05 0028.06 0028.13 0028.14 0028.15 0028.16 0028.17 C* C EXSR INI C* C *HIVALSETLL MOVI C REAPERMOVI C* C*

90

90

0028.18 0028.19 0028.22 0028.23 0028.24 028.25 028.26 028.33 028.34 028.35 028.36

C C C C C C C C C* C C*

*IN90 DOWNE*ON EXSR CALCU EXSR PRIN01 REAPE RMOVI *IN90 IFEQ *ON LEAVE ENDIF ENDDO MOVE *ON *INLR

90

CHAIN (Recuperacin al azar)

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

Lenguaje RPG400

81

Esta operacin nos permite recuperar un registro desde un archivo definido en la hoja 'F' en la columna 16 de procedimiento completo, el acceso se realiza por clave y recupera el primer registro cuya clave coincida con el argumento de bsqueda. Si no se encuentra ningn registro coincidente se produce la condicin de registro no encontrado. En el factor 1 deber especificar un nombre de campo, una constante figurativa, un literal, una constante con nombre o el nombre de una KLIST ( Clave compuesta. En el factor 2 deberemos especificar el nombre de un archivo o el nombre del formato de registro que deseamos leer. Deberemos especificar un indicador resultante en las columnas 54 y 55 que se activara cuando no se encontrare un registro coincidente y en las posiciones 56 y 57 un indicador opcional que se activara cuando la operacin CHAIN no se realiza satisfactoriamente.

0028.13 0028.14 0028.15 0028.16 0028.17 0028.18 0028.19 0028.21 0028.22 0028.23

C* C C* C C C C C C C*

CLIENP CHAINCLIENT *IN60 IFEQ *OFF EXSR PROCE EXSR PRIN ELSE EXSR NOENC ENDIF

60

En este ejemplo accedemos al azar por numero de cliente (campo CLIENP) al archivo CLIENT (clientes). Observamos que se codifico un indicador resultante en las columnas 54 y 55. Si este indicador no se encuentra activo procesara las rutinas PROCE y PRIN caso contrario ( esta activo ) registro no encontrado procesara la rutina NOENC. Si est accediendo a una archivo de ENTRADA se leern todos los registros sin bloqueos pero si el archivo es de ACTUALIZACION se bloquean todos los registros si el la posicin 53 no se coloca una 'N'. Cuando utilizamos la operacin CHAIN en archivos de WORKSTN dicha operacin recupera un registro de subarchivo, al cual se accede por numero relativo de registro.

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

Lenguaje RPG400

82

Ahora veremos en este ejemplo que leemos todo el archivo MOVTAS (movimiento de ventas) en donde por cada registro tenemos el numero de cliente y su compra anual y deberemos imprimir un reporte con estos datos y su nombre o razn social que se encuentra en el maestro de clientes (MAECLI). Observe la rutina DATOS y vera que para la operacin CHAIN se ha utilizado el indicador 77, si el indicador 77 no se encuentra activo luego de que se halla ejecutado la operacin CHAIN esto nos indica que existe un registro que coincide el numero de cliente con el campo clave CLIENT o sea que el cliente existe y estamos en condiciones de extraer los datos que se encuentran en el registro que para nuestro ejemplo necesitamos conocer su razn social o apellido y nombre. Por el contrario si el indicador 77 se hubiese activado por la ejecucin de la operacin CHAIN esto nos indica que no existe ningn registro coincidente o sea que el cliente no existe en el maestro de clientes. 0028.13 0028.14 0028.16 0028.17 0028.18 0028.19 0028.20 0028.21 0028.25 0028.26 0028.27 0028.28 0028.29 0053.00 0054.00 0055.00 0056.00 0056.01 0058.00 0059.00 0060.00 0062.00 0063.00 C* C *LOVAL SETLL MOVTA 90 C *IN90 DOWEQ*OFF C EXSR DATOS C EXSR IMPRI C READ RMOV 90 C *IN90 IFEQ *ON C LEAVE C ENDIF C ENDDO C* C MOVE *ON *INLR C* C*------------------------------------------------C* RUTINA DE DATOS ADICIONALES C*------------------------------------------------C DATOS BEGSR C CLIENT CHAINMAECLI 77 C *IN77 IFEQ *OFF C MOVELAYN AYNP C ENDIF C ENDSR C*-------------------------------------------------

WRITE (Grabar un registro)


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

Lenguaje RPG400

83

Esta operacin nos permite grabar un nuevo registro en una base de datos. El factor 2 debe contener el nombre de un archivo. Cuando el archivo esta definido externamente es necesario un nombre de formato de registro y el RPG/400 utilizara todos los valores actuales de campos en el programa para construir el registro. Deber especificarse una 'A' (Adicin de archivos) en la posicin 66 de la hoja 'F'. En las posiciones 56 y 57 se puede codificar una indicador para que se active si la operacin WRITE no se completa satisfactoriamente. FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+. 0001.00 H*------------------------------------------------0001.01 H* SYSTEM : SISTEMA DE VENTAS 0002.00 H* CAMPFIRE COORPORATION , MI, EEUU 0004.00 H* DANIEL HUGO ENRIQUEZ LEIVAS 0005.00 H* PROGRAMA: PROG35 0006.00 H* FECHA : 3 DE NOVIEMBRE 0009.00 F*------------------------------------------------0010.00 FMOVTA IF E K DISK 0010.01 FMAECLI IF E K DISK 0010.02 FCLINOE UF E K DISK A 012.00 FLISTA O E 22 PRINTER 0012.01 F*------------------------------------------------0028.13 C* 0028.14 C *LOVAL SETLL MOVTA 90 0028.16 C *IN90 DOWEQ*OFF 0028.17 C EXSR DATOS 0028.18 C EXSR IMPRI 0028.19 C READ RMOV 90 0028.20 C *IN90 IFEQ *ON 0028.21 C LEAVE 0028.25 C ENDIF 0028.26 C* 0028.27 C ENDDO 0028.28 C* 0028.29 C MOVE *ON *INLR 0028.30 C* 0028.30 C* 0053.00 C*------------------------------------------------0054.00 C* RUTINA DE DATOS ADICIONALES 0055.00 C*------------------------------------------------0056.00 C DATOS BEGSR 0056.01 C CLIENT CHAINMAECLI 77 0058.00 C *IN77 IFEQ *OFF 0059.00 C MOVELAYN AYNP
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

Lenguaje RPG400 0059.01 0059.02 0060.00 0062.00 0063.00 C ELSE C WRITERNOEC C ENDIF C ENDSR C*-------------------------------------------------

84

En la rutina DATOS hemos agregado la operacin WRITE para grabar un registro con informacion por cada cdigo de cliente no encontrado en el maestro de clientes.

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

Lenguaje RPG400

85

UPDAT (Modificar Registro Existente) Esta operacin modifica el ultimo registro que se ha recuperado desde un archivo de actualizacin. No se debe ejecutar ninguna otra operacin en el archivo entre la operacin de entrada del registro y la operacin UPDAT. El factor 2 deber contener un nombre de formato de registro o archivo. Es necesario un nombre de formato de registro para un archivo definido en la hoja 'F' como externo. Podemos codificar un indicador de resultado en las columnas 56 y 57 para determinar algun error el la operacion si este se activa. Antes de procesar una operacin UPDAT deberemos realizar una operacin de entrada valida con bloqueo ( CHAIN, READ, READC,READE, REAPE) con bloqueo. 0001.00 0001.01 0002.00 0004.00 0005.00 0006.00 0009.00 0009.01 0010.01 0012.01 0028.13 0028.14 0028.16 0028.17 0028.26 0028.28 H*-------------------------------------------------------------H* BLISSFIELD BUSSINES ADMINISTRATION H* BLISSFIELD CITY , MI, EEUU H* DANIEL HUGO ENRIQUEZ LEIVAS H* PROGRAMA: PROG40 H* FECHA : 8 DE FEBRERO DE 2002 F*------------------------------------------------FMAECLI IF E K DISK FMAECLI UF E K DISK F*------------------------------------------------C* C* C* C UPDATRMOV C* C*

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

Lenguaje RPG400

86

DELET ( Borrar un registro) La operacin DELET nos permite suprimir un registro de una base de datos. Este archivo debe ser definido en la hoja F como de actualizacin ( U en la columna 15). El registro a suprimir debe estar bloqueado por medio de una operacin de entrada previa que puede ser CHAIN o READ. El registro suprimido no puede recuperarse posteriormente. En el factor 1 que es el argumento de bsqueda puede contener una clave o un numero relativo de registro. En el caso de que el acceso sea por clave el factor 1 contendr un nombre de campo, un literal una constante con nombre. Si el archivo esta definido con definicin externa puede el factor 1 contener una KLIST . Si accediramos por numero relativo de registro el factor 1 deber contener un literal entero o un campo numrico sin posiciones decimales. En el factor 2 definiremos el nombre de formato de registro para todo archivo definido externamente o si es definido internamente el nombre del archivo. Como en las operaciones anteriores podemos codificar un indicador de resultado en las columnas 56 y 57 que se activara si la operacin DELET no se realiza satisfactoriamente. A continuacin veremos la aplicacin de esta sentencia por medio del siguiente programa ejemplo:

0001.00 0001.01 0002.00 0004.00 0005.00 0006.00 0009.00 0009.01 0010.01 0012.01 0028.13 0028.14 0028.16

H*------------------------------------------------H* BLISSFIELD BUSSINES ADMINISTRATION H* : MICHIGAN , EEUU H* DANIEL HUGO ENRIQUEZ LEIVAS H* PROGRAMA: PROG40 H* FECHA : 8 DE FEBRERO F*------------------------------------------------FMAECLI IF E K DISK FMAECLI UF E K DISK F*------------------------------------------------C* C* C*
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

Lenguaje RPG400 0028.17 0028.26 0028.28 C C* C* DELETRMOV 50

87

La sentencia DELET borrara fsicamente de la base de datos el registro en donde se encuentra posicionada el cual se encuentra definido en su respectiva DDS por el nombre RMOV. A continuacin desarrollaremos un ejemplo de Alta, Baja y Modificacin sobre una base de datos. Primero veremos la definicin del archivo fsico , y luego los archivos lgicos.
Work with Members Using PDM File . . . . . . QDDSSRC Library . . . . V40LBDHE V400Y 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... Opt Member BPP001 PF BPP001L1 LF BPP001L2 LF BPP001L3 LF FCL005 PF FCL005L1 LF FCL005L2 LF FCL005L3 LF Type Text BLISSFIELD PATIENT DATA BASE BLISSFIELD PATIENT DATA BASE - S.SECURITY INDEX BLISSFIELD PATIENT DATA BASE - L.NAME INDEX BLISSFIELD PATIENT DATA BASE - ZIP CODE INDEX MAESTRO DE CLIENTES MAESTRO DE CLIENTES POR NUMERO DE CLIENTE MAESTRO DE CLIENTES POR NUMERO DE CLIENTE ACTIVOS MAESTRO DE CLIENTES POR RAZON SOCIAL More... Parameters or command ===> F3=Exit F4=Prompt F5=Refresh F6=Create F9=Retrieve F10=Command entry F23=More options F24=More keys

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

Lenguaje RPG400

88

ARCHIVO FISICO

0000.01 A* --------------------------------------------------------------0000.02 A* SYSTEM BFP 0000.03 A* FILE BPP001 0000.21 A* DATE 2001 0000.22 A* DANIEL HUGO ENRIQUEZ LEIVAS 0000.23 A* BLISSFIELD, MI, EEUU 0000.31 A*---------------------------------------------------------------0000.40 A R RBFP01 0000.41 A CODSS 15 0 TEXT('SECURITY') 0000.42 A LASTN 15 TEXT('LASTNAME') 0000.43 A FIRSTN 20 TEXT('FIRSTN') 0000.44 A ADRESS 35 TEXT('ADRESS') 0000.45 A STATE 25 TEXT('STATE') 0000.46 A ZIPCOD 6 TEXT('ZIP CODE') 0000.47 A TELEPH 6 TEXXT('TELE') 0000.50 A SEX 1 TEXT('SEX') 0000.51 A EGE 3 0 TEXT('EGE') ****************** End of data**************

El archivo fsico BPP001 contiene los campos mnimos para la identificacin del paciente. En el observamos que el formato de registro definido se denomina RBFP01.

ARCHIVOS LOGICOS

SEU==> BPP001L1 FMT A* .....A*. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 *************** Beginning of data************* 000.01 A* -------- -----000.02 A* SISTEMA BFP 000.03 A* ARCHIVO BPP001 000.21 A* LOGICO BPP001L1 000.22 A* KEY CODSS - SOCIAL SECURITY CODE 000.23 A* AUTOR DANIEL HUGO ENRIQUEZ LEIVAS 000.24 A* MI, EEUU 000.31 A*---------------------------------------------------------------000.40 A R RBFP01 PFILE(V40LBDHE/BPP001)
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

Lenguaje RPG400
000.41 A K CODSS ****************** End of data ***************

89

El archivo logico BPP001L1 nos permitira acceder al archivo de pacientes por la clave CODSS - cdigo de seguridad social -.
EU==> BPP001L2 FMT A* .....A*. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 *************** Beginning of data ***** 000.01 A* -------- -----000.02 A* SISTEMA BFP 000.03 A* ARCHIVO BPP001 000.21 A* LOGICO BPP001L2 000.22 A* KEY LASTN - LAST NAME 000.23 A* AUTOR DANIEL HUGO ENRIQUEZ LEIVAS 000.24 A* MI, EEUU 000.31 A*---------------------------------------------------------------000.40 A R RBFP01 PFILE(V40LBDHE/BPP001) 000.41 A K LASTN ****************** End of data *************

El archivo lgico BPP001L2 nos permite acceder al archivo de pacientes por el campo clave LASTN - apellido -.

Columns . . . : 1 71 Edit V40LBDHE/QDDSSRC SEU==> BPP001L3 FMT A* .....A*. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 *************** Beginning of data ********************* 000.01 A* -------- -----000.02 A* SISTEMA BFP 000.03 A* ARCHIVO BPP001 000.21 A* LOGICO BPP001L3 000.22 A* KEY ZIPCOD- ZIPE CODE 000.23 A* AUTOR DANIEL HUGO ENRIQUEZ LEIVAS 000.24 A* MI, EEUU 000.31 A*---------------------------------------------------------------000.40 A R RBFP01 FILE(V40LBDHE/BPP001) 000.41 A K ZIPCOD ****************** End of data **************

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

Lenguaje RPG400 El archivo lgico BPP001L3 tiene definida como campo clave al campo ZIPCOD el cual nos permitir acceder por numero de cdigo postal. SDA FILE ( PANTALLAS UTILIZADAS EN EL PROGRAMA)
SEU==> PA FMT A* .....A*. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+.. *************** Beginning of data ************** 0000.10 A*%%TS SD 20021112 185818 GOLETA REL-V5R1M0 5722-WDS 0000.20 A*-----------------------------------------------------------0000.30 A* MANTENAINCE DATA BASE 0000.40 A* HEALTH CENTER BLISSFIELD CITY,MI,EEUU 0000.50 A* HEALTH CENTER MILAN CITY , 0000.60 A* HEALTH CENTER CARTOON CITY , 0000.70 A* AUTOR DANIEL H. ENRIQUEZ LEIVAS 0000.80 A*-----------------------------------------------------------0000.90 A*%%EC 0001.00 A DSPSIZ(24 80 *DS3) 0001.10 A REF(V40LBDHE/BPP001) 0001.20 A R RPAN01 0001.30 A*%%TS SD 20021112 185818 GOLETA REL-V5R1M0 5722-WDS 0001.40 A CF02 0001.50 A CF03 0001.60 A CF04 0000.90 A*%%EC 0001.00 A DSPSIZ(24 80 *DS3) 0001.10 A REF(V40LBDHE/BPP001) 0001.20 A R RPAN01 0001.30 A*%%TS SD 20021112 185818 GOLETA REL-V5R1M0 5722-WDS 0001.40 A CF02 0001.50 A CF03 0001.60 A CF04 0001.70 A CF05 0001.80 A CF06 0001.90 A CF07 0002.00 A CF08 0002.10 A CF09 0002.20 A CF11 0002.30 A 2 68DATE 0002.40 A EDTWRD(' / / ') 0002.50 A 3 4'========================== 0002.60 A =========================== 0002.70 A =======' 0002.80 A 21 4'-------------------------0002.90 A --------------------------0003.00 A -------' 0003.10 A 5 33'MICHIGAN, USA'
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

90

Lenguaje RPG400
0003.20 0003.30 0003.40 0002.70 0002.80 0002.90 0003.00 0003.10 0003.20 0003.30 0003.40 0003.50 0003.60 0003.70 0003.80 0003.90 0004.00 0004.10 0004.20 0004.30 0004.40 0004.50 0004.60 0004.70 0004.80 0004.90 0005.00 0005.10 0005.20 0005.30 0005.40 0005.50 0005.60 0005.70 0005.80 0005.90 0006.00 0006.10 0006.20 0006.30 0006.40 0006.50 0006.60 0006.70 0006.80 0006.90 0007.00 0007.10 0007.20 A 6 4'-------------------------A --------------------------A -------' A =======' A 21 4'-------------------------A --------------------------A -------' A 5 33'MICHIGAN, USA' A 6 4'-------------------------A --------------------------A -------' A 7 20'MANTENIMIENTO BASE DE DATO A TES' A 11 28'F2 - ALTA' A 13 28'F5 - BAJA' A 15 28'F7 - MODIFICACION' A 2 4'DHE SISTEMAS' A 2 60'DATE' A 17 28'F9 - REPORTS' A 20 28'F3 - EXIT' A 8 4'-------------------------A --------------------------A -------' A 4 28'BLISSFIELD' A 4 39'HEALTH' A 4 46'CENTER' A 19 4'-------------------------A --------------------------A -------' A R RPAN02 A*%%TS SD 20021111 200257 GOLETA REL-V5R1M0 5722-WDS A WINDOW(2 10 16 50) A CF02 A CF03 A CF04 A CF05 A CF06 A CF07 A CF08 A CF09 A CF11 A 3 1'Code S.S:' A 5 1'Las name: ' A 6 1'Firs name: ' A 8 1'AdRres ' A 9 1'State:' A 10 1'Zi Code: ' A 12 1'Sex:' A 12 10'Ege:'
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

91

Lenguaje RPG400
0007.30 0007.40 0007.50 0007.60 0007.70 0007.80 0007.90 0008.00 0008.10 0008.20 0008.30 0008.40 0008.50 0008.60 0008.70 0008.80 0008.90 0009.00 0009.10 0009.20 0009.30 0009.40 0009.50 0009.60 0009.70 0009.80 0009.90 0010.00 0010.10 0010.20 0010.30 0010.40 0010.50 0010.60 0010.70 0010.80 0010.90 0011.00 0011.10 0011.20 0011.30 0011.40 0011.50 0011.60 0011.70 0011.80 0011.90 0012.00 0012.10 A 11 1'Telephone:' A CODSS R B 3 13REFFLD(CODSS) A LASTN R B 5 13REFFLD(LASTN) A FIRSTN R B 6 13REFFLD(FIRSTN) A ADRESS R B 8 13REFFLD(ADRESS) A STATE R B 9 13REFFLD(STATE) A ZIPCOD R B 10 13REFFLD(ZIPCOD) A TELEPH R B 11 13REFFLD(TELEPH) A SEX R B 12 6REFFLD(SEX) A EGE R B 12 16REFFLD(EGE) A 1 19'ALTA' A 15 17'F3 - EXIT' A 2 1'-------------------------A ----------------' A 14 1'-------------------------A ----------------' A R RPAERR A*%%TS SD 20021111 200257 GOLETA REL-V5R1M0 5722-WDS A WINDOW(6 12 13 15) A CF02 A CF03 A CF04 A CF05 A CF06 A CF07 A CF08 A CF09 A CF11 A 4 3'transaccion' A 6 3'incorrecta' A 8 3'intentelo' A 12 3'Thank you' A 2 5'Sorry' A 3 1'---------------' A 10 3'nuevamente' A R RPAN05 A*%%TS SD 20021111 200257 GOLETA REL-V5R1M0 5722-WDS A WINDOW(3 10 16 50) A CF02 A CF03 A CF04 A CF05 A CF06 A CF07 A CF08 A CF09 A CF11 A 1 1'Baja' A 3 1'Code S.S:'
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

92

Lenguaje RPG400
0012.20 0012.30 0012.40 0012.50 0012.60 0012.70 0012.80 0012.90 0013.00 0013.10 0013.20 0013.30 0013.40 0013.50 0013.60 0013.70 0013.80 0013.90 0014.00 0014.10 0014.20 0014.30 0014.40 0014.50 0014.60 0014.70 0014.80 0014.90 0015.00 0015.10 0015.20 0015.30 0015.40 0015.50 0015.60 0015.70 0015.80 0015.90 0016.00 0016.10 0016.20 0016.30 0016.40 0016.50 0016.60 0016.70 0016.80 0016.90 0017.00 A 5 1'Last name:' A 6 1'First name:' A 8 1'Adress' A 9 1'State:' A 10 1'Zip Code:' A 12 1'Sex:' A 12 10'Ege:' A 11 1'Telephone:' A CODSS R B 3 12REFFLD(CODSS) A LASTN R O 5 13REFFLD(LASTN) A FIRSTN R O 6 13REFFLD(FIRSTN) A ADRESS R O 8 13REFFLD(ADRESS) A STATE R O 9 13REFFLD(STATE) A ZIPCOD R O 10 13REFFLD(ZIPCOD) A TELEPH R O 11 13REFFLD(TELEPH) A SEX R O 12 6REFFLD(SEX) A EGE R O 12 16REFFLD(EGE) A 15 18'F3 - EXIT' A 14 1'-------------------------A ----------------' A R RPAN07 A*%%TS SD 20021111 200257 GOLETA REL-V5R1M0 5722-WDS A WINDOW(3 10 16 50) A CF02 A CF03 A CF04 A CF05 A CF06 A CF07 A CF08 A CF09 A CF11 A 1 1'Update' A 3 1'Code S.S:' A 5 1'Last name:' A 6 1'First name:' A 8 1'Adress' A 9 1'State:' A 10 1'Zip Code:' A 12 1'Sex:' A 12 10'Ege:' A 11 1'Telephone:' A CODSS R B 3 13REFFLD(CODSS) A LASTN R B 5 13REFFLD(LASTN) A FIRSTN R B 6 13REFFLD(FIRSTN) A ADRESS R B 8 13REFFLD(ADRESS) A STATE R B 9 13REFFLD(STATE) A ZIPCOD R B 10 13REFFLD(ZIPCOD) A TELEPH R B 11 13REFFLD(TELEPH)
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

93

Lenguaje RPG400
0017.10 0017.20 0017.30 0017.40 0017.50 0017.60 0017.70 0017.80 0017.90 0018.00 0018.10 0018.20 0018.30 0018.40 0018.50 0018.60 0018.70 0018.80 0018.90 0019.00 0019.10 0019.20 A SEX R B 12 6REFFLD(SEX) A EGE R B 12 16REFFLD(EGE) A 15 17'F3 - EXIT' A 14 1'-------------------------A ----------------' A R RPAN09 A*%%TS SD 20021107 182750 GOLETA REL-V5R1M0 5722-WDS A WINDOW(4 5 18 42) A CF02 A CF03 A CF04 A CF05 A CF06 A CF07 A CF08 A CF09 A CF11 A 15 12'F3= Exit' A 1 8'Data base report' A 5 1'F4-Clasificate for S.S. nu A 7 1'F6-Clasificate for last na A 9 1'F8-Clasificate for Zip Cod

94

DHE SISTEMAS DATE 11/13/02 ================================= BLISSFIELD HEALTH CENTER MICHIGAN, USA --------------------------------------------------------------------------------------------------MANTENIMIENTO BASE DE DATOS DE PACIENTES ---------------------------------------------------------------------------------------------------F2 - ALTA F5 - BAJA F7 - MODIFICACION F9 - REPORTS ---------------------------------------------------------------------------- ---------------------F3 - EXIT ----------------------------------------------------------------------------------------------------

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

Lenguaje RPG400

95

DHE S ...................................................... 11/13/02 ===== : ALTA : ===== : -------------------------------------------------- -----: : Code S.S: : ----- : : --------------: Las name: : ----- : Firs name: : --------------: : : AdRres : : State: : : Zi Code: : : Telephone: : : Sex: Ege: : : : : -------------------------------------------------- ---- : : F3 - EXIT : : : ----- :.................................................... : --------------F3 - EXIT ---------------------------------------------------------------------------DHE SISTEMAS DATE 11/13/02 ===== ...................................................... ========= : Baja : : : ----- : Code S.S: : --------------: : ----- : Last name: : --------------: First name: : : : : Adress : : State: : : Zip Code: : : Telephone: : : Sex: Ege: 000 : : : : -------------------------------------------------------: : F3 - EXIT : :.................................................... :
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

Lenguaje RPG400
--------------------------------------------------------------------------

96

DHE SISTEMAS DATE 11/13/02 ===== ...................................................... ========= : Update : : : ----- : Code S.S: 111302 : --------------: : ----- : Last name: : BAJA : --------------: First name: : : : : : Adress : : : State: ----- : LAST NAME: : : Zip Code: : : Telephone: : : Sex: Ege: : : : : -------------------------------------------------- ---------: : F3 - EXIT : ----- : : --------------:................................................... : ---------------------------------------------------------------------------DHE SISTEMAS DATE 11/13/02 =============================== .............................................. : Data base report : : : ---------------------------: : ENTES : : ---------------------------: F4-Clasificate for S.S. number : : : : F6-Clasificate for last name : : :

: F8-Clasificate for Zip Code : : : : : : : : F3= Exit : ---------------------------: : : : ---------------------------: : :............................................:


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

Lenguaje RPG400 PROGRAMA PROG50


FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+. *************** Beginning of data ***************** 0001.00 H*------------------------------------------------0002.00 H* HEALTH CENTER MI,EEUU 0004.00 H* DANIEL HUGO ENRIQUEZ LEIVAS 0005.00 H* PROGRAM : PROG50 0006.00 H* DATE : 2001 0009.00 F*------------------------------------------------0009.01 FPANT03 CF E WORKSTN 0009.02 FBPP001L1UF E K DISK A 0012.01 FPROG50P O E 60 PRINTER 0012.02 F*------------------------------------------------0012.03 E TIT 1 3 80 28.02 C*------------------------------------------------0028.05 0028.06 0028.07 0028.08 0028.09 0028.10 0028.14 0028.15 0028.16 0028.18 0028.19 0028.20 0028.21 0028.22 0028.23 0028.33 0028.34 0028.35 0028.36 0053.00 0054.00 0055.00 0056.00 0056.01 0058.00 0058.01 0059.00 0059.01 0059.02 0060.00 0060.01 C* C EXSR INI C* C *INKC DOWNE*ON C EXFMTRPAN01 C* C *INKC IFEQ *ON C LEAVE C ENDIF C* C *INKB CASEQ*ON ALTA C *INKE CASEQ*ON BAJA C *INKG CASEQ*ON MODI C *INKI CASEQ*ON LIST C ENDCS C ENDDO C* C MOVE *ON *INLR C* C*------------------------------------------------C* RUTINA DE ALTA C*------------------------------------------------C ALTA BEGSR C* C *INKC DOWEQ*OFF C CLEARRPAN02 C EXFMTRPAN02 C *INKC IFEQ *ON C LEAVE C ENDIF C CODSS CHAINBPP001L1

97

91

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

Lenguaje RPG400
0060.02 0060.03 0060.04 0060.06 0061.00 0061.01 0061.02 0061.03 0062.00 0062.01 0062.02 0062.03 0062.06 0062.07 0062.09 0062.10 0062.11 0062.12 0062.13 0062.14 0062.15 0062.16 0062.17 0062.18 0062.19 0062.20 0062.21 0062.22 0062.23 0062.25 0062.26 0062.27 0062.28 0062.29 0062.30 0062.31 0062.32 0062.33 0062.34 0062.35 0062.36 0062.37 0062.38 0062.39 0062.40 0062.41 0062.42 0062.43 C *IN91 IFEQ *ON C EXFMTRPAN02 C WRITERBFP01 C ELSE C EXFMTRPAERR C ENDIF C ENDDO C MOVE '0' *INKC C ENDSR C*------------------------------------------------C* RUTINA DE BAJA C*------------------------------------------------C BAJA BEGSR C* C *INKC DOWEQ*OFF C CLEARRPAN05 C EXFMTRPAN05 C *INKC IFEQ *ON C LEAVE C ENDIF C CODSS CHAINBPP001L1 91 C *IN91 IFEQ *OFF C EXFMTRPAN05 C *INKC IFEQ *ON C LEAVE C ENDIF C CODSS DELETRBFP01 91 C ELSE C EXFMTRPAERR C ENDIF C ENDDO C MOVE '0' *INKC C ENDSR C*------------------------------------------------C* RUTINA DE MODIFICACION C*------------------------------------------------C MODI BEGSR C* C *INKC DOWEQ*OFF C CLEARRPAN07 C EXFMTRPAN07 C *INKC IFEQ *ON C LEAVE C ENDIF C CODSS CHAINBPP001L1 91 C *IN91 IFEQ *OFF C EXFMTRPAN07 C *INKC IFEQ *ON
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

98

Lenguaje RPG400
0062.44 0062.45 0062.46 0062.47 0062.48 0062.49 0062.50 0062.51 0062.52 0062.53 0062.54 0062.55 0062.56 0062.57 0062.58 0062.59 0062.60 0062.61 0062.62 0062.63 0062.64 0062.65 0062.66 0062.67 0062.68 0062.69 0062.70 0062.71 0062.72 0062.73 0062.74 0062.75 0062.76 0062.77 0062.78 0062.79 0062.80 0062.81 0062.82 0062.83 0062.84 0062.85 0062.77 0062.78 0062.79 0062.80 0062.81 0062.82 0062.83 C LEAVE C ENDIF C UPDATRBFP01 C ELSE C EXFMTRPAERR C ENDIF C ENDDO C MOVE '0' *INKC C ENDSR C*------------------------------------------------C* REPORT RUTINE C*------------------------------------------------C LIST BEGSR C* C *INKC DOWNE*ON C EXFMTRPAN09 C *INKC IFEQ *ON C LEAVE C ENDIF C* C *INKD CASEQ*ON SCODE C *INKF CASEQ*ON LASTNA C *INKH CASEQ*ON CODZIP C ENDCS C ENDDO C* C MOVE '0' *INKC C ENDSR C*------------------------------------------------C* RUTINE OF SCODE C*------------------------------------------------C SCODE BEGSR C* C MOVEL*BLANK TIT01 C MOVELTIT,1 TIT01 C MOVE '0' *IN90 C *LOVAL SETLLBPP001L1 90 C READ RBFP01 90 C WRITETITU C *IN90 DOWEQ*OFF C *IN60 IFEQ *ON C WRITETITU C MOVEL*BLANK TIT01 C MOVELTIT,1 TIT01 C MOVE '0' *IN90 C *LOVAL SETLLBPP001L1 90 C READ RBFP01 90 C WRITETITU C *IN90 DOWEQ*OFF
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

99

Lenguaje RPG400
0062.84 0062.85 0062.86 0062.87 0062.88 0062.89 0062.90 0062.91 0062.92 0062.93 0062.94 0062.95 0062.96 0062.97 0062.98 0062.99 0063.00 0063.01 0063.02 0063.18 0063.19 0063.21 0063.22 0063.23 0063.24 0063.25 0063.26 0063.46 0063.48 C *IN60 IFEQ *ON C WRITETITU C MOVE '0' *IN60 C ENDIF C WRITEDETA C* C READ RBFP01 90 C *IN90 IFEQ *ON C LEAVE C ENDIF C ENDDO C* C ENDSR C*------------------------------------------------C* REPORT RUTINE OF THE LAST NAME C*------------------------------------------------C LASTNA BEGSR C* C CALL 'PROG51' C* C ENDSR C*------------------------------------------------C* REPORT RUTINE OF ZIP CODE C*------------------------------------------------C CODZIP BEGSR C* C CALL 'PROG51' C* C ENDSR

100

0063.49 C*------------------------------------------------0063.51 C* RUTINA DE INIZIALIZACION 0063.52 C*------------------------------------------------0063.53 C INI BEGSR 0063.54 C MOVELTIT,1 TIT01 80 0063.55 C MOVELTIT,2 TIT02 80 0063.56 C MOVEL*ALL'-' LIN01 80 0063.57 C MOVEL*ALL'-' LIN02 80 0063.58 C ENDSR 0063.59 C*------------------------------------------------0066.11 ** 0066.12 HEALTH CENTER, REPORT OF PATIENT CLASSIFICATE FOR S.S. CODE 0066.15 S.S. CODE LAST NAME FIRST NAME ZIP CODE ****************** End of data ************

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

Lenguaje RPG400

101

OPEN (Abrir archivo) El programador encontrara gran cantidad de programas de desarrollo interno en empresas, como as ERP muy conocidos en el mercado que utilizan bases de datos en determinadas circunstancias y luego no son necesarias durante en todo el proceso. Esto hace que el programa al tener varias bases de datos que abrir demore en el tiempo de arranque. Este tiempo lo podemos reducir abriendo o cerrando bases de datos en forma progresiva durante el calculo o sea cuando realmente es necesaria su utilizacin.

La operacin OPEN nos permite abrir bases de datos en forma progresiva durante el calculo, para ello deberemos codificar el la hoja 'F' columnas 71 y 72 una 'UC'. Podemos codificar un indicador de resultado en las columnas 56 y 57 de la hoja de calculo para establecer si se activa que se ha producido un error en la operacin OPEN

Prompt type . . . FX

Sequence number . . . 0009.01 File Sequence E Continuation Format

File File End of Filename Type Designation File MNC501L1 I F Mode of Record Processing Address Type Device K DISK File File Exit Entry Addition Condition UC

FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+.. ******* Beginning of data ****** 0001.00 H*------------------------------------------------0002.00 H* BUENOS AIRES ARGENTINA 0004.00 H* DANIEL HUGO ENRIQUEZ LEIVAS 0005.00 H* PROGRAM : PROG53
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

Lenguaje RPG400
0006.00 0009.00 0009.01 0009.02 0009.03 0012.01 0012.02 0012.03 0028.02 0028.05 0062.73 0062.74 0062.75 0062.76 0062.77 0062.78 H* DATE : 2001 F*------------------------------------------------FMNC501L1IF E K DISK UC FBPP001L1 IF E K DISK UC FBEX010L2 IF E K DISK FPROG53P O E 60 PRINTER F*------------------------------------------------E TIT 1 2 80 C*------------------------------------------------C* APERTURA DE UNA BASE DE DATOS POR MEDIO DEL C* COMANDO OPEN C*------------------------------------------------C* C OPEN BPP001L1 55 C* C OPEN MNC501L1 21

102

CLOSE ( Cerrar archivo)

La operacin contraria a OPEN es CLOSE o sea que esta operacin cierra bases de datos en forma progresiva durante el calculo. Deberemos para ello codificar la Hoja 'F' con una 'UC' en las columnas 71 y 72. Cuando se ejecuta una operacin CLOSE en archivo cerrado no puede utilizarse nuevamente salvo que durante el calculo se procese una operacin OPEN. Podemos codificar una indicador de resultado para determinar si se produce algn error durante la ejecucin de esta operacin.

FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+.. ********** Beginning of data****** 0001.00 H.------------------------------------------------0002.00 H* BUENOS AIRES ARGENTINA 0004.00 H* DANIEL HUGO ENRIQUEZ LEIVAS 0005.00 H* PROGRAM : PROG53 0006.00 H* DATE : 2001 0009.00 F*------------------------------------------------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

Lenguaje RPG400
0009.01 0009.02 0009.03 0012.01 0012.02 0012.03 0028.02 0028.05 0062.73 0062.74 0062.75 0062.76 0062.77 0062.78 0062.79 0062.80 0062.81 0062.82 0062.83 0062.84 FMNC501L1IF E K DISK UC FBPP001L1 IF E K DISK UC FBEX010L2 IF E K DISK FPROG53P O E 60PRINTER F*------------------------------------------------E TIT 1 2 80 C*------------------------------------------------C* APERTURA DE UNA BASE DE DATOS POR MEDIO DEL C* COMANDO OPEN Y CIERRE POR MEDIO DE CLOSE C*------------------------------------------------C* C OPEN BPP001L1 55 C* C OPEN MNC501L1 21 C* C* C CLOSEBPP001L1 56 C* C CLOSEMNC501L1 22 C*

103

Tambin podriamos cerrar todas las bases de datos abiertas durante el programa codificando la operacin CLOSE *ALL.

0062.83 0062.84

C C*

CLOSE*ALL

22

FEOD (Forzar fin de datos) Esta operacin nos permite realizar un cierre lgico de la base de datos con el fin de forzar la memoria intermedia hacia el almacenamiento magntico. Podramos utilizar la operacin CLOSE y posteriormente volver a abrir con una operacin OPEN pero el cierre de una base de datos desconecta a esta del programa y luego con una operacin OPEN al abrirla deberemos considerar el tiempo de apertura de la misma. Este tiempo puede ser significativo y podemos salvar este problema con la operacin FEOD. En el factor 2 se
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

Lenguaje RPG400

104

codificara el nombre del archivo para el cual queremos forzar el fin de datos y su cierre lgico. Tambin podemos codificar un indicador de resultado en las columnas 56 y 57 para denotar un error durante la ejecucin de esta operacin. FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+.. ******* Beginning of data ********* 0001.00 H*------------------------------------------------0002.00 H* BUENOS AIRES ARGENTINA 0004.00 H* DANIEL HUGO ENRIQUEZ LEIVAS 0005.00 H* PROGRAM : PROG53 0006.00 H* DATE : 2001 0009.00 F*------------------------------------------------0009.01 FMNC501L1IF E K DISK UC 0009.02 FBPP001L1 IF E K DISK UC 0009.03 FBEX010L2 IF E K DISK 0012.01 FPROG53P O E 60 PRINTER 0012.02 F*------------------------------------------------0012.03 E TIT 1 2 80 0028.02 C*------------------------------------------------0062.74 C*------------------------------------------------0062.75 C* 0062.76 C OPEN BPP001L1 55 0062.77 C* 0062.78 C OPEN MNC501L1 21 0062.79 C* 0062.80 C* 0062.81 C FEOD BPP001L1 56 0062.82 C* 0062.83 C FEOD MNC501L1 22

UNLCK ( Liberar un registro o desbloquear un rea de datos) Con el comando UNLCK podemos desbloquear un registros o rea de datos que se encuentra bloqueado. El factor 2 deber contener el nombre del rea de datos o el nombre del archivo de actualizacin en disco que se desea desbloquear. Se podr codificar un indicador de resultado en las columnas 56 y 57 para que este se active si se produce un error durante la operacin UNLCK.

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

Lenguaje RPG400

105

FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+. 0001.00 H*------------------------------------------------0002.00 H* VIGO ESPAA 0004.00 H* DANIEL HUGO ENRIQUEZ LEIVAS 0005.00 H* PROGRAM : PROG54 0006.00 H* DATE : 2001 0009.00 F*------------------------------------------------0009.01 FMNC501L1IF E K DISK 0009.02 FBPP001L1UF E K DISK 0009.03 0012.01 0028.02 0028.05 0062.73 0062.74 0062.75 0062.76 0062.77 0062.78 0062.79 FBEX010L2UF E K DISK FPROG54P O E 60 PRINTER C*------------------------------------------------C*DESBLOQUEO DE UN REGISTRO MEDIANTE C*LA OPERACION UNLCK C*------------------------------------------------C* C UPDATRPP001 C* C UNLCKRPP001 35 C*

Luego de la ejecucin de la del comando UNLCK el registro de la base de datos en donde estamos posicionado se desbloqueara.

EXFMT ( grabar y leer formato ) Esta operacin esta relacionada con archivos de WORKSTN. La podemos definir como una combinacin de WRITE seguido de READ para un mismo formato de registro. Este archivo WORKSTN deber estar definido en la hoja 'F' como combinado, letra 'C' en la columna 15. En el factor 2 de la hoja de calculo se especificara el nombre del formato de registro a grabar y luego leer. En ejemplos anteriores recordara que hemos utilizado la operacin EXFMT.

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

Lenguaje RPG400

106

FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+. ********** Beginning of data*********** 001.00 H*------------------------------------------------002.00 H* TOLEDO ESPAA 004.00 H* DANIEL HUGO ENRIQUEZ LEIVAS 005.00 H* PROGRAM : PROG54 006.00 H* DATE : 2001 009.00 F*------------------------------------------------009.01 FPROG054 IF E WORKSTN 009.02 FMNC501L1IF E K DISK 009.03 FBPP001L1 UF E K DISK 009.04 FBEX010L2UF E K DISK 012.01 FPROG54P O E 60 PRINTER 028.02 C*------------------------------------------------028.05 C* UTILIZACION DEL COMANDO EXFMT 062.73 C* DESPLIEGA UNA PANTALLA 062.74 C*------------------------------------------------062.75 C* 0062.75 C* 0062.76 C EXFMTRP0541 0062.77 C*

En la sentencia 62.76 podemos observar el uso de la operacin EXFMT la cual desplegara sobre nuestra terminal el formato de registro de pantalla RPO541 contenido en la en el archivo de pantallas PROG054 de la hola - F .-

EXCPT ( Generar una salida en tiempo de calculo) Esta operacin nos permite grabar registros en tiempo de calculo fuera del ciclo lgico del RPG/400. Estos registros que se graban en tiempo de excepcin se identifican en la hoja 'O' (output) con una letra E en la columna 15 y una nombre de EXCPT en las columnas 32 a 37. Este nombre EXCPT deber ser el mismo utilizado en la hoja de calculo factor 2.

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

Lenguaje RPG400

107

FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... ***** Beginning of data ******** 0001.00 H*------------------------------------------------0002.00 H* MADRID ESPAA 0004.00 H* DANIEL HUGO ENRIQUEZ LEIVAS 0005.00 H* PROGRAM : PROG55 0006.00 H* DATE : 2001 0009.00 F*------------------------------------------------0009.01 FPRG055FMIF E WORKSTN 0009.02 FMNC501L1IF E K DISK 0009.03 FBPP001L1UF E K DISK 0009.04 FBEX010L2O E K DISK 0012.01 FPROG55P O E 60 PRINTER 0028.02 C*------------------------------------------------0028.05 C* UTILIZACION DEL COMANDO EXCPT 0062.73 C* GRABA UN REGISTRO POR EXCEPCION 0062.74 C*------------------------------------------------0062.75 C* 0062.76 C EXCPTGRABA 0062.77 C* 0062.78 O GRABA 0062.79 O ARTIC 15 0062.80 O DESCRI 46 0062.81 0*

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

Lenguaje RPG400

108

Ejemplo: Abriendo y cerrando bases de datos. A continuacin encontrara algunas compilaciones de bases de datos, printer files, SDA y el programa el cual analizaremos su funcionamiento.
Compilacin Archivo MAEART maestro de artculos *...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+... 5722SS1 V5R1M0 010525 Data Description V40LBD File name . . . . . . . . . . . . . . . . . . . . . : MAEART Library name . . . . . . . . . . . . . . . . . . : V40LBDHE File attribute . . . . . . . . . . . . . . . . . . : Physical Source file containing DDS . . . . . . . . . . . . : QDDSSRC Library name . . . . . . . . . . . . . . . . . . : V40LBDHE Source member containing DDS . . . . . . . . . . . : MAEART Source member last changed . . . . . . . . . . . . : 01/05/03 16:17:38 Source listing options . . . . . . . . . . . . . . : *SOURCE *LIST DDS generation severity level . . . . . . . . . . . : 20 DDS flagging severity level . . . . . . . . . . . . : 00 File type . . . . . . . . . . . . . . . . . . . . . : *DATA Authority . . . . . . . . . . . . . . . . . . . . . : *LIBCRTAUT Replace file . . . . . . . . . . . . . . . . . . . : *NO Text . . . . . . . . . . . . . . . . . . . . . . . : MAESTRO DE ARTICULOS Compiler . . . . . . . . . . . . . . . . . . . . . : IBM AS/400 Data Descr Data Description Source SEQNBR *...+....1....+....2....+....3....+....4....+....5....+....6....+... 1 A* -----------------------------------------------------------2 A* DHEL SYSTEM BUENOS AIRES REPUBLICA ARGENTINA 3 A* GOLETA SARANDI 4 A* -----------------------------------------------------------5 A* FILE MAEART 21 A* DATE 2002 22 A* AUTOR DANIEL HUGO ENRIQUEZ LEIVAS 31 A*------------------------------------------------------------40 A R RMAEAR 41 A CODART 8 0 TEXT('CODE ARTICULO') 42 A DESCRI 35 TEXT('DESCRIPCION') 43 A RUBRO 4 TEXT('RUBRO') 44 A STOCKG 11 2 TEXT('STOCK GENERAL') 45 A STOCKS 11 2 TEXT('STOCK IN STORE') 47 A PREG 11 2 TEXT('PUNTO R. GENERAL') 50 A FORPRO 8 0 TEXT('FORMULA PRODUCCION' 51 A ESTADO 1 TEXT('ESTADO S=SUSPENDIDO 100 A K CODART ***** END OF SOURCE ***** 5722SS1 V5R1M0 010525 Data Description V40LBD Expanded Source SEQNBR *...+....1....+....2....+....3....+....4....+....5....+....6....+.... 40 R RMAEAR 41 CODART 8P 0B TEXT('CODE ARTICULO') COLHDG('CODART') 42 DESCRI 35A B TEXT('DESCRIPCION') COLHDG('DESCRI') 43 RUBRO 4A B TEXT('RUBRO') 44 STOCKG 11P 2B TEXT('STOCK GENERAL') COLHDG('STOCKG') 45 STOCKS 11P 2B TEXT('STOCK IN STORE') COLHDG('STOCKS') 46 STOCKP 11P 2B TEXT('STOCK EN FABRICA') COLHDG('STOCKP') 47 PREG 11P 2B TEXT('PUNTO R. GENERAL') COLHDG('PREG') 50 FORPRO 8P 0B TEXT('FORMULA PRODUCCION' COLHDG('FORPRO') 51 ESTADO 1A B TEXT('ESTADO S=SUSPENDIDO COLHDG('ESTADO') 100 K CODART 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

Lenguaje RPG400
* * * * * E N D O F E XP AN D E D S O UR C E * * 5722SS1 V5R1M0 010525 Data Description V40LBD Message Summary Total Informational Warning Error Severe (0-9) (10-19) (20-29) (30-99) 0 0 0 0 0 * CPC7301 00 Message . . . . : File MAEART created in lib ***** END OF COMPILATION ** Compilacin Archivo MAEVEN maestro de vendedores 5722SS1 V5R1M0 010525 Data Description V40LBD File name . . . . . . . . . . . . . . . . . . . . . : MAEVEN Library name . . . . . . . . . . . . . . . . . . : V40LBDHE File attribute . . . . . . . . . . . . . . . . . . : Physical Source file containing DDS . . . . . . . . . . . . : QDDSSRC Library name . . . . . . . . . . . . . . . . . . : V40LBDHE Source member containing DDS . . . . . . . . . . . : MAEVEN Source member last changed . . . . . . . . . . . . : 01/06/03 14:11:09 Source listing options . . . . . . . . . . . . . . : *SOURCE *LIST DDS generation severity level . . . . . . . . . . . : 20 DDS flagging severity level . . . . . . . . . . . . : 00 File type . . . . . . . . . . . . . . . . . . . . . : *DATA Authority . . . . . . . . . . . . . . . . . . . . . : *LIBCRTAUT Replace file . . . . . . . . . . . . . . . . . . . : *NO Text . . . . . . . . . . . . . . . . . . . . . . . : MAESTRO DE VENDEDORES Compiler . . . . . . . . . . . . . . . . . . . . . : IBM AS/400 Data Descr Data Description Source SEQNBR *...+....1....+....2....+....3....+....4....+....5....+....6....+.... 1 A* ------------------------------------------------------------2 A* DHEL SYSTEM BUENOS AIRES REPUBLICA ARGENTINA 3 A* GOLETA SARANDI 4 A* ------------------------------------------------------------5 A* FILE MAEVEN 21 A* DATE 2002 22 A* AUTOR DANIEL HUGO ENRIQUEZ LEIVAS 31 A*-------------------------------------------------------------40 A R RMAEVN 41 A CODVEN 4 0 TEXT('COD.VENDEDOR') 42 A AYNV 35 TEXT('A Y N VENDEDOR') 43 A COMIS 7 2 TEXT('COMISION') 100 A K CODVEN ***** END OF SOURCE ***** 5722SS1 V5R1M0 010525 Data Description V40LBD Expanded Source SEQNBR *...+....1....+....2....+....3....+....4....+....5....+....6....+.... 40 R RMAEVN 41 CODVEN 4P 0B TEXT('COD.VENDEDOR') COLHDG('CODVEN') 42 AYNV 35A B TEXT('A Y N VENDEDOR') COLHDG('AYNV') 43 COMIS 7P 2B TEXT('COMISION') COLHDG('COMIS') 100 K CODVEN * * * * * E N D O F E XP AN D E D S O UR C E * * 5722SS1 V5R1M0 010525 Data Description V40LBD Message Summary Total Informational Warning Error Severe (0-9) (10-19) (20-29) (30-99) 0 0 0 0 0 * CPC7301 00 Message . . . . : File MAEVEN created in lib ***** END OF COMPILATION ** Compilacin Archivo MAEZON maestro de zonas 5722SS1 V5R1M0 010525 Data Description V40LBD

109

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

Lenguaje RPG400
File name . . . . . . . . . . . . . . . . . . . . . : MAEZON Library name . . . . . . . . . . . . . . . . . . : V40LBDHE File attribute . . . . . . . . . . . . . . . . . . : Physical Source file containing DDS . . . . . . . . . . . . : QDDSSRC Library name . . . . . . . . . . . . . . . . . . : V40LBDHE Source member containing DDS . . . . . . . . . . . : MAEZON Source member last changed . . . . . . . . . . . . : 01/06/03 14:17:04 Source listing options . . . . . . . . . . . . . . : *SOURCE *LIST DDS generation severity level . . . . . . . . . . . : 20 DDS flagging severity level . . . . . . . . . . . . : 00 File type . . . . . . . . . . . . . . . . . . . . . : *DATA Authority . . . . . . . . . . . . . . . . . . . . . : *LIBCRTAUT Replace file . . . . . . . . . . . . . . . . . . . : *NO Text . . . . . . . . . . . . . . . . . . . . . . . : MAESTRO DE ZONAS Compiler . . . . . . . . . . . . . . . . . . . . . : IBM AS/400 Data Descr Data Description Source SEQNBR *...+....1....+....2....+....3....+....4....+....5....+....6....+.... 1 A* ------------------------------------------------------------2 A* DHEL SYSTEM BUENOS AIRES REPUBLICA ARGENTINA 3 A* GOLETA SARANDI 4 A* ------------------------------------------------------------5 A* FILE MAEZON 21 A* DATE 2002 22 A* AUTOR DANIEL HUGO ENRIQUEZ LEIVAS 31 A*-------------------------------------------------------------40 A R RMAEZN 41 A CODZON 4 0 TEXT('COD.VENDEDOR') 42 A ZONA 35 TEXT('DESCRIPCION') 100 A K CODZON ***** END OF SOURCE ***** 5722SS1 V5R1M0 010525 Data Description V40LBD Expanded Source SEQNBR *...+....1....+....2....+....3....+....4....+....5....+....6....+.... 40 R RMAEZN 41 CODZON 4P 0B TEXT('COD.VENDEDOR') COLHDG('CODZON') 42 ZONA 35A B TEXT('DESCRIPCION') COLHDG('ZONA') 100 K CODZON * * * * * E N D O F E XP AN D E D S O UR C E * * 5722SS1 V5R1M0 010525 Data Description V40LBD Message Summary Total Informational Warning Error Severe (0-9) (10-19) (20-29) (30-99) 0 0 0 0 0 * CPC7301 00 Message . . . . : File MAEZON created in lib ***** END OF COMPILATION **

110

Compilacin Archivo ESTAART estadistica por articulo. 5722SS1 V5R1M0 010525 Data Description File name . . . . . . . . . . . . . . . . . . . . . : ESTAART Library name . . . . . . . . . . . . . . . . . . : V40LBDHE File attribute . . . . . . . . . . . . . . . . . . : Physical Source file containing DDS . . . . . . . . . . . . : QDDSSRC Library name . . . . . . . . . . . . . . . . . . : V40LBDHE Source member containing DDS . . . . . . . . . . . : ESTAART V40LBD

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

Lenguaje RPG400
Source member last changed . . . . . . . . . . . . : 01/07/03 14:09:58 Source listing options . . . . . . . . . . . . . . : *SOURCE *LIST DDS generation severity level . . . . . . . . . . . : 20 DDS flagging severity level . . . . . . . . . . . . : 00 File type . . . . . . . . . . . . . . . . . . . . . : *DATA Authority . . . . . . . . . . . . . . . . . . . . . : *LIBCRTAUT Replace file . . . . . . . . . . . . . . . . . . . : *NO Text . . . . . . . . . . . . . . . . . . . . . . . : ESTADISTICA POR ARTIC Compiler . . . . . . . . . . . . . . . . . . . . . : IBM AS/400 Data Descr Data Description Source SEQNBR *...+....1....+....2....+....3....+....4....+....5....+....6....+.... 1 A* ------------------------------------------------------------2 A* DHEL SYSTEM BUENOS AIRES REPUBLICA ARGENTINA 3 A* GOLETA SARANDI 4 A* ------------------------------------------------------------5 A* FILE ESTAART 21 A* DATE 2002 22 A* AUTOR DANIEL HUGO ENRIQUEZ LEIVAS 31 A*-------------------------------------------------------------40 A R RESTAV 41 A ARTICU 8 0 TEXT('CODE ARTICULO') 42 A VENT01 11 2 TEXT('V.TRIM 01') 43 A VENT02 11 2 TEXT('V.TRIM 02') 44 A VENT03 11 2 TEXT('V.TRIM 03') 45 A VENT04 11 2 TEXT('V.TRIM 04') 100 A K ARTICU ***** END OF SOURCE ***** 5722SS1 V5R1M0 010525 Data Description V40LBD Expanded Source SEQNBR *...+....1....+....2....+....3....+....4....+....5....+....6....+.... 40 R RESTAV 41 ARTICU 8P 0B TEXT('CODE ARTICULO') COLHDG('ARTICU') 42 VENT01 11P 2B TEXT('V.TRIM 01') COLHDG('VENT01') 43 VENT02 11P 2B TEXT('V.TRIM 02') COLHDG('VENT02') 44 VENT03 11P 2B TEXT('V.TRIM 03') COLHDG('VENT03') 45 VENT04 11P 2B TEXT('V.TRIM 04') COLHDG('VENT04') 100 K ARTICU * * * * * E N D O F E XP AN D E D S O UR C E * * 5722SS1 V5R1M0 010525 Data Description V40LBD Message Summary Total Informational Warning Error Severe (0-9) (10-19) (20-29) (30-99) 0 0 0 0 0 * CPC7301 00 Message . . . . : File ESTAART created in li ***** END OF COMPILATION **

111

COMPILACION PANTALLA *...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+... 5722SS1 V5R1M0 010525 Data Description V40LBD File name . . . . . . . . . . . . . . . . . . . . . : PANT01 Library name . . . . . . . . . . . . . . . . . . : V40LBDHE File attribute . . . . . . . . . . . . . . . . . . : Display Source file containing DDS . . . . . . . . . . . . : QDDSSRC Library name . . . . . . . . . . . . . . . . . . : V40LBDHE Source member containing DDS . . . . . . . . . . . : PANT01 Source member last changed . . . . . . . . . . . . : 01/06/03 14:54:53 Source listing options . . . . . . . . . . . . . . : *SOURCE *LIST DDS generation severity level . . . . . . . . . . . : 20 DDS flagging severity level . . . . . . . . . . . . : 00 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

Lenguaje RPG400
Authority . . . . . . . . . . . . . . . . . . . . . : *LIBCRTAUT Replace file . . . . . . . . . . . . . . . . . . . : *NO Text . . . . . . . . . . . . . . . . . . . . . . . : MANTENIMIENTO BASE DE Compiler . . . . . . . . . . . . . . . . . . . . . : IBM AS/400 Data Descr Data Description Source SEQNBR *...+....1....+....2....+....3....+....4....+....5....+....6....+.. 10 A*%%TS SD 20030106 144921 GOLETA REL-V5R1M0 5722-WDS 20 A*-----------------------------------------------------------60 A* LISTADO DE BASES DE DATOS 70 A* AUTOR DANIEL H. ENRIQUEZ LEIVAS 80 A*-----------------------------------------------------------90 A*%%EC 100 A DSPSIZ(24 80 *DS3) 110 A REF(V40LBDHE/BPP001) 120 A R RPAN01 130 A*%%TS SD 20030106 144921 GOLETA REL-V5R1M0 5722-WDS 140 A CF02 150 A CF03 160 A CF04 170 A CF05 180 A CF06 190 A CF07 200 A CF08 210 A CF09 220 A CF11 230 A 2 68DATE 240 A EDTWRD(' / / ') 250 A 3 4'======================== 260 A ========================= 270 A =======' 280 A 21 4'-----------------------290 A ------------------------300 A -------' 310 A 6 4'-----------------------320 A ------------------------330 A -------' 340 A 2 4'DHE SISTEMAS' 350 A 2 60'DATE' 360 A 20 28'F3 - EXIT' 370 A 8 4'-----------------------380 A ------------------------390 A -------' 400 A 19 4'-----------------------410 A ------------------------420 A -------' 430 A 4 24'Listado de Estadistica d 440 A 13 28'F5 - Listado de ventas p 450 A r' 460 A 15 28'F7 - Listado de ventas p 470 A 17 28'F9 - Listado de ventas p 480 A o' 490 A 11 28'F2 - Listado de ventas p 500 A o' 510 A 7 28'Su opcion ?' ***** END OF SOURCE ***** 5722SS1 V5R1M0 010525 Data Description V40LBD Expanded Source SEQNBR *...+....1....+....2....+....3....+....4....+....5....+....6....+.... 100 DSPSIZ(24 80 *DS3) 120 R RPAN01 CF02 CF03 CF04 CF05 CF06 210 CF09 CF11 230 2 68DATE EDTWRD(' / / ') 250 3 4'======================== 250 ========================= 250 =======' 280 21 4'-----------------------280 ------------------------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

112

Lenguaje RPG400
280 310 310 310 340 350 360 370 370 370 400 400 400 430 440 440 460 470 470 490 490 510 -------' 6 4'------------------------------------------------------' 2 4'DHE SISTEMAS' 2 60'DATE' 20 28'F3 - EXIT' 8 4'------------------------------------------------------' 19 4'------------------------------------------------------' 4 24'Listado de Estadistica d 13 28'F5 - Listado de ventas p r' 15 28'F7 - Listado de ventas p 17 28'F9 - Listado de ventas p o' 11 28'F2 - Listado de ventas p o' 7 28'Su opcion ?' * * * * * E N D O F E XP AN D E D S O UR C E * *

113

5722SS1 V5R1M0 010525 Data Description V40LBD Message Summary Total Informational Warning Error Severe (0-9) (10-19) (20-29) (30-99) 0 0 0 0 0 * CPC7301 00 Message . . . . : File PANT01 created in lib ***** END OF COMPILATION **

PANTALLA DHE SISTEMAS DATE ========================== Listado de Estadistica de Ventas 1/08/03

---------------------------------------------------------------------------Su opcion ? ---------------------------------------------------------------------------F2 - Listado de ventas por articulo F5 - Listado de ventas por Vendedor F7 - Listado de ventas por zona F9 - Listado de ventas por segmento ---------------------------------------------------------------------------F3 - EXIT ----------------------------------------------------------------------------

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

Lenguaje RPG400

114

PRINTER FILE ESTAARTP ( ESTADISTICA POR ARTICULO) *...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+... 5722SS1 V5R1M0 010525 Data Description V40LBD File name . . . . . . . . . . . . . . . . . . . . . : ESTAARTP Library name . . . . . . . . . . . . . . . . . . : V40LBDHE File attribute . . . . . . . . . . . . . . . . . . : Printer Source file containing DDS . . . . . . . . . . . . : QDDSSRC Library name . . . . . . . . . . . . . . . . . . : V40LBDHE Source member containing DDS . . . . . . . . . . . : ESTAARTP Source member last changed . . . . . . . . . . . . : 01/08/03 17:30:42 Source listing options . . . . . . . . . . . . . . : *SOURCE *LIST DDS generation severity level . . . . . . . . . . . : 20 DDS flagging severity level . . . . . . . . . . . . : 00 Authority . . . . . . . . . . . . . . . . . . . . . : *LIBCRTAUT Replace file . . . . . . . . . . . . . . . . . . . : *NO Text . . . . . . . . . . . . . . . . . . . . . . . : LISTADO ESTADISTICA P Compiler . . . . . . . . . . . . . . . . . . . . . : IBM AS/400 Data Descr Data Description Source SEQNBR *...+....1....+....2....+....3....+....4....+....5....+....6....+.... 2 A REF(V40LBDHE/ESTAART) 3 A R TITU 4 A SKIPB(001) 6 A LIN01 198 1 7 A SPACEA(1) 8 A TIT01 13 1 9 A TIT02 17 +5 15 A SPACEA(1) 16 A LIN02 198 1 17 A SPACEA(1) 18 A R DETAA 19 A CODAR 11 2 1 20 A DESCA 35 +2 21 A VENT01 R +3EDTCDE(1) 23 A VENT02 R +3EDTCDE(1) *...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+... 24 A VENT03 R +3EDTCDE(1) 25 A VENT04 R +3EDTCDE(1) 200 A SPACEA(1) ***** END OF SOURCE ***** 5722SS1 V5R1M0 010525 Data Description Expanded Source SEQNBR *...+....1....+....2....+....3....+....4....+....5....+....6....+.... 3 R TITU SKIPB(001) 6 LIN01 132A O 1SPACEA(1) 8 TIT01 13A O 1 9 TIT02 17A O 19SPACEA(1) 16 LIN02 132A O 1SPACEA(1) 18 R DETAA 19 CODAR 11S 2O 1 20 DESCA 35A O 14 21 VENT01 11S 2O 52 * Referenced Field . . . . . . . . . . . : VENT01 * Format . . . . . . . . . . . . . . . : RESTAV * File . . . . . . . . . . . . . . . . : ESTAART * Library . . . . . . . . . . . . . . . : V40LBDHE 21 EDTCDE(1) 21 TEXT('V.TRIM 01 21 ') 23 VENT02 11S 2O 69 * Referenced Field . . . . . . . . . . . : VENT02 * Format . . . . . . . . . . . . . . . : RESTAV * File . . . . . . . . . . . . . . . . : ESTAART * Library . . . . . . . . . . . . . . . : V40LBDHE 23 EDTCDE(1) 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

V40LBD

Lenguaje RPG400
23 TEXT('V.TRIM 02 23 ') 24 VENT03 11S 2O 86 * Referenced Field . . . . . . . . . . . : VENT03 * Format . . . . . . . . . . . . . . . : RESTAV * File . . . . . . . . . . . . . . . . : ESTAART * Library . . . . . . . . . . . . . . . : V40LBDHE 24 EDTCDE(1) 24 TEXT('V.TRIM 03 24 ') 25 VENT04 11S 2O 103 * Referenced Field . . . . . . . . . . . : VENT04 * Format . . . . . . . . . . . . . . . : RESTAV * File . . . . . . . . . . . . . . . . : ESTAART * Library . . . . . . . . . . . . . . . : V40LBDHE 25 EDTCDE(1) SPACEA(1) 25 TEXT('V.TRIM 04 25 ') * * * * * E N D O F E XP AN D E D S O UR C E * * 5722SS1 V5R1M0 010525 Data Description V40LBD Message Summary Total Informational Warning Error Severe (0-9) (10-19) (20-29) (30-99) 0 0 0 0 0 * CPC7301 00 Message . . . . : File ESTAARTP created in l ***** END OF COMPILATION **

115

PROGRAMA PROG22 FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 *************** Beginning of data ************************************* 0001.00 H*------------------------------------------------0002.00 H* ABRIENDO Y CERRANDO BASES DE DATOS 0004.00 H* AUTOR : DANIEL HUGO ENRIQUEZ LEIVAS 0004.01 H* JUAN ALBERTO ENRIQUEZ SITTNER 0005.00 H* PROGRAM : PROG22 0005.01 H* DATE : 08-02-2002 0006.00 H* BUENOS AIRES - REPUBLICA ARGENTINA 0009.00 F*------------------------------------------------0009.01 FPANT01 CF E WORKSTN 0009.02 FMAEART IF E K DISK UC 0009.03 FMAEVEN IF E K DISK UC 0009.04 FMAEZON IF E K DISK UC 0009.05 FMAESEG IF E K DISK UC 0009.06 FESTAART IF E K DISK UC 0009.07 FESTAVEN IF E K DISK UC 0009.08 FESTAZON IF E K DISK UC 0009.09 FESTASEG IF E K DISK UC 0009.10 FESTAARTPO E 60 PRINTER 0009.11 FESTAVENPO E 61 PRINTER 0009.12 FESTAZONPO E 62 PRINTER 0009.13 FESTASEGPO E 63 PRINTER 0012.02 F*------------------------------------------------0028.05 C* 0028.06 C *INKC DOWEQ*OFF 0028.07 C* 0028.08 C EXFMTRPAN01 0028.10 C* 0028.14 C *INKC IFEQ *ON 0028.15 C LEAVE 0028.16 C ENDIF 0028.18 C* 0028.19 C *INKB CASEQ*ON LISA 0028.20 C *INKE CASEQ*ON LISV 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

Lenguaje RPG400
0028.21 0028.22 0028.23 0028.33 0028.34 0028.35 0028.36 0053.00 0054.00 0055.00 0056.00 0056.02 0056.03 0056.04 0056.05 0056.06 0056.07 0056.08 0056.09 0058.00 0058.01 0058.02 0058.03 0058.04 0058.05 0058.06 0059.00 0061.02 0061.03 0061.04 0061.05 0061.06 0062.00 0066.12 0066.13 0066.14 0066.15 0066.16 0066.17 0066.18 0066.19 0066.20 0066.21 0066.22 0066.23 0066.24 0066.25 0066.26 0066.27 0066.28 0066.29 0066.30 0066.31 0066.32 0066.33 0066.34 0066.35 0066.36 0066.37 0066.38 0066.39 0066.40 0066.41 0066.43 0066.44 0066.45 0066.46 0066.47 C *INKG CASEQ*ON LISZ C *INKI CASEQ*ON LISS C ENDCS C ENDDO C* C MOVE *ON *INLR C* C*------------------------------------------------C* LISTADO ESTADISTICA POR ARTICULO C*------------------------------------------------C LISA BEGSR C* C OPEN MAEART C OPEN ESTAART C* C MOVE '11' *IN90 C *LOVAL SETLLESTAART 91 C READ ESTAART 90 C WRITETITA C *IN90 DOWNE*ON C *IN60 IFEQ *ON C EXSR SALTO C ENDIF C ARTICU CHAINMAEART 80 C MOVELDESCAR DESCA C WRITEDETAA C READ ESTAART 90 C ENDDO C* C CLOSEMAEART C CLOSEESTAART C* C ENDSR C*------------------------------------------------C* LISTADO POR VENDEDOR C*------------------------------------------------C LISV BEGSR C* C OPEN MAEVEN C OPEN ESTAVEN C* C MOVE '11' *IN90 C *LOVAL SETLLESTAVEN 91 C READ ESTAVEN 90 C WRITETITV C *IN90 DOWNE*ON C *IN61 IFEQ *ON C EXSR SALTO C ENDIF C VENDE CHAINMAEVEN 80 C MOVELAYNV AYNVP C WRITEDETAV C READ ESTAVEN 90 C ENDDO C* C CLOSEMAEVEN C CLOSEESTAVEN C* C ENDSR C*------------------------------------------------C* LISTADO POR ZONA C*------------------------------------------------C LISZ BEGSR C* C OPEN MAEZON C OPEN ESTAZON C* C MOVE '11' *IN90 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

116

Lenguaje RPG400
0066.48 C *LOVALSETLLESTAZON 91 0066.49 C READ ESTAZON 90 0066.50 C WRITETITZ 0066.51 C *IN90 DOWNE*ON 0066.52 C *IN62 IFEQ *ON 0066.53 C EXSR SALTO 0066.54 C ENDIF 0066.55 C CODZ CHAINMAEZON 80 0066.56 C MOVELZONAP DESCZP 0066.57 C WRITEDETAZ 0066.58 C READ ESTAZON 90 0066.59 C ENDDO 0066.60 C* 0066.61 C CLOSEMAEZON 0066.62 C CLOSEESTAZON 0066.63 C* 0066.64 C ENDSR 0066.65 C*------------------------------------------------0067.00 C* LISTADO POR SEGMENTO DE MERCADO 0068.00 C*------------------------------------------------0069.00 C LISS BEGSR 0070.00 C* 0070.01 C OPEN MAESEG 0070.02 C OPEN ESTASEG 0070.03 C* 0071.00 C MOVE '11' *IN90 0072.00 C *LOVAL SETLLESTASEG 91 0073.00 C READ ESTASEG 90 0074.00 C WRITETITS 0075.00 C *IN90 DOWNE*ON 0076.00 C *IN62 IFEQ *ON 0077.00 C EXSR SALTO 0078.00 C ENDIF 0078.01 C CODS CHAINMAESEG 80 0078.02 C MOVELDESCRS DESCSP 0079.00 C WRITEDETAS 0080.00 C READ ESTASEG 90 0081.00 C ENDDO 0081.01 C* 0081.02 C CLOSEMAESEG 0081.03 C CLOSEESTASEG 0081.04 C* 0083.00 C ENDSR 0083.01 C*------------------------------------------------0083.02 C* RUTINA DE SALTO DE PAGINA 0083.03 C*------------------------------------------------0083.04 C SALTO BEGSR 0083.05 C* 0083.06 C *IN60 IFEQ *OFF 0083.07 C WRITETITA 0083.08 C ENDIF 0083.09 C* 0083.10 C *IN61 IFEQ *OFF 0083.11 C WRITETITV 0084.00 C ENDIF 0085.00 C* 0086.00 C *IN62 IFEQ *OFF 0087.00 C WRITETITZ 0088.00 C ENDIF 0089.00 C* 0090.00 C *IN63 IFEQ *OFF 0091.00 C WRITETITS 0092.00 C ENDIF 0093.00 C* 0094.00 C MOVE '0000' *IN60 0095.00 C* 0096.00 C ENDSR ****************** End of data ******************* 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

117

Lenguaje RPG400 Desarrollo del programa PROG22

118

Al comenzar la ejecucion del programa el RPG/400 no abrira ninguna base de datos ya que segn lo especificado en la hoja - F - las mismas se abrirn durante las operaciones de calculo. En la hoja de calculo encontramos un DOWEQ que controla el flujo principal del programa. Este DOWxx se ejecutara siempre y cuando el *INKC este desactivado o sea el usuario no presione el mandato 3 , obsrvese la pantalla de ejemplo. Al desplegar la pantalla el programa esta a la espera de que se presione uno de los mandatos indicados en la misma. Si se presiona el mandato por ejemplo 2 (*INKB) las operacin CASEQ bifurcara el control del programa a la rutina LISA ( listado de artculos ). Una vez en esta rutina nos encontramos con las operaciones OPEN que abrirn las bases de datos MAEART ( maestro de articulo ) y ESTAART ( estadstica por articulo ). En la sentencia 56.07 nos posicionamos para comenzar la lectura de la base de datos la cual se leer hasta que el indicador 90 no se active por fin de archivo ( operaciones SETLL y READ ). Tambin controlamos por medio del indicador 60 el desbordamiento o overflow de pagina efectuando el salto correspondiente al llegar a la lnea 66 de impresin segn los parmetros de compilacin del printer file. Como necesitamos la descripcin del articulo la obtenemos del archivo MAEART por medio de la operacin CHAIN. Al finalizar la lectura e impresin de los registro de todos los artculos se encender el indicador 90 por final de archivo que obligara a abandonar el DOWxx y a continuacin nos encontramos con las operaciones CLOSE que cerraran las bases de datos que hemos utilizado y al finalizar la rutina devolver el control del programa al DOWxx de la sentencia 28.06 desplegando nuevamente la pantalla y esperando la accin correspondiente por parte del usuario . Como vera este ciclo de funcionamiento es similar para las rutinas de impresin de estadstica por vendedor, zona y segmento variando en cada una de ellas sus correspondientes bases de datos y printer files.

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

Lenguaje RPG400 15. OPERACIONES DE INFORMACION. DEBUG (Depuracin) DUMP (Vuelco del programa) SHTDN (Cierre) TIME (Hora del da)

119

DEBUG (Depuracin) Esta operacin permite al programador depurar un programa que no esta funcionando de manera adecuada. Con esta operacin se graban registros que contienen la informacin que ser de ayuda para buscar los errores de programacin. Esta operacin se puede utilizar independientemente de o en combinacin con las funciones de prueba y depuracin del sistema operativo OS/400. La misma se puede especificar en cualquier punto del programa RPG dentro de la hoja de calculo. Al encontrar esta operacin se graban los registros correspondientes con informacin en ese punto del programa. DUMP (Vuelco del programa) Esta operacin nos permite realizar un vuelco del programa proporcionndonos informacin sobre todos los archivos, campos, estructuras de datos, matrices, tablas e indicadores utilizados.

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

Lenguaje RPG400

120

SHTDN (Cierre) Esta operacin nos permite determinar si el operador del sistema ha solicitado el cierre o desactivacin del mismo. 0062.80 0062.81 0062.82 0062.83 0062.84 0062.85 0062.86 0062.87 0062.88 62.89 62.90 62.91 0062.90 0062.91 0062.92 0062.93 0062.94 0062.95 0062.96 C *LOVAL SETLLBPP001L1 C READ RBFP01 C WRITETITU C *IN90 DOWEQ*OFF C *IN60 IFEQ *ON C WRITETITU C MOVE '0' *IN60 C ENDIF C WRITEDETA C* C SHTDN C 75 GOTO FIN C READ RBFP01 C *IN90 IFEQ *ON C LEAVE C ENDIF C ENDDO C* C ENDSR 90 90

75 90

Si el operador del sistema ha solicitado su desactivacin se encender el indicador 75 codificado en las columnas 54 y 55 y ha continuacin se ejecutara la sentencia condicionada por este indicador GOTO FIN

TIME

(Hora del da)

Esta operacin nos permite conocer el da y hora del sistema.

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

Lenguaje RPG400 28.13 28.14 028.15 028.16 028.17 028.18 028.19 028.20 028.21 028.22 028.23 028.24 028.25 C C

121

C C* C* C C C C C C C C

*LOVALSETLLFCL005L1 READ RFC05

90 90

*IN90 DOWEQ*OFF CODVTAIFNE *ZEROS EXSR PRIN01 ENDIF READ RFC05 90 *IN90 IFEQ *ON TIME HORA 60 TIME HRDAT 120

17. OPERACIONES DECLARATIVAS Y DE LLAMADA CALL ( Llamada a un programa ) PARM ( identificar parametros ) PLIST ( identificar una lista de parmetros ) RETRN ( Retornar al programa ) FREE ( Desactivar un programa ) DEFN ( Definicin de campo ) KLIST ( Definir una clave ) KFLD ( Definir partes de una clave )

CALL ( Llamada a un programa ) Esta operacin nos permite transferir el control a un programa especificado en el factor 2. El factor 2 puede contener un nombre de campo, un literal, un elemento de matriz o una constante con nombre los cuales debern contener el nombre del programa que deseamos llamar y opcionalmente podr contener el nombre de la biblioteca en el cual se ubica el programa objeto. 0028.05 0028.06 0028.07 C* C C* CALL 'PGM01'

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

Lenguaje RPG400

122

En este ejemplo estamos transfiriendo el control del programa al programa PGM01. Si necesitramos hacer mencin a la biblioteca donde se encuentra en programa, podemos especificar el nombre de esta inmediatamente despus una barra inclinada y a continuacin el nombre del programa

0028.00 0028.01 0028.02 0028.05 0028.06 28.07

C*------------------------------------------------C*OPERACION CALL C*------------------------------------------------C* C CALL 'LIB/PGM1' C*

Pero no encontramos con la limitacin de 8 caracteres para hacer referencia a la biblioteca y al nombre del programa. Esto lo podemos solucionar mediante la definicin de una constante con nombre en la hoja 'I' de la siguiente manera. 0012.02 0012.03 0028.00 0028.01 0028.02 0028.05 0028.06 0028.07 0028.08 0028.09 I 'PGM01' C C0001 I 'V40LBDHE/PGM02' C C0002 C*------------------------------------------------C*OPERACION CALL C*------------------------------------------------C* C CALL C0001 C* C CALL C0002 C*

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

Lenguaje RPG400

123

PARM ( identificar parmetros ) Esta operacin nos permite declarar los parmetros que componen una lista de parmetros (PLIST) que deseamos transferir hacia otro programa. Observemos el ejemplo, hemos definido dos parmetros, el parmetro CLIENT de 8 posiciones y el parmetro CUENTA de 12 posiciones los que sern utilizados por el programa NSA01. Las sentencias PARM debern estar en el orden esperado por el programa llamado. Estas sentencias PARM pueden especificarse en cualquier lugar de la hoja de calculo, calculo de totales o cortes de control. 0028.05 0028.06 0028.07 0028.08 0028.09 0028.10 C* C CALL 'NSA01' LPARAM C LPARAM PLIST C PARM CLIENT 8 C PARM CUENTA 12 C*

PLIST ( identificar una lista de parmetros ) Esta operacin nos permite definir un nombre simblico nico para una lista de parmetros que deseamos especificar en una operacin CALL.

0028.05 0028.06 0028.07 0028.08 0028.09 0028.10

C* C CALL 'NSA01' LPARAM C LPARAM PLIST C PARM CLIENT 8 C PARM CUENTA 12 C*

En el ejemplo que estamos utilizando este nombre simblico esta representado por LPARAM y el programa llamado tendr acceso a

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

Lenguaje RPG400 todos los parmetros comprendidos en la operacin PLIST definidos por las operaciones PARM campos - CLIENT y CUENTA -. RETRN ( Retornar al programa )

124

Esta operacin produce el retorno del programa llamado al programa llamador. Tenemos nuestro programa PG056 ( el llamador ) y realizamos una operacin CALL al programa NSA01(llamado) 0028.05 0028.06 0028.07 0028.08 0028.09 0028.10 C* C CALL 'NSA01' LPARAM C LPARAM PLIST C PARM CLIENT 8 C PARM CUENTA 12 C*

En el programa NSA01 en un lugar especificado en la hoja de calculo nos encontraremos con la operacin RETRN que devolver el control al programa llamador.

0028.21 0028.22 0028.23 0028.24 0028.25 0028.26 0028.27 0028.28 0028.29 0028.30

C* C TASAP MULT CAPIT CAPTOT C EXSR IMPRE C* C ZONA IFGT ZONAS C EXSR PROCE C EXSR PRIN1 C ENDIF C* C RETRN

FREE

( Desactivar un programa )

La operacin FREE elimina un programa de la lista de programas activados, liberando el almacenamiento esttico y asegurando la inicializacin de programa para la prxima vez que se lo llame. Esta operacin no cierra archivos ni desbloquea reas de datos. El factor 2 deber contener el nombre del programa a desactivar pudiendo contener un nombre de campo, una constante con nombre, una
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

Lenguaje RPG400

125

literal o un elemento de matriz que contenga el nombre del programa a desactivar. En las columnas 57 y 58 podremos codificar un indicador que se activara si esta operacin no se completa satisfactoriamente. 0028.05 0028.06 0028.07 0028.08 0028.09 0028.10 0028.30 0028.31 0028.32 C* C CALL 'NSA01' C lPARAM PLIST C PARM C PARM C* C* C FREE 'NSA01' C*

LPARAM CLIENT 8 CUENTA 12 72

Hemos llamado al programa NSA01, este ha realizado su funcin y al regresar al programa llamador en algn lugar de la hoja de calculo hemos liberado al mismo por medio de la operacin FREE. Si al realizar esta operacin se produjera un error en el ejemplo se activara el indicador de resultado 72.

DEFN ( Definicin de campo ) La operacin declarativa DEFN nos permite definir un campo en base a los atributos de otro campo o definir un campo como un rea de datos. Supongamos que tenemos definidos los siguientes campos: CAM01 de caracteres de 6 posiciones CAM02 numrico de 5 dgitos con 2 posiciones decimales

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

Lenguaje RPG400 0028.02 0028.05 0028.06 0028.07 0028.08 CAM01 0028.09 0028.10 0028.11 0028.12 0028.13 0028.14 0028.15 0028.16 0028.17 0028.18 0028.19 0028.20 0028.21 0028.22 0028.23 0028.24 0028.25 0028.26 C*------------------------------------------------C* C EXSR INI C* C* CAM03 DEFINIDO CON LOS MISMOS ATRIBUTOS QUE C* C *LIKE DEFN CAM01 CAM03 C* C* C* CAM04 DEFINIDO DE 8 CARACTERES C* C *LIKE DEFN CAM01 CAM04 + 2 C* C* CAM05 DEFINIDO DE 5 CARACTERES C* C *LIKE DEFN CAM01 CAM05 - 1 C* C* C* CAM06 DEFINIDO DE 7 DIGITOS 2 DECIMALES C* C *LIKE DEFN CAM02 CAM06 + 2 C* C *LOVAL SETLLMOVI 90 C Sequence number . . . 0028.24 Result

126

Prompt type . . . Level

N01N02N03 Factor 1 Operation Factor 2 *LIKE DEFN CAM02 CAM06 Decimal Length Positions H/N/P HI LO EQ Comment +2

Podemos utilizar las posiciones 49 a 51 ( longitud de campo ) para modificar la longitud del campo a definir. Un signo '+' en la posicin 49 incrementara su longitud y un signo '-' indicara una reduccin.

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

Lenguaje RPG400

127

KLIST ( Definir una clave ) Esta operacin es una operacin declarativa que da un nombre a una lista de KFLD. Esta lista la podemos utilizar como argumento de bsqueda para recuperar registros de archivos que tienen una clave compuesta. Una operacin KLIST puede especificarse en cualquier lugar de la hoja de clculos. 0028.25 0028.26 0028.27 0028.28 C* C C C*

CLAVE

KLIST

En el ejemplo anterior el campo CLAVE contendr la clave de acceso para acceder a nuestra base de datos.

KFLD ( Definir partes de una clave ) Esta operacin nos permite definir los campos que conformaran la clave o argumento de bsqueda de una operacin KLIST 0028.25 0028.26 0028.27 0028.28 0028.29 C* C C C C CLAVE KLIST KFLD KFLD KFLD

CLIENT TIPCBT NUMCBT

Ahora siguiendo con nuestro ejemplo el campo CLAVE estar compuesto por los campos CLIENT,TIPCBT,NUMCBT , cliente, tipo de comprobante y numero de cliente respectivamente., o sea hemos definido una clave compuesta para acceder a nuestra base de datos.

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

Lenguaje RPG400

128

18. SUBFILE
A continuacin desarrollaremos un ejemplo donde veremos en sencillo programa la utilizacin de SUBFILE . Nuestro programa consistir en desarrollar un visualizador del maestro de vendedores y desde este visualizador poder acceder a la estadstica de venta y movimientos de facturacin del vendedor seleccionado. DDS utilizadas en el programa ejemplo: Archivo maestro de vendedores :
*************** Beginning of data *************** 0000.01 A* --------------------------------------------------------------0000.02 A* DHEL SYSTEM BUENOS AIRES REPUBLICA ARGENTINA 0000.03 A* GOLETA SARANDI 0000.04 A* --------------------------------------------------------------0000.05 A* FILE MAEVEN 0000.21 A* DATE 2002 0000.22 A* AUTOR DANIEL HUGO ENRIQUEZ LEIVAS 0000.31 A*---------------------------------------------------------------0000.40 A R RMAEVN 0000.41 A CODVEN 4S 0 TEXT('COD.VENDEDOR') 0000.42 A AYNV 35A TEXT('A Y N VENDEDOR') 0000.43 A COMIS 7S 2 TEXT('COMISION') 0001.00 A K CODVEN ****************** End of data ************

Archivo Estaditica de venta trimestral por vendedor:

*************** Beginning of data ******************* 0000.01 A* --------------------------------------------------------------0000.02 A* DHEL SYSTEM BUENOS AIRES REPUBLICA ARGENTINA 0000.03 A* GOLETA SARANDI 0000.04 A* --------------------------------------------------------------0000.05 A* FILE ESTAART 0000.21 A* DATE 2002 0000.22 A* AUTOR DANIEL HUGO ENRIQUEZ LEIVAS
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

Lenguaje RPG400
0000.31 A*---------------------------------------------------------------0000.40 A R RESTAV 0000.41 A VENDE 4S 0 TEXT('COD.VENDEDOR') 0000.42 A VENT01 11S 2 TEXT('V.TRIM 01') 0000.43 A VENT02 11S 2 TEXT('V.TRIM 02') 0000.44 A VENT03 11S 2 TEXT('V.TRIM 03') 0000.45 A VENT04 11S 2 TEXT('V.TRIM 04') 0001.00 A K VENDE ****************** End of data ******************

129

Archivo movimientos de facturacion:

*************** Beginning of data ********************* 0000.01 A* -----------------------------------------------------------0000.02 A* DHEL SYSTEM BUENOS AIRES REPUBLICA ARGENTINA 0000.03 A* GOLETA SARANDI 0000.04 A* -----------------------------------------------------------0000.05 A* FILE MOVFAC 0000.21 A* DATE 2002 0000.22 A* AUTOR DANIEL HUGO ENRIQUEZ LEIVAS 0000.31 A*------------------------------------------------------------0000.40 A R RMOVFA 0000.41 A CBTE 2A TEXT('TIP.COMPROB') 0000.42 A NUMERO 6S 0 TEXT('NUMERO') 0000.43 A CLIENT 5S 0 TEXT('CLIENTE') 0000.44 A VEND 4S 0 TEXT('VENDEDOR') 0000.45 A IMPORT 11S 2 TEXT('IMPORTE') ****************** End of data *******************

Archivo movimientos de facturacion. Lgico indexado por vendedor:

*************** Beginning of data **************** 0000.01 A* -------- -----0000.02 A* SISTEMA FACTURACION 0000.03 A* ARCHIVO MOVFAC 0000.21 A* LOGICO MOVFACL5 0000.23 A* AUTOR DANIEL HUGO ENRIQUEZ LEIVAS 0000.31 A*-----------------------------------------------------------0000.40 A R RMOVFA PFILE(V40LBDHE/MOVFAC) 0000.41 A K VEND ****************** End of data ***************

Pantalla PROG60FM :
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

Lenguaje RPG400

130

FMT A* .....A*. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+.. *************** Beginning of data ********************************* 0000.10 A*%%TS SD 20030118 115826 GOLETA REL-V5R1M0 5722-WDS 0000.20 A*%%EC 0000.30 A DSPSIZ(24 80 *DS3) 0000.40 A REF(*LIBL/MAEVEN) 0000.50 A R PAN6001 SFL 0000.60 A SFLNXTCHG 0000.70 A*%%TS SD 20030112 182939 GOLETA REL-V5R1M0 5722-WDS 0000.80 A CODVEP 4S 0O 10 7COLOR(YLW) 0000.90 A AYNP 35A O 10 21COLOR(YLW) 0001.00 A OP 1A B 10 63COLOR(RED) 0001.10 A R CPAN6001 SFLCTL(PAN6001) 0001.20 A*%%TS SD 20030117 174159 GOLETA REL-V5R1M0 5722-WDS 0001.30 A SFLSIZ(9999) 0001.40 A SFLPAG(0007) 0001.50 A CF03 0001.60 A OVERLAY 0001.70 A KEEP 0001.80 A 40 SFLEND 0001.90 A 41 SFLDSP 0002.00 A 42 SFLDSPCTL 0002.10 A 43 SFLCLR 0002.20 A 2 31'DHEL' 0002.30 A COLOR(BLU) 0002.40 A 2 36'SISTEMAS' 0002.50 A COLOR(BLU) 0002.60 A 3 25'VISUALIZADOR DE VENDEDORES 0002.70 A COLOR(BLU) 0002.80 A 5 11'1= ESTADISTICA DEL VENDEDO 0002.90 A F3 = EXIT' 0003.00 A COLOR(WHT) 0003.10 A 4 4'__________________________ 0003.20 A ___________________________ 0003.30 A COLOR(RED) 0003.40 A 6 4'__________________________ 003.60 A COLOR(RED) 0005.00 A R PAN6002 0005.10 A*%%TS SD 20030112 115639 GOLETA REL-V5R1M0 5722-WDS 0005.20 A WINDOW(2 2 6 73) 0005.30 A OVERLAY 0005.40 A CF03 0005.50 A CF05 0005.60 A 4 17'trim 01' 0005.70 A COLOR(RED) 0005.80 A 4 32'trim 02' 0005.90 A COLOR(RED) 0006.00 A 4 47'trim 03' 0006.10 A COLOR(RED) 0006.20 A 4 61'trim 04' 0006.30 A COLOR(RED) 0006.40 A CV 4A O 3 18COLOR(BLU)
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

Lenguaje RPG400
0006.50 0006.60 0006.70 0006.80 0006.90 0007.00 0007.10 0007.20 0007.30 0007.40 0007.50 0007.60 0007.70 0007.80 0007.90 0007.10 0007.20 0007.30 0007.40 0007.50 0007.60 0007.70 0007.80 0007.90 0008.00 0008.10 0008.20 0008.30 0008.40 0008.50 0008.60 0008.70 0008.80 0008.90 0009.00 0009.10 0009.20 0009.30 0009.40 0009.50 0009.60 0009.70 0009.80 0009.90 0010.00 0010.10 0010.20 0010.30 0010.40 0010.50 0010.60 0010.70 0010.71 0010.80 A AYN 35A O 3 29COLOR(BLU) A 1 17'Estadistica trimestral del vendedor: A r:' A COLOR(WHT) A 1 10'!' A COLOR(WHT) A 2 10'!' A COLOR(WHT) A 3 10'!' A COLOR(WHT) A 4 10'!' A COLOR(WHT) A 1 2'DHEL' A COLOR(WHT) A 2 1'________' A 2 10'!' A COLOR(WHT) A 3 10'!' A COLOR(WHT) A 4 10'!' A COLOR(WHT) A 1 2'DHEL' A COLOR(WHT) A 2 1'________' A COLOR(WHT) A 3 1'F3=EXIT' A COLOR(WHT) A 2 12'__________________________ A _________________________' A COLOR(WHT) A 1 58'Bs.As. Arg.' A COLOR(WHT) A 4 1'________' A COLOR(WHT) A T1 11 2O 5 14EDTCDE(1) A COLOR(WHT) A T2 11 2O 5 29EDTCDE(1) A COLOR(WHT) A T3 11 2O 5 44EDTCDE(1) A COLOR(WHT) A T4 11 2O 5 59EDTCDE(1) A COLOR(WHT) A 5 10'!' A COLOR(WHT) A 5 1'F5=OVD' A COLOR(WHT) A*-------------------------------------------A R PAN6101 SFL A*%%TS SD 20030118 115826 GOLETA REL-V5R1M0 5722-WDS A CBTP 2 O 4 4COLOR(YLW) A NUMERP 5 0O 4 7COLOR(YLW) A CLIENP 6 0O 4 14COLOR(YLW) A IMPORP 11 0O 4 22COLOR(YLW) A EDTCDE(1)
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

131

Lenguaje RPG400
0010.90 A R CPAN6101 SFLCTL(PAN6101) 0011.00 A*%%TS SD 20030118 115826 GOLETA REL-V5R1M0 5722-WDS 0011.10 A SFLSIZ(9999) 0011.20 A SFLPAG(0006) 0011.30 A WINDOW(11 2 10 42) 0011.40 A CF03 0011.50 A OVERLAY 0011.60 A KEEP 0011.70 A 40 SFLEND 0011.80 A 41 SFLDSP 0011.90 A 42 SFLDSPCTL 0012.00 A 43 SFLCLR 0012.10 A 2 1'__________________________ 0012.20 A ______' 0012.30 A 1 34'F3=EXIT' 0012.40 A COLOR(WHT) 0012.50 A 1 3'cbt nro client impor 0012.60 A COLOR(RED) ****************** End of data ******************

132

PROGRAMA PROG60
FMT * ..... *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+. *************** Beginning of data ******************************** 001.00 H*------------------------------------------------002.00 H* UTILIZACION DE SUBFILE 002.01 H* AUTOR : DANIEL HUGO ENRIQUEZ LEIVAS 005.00 H* PROGRAM : PROG60 005.01 H* DATE : 03-11-2002 006.00 H* BUENOS AIRES - REPUBLICA ARGENTINA 009.00 F*------------------------------------------------009.01 FPROG60FMCF E WORKSTN 009.02 F NRR1 KSFILE PAN6001 009.03 F NRR2 KSFILE PAN6101 009.04 FMAEVEN IF E K DISK 009.07 FESTAVEN IF E K DISK 009.08 FMOVFACL5IF E K DISK 012.02 F*------------------------------------------------012.03 C* 012.04 C* CARGA DEL SUBFILE PAN6001 0028.05 C* 0028.08 C EXSR CARGA 0028.09 C* 0028.10 C *INKC DOWEQ*OFF 0028.11 C* 0028.12 C MOVEA'11' *IN,41 0028.13 C EXFMTCPAN6001 0028.14 C MOVEA'00' *IN,41 0028.15 C* 0028.15 C*
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

Lenguaje RPG400
0028.16 0028.17 0028.18 0028.19 0028.20 0028.21 0028.22 0028.23 0028.24 0028.25 0028.26 0028.27 0028.28 0028.29 0028.30 0028.31 0028.32 0028.33 0028.34 0028.35 0028.36 0028.37 0028.38 0028.39 0028.40 0028.41 0028.42 0028.43 0028.44 0028.45 0028.49 0028.50 0028.51 0028.52 0028.53 0028.54 0028.54 0028.55 0028.56 0053.00 0054.00 0055.00 0056.00 0056.01 0056.02 0056.03 0056.04 0056.05 0056.06 0056.07 0056.09 0056.10 C *INKC IFEQ *ON C LEAVE C ENDIF C* C*CONTROL DE OPCION 1 = ESTADISTICA DE VENTAS C* C Z-ADD1 X 20 C MOVEA'00' *IN,90 C *IN90 DOWNE*ON C X CHAINPAN6001 9091 C *IN91 IFEQ *ON C LEAVE C ENDIF C OP IFEQ '1' C MOVEL' ' OP C UPDATPAN6001 C CODVEPCHAINESTAVEN 80 C CLEARPAN6002 C *IN80 IFEQ *OFF C MOVELCODVEP CV C MOVELAYNP AYN C Z-ADDVENT01 T1 C Z-ADDVENT02 T2 C Z-ADDVENT03 T3 C Z-ADDVENT04 T4 C ENDIF C EXFMTPAN6002 C *INKE IFEQ *ON C EXSR FACTU C ENDIF C ENDIF C ADD 1 X C ENDDO C MOVE '0' *INKC C ENDDO C* C* C MOVE *ON *INLR C* C*-----------------------------------------------C* CARGA EN SUBFILE DE VENDEDORES - PAN6001 C*-----------------------------------------------C CARGA BEGSR C* C* INIZIALIZO EL SUBFILE C* C SETON 43 C Z-ADD*ZEROS CODVEP C MOVEL*BLANKS AYNP C WRITECPAN6001 C SETOF 4340 C*
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

133

Lenguaje RPG400
0056.12 0056.13 0056.14 0056.15 0058.00 0058.02 0058.03 0058.05 0058.06 0058.07 0058.08 0058.09 0058.10 0058.11 0058.12 0058.13 0058.14 0061.02 0061.06 0062.00 0067.00 0068.00 0069.00 0070.00 0071.00 0072.00 0073.00 0077.00 0078.00 0079.00 0080.00 0080.01 0082.00 0083.00 0084.00 0085.00 0086.00 0087.00 0088.00 0089.00 0090.00 0091.00 0092.00 0093.00 0094.00 0095.00 0095.01 0096.00 0097.00 0098.00 0101.00 0101.01 0101.02 0103.00 C Z-ADD1 NRR1 50 C *LOVAL SETLLMAEVEN 91 C READ MAEVEN 90 C* C *IN90 DOWNE*ON C Z-ADDCODVEN CODVEP C MOVELAYNV AYNP C MOVEL*BLANKS OP C WRITEPAN6001 C ADD 1 NRR1 C* C READ MAEVEN 90 C *IN90 IFEQ *ON C SETON 40 C LEAVE C ENDIF C* C ENDDO C* C ENDSR C*------------------------------------------------C* CARGA EN SUBFILE MOVIMIENTOS DE FACTURACION C*------------------------------------------------C FACTU BEGSR C* INIZIALIZACION DEL SUBFILE C* C SETON 43 C MOVEL*BLANKS CBTP C Z-ADD*ZEROS NUMERP C Z-ADD*ZEROS CLIENP C Z-ADD*ZEROS IMPORP C WRITECPAN6101 C SETOF 4340 C* C* CARGA DEL SUBFILE MOVIMIENTOS DE FACTURACION C* C EXSR CARGA2 C* C* C* MOSTRAR SUBFILE C* C *INKC DOWNE*ON C MOVEA'11' *IN,41 C EXFMTCPAN6101 C MOVEA'00' *IN,41 C *INKC IFEQ *ON C MOVE '0' *INKC C LEAVE C ENDIF C ENDDO C* C MOVE '0' *INKC C ENDSR C*------------------------------------------------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

134

Lenguaje RPG400
0104.00 C* RUTINA DE CARGA DEL SUBFILE 0105.00 C*------------------------------------------------0106.00 C CARGA2 BEGSR 0107.00 C Z-ADD1 NRR2 50 0108.00 C MOVEA'00' *IN,90 0108.01 C MOVE CODVEP CODV 40 0110.00 C CODV SETLLMOVFACL5 91 0111.00 C READEMOVFACL5 90 0112.00 C *IN90 DOWNE*ON 0117.00 C MOVELCBTE CBTP 0118.00 C Z-ADDNUMERO NUMERP 0119.00 C Z-ADDCLIENT CLIENP 0120.00 C Z-ADDIMPORT IMPORP 0121.00 C WRITEPAN6101 0122.00 C ADD 1 NRR2 0123.00 C READEMOVFACL5 90 0124.00 C *IN90 IFEQ *ON 0125.00 C SETON 40 0126.00 C LEAVE 0127.00 C ENDIF 0128.00 C ENDDO 129.00 C ENDSR 130.00 C*------------------------------------------------****************** End of data ****************

135

DESARROLLO DE NUESTRO EJEMPLO: Observemos la hoja 'F" en ella se encuentra definida una pantalla llamada PROG60FM que contiene varios formatos de registro dos de los cuales son SUBFILE los que se encuentran controlados por numero relativo de registro, en nuestro ejemplo hemos codificado dos campos que manejaran los nmeros relativos de registros NRR1 y NRR2 para los formatos de registro de pantalla PAN6001 y PAN6101 respectivamente. En esta hoja tambin vemos la definicin de los archivos MAEVEN maestro de vendedores - ESTAVEN - estadstica de venta - y MOVFACL5 - movimientos de facturacin - ( archivos lgico indexado por cdigo de vendedor ). Comienza la hoja de calculo bifurcando a la rutina CARGA la que tiene el objetivo de cargar en el subfile PAN6001 los datos de todos los vendedores , en nuestro caso CODVEN - cdigo de vendedor - y AYNV - apellido y nombre del vendedor -. Una vez en la rutina CARGA deberemos inicializar el subfile ( todo subfile antes de ser utilizado deber ser inizializado ). Observe la DDS de la pantalla PROG60FM - pagina 138 - en la lnea 0000.50 vera la definicin de un nombre de registro ( R ) el cual hemos denominado PAN6001 y la palabra SFL - subfile asociada , la cual indica que este ser un formato de registro de subfile. En este formato de registro almacenaremos los datos de todos
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

Lenguaje RPG400

136

los vendedores. Todo subfile tiene asociado un registro de control que en nuestro ejemplo lo encontrara en la lnea numero 0001.10 - R CPAN6001 y su palabra asociada SFLCTL (nombre de subfile ) - . En este formato de subfile control vemos la utilizacin de palabras como SFLSIZ, SFLPAG, SFLEND, SFLDSP, SFLDSPCTL Y SFLCLR. Comenzaremos por comentar que SFLSIZ indica la cantidad de registro que almacenara nuestro subfile y SFLPAG la cantidad de registro que mostrara por pagina - lase pantalla - en nuestro ejemplo podremos cargar 9999 registro de vendedores y mostraremos 7 por cada pantalla. Ahora observe las lneas de la DDS desde la 0001.80 a la 0002.10 vemos codificados indicadores y palabras asociadas las cuales explicaremos a continuacin comenzando por la palabra SFLCLR. Esta palabra se encuentra asociada al indicador 43 el cual si se encuentra activo nos permitir inicializar el subfile utilizando la operacin WRITE. Luego de ejecutar esta ultima operacin deberemos desactivar el indicador por medio de una operacin SETOF - vase sentencia 0056.09 -. A continuacin establecemos el campo NRR1 en '1' el cual nos permitir acceder a nuestro subfile por numero relativo de registro. Comenzamos la lectura del archivo MAEVEN y grabamos los registros en el SUBFILE por medio de la operacin WRITE - vase sentencia 0058.06 -. Una vez finalizada la rutina CARGA el control del programa continuara ejecutando las operaciones que estn codificadas a partir de la sentencia 0028.09. Mientras no este activado el indicador *INKC mandato 3 - se ejecutara el DOWxx y por desplegara el formato de registro de pantalla CPAN6001 . Observe que antes de esta operacin hemos activados los indicadores 41 y 42 que en nuestra DDS se encuentran asociados a las palabras SFLDSP - Display subfile y SFLDSPCTL display subfile control respectivamente y veremos en nuestra terminal la pantalla VISUALIZANDO LOS VENDEDORES DEL MAESTRO DE VENDEDORES - Estado 1 que se muestra en la hoja 148. Ahora el programa estar esperando algn evento como por ejemplo presionar 'F3' lo que har que el programa finalice o que el usuario seleccione un vendedor por medio de un digito '1' lo que har que por ese numero de vendedor se muestre la estadstica trimestral de ventas sentencia 0028.42 VISUALIZANDO LA ESTADISTICA TRIMESTRAL DE VENTA PARA EL VENDEDOR SELECCIONADO - Estado 2 , formato de pantalla PAN6002 con atributo WINDOW - vase lnea 0005.20 en la correspondiente DDS. En esta ultima pantalla el programa esta a la espera de que se produzca otro evento el cual puede ser 'F3' que nos devolver a la pantalla anterior o 'F5' har que el programa bifurcara el control a la rutina de CARGA2 cuyo objetivo es cargar los movimientos de facturacin en un subfile definido en los formatos de registros en la DDS por PAN6101 y CPAN6101 VISUALIZANDO LA ESTADISTICA TRIMESTRAL DE VENTA PARA EL VENDEDOR Y LOS MOVIMIENTOS DE FACTURACION - Estado 3. Este
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

Lenguaje RPG400

137

subfile tiene el atributo de ser un subfile window. En esta ultima rutina la carga y despliegue del subfile es similar a la rutina explicada anteriormente.

VISUALIZANDO LOS VENDEDORES DEL MAESTRO DE VENDEDORES - Estado 1 DHEL SISTEMAS VISUALIZADOR DE VENDEDORES _____________________________________________________________________ 1= ESTADISTICA DEL VENDEDOR F3 = EXIT _____________________________________________________________________

0010 0020 0030 0040 0050 0060 0070

DEBRA DOUB FERNANDA LEBOREIRO DURRIFF EDUARDO ALBERTO ENRIQUEZ ALICIA PEREZ AMALIA LEIVAS S. DE ENRIQUEZ PEDRO MORENO DANIEL LOPEZ

_ _ _ _ _ _ _

VISUALIZANDO LA ESTADISTICA TRIMESTRAL DE VENTA PARA EL VENDEDOR SELECCIONADO - Estado 2 ............................................................................ : DHEL ! Estadistica trimestral del vendedor: Bs.As. Arg. : : ________ ! __________________________________________________________ : : F3=EXIT ! 0010 DEBRA DOUB : : ________ ! trim 01 trim 02 trim 03 trim 04 : : F5=OVD! 48,547.00 51,521.00 54,787.54 52,496.30 : : : :...........................................................................: 0010 DEBRA DOUB 1 0020 FERNANDA LEBOREIRO DURRIFF 0030 EDUARDO ALBERTO ENRIQUEZ 0040 ALICIA PEREZ 0050 AMALIA LEIVAS S. DE ENRIQUEZ 0060 PEDRO MORENO 0070 DANIEL LOPEZ +

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

Lenguaje RPG400
VISUALIZANDO LA ESTADISTICA TRIMESTRAL DE VENTA PARA EL VENDEDOR Y LOS MOVIMIENTOS DE FACTURACION - Estado 3 ............................................................................ : DHEL ! Estadistica trimestral del vendedor: Bs.As. Arg. : ________ ! ___________________________________________________________ : F3=EXIT! 0010 DEBRA DOUB : : ________ ! trim 01 trim 02 trim 03 trim 04 : : F5=OVD! 214,545.74 189,824.61 206,373.10 228,935.36 : : : :...........................................................................: 0010 DEBRA DOUB 1 ............................................. : cbt nro client importe F3=EXIT : : ________________________________________ : : : : FC 35266 000110 1,547 : : FC 35355 000020 6,474 : + : FC 35589 000020 2,627 : : NC 00891 000045 67 : : FC 35467 000100 2,425 : : FC 35792 000043 5,262 + : : : :...........................................:

138

: :

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

Lenguaje RPG400

139

operacin ADD ANDxx BEGSR BITOF BITON CABxx CALL CAT CHAIN CHECK CKEKR CLEAR CLOSE COMIT COMP DEBUG DEFN DELET DIV DO DOUxx DOWxx DSPLY DUMP ELSE ENDxx ENDCS ENDDO ENDIF ENDSL ENDSR EXCPT EXFMT EXSR FEOD FORCE

Accin SUMA OPERACION LOGICA ' Y' INICIO DE SUBRUTINA DESACTIVAR BITS ACTIVAR BITS COMPARAR Y BIFURCAR LLAMADA A UN PROGRAMA CONCATENAR ACCESO AL AZAR COMPROBAR CARACTERES COMPROBAR CARACTERES HACIA ATRAS BORRAR CLOSE COMIT COMPARAR DEPURACION DEFINICION DE CAMPOS BORRA UN REGISTRO OPERACION DE DIVIDIR HACER HACER HASTA HACER MIENTRAS FUNCION DE VISUALIZACION VUELCO DE PROGRAMA CASO CONTRARIO HACER FIN DE GRUPO FIN DE UN DO FIN DE UN IF FIN GRUPO SELECT FIN DE RUTINNA SALIDA EN TIEMPO DE CALCULO GRABAR/LEER REGISTRO EJECUTAR UNA SUBRUTINA FORZAR FIN DE DATOS FORZAR LECTURA

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

Lenguaje RPG400 FREE GOTO IFxx IN ITER KFLD KLIST LEAVE LOKUP MHHZO MHLZO MLHZO MLLZO MOVE MOVEA MOVEL MULT MVR NEXT OCCUR OPEN Orxx OTHER OUT PARM PLIST POST READ READC READE READP REDPE REL RESET RETRN ROLBK SCAN SELEC

140

DESACTIVAR UN PROGRAMA BIFURCAR A OPERACION CONDICIONAL RECUPERACION DE AREA DE DATOS ITERAR DEFINICION DE CLAVES DEFINICION DE CLAVE COMPUESTA SALIR DEL GRUPO DO BUSCAR MOVER ZONA MOVER ZONA MOVER ZONA MOVER ZONA MOVER MOVER MATRIZ MOVER A LA IZQUIERDA MULTIPLICAR MOVER RESTO SIGUIENTE OBTENER UNA ESTRUCTURA DE DATOS ABRIR UN ARCHIVO OPERACION LOGICA 'O' CASO CONTRARIO SELECCIONAR GRABAR AREA DE DATOS IDENTIFICAR PARAMETROS LISTA DE PARAMETROS ANOTAR LEER UN REGISTRO LEER EL SIGUIENTE REGISTRO MODIFICADO LEER IGUAL CLAVE LEER REGISTRO ANTERIOR LEER IGUAL CLAVE ANTERIOR LIBERAR RESTAURAR RETORNAR RETROTRAER EXPLORAR UNA SERIE DE CARACTERES COMIENZO DE SELECCION
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

Lenguaje RPG400 SETGT SETLL SETOF SETON SHTDN SORTA SQRT SUB SUBST TAG TESTB TESTN TESTZ TIME UNLCK UPDAT WHxx WRITE XFOOT XLATE Z-ADD Z-SUB

141

SITUAR EN MAYOR QUE SITUAR EN LIMITE INFERIOR DESACTIVAR INDICADOR ACTIVAR INDICADOR DETERMINAR CIERRE DEL SISTEMA CLASIFICACION DE MATRIZ RAIZ CUADRADA RESTA SUBSERIE ETIQUETA COMPROBACION DE BITS COMPROBACION NUMERICA COMPROBACION DE ZONA HORA DESBLOQUEAR/LIBERAR AREA DE DATOS / REGISTRO ACTUALIZAR UN REGISTRO SELECCIONAR CUANDO SEA VERDADERO GRABAR UN REGISTRO SUMAR ELEMENTOS DE MATRIZ CONVERTIR CARACTERES ESTABLECER A CEROS Y SUMAR BORRAR A CERO Y RESTAR

BUENOS AIRES 400

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