Subido por Brayan Gutierrez

as400 ejemplos

Anuncio
Página:de 57
Tamaño real
Página 1
Documento: PROG1.RPGLE
//
=========================================================================
=================
// PROG1.RPGLE | SUBFICHERO COMPLETO
// · Es una técnica adecuada si se procesa un número relativamente
pequeño de registros.
// · La paginación es realizada por el sistema operativo.
// ----------------------------------------------------------------------------------------// Procedimiento:
// · Leer un registro del archivo, escribirlo en el subfichero y repetir
hasta que se
//
llegue al final del archivo, luego visualizar el subfichero.
// · En la definición del SFLCTL de la DDS, se especifica el tamaño del
subfichero (SFLSIZ)
//
mayor que el tamaño de la página de visualización (SFLPAG). Así el
subfichero se
//
extiende automáticamente cuando se graban más registros de los
indicados en el tamaño
//
del subfichero.
// · El indicador 61 se asigna a SFLCLR, por tanto, debe ponerse a ON
cuando el SFL deba
//
borrarse.
// · El indicador 62 se asigna a SFLDSP. Se pone a ON si se graba algún
registro en el
//
subfichero y cuando se borra el subfichero debe estar en OFF.
// · Cuando el EXFMT del programa tiene lugar, el subfichero se visualiza
si el indicador 62
//
está en ON.
// · El registro de control SFLCTL incorpora un campo llamado ARG en
donde el usuario puede
//
entrar un argumento de búsqueda. Este argumento se usa para situar
el archivo en el
//
primer registro a recuperar
// · Cuando el programa se inicia, el registro de control se visualiza,
solicitando al
//
usuario un argumento de búsqueda. El SFL no se visualiza porque no
hay registros y por
//
tanto, el indicador 62 está en OFF.
// · Después de entrar el ARG y haber pulsado INTRO, el subfichero se
borra y se carga. Una
//
vez cargado, el programa regresa mediante un bucle controlado por un
DOWHILE
//
(hasta que se haya pulsado F3) para visualizar el registro de
control.
// · El proceso es mediante un número relativo de registro se define con
la palabra clave
//
SFILE, en las especificaciones de descripción de archivos, para el
archivo WORKSTN.
// · El número relativo de registro (NRR) se incrementa cada vez que se
graba un nuevo
//
registro en el subfichero, y se restaura a ceros cuando se borra el
subfichero.
//
=========================================================================
=================
//
// Cabecera
//
h copyright('Marcelino Rodríguez Suárez | http://www.marce.com')
h datedit(*dmy/)
h datfmt(*dmy/)
//
// Archivos (pantalla y disco)
//
f
PANTALLA1
c
f
e
workstn
sfile(SFL1:nrr)
f
FICHERO
i
f
e
k
disk
//
// Definiciones de campo
//
d
indicadores@
s
*
inz(%addr(*in))
Puntero indicadores
d
indicadores
ds
based(indicadores@)
Estruct. indicadore
d
SALIR
03
03
n
F3=Salir
d
LIMPIAR
61
61
n
Limpiar subfichero
d
MOSTRAR
62
62
n
Visualiza subficher
//
d
nrr
s
4
s
0
inz(*zeros)
Nº rel. reg. subfic
d
arg
s
30
a
inz(*blanks)
Argumento búsqueda
//
// Especificaciones de cálculo en formato libre
//
/free
//
// Presentar la pantalla
//
exfmt
SFL1CTL;
//
// Ejecutar hasta que se pulse F3
//
dow
not SALIR;
nrr = *zeros;
// Inicializar el numero relativo de registro
MOSTRAR = *off;
// No mostrar subfichero
//
// Limpiar subfichero
Página 2
Documento: PROG2.RPGLE
//
// Ejecutar hasta que se pulse F3
//
dow
not SALIR;
//
// Si no pulsa Av Pág (RollUp)
//
if
not AV_PAGINA;
nrr = *zeros;
// Inicializar el numero relativo de registro
MOSTRAR = *off;
// No mostrar subfichero
//
// Limpirar subfichero
//
LIMPIAR = *on;
write
SFL1CTL
;
LIMPIAR = *off;
//
// Posicionarse en el fichero con el argumento de búsqueda
//
setll
arg
FICHERO ;
endif
;
//
// Leer hasta un máximo de 10 registros de cada vez.
// El tamaño de la página del subfichero es 10 (SFLPAG)
//
for
i = 1 to 10;
//
// Leer fichero de datos
//
read
FICHERO;
//
// Si no es fin de fichero, escribir registro en subfichero
//
if
not %eof(FICHERO);
FIN_FICHERO = *off;
nrr += 1;
// Incrementar el numero relativo de registro
MOSTRAR = *on;
// Mostrar subfichero
write
SFL1
;
else
;
FIN_FICHERO = *on;
leave
;
endif
;
endfor
;
//
// Se visualizará la página del subfichero donde se encuentre
// el último número relativo de registro cargado.
// La palabra clave de la DDS que lo define es SFLRCDNBR
//
sflrcd = nrr;
//
// Presentar la pantalla
//
exfmt
SFL1CTL;
enddo
;
// Terminar el programa
*inlr = *on;
/end-free
Página 1
Documento: PANTALLA2.DSPF
A
* -----------------------------------------------------------------------------------------A
* PANTALLA2.DSPF | Subfichero página a página
A
* -----------------------------------------------------------------------------------------A
DSPSIZ(24 80 *DS3)
A
R
SFL1
SFL
A
NOMBRE
30
A
O
8 4
A
TELEFONO
15
A
O
8 35
A
EMAIL
30
A
O
8 51
A
R
SFL1CTL
SFLCTL(SFL1)
A
SFLSIZ(0020)
A
SFLPAG(0010)
A
CA03(03 'Salir')
A
N
99
ROLLUP(60 'AvPág')
A
N
61
62
SFLDSP
A
N
61
SFLDSPCTL
A
61
SFLCLR
A
N
61
62
99
SFLEND(*MORE)
A
N
61
62
SFLRCD
4
S
0
H
SFLRCDNBR
A
5 4
'Desde el nombre . . .'
A
DSPATR(HI)
A
ARG
30
A
B
5 27
DSPATR(HI)
A
CHECK(LC)
A
7 4
'Nombre
'
A
DSPATR(RI)
A
7 35
'Teléfono
'
A
DSPATR(RI)
A
7 51
'Email
'
A
DSPATR(RI)
Página 1
Documento: PROG3.RPGLE
//
=========================================================================
=================
// PROG3.RPGLE | SUBFICHERO DE UNA PÁGINA
// · Es una técnica adecuada si se procesa un número grande de registros.
// · Requieren una mínima cantidad de recursos de memoria.
// · Se presenta siempre una nueva página de registros y el subfichero
equivale a esta página
//
siendo el programa el encargado de controlar la paginación.
// ----------------------------------------------------------------------------------------// Procedimiento:
// · En este caso se define SFLSIZ = SFLPAG
//
=========================================================================
=================
//
// Cabecera
//
h copyright('Marcelino Rodríguez Suárez | http://www.marce.com')
h datedit(*dmy/)
h datfmt(*dmy/)
//
// Archivos (pantalla y disco)
//
f
PANTALLA3
c
f
e
workstn
sfile(SFL1:nrr)
f
FICHERO
i
f
e
k
disk
//
// Definiciones de campo
//
d
indicadores@
s
*
inz(%addr(*in))
Puntero indicadores
d
indicadores
ds
based(indicadores@)
Estruct. indicadore
d
SALIR
03
03
n
F3=Salir
d
AV_PAGINA
60
60
n
Avance de página
d
LIMPIAR
61
61
n
Limpiar subfichero
d
MOSTRAR
62
62
n
Visualiza subficher
d
FIN_FICHERO
99
99
n
EOF fichero
//
d
nrr
s
4
s
0
inz(*zeros)
Nº rel. reg. subfic
d
arg
s
30
a
inz(*blanks)
Argumento búsqueda
d
i
s
4
s
0
inz(*zeros)
Contador bucle for
//
// Especificaciones de cálculo en formato libre
//
/free
//
// Presentar pantalla
//
exfmt
SFL1CTL;
//
// Ejecutar hasta que se pulse F3
//
dow
not SALIR;
//
// Si no pulsa Av Pág (RollUp)
//
if
not AV_PAGINA;
//
// Posicionarse en el fichero con el argumento de búsqueda
//
setll
arg
FICHERO;
endif
;
nrr = *zeros;
// Inicializar el numero relativo de registro
MOSTRAR = *off;
// No mostrar subfichero
//
// Limpirar subfichero
//
LIMPIAR = *on;
write
SFL1CTL
;
LIMPIAR = *off;
//
// Leer hasta un máximo de 10 registros de cada vez.
// El tamaño de la página del subfichero es 10 (SFLPAG)
//
for
i = 1 to 10;
//
Página 2
Documento: PROG3.RPGLE
// Leer fichero de datos
//
read
FICHERO;
//
// Si no es fin de fichero, escribir registro en subfichero
//
if
not %eof(FICHERO);
FIN_FICHERO = *off;
nrr += 1;
// Incrementar el numero relativo de registro
MOSTRAR = *on;
// Mostrar subfichero
write
SFL1
;
else
;
FIN_FICHERO = *on;
leave
;
endif
;
endfor
;
//
// Presentar pantalla
//
exfmt
SFL1CTL;
enddo
;
// Terminar el programa
*inlr = *on;
/end-free
Página 2
Documento: PROG4.RPGLE
dow
not %eof();
//
// Impresión de la ficha
//
if
sel = '6';
exsr
imprimeFicha;
endif
;
//
// Leer cambios
//
readc
SFL1;
enddo
;
endif
;
//
// Si hay un nuevo argumento de búsqueda se inicializa el subfichero
//
if
arg <> argSav;
nTotRr = *zeros;
// Inicializar el numero relativo de registro
nrr = nTotRr;
MOSTRAR = *off;
// No mostrar subfichero
//
// Limpirar subfichero
//
LIMPIAR = *on;
write
SFL1CTL
;
LIMPIAR = *off;
//
// Posicionarse en el fichero con el argumento de búsqueda
//
setll
arg
FICHERO;
//
exsr
fillSfl;
// Leer hasta un máximo de 10 registros de cada vez
argSav = arg;
// Se guarda el argumento de búsqueda actual
endif
;
else
;
exsr
fillSfl;
// Leer hasta un máximo de 10 registros de cada vez
endif
;
//
// Se visualizará la página del subfichero donde se encuentre
// el último número relativo de registro cargado.
// La palabra clave de la DDS que lo define es SFLRCDNBR
//
sflrcd = nrr;
//
// Presentar pantalla
//
exfmt
SFL1CTL;
enddo
;
//
// Terminar el programa
//
*inlr = *on;
//----------------------------------------------------------------// Carga de registros en el subfichero
//----------------------------------------------------------------begsr
fillSfl
;
//
// Leer hasta un máximo de 10 registros de cada vez.
// El tamaño de la página del subfichero es 10 (SFLPAG)
//
for
i = 1 to 10;
//
// Leer fichero de datos
//
read
FICHERO;
//
// Si no es fin de fichero, escribir registro en subfichero
//
if
not %eof(FICHERO);
FIN_FICHERO = *off;
A
DSPATR(RI)
A
7 51
'Email
'
A
DSPATR(RI)
Página 1
Documento: PROG2.RPGLE
//
=========================================================================
=================
// PROG2.RPGLE | SUBFICHERO PÁGINA A PÁGINA
// · Es una técnica adecuada si se procesa un número grande de registros.
// · Un programa de subfichero tra
Descargar