W Pub: ABAP Prog Propios Emul Tree

  1. REPORT ZTREE.
  2.  
  3. ** Ejemplo
  4. SELECTION-SCREEN:
  5.    SKIP 1,
  6.    BEGIN OF LINE,
  7.       COMMENT 1(2) TEXT-801,
  8.       PUSHBUTTON 4(2) TEXT-802 USER-COMMAND B01,
  9.    END OF LINE,
  10.    BEGIN OF LINE,
  11.      COMMENT 5(1) TEXT-803,
  12.      COMMENT 6(3) TEXT-801,
  13.      COMMENT 10(28) TEXT-001.
  14. PARAMETERS: P_SEPARA(2) TYPE N DEFAULT '03'.
  15. SELECTION-SCREEN:
  16.    END OF LINE,
  17.    BEGIN OF LINE,
  18.       COMMENT 5(1) TEXT-803,
  19.       COMMENT 6(3) TEXT-801,
  20.       PUSHBUTTON 10(2) TEXT-802 USER-COMMAND B02,
  21.    END OF LINE,
  22.       BEGIN OF LINE,
  23.         COMMENT 11(1) TEXT-803,
  24.         COMMENT 12(3) TEXT-801,
  25.         COMMENT 16(22) TEXT-003.
  26.         PARAMETERS LIN001(30).
  27.         SELECTION-SCREEN:
  28.       END OF LINE,
  29.       BEGIN OF LINE,
  30.         COMMENT 11(1) TEXT-803,
  31.         COMMENT 12(3) TEXT-801,
  32.         COMMENT 16(22) TEXT-003.
  33.         PARAMETERS LIN002(30).
  34.         SELECTION-SCREEN:
  35.       END OF LINE,
  36.       BEGIN OF LINE,
  37.         COMMENT 11(1) TEXT-803,
  38.         COMMENT 12(3) TEXT-801,
  39.         COMMENT 16(22) TEXT-003.
  40.         PARAMETERS LIN003(30).
  41.         SELECTION-SCREEN:
  42.       END OF LINE,
  43.       BEGIN OF LINE,
  44.         COMMENT 11(1) TEXT-803,
  45.         COMMENT 12(3) TEXT-801,
  46.         COMMENT 16(22) TEXT-003.
  47.         PARAMETERS LIN004(30).
  48.         SELECTION-SCREEN:
  49.       END OF LINE,
  50.       BEGIN OF LINE,
  51.         COMMENT 11(1) TEXT-803,
  52.         COMMENT 12(3) TEXT-801,
  53.         COMMENT 16(22) TEXT-003.
  54.         PARAMETERS LIN005(30).
  55.         SELECTION-SCREEN:
  56.       END OF LINE,
  57.       BEGIN OF LINE,
  58.         COMMENT 11(1) TEXT-803,
  59.         COMMENT 12(3) TEXT-801,
  60.         COMMENT 16(22) TEXT-003.
  61.         PARAMETERS LIN006(30).
  62.         SELECTION-SCREEN:
  63.       END OF LINE,
  64.       BEGIN OF LINE,
  65.         COMMENT 11(1) TEXT-803,
  66.         COMMENT 12(3) TEXT-801,
  67.         COMMENT 16(22) TEXT-003.
  68.         PARAMETERS LIN007(30).
  69.         SELECTION-SCREEN:
  70.       END OF LINE,
  71.       BEGIN OF LINE,
  72.         COMMENT 11(1) TEXT-803,
  73.         COMMENT 12(3) TEXT-801,
  74.         COMMENT 16(22) TEXT-003.
  75.         PARAMETERS LIN008(30).
  76.         SELECTION-SCREEN:
  77.       END OF LINE,
  78.       BEGIN OF LINE,
  79.         COMMENT 11(1) TEXT-803,
  80.         COMMENT 12(3) TEXT-801,
  81.         COMMENT 16(22) TEXT-003.
  82.         PARAMETERS LIN009(30).
  83.         SELECTION-SCREEN:
  84.       END OF LINE,
  85.       BEGIN OF LINE,
  86.         COMMENT 11(1) TEXT-803,
  87.         COMMENT 12(3) TEXT-801,
  88.         COMMENT 16(22) TEXT-003.
  89.         PARAMETERS LIN010(30).
  90.         SELECTION-SCREEN:
  91.       END OF LINE.
  92.  
  93. * Ini ---------------------------------------------- Rutina Standard
  94. DATA: BEGIN OF STAB OCCURS 0.
  95.         INCLUDE STRUCTURE SCREEN.
  96. DATA: ON(1),
  97.       END OF STAB.
  98. DATA: CX(2) TYPE N.
  99.  
  100. INITIALIZATION.
  101. * Ini ---------------------------------------------- Only for example
  102.    LIN001 = '+,TEXT-001,1'.
  103.    LIN002 = '++,TEXT-002,1'.
  104.    LIN003 = '++,TEXT-002,1'.
  105.    LIN004 = '++,TEXT-002,1'.
  106.    LIN005 = '++,TEXT-002,1'.
  107.    LIN006 = '++,TEXT-002,1'.
  108.    LIN007 = '++,TEXT-002,1'.
  109.    LIN008 = '++,TEXT-002,1'.
  110.    LIN009 = '++,TEXT-002,1'.
  111.    LIN010 = '++,TEXT-002,1'.
  112. * Fin ---------------------------------------------- Only for example
  113.    LOOP AT SCREEN.
  114.       MOVE-CORRESPONDING SCREEN TO STAB.
  115.       STAB-ON = 'X'.
  116.       APPEND STAB.
  117.    ENDLOOP.
  118.    CX = 1.
  119.  
  120. AT SELECTION-SCREEN.
  121.   CLEAR CX.
  122.   IF SY-UCOMM+0(1) = 'B' AND
  123.      SY-UCOMM+1(1) CO '1234567890' AND
  124.      SY-UCOMM+2(1) CO '1234567890'.
  125.      CX = SY-UCOMM+1(2).
  126.   ENDIF.
  127.  
  128. AT SELECTION-SCREEN OUTPUT.
  129. DATA: DI TYPE I,
  130.       SI(1).
  131.   CHECK CX > 0.
  132.   CLEAR DI.
  133.   LOOP AT SCREEN.
  134.     IF SCREEN-NAME+0(2) = '%P'.
  135.        IF CX > 0. CX = CX - 1. ENDIF.
  136.     ENDIF.
  137.     CHECK CX = 0.
  138.     IF DI = 0.
  139.        CHECK SCREEN-NAME+0(2) NE '%P'.
  140.     ENDIF.
  141.     ADD 1 TO DI.
  142.     READ TABLE STAB WITH KEY NAME = SCREEN-NAME.
  143.     IF DI > 1.
  144.        STAB-ON = SI.
  145.     ENDIF.
  146.     IF DI = 1. SI = STAB-ON. ENDIF.
  147.     IF STAB-ON = 'X'.
  148.        SCREEN-INVISIBLE = 1.
  149.        SCREEN-INPUT = SCREEN-REQUIRED = 0.
  150.        STAB-ON = ' '. MODIFY STAB INDEX SY-TABIX.
  151.     ELSE.
  152.        MOVE-CORRESPONDING STAB TO SCREEN.
  153.        STAB-ON = 'X'. MODIFY STAB INDEX SY-TABIX.
  154.     ENDIF.
  155.     MODIFY SCREEN.
  156.     IF STAB-ON = 'X' AND SCREEN-NAME+0(2) = '%P'. SI = 'X'. ENDIF.
  157.   ENDLOOP.
  158. * End ---------------------------------------------- Rutina Standard
  159.  
  160. * Ini ---------------------------------------------- Rutinas Propias
  161. END-OF-SELECTION.
  162.  
  163. PERFORM WRITE_NEW_MENU.
  164.  
  165. FORM WRITE_NEW_MENU.
  166. DATA: CAD(65533),
  167.       BEGIN OF ITAB OCCURS 0,
  168.          TXT(72),
  169.       END OF ITAB.
  170.    CLEAR ITAB. REFRESH ITAB.
  171.    CONCATENATE LIN001 LIN002 LIN003 LIN004 LIN005 LIN006 LIN007
  172.                LIN008 LIN009 LIN010 INTO CAD SEPARATED BY ','.
  173.    SPLIT CAD AT ',' INTO TABLE ITAB.
  174.    SKIP 1.
  175. DATA: AX TYPE I,
  176.       COL001(2) TYPE N,
  177.       COL002(2) TYPE N,
  178.       COL003(2) TYPE N,
  179.       BOTON(2)  TYPE N,
  180.       DX LIKE ITAB-TXT.
  181.    CLEAR AX.
  182.    COL001 = 4.
  183.    BOTON = 1.
  184.    LOOP AT ITAB.
  185.       IF ITAB-TXT+0(1) = '+'.
  186.          IF DX NE ITAB-TXT.
  187.             DX = ITAB-TXT.
  188.             AX = 1.
  189.          ELSE.
  190.             AX = 2.
  191.             CONTINUE.
  192.          ENDIF.
  193.       ENDIF.
  194.       CASE AX.
  195.          WHEN 1. IF SY-TABIX = 1.
  196.                     WRITE: / 'selection-screen:'.
  197.                     WRITE: / '   skip 1,',
  198.                            / '   begin of line,',
  199.                            / '      comment 1(2) text-801,  "--'.
  200.                  ELSE.
  201.                     COL002 = COL001 + 1.
  202.                     WRITE:       / '   begin of line,'.
  203.                     CONCATENATE '######comment#' COL002
  204.                                 '(1) text-803, "`' INTO CAD.
  205.                     TRANSLATE CAD USING '# '. WRITE / CAD.
  206.                     ADD 1 TO COL002.
  207.                     CONCATENATE '######comment#' COL002
  208.                                 '(3) text-801, "--' INTO CAD.
  209.                     TRANSLATE CAD USING '# '. WRITE / CAD.
  210.                     ADD 1 TO BOTON.
  211.                     ADD 6 TO COL001.
  212.                  ENDIF.
  213.                  CONCATENATE '######pushbutton#' COL001
  214.                              '(2)#text-802#user-command#b' BOTON
  215.                              ',#"+' INTO CAD.
  216.                  TRANSLATE CAD USING '# '. WRITE / CAD.
  217.                  WRITE / '   end of line,'.
  218.          WHEN 2. COL002 = COL001 + 1.
  219.                  WRITE: / '    begin of line,'.
  220.                  CONCATENATE '######comment#' COL002
  221.                              '(1) text-803, "`' INTO CAD.
  222.                  TRANSLATE CAD USING '# '. WRITE / CAD.
  223.                  ADD 1 TO COL002.
  224.                  CONCATENATE '######comment#' COL002
  225.                              '(3) text-801, "--' INTO CAD.
  226.                  TRANSLATE CAD USING '# '. WRITE / CAD.
  227.                  ADD 4 TO COL002.
  228.                  CONCATENATE '######comment#' COL002
  229.                              '(3) text-001. ' INTO CAD.
  230.                  TRANSLATE CAD USING '# '. WRITE / CAD.
  231.          WHEN 3. IF ITAB-TXT = '1'.
  232.                    WRITE: / '* parameters: xx(2) type n.'.
  233.                    WRITE: / '      selection-screen:',
  234.                           / '      end of line,'.
  235.                  ENDIF.
  236.       ENDCASE.
  237.       ADD 1 TO AX.
  238.       IF AX > 3. AX = 1. ENDIF.
  239.       AT LAST.
  240.          WRITE: / '    selection-screen:',
  241.                 / '    end of line.'.
  242.       ENDAT.
  243.    ENDLOOP.
  244. ENDFORM.
  245. * End ---------------------------------------------- Rutinas Propias