RPG II - I: Práctica No. 1

Detalles de la primera práctica del semestre 2007-1 del Prof. Víctor M. Calcaño:

Tomando como muestra el ejemplo que se utilizó en la clase, sobre el listado de artículos, tenemos la siguiente lista de artículos con sus respectivos detalles, y esta base de datos será la que usaremos para las pruebas de nuestro programa (descárgala aquí: ARTICULO.DAT).

 

Recuerden que tenemos los siguientes detalles para hacerle dos formatos de salida diferentes, el 'tradicional' o 'vertical' y el de detalles:

1) Registro de Artículos.
Descripción Campo   Tipo   Long  Dec
CODIGO PRODUCTO     NUM      3    0
NOMBRE PRODUCTO     ALF     15
CANTIDAD EXISTENTE  NUM      3    0
COSTO UNITARIO      NUM      6    2

 

Es decir, tenemos que hacer un reporte para los registros de los artículos, donde hay 4 campos, 3 de tipo numéricos, por eso se le marca la posición decimal (sea 0 u otra), y 1 alfanumérico, por eso no se le marca la posición decimal.

El campo CODIGO PRODUCTO tiene longitud de 3 caracteres, y es de tipo numérico sin posiciones decimales, por eso se le marca el 0 para indicar que es numérico.

El campo NOMBRE PRODUCTO tiene longitud de 15 caracteres, y es de tipo alfanumérico, por eso no se le marcan posiciones decimales para indicar que no es numérico, por lo tanto, es alfanumérico.

El campo CANTIDAD EXISTENTE tiene longitud de 3 caracteres, y es de tipo numérico sin posiciones decimales, por eso se le marca el 0 para indicar que es numérico, igual que el primer campo.

El campo COSTO UNITARIO tiene longitud de 6 caracteres, y es de tipo numérico con 2 posiciones decimales, por eso se le marca el 2 para indicar que es numérico con 2 posiciones decimales, las cuales son parte del 6; es decir, este campo numérico tiene 4 enteros y 2 decimales, 6 en total.

 

Entonces, para estos 4 campos usaremos los siguientes nombres de variables:

Nombre de las variables:
CODIGO PRODUCTO     : CODPRO
NOMBRE PRODUCTO     : NOMPRO
CANTIDAD EXISTENTE  : CANTEX
COSTO UNITARIO      : COSTUN

 

Así que, las posiciones inicial y final para cada campo son las siguientes:

Nombre    P. Ini.    P. Fin.
CODPRO       1          3
NOMPRO       4         18
CANTEX      19         21
COSTUN      22         27
 

Visto el archivo fuente de datos en el Notepad tenemos:

donde las primeras 3 primeras posiciones, (del 1 al 3) corresponden al código del producto (CODPRO);

las siguientes 15, del 4 al 18, corresponden al nombre del producto (NOMPRO);

las siguientes 3, del 19 al 21, corresponden a la cantidad existente (CANTEX); y

las siguientes 6, las últimas 6, del 22 al 27, corresponden al costo unitario (COSTUN).

Con esta herramienta en Excel puedes calcular las posiciones inicial y final para cada campo de un programa: rpg_calc.

 

Antes, y es lo primero que debemos hacer al trabajar en RPG, debemos cargar la aplicación BTRIEVE, que es para el manejo de registros; a partir de ahí, se escriben los programas fuente, archivos de datos, se compila y se ejecutan los programas.

 

Este archivo que se muestra en la imagen anterior debemos 'convertirlo' al formato *.DAT (archivo de dato en forma secuencial), ya que es un archivo *.TXT.  Esto lo podemos hacer de al menos 2 formas: manualmente o usando el comando CVTFILE.

De forma manual colocamos el cursor al final del registro y unimos el siguiente 'borrando' hacia adelante, y así hacemos con todos, hasta que estén en 'una sola línea'.  Esto es funcional cuando son archivos con pocos registros, porque no duraremos mucho tiempo haciendo esto.  Cuando son más registros, o cuando no queremos hacerlo de forma manual, usamos el comando CVTFILE, con la siguiente sintaxis: CVTFILE file.TXT,99,file.DAT,99

donde:

   CVTFILE es el comando

   luego un espacio

   nombre del archivo a convertir especificando su extensión (en este caso TXT)

   , (una coma)

   longitud total del registro del archivo fuente (ejemplificado en la sintaxis por 99)

   , (una coma)

   nombre del archivo objeto especificando su extensión (en este caso DAT)

   , (una coma)

   longitud total del registro del archivo objeto (usualmente la misma que la anterior)

 

