W Pub: ABAP Prog Propios Emul TC

  1. REPORT ZTCEMULATOR.
  2. *---------------------------------------------- Tabla Interna del TC
  3. DATA: BEGIN OF ITAB OCCURS 0,
  4.         DNI(10),                         "Slo pueden tener 3 posiciones
  5.         NOM(40),                         "Slo pueden tener 3 posiciones
  6.       END OF ITAB.
  7.  
  8. SELECTION-SCREEN BEGIN OF BLOCK TABY WITH FRAME TITLE TIT001.
  9. *---------------------------------------------- Definicin del TC.
  10. SELECTION-SCREEN BEGIN OF LINE.
  11. PARAMETERS: KDNI_001(10) LOWER CASE.
  12. PARAMETERS: KNOM_001(40) LOWER CASE.
  13. SELECTION-SCREEN PUSHBUTTON 53(4) BOT001 USER-COMMAND BDOW.
  14. SELECTION-SCREEN END OF LINE.
  15.  
  16. SELECTION-SCREEN BEGIN OF LINE.
  17. PARAMETERS: KDNI_002(10)  LOWER CASE.
  18. PARAMETERS: KNOM_002(40)  LOWER CASE.
  19. SELECTION-SCREEN PUSHBUTTON 53(4) BOT003 USER-COMMAND BSAV.
  20. SELECTION-SCREEN END OF LINE.
  21.  
  22. SELECTION-SCREEN BEGIN OF LINE.
  23. PARAMETERS: KDNI_003(10) LOWER CASE.
  24. PARAMETERS: KNOM_003(40) LOWER CASE.
  25. SELECTION-SCREEN PUSHBUTTON 53(4) BOT002 USER-COMMAND BUP.
  26. SELECTION-SCREEN END OF LINE.
  27. SELECTION-SCREEN PUSHBUTTON /30(20) BOT004 USER-COMMAND BFIN.
  28. SELECTION-SCREEN END OF BLOCK TABY.
  29.  
  30. *---------------------------------------------- Variables Totales
  31. DATA: LONG_TAB TYPE I,
  32.       POINT_TAB TYPE I,
  33.       LONG_PAN TYPE I VALUE 3.
  34.  
  35. *---------------------------------------------- Inicializamos los campos
  36. INITIALIZATION.
  37. TIT001 = ' Table Control Emulator '.
  38. BOT001 = '@0I@'.            " Icono Arriba: ICON_NEXT_VALUE         @0I@
  39. BOT002 = '@0H@'.            " Icono Abajo : ICON_PREVIOUS_VALUE     @0H@
  40. BOT003 = '@2L@'.            " Icono Grabar: ICON_SYSTEM_SAVE        @2L@
  41. BOT004 = '@3Y@ Posicionar.....'.
  42.                             " Icono Grabar: ICON_POSITION        @2L@
  43. INCLUDE <ICON>.
  44.  
  45. *---------------------------------------------- Esto es para el ejemplo
  46. DATA: NLIN(3) TYPE N.
  47. TABLES: USR21, ADRP.
  48.    SELECT * FROM USR21.
  49.       SELECT SINGLE * FROM ADRP WHERE PERSNUMBER  = USR21-PERSNUMBER.
  50.       ITAB-DNI = USR21-BNAME.
  51.       CONCATENATE ADRP-NAME_FIRST ADRP-NAME_LAST INTO ITAB-NOM
  52.                                                  SEPARATED BY ' '.
  53.       CONDENSE ITAB-NOM.
  54.       APPEND ITAB.
  55.    ENDSELECT.
  56. SORT ITAB.
  57. POINT_TAB = 1.
  58. DESCRIBE TABLE ITAB LINES LONG_TAB.
  59. PERFORM PAINT_TAB USING ' '.
  60.  
  61. *---------------------------------------------- Control de los Botones
  62. AT SELECTION-SCREEN.
  63.    CASE SY-UCOMM.
  64.       WHEN 'BUP'.  ADD 1 TO POINT_TAB.
  65.       WHEN 'BDOW'. SUBTRACT 1 FROM POINT_TAB.
  66.       WHEN 'BSAV'. PERFORM PAINT_TAB USING 'G'.
  67.       WHEN 'BFIN'. PERFORM SEEK_TAB.
  68.    ENDCASE.
  69.  
  70. AT SELECTION-SCREEN OUTPUT.
  71.    PERFORM PAINT_TAB USING ' '.
  72. *---------------------------------------------- Rutinas
  73.  
  74. FORM SEEK_TAB.
  75. DATA: VALO LIKE SVAL OCCURS 0 WITH HEADER LINE.
  76. * Ini ----------------------------------------- Solo para la emulacion
  77. VALO-TABNAME = 'USR01'.
  78. VALO-FIELDNAME = 'BNAME'.
  79. APPEND VALO.
  80. VALO-TABNAME = 'ADRP'.
  81. VALO-FIELDNAME = 'NAME_LAST'. APPEND VALO.
  82. * Fin ----------------------------------------- Solo para la emulacion
  83.    CALL FUNCTION 'POPUP_GET_VALUES'
  84.         EXPORTING
  85. *            NO_VALUE_CHECK  = ' '
  86.              POPUP_TITLE     = 'Posicionar en...'
  87. *            START_COLUMN    = '5'
  88. *            START_ROW       = '5'
  89. *       IMPORTING
  90. *            RETURNCODE      =
  91.         TABLES
  92.              FIELDS          = VALO
  93.         EXCEPTIONS
  94.              ERROR_IN_FIELDS = 1
  95.              OTHERS          = 2.
  96. DATA: FON(1).
  97.    CLEAR FON.
  98.    LOOP AT VALO.
  99.       LOOP AT ITAB WHERE DNI CP VALO-VALUE OR NOM CP VALO-VALUE.
  100.          CHECK NOT VALO-VALUE IS INITIAL.
  101.          POINT_TAB = SY-TABIX.
  102.          FON = 'X'.
  103.          EXIT.
  104.       ENDLOOP.
  105.       IF SY-SUBRC = 0 AND FON = 'X'. EXIT. ENDIF.
  106.    ENDLOOP.
  107. ENDFORM.
  108.  
  109. FORM PAINT_TAB USING CAR.
  110. DATA: N_TAB(3) TYPE N,
  111.       CAMPO(30),
  112.       AX(3) TYPE N,
  113.       DX(30),
  114.       CX TYPE I.
  115. FIELD-SYMBOLS: <F>, <FS>.
  116.    IF POINT_TAB <= 0.
  117.       POINT_TAB = 1.
  118.    ELSEIF POINT_TAB > LONG_TAB.
  119.           POINT_TAB = LONG_TAB.
  120.    ENDIF.
  121.    CX = POINT_TAB + LONG_PAN - 1.
  122.    IF CX > LONG_TAB. SUBTRACT 1 FROM POINT_TAB. ENDIF.
  123.    N_TAB = POINT_TAB.
  124.    DO LONG_PAN TIMES.
  125.       READ TABLE ITAB INDEX N_TAB.
  126.       CHECK SY-SUBRC EQ 0.
  127.       AX = SY-INDEX.
  128.       LOOP AT SCREEN.
  129.          CHECK SCREEN-NAME CP 'k*_*'.
  130.          CONCATENATE SCREEN-NAME+0(5) AX INTO CAMPO.
  131.          CONCATENATE 'itab-' SCREEN-NAME+1(3) INTO DX.
  132.          ASSIGN (CAMPO) TO <F>.
  133.          ASSIGN (DX)    TO <FS>.
  134.          IF CAR = 'G'.
  135.             <FS> = <F>.
  136.             MODIFY ITAB FROM ITAB INDEX N_TAB.
  137.          ELSE.
  138.             <F> = <FS>.
  139.          ENDIF.
  140.       ENDLOOP.
  141.       ADD 1 TO N_TAB.
  142.    ENDDO.
  143. ENDFORM.