REPORT ZTCEMULATOR.
*---------------------------------------------- Tabla Interna del TC
DATA: BEGIN OF ITAB OCCURS 0,
DNI(10), "Slo pueden tener 3 posiciones
NOM(40), "Slo pueden tener 3 posiciones
END OF ITAB.
SELECTION-SCREEN BEGIN OF BLOCK TABY WITH FRAME TITLE TIT001.
*---------------------------------------------- Definicin del TC.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: KDNI_001(10) LOWER CASE.
PARAMETERS: KNOM_001(40) LOWER CASE.
SELECTION-SCREEN PUSHBUTTON 53(4) BOT001 USER-COMMAND BDOW.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: KDNI_002(10) LOWER CASE.
PARAMETERS: KNOM_002(40) LOWER CASE.
SELECTION-SCREEN PUSHBUTTON 53(4) BOT003 USER-COMMAND BSAV.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: KDNI_003(10) LOWER CASE.
PARAMETERS: KNOM_003(40) LOWER CASE.
SELECTION-SCREEN PUSHBUTTON 53(4) BOT002 USER-COMMAND BUP.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN PUSHBUTTON /30(20) BOT004 USER-COMMAND BFIN.
SELECTION-SCREEN END OF BLOCK TABY.
*---------------------------------------------- Variables Totales
DATA: LONG_TAB TYPE I,
POINT_TAB TYPE I,
LONG_PAN TYPE I VALUE 3.
*---------------------------------------------- Inicializamos los campos
INITIALIZATION.
TIT001 = ' Table Control Emulator '.
BOT001 = '@0I@'. " Icono Arriba: ICON_NEXT_VALUE @0I@
BOT002 = '@0H@'. " Icono Abajo : ICON_PREVIOUS_VALUE @0H@
BOT003 = '@2L@'. " Icono Grabar: ICON_SYSTEM_SAVE @2L@
BOT004 = '@3Y@ Posicionar.....'.
" Icono Grabar: ICON_POSITION @2L@
INCLUDE <ICON>.
*---------------------------------------------- Esto es para el ejemplo
DATA: NLIN(3) TYPE N.
TABLES: USR21, ADRP.
SELECT * FROM USR21.
SELECT SINGLE * FROM ADRP WHERE PERSNUMBER = USR21-PERSNUMBER.
ITAB-DNI = USR21-BNAME.
CONCATENATE ADRP-NAME_FIRST ADRP-NAME_LAST INTO ITAB-NOM
SEPARATED BY ' '.
CONDENSE ITAB-NOM.
APPEND ITAB.
ENDSELECT.
SORT ITAB.
POINT_TAB = 1.
DESCRIBE TABLE ITAB LINES LONG_TAB.
PERFORM PAINT_TAB USING ' '.
*---------------------------------------------- Control de los Botones
AT SELECTION-SCREEN.
CASE SY-UCOMM.
WHEN 'BUP'. ADD 1 TO POINT_TAB.
WHEN 'BDOW'. SUBTRACT 1 FROM POINT_TAB.
WHEN 'BSAV'. PERFORM PAINT_TAB USING 'G'.
WHEN 'BFIN'. PERFORM SEEK_TAB.
ENDCASE.
AT SELECTION-SCREEN OUTPUT.
PERFORM PAINT_TAB USING ' '.
*---------------------------------------------- Rutinas
FORM SEEK_TAB.
DATA: VALO LIKE SVAL OCCURS 0 WITH HEADER LINE.
* Ini ----------------------------------------- Solo para la emulacion
VALO-TABNAME = 'USR01'.
VALO-FIELDNAME = 'BNAME'.
APPEND VALO.
VALO-TABNAME = 'ADRP'.
VALO-FIELDNAME = 'NAME_LAST'. APPEND VALO.
* Fin ----------------------------------------- Solo para la emulacion
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
* NO_VALUE_CHECK = ' '
POPUP_TITLE = 'Posicionar en...'
* START_COLUMN = '5'
* START_ROW = '5'
* IMPORTING
* RETURNCODE =
TABLES
FIELDS = VALO
EXCEPTIONS
ERROR_IN_FIELDS = 1
OTHERS = 2.
DATA: FON(1).
CLEAR FON.
LOOP AT VALO.
LOOP AT ITAB WHERE DNI CP VALO-VALUE OR NOM CP VALO-VALUE.
CHECK NOT VALO-VALUE IS INITIAL.
POINT_TAB = SY-TABIX.
FON = 'X'.
EXIT.
ENDLOOP.
IF SY-SUBRC = 0 AND FON = 'X'. EXIT. ENDIF.
ENDLOOP.
ENDFORM.
FORM PAINT_TAB USING CAR.
DATA: N_TAB(3) TYPE N,
CAMPO(30),
AX(3) TYPE N,
DX(30),
CX TYPE I.
FIELD-SYMBOLS: <F>, <FS>.
IF POINT_TAB <= 0.
POINT_TAB = 1.
ELSEIF POINT_TAB > LONG_TAB.
POINT_TAB = LONG_TAB.
ENDIF.
CX = POINT_TAB + LONG_PAN - 1.
IF CX > LONG_TAB. SUBTRACT 1 FROM POINT_TAB. ENDIF.
N_TAB = POINT_TAB.
DO LONG_PAN TIMES.
READ TABLE ITAB INDEX N_TAB.
CHECK SY-SUBRC EQ 0.
AX = SY-INDEX.
LOOP AT SCREEN.
CHECK SCREEN-NAME CP 'k*_*'.
CONCATENATE SCREEN-NAME+0(5) AX INTO CAMPO.
CONCATENATE 'itab-' SCREEN-NAME+1(3) INTO DX.
ASSIGN (CAMPO) TO <F>.
ASSIGN (DX) TO <FS>.
IF CAR = 'G'.
<FS> = <F>.
MODIFY ITAB FROM ITAB INDEX N_TAB.
ELSE.
<F> = <FS>.
ENDIF.
ENDLOOP.
ADD 1 TO N_TAB.
ENDDO.
ENDFORM.