Para convertir el archivo ARTICULO.TXT, cuya longitud máxima del registro es de 27, en ARTICULO.DAT usando el comando CVTFILE escribimos lo siguiente: CVTFILE articulo.txt,27,articulo.dat,27

______________________________________________________________________

Una vez que tenemos el archivo fuente de datos (en este caso con nombre ARTICULO.DAT), pasamos a escribir en las respectivas hojas nuestro programa fuente (*.RPG), empezando primero con la Hoja de Gráficos u Hoja de Diagrama, es decir, Print Chart , donde 'dibujaremos' o colocaremos cómo queremos que se vea nuestro salida, cómo queremos que luzca el programa al ejecutarse.  Lo que ponemos aquí, en una salida 'vertical', consta básicamente de tres (3) partes:

   1) los detalles

   2) los encabezados

   3) los títulos

y es preferible colocarlos en ese mismo orden, para conveniencia en el arreglo de los datos, o:

   1) los encabezados

   2) los detalles

   3) los títulos

ó

   1) los encabezados

   2) los títulos

   3) los detalles

si queremos colocar o 'dibujar' nuestra salida para conveniencia de los títulos y encabezados del programa.

La siguiente imagen describe cuáles son estas 3 'partes':

 

 

En esta práctica el arreglo se hizo atendiendo a los detalles, en la 3ra será atendiendo básicamente a los títulos y encabezados.

En la Hoja de Print Chart tenemos un ancho de 80 posiciones, que es el ancho máximo para una 'pantalla' de DOS, que será la que usaremos normalmente.  Hay que tener pendiente, que aunque tenemos un máximo de 80 posiciones, no siempre tenemos que utilizarlo.  La longitud máxima para el Registro de Artículos es de 27, y mirando la imagen anterior notamos que se tomó un ancho máximo de 32 posiciones, y ese es el ancho que consideraremos para la colocación del encabezado, y no 80.

En el Print Chart marcamos los campos numéricos con 9, y los alfanuméricos con X, aquí hemos dejado un espacio entre cada campo, pero recuerde, usted puede 'dibujar' o colocar esto como le parezca mejor, esta es su hoja y su programa, así que puede dejar de por medio 2 ó 3 espacios, o como usted quiera.

 

Para empezar a colocar los detalles, calculé que tomaría la 1ra línea para el título principal, la siguiente la dejaría en blanco, la 3ra para los encabezados, y desde la 4ta aparecerían los detalles.  Así que 'dibujé' mi Print Chart de la siguiente manera:

   * marqué mi 1er campo (CODPRO de longitud 3) con 9s, ya que es un campo numérico - (columnas 1 al 3);

   * dejé un espacio / (columna 4);

   * marqué mi 2do campo (NOMPRO de longitud 15) con Xs, ya que es un campo alfanumérico - (columnas 5 al 19);

   * dejé un espacio / (columna 20);

   * marqué mi 3er campo (CAN de longitud 3) con 9s, ya que es un campo numérico - (columnas 21 al 23);

   * dejé un espacio / (columna 24); y

   * marqué mi 4to campo (COSTUN de longitud 6,) con 9s, ya que es un campo numérico - (columnas 25 al 32).

Notemos el formato del campo COSTUN, tiene coma (,) y punto (.) marcados, en formato de moneda (se explicará luego).

 

Luego procedemos a ponerle los encabezados a cada campo:

   * para el 1er campo tengo 3 espacios disponibles, y le puse:    COD;

   * para el 2do campo tengo 15 espacios disponibles, y le puse: NOMBRE;

   * para el 3er campo tengo 3 espacios disponibles, y le puse:    CAN; y

   * para el 4to campo tengo 8 espacios disponibles, y le puse:    COSTO UN.

 

Para que los encabezados queden 'centralizados' en el campo se utiliza la siguiente fórmula, cuando el 'ojo por ciento' no es conveniente: pos = (ap - lt) / 2

donde:

   pos   =    posición desde donde escribiremos

   ap    =    amplitud total disponible

   lt      =    longitud del título a escribir

 

