| En el caso de que tengamos que presentar un subarchivo en el
cual no podamos meter todos los campos en uno solo, se puede recurrir a hacer un programa
en el cual presentamos el subarchivo moviendonos por la pantalla de izquierda a derecha.
Una manera de planterlo es cargar todos los datos en el registro de datos del subfile, y
luego utilizando las teclas de funcion y unas palabras clave determinadas, movernos por el
subfile. El problema de este programa es que al movernos de izquierda a derecha, se nos
situe en el registro en el que hemos paginado. Esto se resuelve determinando que posicion
relativa tiene el primer registro. Es decir, si el subfile es de 10, el primer registro es
1, el cursor es 1 y la posicion del registro del subarchivo es 1. Si paginamos, NRR es 11,
el cursor es 1 y la posicion del registro del subarchivo es 11. Para crear la pantalla,
hacemos lo mismo de siempre para un subarchivo, pero con la diferencia de que vamos a
necesitar dos campos nuevos:
RELA: Campo oculto que contendra la palabra clave SFLCSRRRN, que nos da la posición
del registro en la que se encuentra el cursor. Se indica igual para los dos subfile.
Debe ser de 5 posiciones numerico, si no no compila. SI tenemos el cursor en el primer
registro, RELA = 1.
Palabras Clave RCTL -> Palabras Clave generales -> SFLCSRRN -> Nombre. RELA. En
pantalla definimos el campo.
POSIC: Campo que nos devolvera la posicion del subarchivo ( POSIC = 1, se situa en el
primer registro, POSIC = 2, en el segundo...etc). 4 posiciones, numerico y
oculto.SFLRCDNBR. En el programa le damos valor 1.
Definiendo en la hoja F el mismo numero de registro relativo PARA LOS DOS SUBFILE:
FPANTALLACF E
WORKSTN
F
NRR1 KSFILE SUB01
F
NRR1 KSFILE SUB02
Ahora solo nos queda el programa. Al construir el subarchivo, hacemos:
WRITE SUB01
WRITE SUB02
Asignamos un indicador (40 y 41)a las teclas de funcion izquierda-derecha (EJ: F19-
F20), de forma que desactivamos la tecla F20 cuando estamos a la derecha y viceversa:
*IN40 IFEQ1
WRITEPIE01
EXFMTCTR01
ENDIF
*IN41 IFEQ1
WRITEPIE02
EXFMTCTR01
ENDIF
Asi evaluamos que subfile escribimos. Para activar o no los indicadores 40 y 41, hago
una subrutina Izquierda-Derecha:
IZQDE BEGSR
*IN20 IFEQ1
Z-ADDRELA POSI
SETON 41
SETOF 40
ENDIF
*IN19 IFEQ1
Z-ADDRELA POSI
SETON 40
SETOF 41
ENDIF
ENDSR
¿Por qué hago Z-ADDRELA POSI?.
Por que cada vez que volvemos a escribir el control, me posiciono en el registro que
estaba en la primera posicion del subarchivo, ya sea el NRR=1, el 11, el 21...o el que
sea. Eso si, hay que posicionar el cursor en el primer campo de entrada del subarchivo,
por que si no esta en ese lugar, el valor RELA sera o 0 o un numero negativo y no nos
servira de nada. Caso de que el usuario mueva el cursor,
hay que incluir una subrutina que valide esa condicion y devuelva el valor actual:
VALRE BEGSR
RELA IFLT 1
Z-ADDPOSIC RELA
ENDIF
ENDSR
Documento aportado por Andrés Colodrero
03-09-2001
|