Por ejemplo, para NOMBRE tenemos una amplitud disponible para escribir de 15 posiciones, y un título (NOMBRE) de 6 caracteres de longitud, entonces: pos = (15 - 6) / 2    » » »    pos = 9 / 2    » » »    pos = 4.5.  Este número es la cantidad de espacios que deben dejarse en blanco antes de escribir, cuando el resultado es fraccionado, como ahora, redondeo hacia abajo, es decir, me quedo con 4; entonces, como este campo empieza en la columna 5, y dejando 4 espacios vacíos, empiezo a escribir mi encabezado en la columna 9, y terminaré en la columna 14, y así está básicamente 'centralizado'.  Esto puede que no sea tan útil para algunos con algo tan simple como este ejemplo, pero no siempre es tan sencillo lo que queremos centralizar.  Nuestra salida tiene el título de LISTA DE PRODUCTOS (18 caracteres, cuente los espacios entre las palabras), y la longitud de nuestra pantalla es de 32, así que deberíamos empezar a escribir desde la columna 8, y el título terminará en la columna 25, así que habrá 7 espacios vacíos antes, y 7 espacios vacíos también después.

______________________________________________________________________

Bien, el Print Chart es la 1ra parte que se desarrolla, porque de aquí depende básicamente la salida (Hoja O); las Hojas F e I, no dependen del Print Chart.

Pasemos entonces a escribir las partes de las Hojas de Formato, Entrada y Salida (Hojas F, I, O, respectivamente), recordando que en RPG NO SE PUEDEN dejar líneas de código vacías.

 

Hoja de Formato (Hoja F).

En la 1ra línea escribimos:

   * Columnas 7 a 14    »    nombre del archivo                             »    ARTICULO    »    de ARTICULO.DAT (fuente de datos).

   * Columna 15           »    tipo de fichero                                     »    I                »    de Input (Entrada).

   * Columna 16           »    clase de fichero                                   »    P                »    de Print (Impresión).

   * Columna 19           »    formato de fichero                               »    F                »    de Fixed (Fijo).

   * Columnas 24 a 27  »    longitud del registro                            »    27                  »    de la longitud total del registro.

   * Columnas 40 a 46  »    dispositivo                                           »    DISK              »    de Disco (almacenado en disco magnético).

En la 2da línea:

   * Columnas 7 a 14    »    nombre del archivo                             »    LISTADO     »    nombre para un archivo temporal de salida..

   * Columna 15           »    tipo de fichero                                     »    O               »    de Output (Salida).

   * Columna 16           »    clase de fichero                                   »    T                »    de *** (***).

   * Columna 19           »    formato de fichero                               »    F                »    de Fixed (Fijo).

   * Columnas 24 a 27  »    longitud del registro                            »    80                  »    de la longitud total de la pantalla.

   * Columnas 40 a 46  »    dispositivo                                           »    PRINTER       »    de Impresora (que saldrá por pantalla).

Esto es todo lo que haremos en la Hoja F por el momento.

 

Hoja de Entrada (Hoja I).

En la 1ra línea escribimos:

   * Columnas 7 a 14    »    nombre del archivo                             »    ARTICULO    »    de ARTICULO.DAT (fuente de datos).

   * Columnas 15 a 16  »    secuencia                                           »    AA                 »    prioridad del archivo (así, AA tiene mayor prioridad

                                                                                                                                que AH; y GR es de mayor prioridad que KA).

   * Columnas 19 a 20  »    indicador del identif. del registro         »    01                 »    forma abreviada y directa de referirse al archivo

                                                                                                                                (ARTICULO.DAT).

En las líneas siguientes, una por cada campo:

   * Columnas 44 a 47  »    posición inicial del campo                    »    1                    »    dónde inicia ese campo (CODPRO) en el archivo

                                                                                                                                fuente de datos (ARTICULO.DAT).

   * Columnas 48 a 51  »    posición final del campo                      »    3                    »    dónde termina ese campo (CODPRO) en el archivo

                                                                                                                                fuente de datos (ARTICULO.DAT).

   * Columna 52           »    posiciones decimales                           »    0                »    sólo se marca cuando el campo es numérico.

   * Columnas 53 a 58  »    nombre del campo                             »    CODPRO        »    nombre para ese primer campo de longitud 3.

 

Hoja de Salida (Hoja O).

En la 1ra línea escribimos:

   * Columnas 7 a 14    »    nombre del archivo                             »    LISTADO     »    el mismo nombre que usamos en la Hoja F.

   * Columna 15           »    tipo de escritura de la siguiente línea  »    H               »    de Heading (Encabezado).

   * Columnas 17 a 18  »    espaciado (divididas en 2):

                                                17    »                       »    espacio(s) antes del encabezado.

                                                18    »     1                »    espacio(s) después del encabezado.

   * Columnas 19 a 22  »    salto (divididas en 2):

                                                19 a 20    »     1                 »    salto antes del margen de la pantalla.

                                                21 a 22    »                        »    salto después del margen de la pantalla.

   * Columnas 23 a 31  »    indicadores de salida (divididas en 3):

                                                23 a 25    »     1P               »    de 1ra página.

                                                26 a 28    »                        »   

                                                29 a 31    »                        »   

En la 2da línea:

   * Columnas 40 a 43  »    última posición del registro de salida   »    25                                        »    columna en la que termina el título.

   * Columnas 45 a 74  »    título deseado                                     »    'LISTA DE PRODUCTOS'    »    (puesto entre comillas simples ' ').

En la 3ra línea:

   * Columna 15           »    tipo de escritura de la siguiente línea  »    H               »    de Heading (Encabezado).

   * Columnas 17 a 18  »    espaciado (divididas en 2):

                                                17    »                       »    espacio(s) antes del encabezado.

                                                18    »     1                »    espacio(s) después del encabezado.

   * Columnas 19 a 22  »    salto (divididas en 2):

                                                19 a 20    »                        »    salto antes del margen de la pantalla.

                                                21 a 22    »                        »    salto después del margen de la pantalla.

   * Columnas 23 a 31  »    indicadores de salida (divididas en 3):

                                                23 a 25    »     1P               »    de 1ra página.

                                                26 a 28    »                        »   

                                                29 a 31    »                        »   

En la 4ta línea:

   * Columnas 40 a 43  »    última posición del registro de salida   »    3               »    columna en la que termina el título.

   * Columnas 45 a 74  »    título deseado                                     »    'COD'             »    (puesto entre comillas simples ' ').

Y así hasta terminar con los encabezados para cada columna.

En la siguiente línea, que para el ejemplo será la 8va:

   * Columna 15           »    tipo de escritura de la siguiente línea  »    D               »    de Detail (Detalle).

   * Columnas 17 a 18  »    espaciado (divididas en 2):

                                                17    »                       »    espacio(s) antes del encabezado.

                                                18    »     0                »    espacio(s) después del encabezado.

   * Columnas 19 a 22  »    salto (divididas en 2):

                                                19 a 20    »                        »    salto antes del margen de la pantalla.

                                                21 a 22    »                        »    salto después del margen de la pantalla.

   * Columnas 23 a 31  »    indicadores de salida (divididas en 3):

                                                23 a 25    »     01               »    para que busque los valores en el archivo al que este indicador se refiere.

                                                26 a 28    »                        »   

                                                29 a 31    »                        »   

En la siguiente línea, que para el ejemplo será la 9na:

   * Columnas 32 a 37  »    nombre del campo                              »    CODPRO     »    nombre del campo especificado en

                                                                                                                                la Hoja de Entrada (Hoja I).

   * Columnas 40 a 43  »    última posición del registro de salida   »    3               »    columna en la que termina el valor de este campo.

Y así hasta terminar con los campos del registro.

 

En esta Hoja le podemos dar formato o editar los distintos campos dependiendo de cómo queremos que se vean en la salida o al tipo de dato que se refieran.  El campo de edición se marca en la columna 38, y en el ejemplo marcamos una Z al campo CANTEX para que suprima los 0s (ceros) a la izquierda, y un 2 al campo COSTUN para que la coma (,) y punto (.) y se muestre enmarcados, en formato de moneda (se explicará luego).

______________________________________________________________________

Ya que tenemos todo el código escrito en nuestras Hojas RPG, pasamos a escribir todo eso en un archivo que se convertirá en nuestro programa fuente, el que guardaremos con extensión *.RPG, y que posteriormente compilaremos para convertirlo en un programa objeto.  Podemos utilizar cualquier editor de texto, el mismo EDIT que está en la carpeta RPG, el Notepad, o también, los que recomiendo: ConTEXT, o Notepad++ (mucho mejor, ya que se puede editar un lenguaje definido por el usuario).

Así que, una vez en nuestro editor de texto elegido empezamos a transcribir lo mismo que pusimos en nuestras Hojas RPG, en el siguiente orden: (F - I - C - O).  Cada caracter en cada columna, teniendo presente poner también las F, I, C y O correspondientes, ya que estaban escritas en las Hojas (por el momento no usaremos la Hoja C de cálculo).  Para cuando terminemos debemos tener algo más o menos así: ARTIC1.RPG.

______________________________________________________________________

Ahora pasemos a compilar nuestro programa RPG.  Para esto usamos el comando RPG con la siguiente sintaxis:

   RPG prgfnt, prgobj, lsterr

donde:

   RPG es el comando de compilación;

   prgfnt es el programa fuente, archivo con extensión *.RPG y que contiene el código a compilar;

   prgobj es el programa objeto o archivo ejecutable ya compilado; y

   lsterr es un archivo donde se muestra el resumen de la compilación y los errores al tratar de compilar si los hubiera.

Para la compilación no hay que especificar la extensión de los archivos, y usualmente se le da el mismo nombre a los 3 archivos para mejor identificación y manejo.

Para compilar el programa fuente ARTIC1.RPG, escribimos: RPG artic1, artic1, artic1.

Esto hace lo siguiente:

   lee un programa fuente con nombre artic1.rpg;

   hace un programa objeto con nombre artic1.obj; y

   crea un reporte de compilación y los errores si los hubiera en un archivo de nombre artic1.lst.

La siguiente línea de comando: RPG prog, ejecutar, reporte hace lo siguiente:

   lee un programa fuente con nombre prog.rpg;

   hace un programa objeto con nombre ejecutar.obj; y

   crea un reporte de compilación y los errores si los hubiera en un archivo de nombre reporte.lst.

También podemos compilar un programa objeto con la siguiente línea de comando: RPG artic1; esto hace lo siguiente:

   lee un programa fuente con nombre artic1.rpg;

   da un mensaje (Object File Name [src.OBJ]) pidiendo un nombre para el programa objeto (si se omite se usa el mismo nombre que el del programa fuente); y

   da un mensaje (List File Name   [NUL:]) pidiendo un nombre para el archivo de reporte (si se omite no se creará tal archivo).

 

En caso de que hayan errores, los vemos en el archivo de reporte (con extensión *.LST), y pasamos a corregirlos; regularmente son por espacios vacíos al final del programa, sentencias no definidas, especificaciones puestas en lugares indebidos, etc...

______________________________________________________________________

Una vez que hemos compilado el programa esté compilado para correrlo usamos el comando RNRPG con la siguiente sintaxis:

   RNRPG prog

donde:

   RNRPG es el comando de ejecución; y

   prog es el programa objeto, archivo ejecutable con extensión *.OBJ

No es necesario especificar la extensión del archivo para una corrida exitosa.  Con nuestro ejemplo, tendríamos una salida así:

Este es el formato de salida 'tradicional' o 'vertical'.

______________________________________________________________________

Para el formato de salida con detalles empezamos 'dibujando' en nuestro Print Chart de la siguiente manera (recuerde que usted puede 'dibujar' o colocar sus detalles, encabezados o título donde le plazca):

 

Aquí empezamos colocando los subtítulos para cada campo, luego los detalles, y finalmente el título general.  Notemos que tenemos 4 subtítulos, y como clave para que me quedara 'parejo' o distribuido tomé como referencia para poner los dos puntos (:) el que sería el subtítulo más largo: (CANT. EXIST.), y después de ese punto coloqué los dos puntos (:) y a partir de ahí puse los otros en la misma columna también, pero en sus respectivas filas, terminando todos en la columna 13; luego un espacio en blanco, y luego los detalles.  Teniendo un ancho máximo de 29 (ó 30 para conveniencia de cálculo considerando el título general), y queriendo utilizar DATOS DEL PRODUCTO como título general, calculamos la 'centralización' de este y empezamos a escribir desde la columna 7, sobrando entonces 6 espacios a la izquierda y otros 6 a la derecha.  Finalizado el trabajo en el Print Chart, pasamos a escribir la Hoja de Salida, que difiere de la anterior desde la 3ra fila.

La mecánica en el formato de salida 'vertical' es:

   Título general;

   Todos los encabezados (o subtítulos); y

   Todos los detalles.

La mecánica en el formato de salida en detalles es:

   Título general; y luego

   subtítulo y detalle;

   subtítulo y detalle;

   subtítulo y detalle;

   subtítulo y detalle para cada campo hasta finalizarlos.

 

Con nuestro ejemplo, tendríamos una salida así:

 

 

Con esta detallada explicación debe ser suficiente para entender los demás ejemplos.

 

La Práctica No. II consiste en poner a correr todos los programas de la No. I.

______________________________________________________________________

Sección RPG II - I

______________________________________________________________________

 

 

 

Inicio