设为首页 收藏本站
查看: 1132|回复: 0

[经验分享] sap zsql 制作

[复制链接]

尚未签到

发表于 2015-9-19 14:28:53 | 显示全部楼层 |阅读模式
  ************************************************************************
* system name      :
*  author               : jinlei
* program name    : ZSQL
************************************************************************
REPORT ZSQL MESSAGE-ID AT
            NO STANDARD PAGE HEADING.
  INCLUDE <SYMBOL>.
INCLUDE <LINE>.
INCLUDE <ICON>.
  TABLES: DD03L, DD01L, DD02T, DD17S, DD12T, DD04T.
  DATA: BEGIN OF ITAB_PROG OCCURS 1,
        CODE(80) TYPE C,
      END OF ITAB_PROG.
  DATA: BEGIN OF ITAB_SQL OCCURS 1,
        CODE(80) TYPE C,
      END OF ITAB_SQL.
  DATA: BEGIN OF ITAB_COL OCCURS 1,
        COL(30)   TYPE C,
        ALIAS(10) TYPE C,
      END OF ITAB_COL.
  DATA: BEGIN OF ITAB_TAB OCCURS 1,
        TAB(10)   TYPE C,
        ALIAS(10) TYPE C,
      END OF ITAB_TAB.
  DATA: BEGIN OF ITAB_WRITE OCCURS 1,
        DATA(80) TYPE C,
      END OF ITAB_WRITE.
  DATA: BEGIN OF ITAB_INTO OCCURS 1,
        CODE(80) TYPE C,
      END OF ITAB_INTO.
  DATA: BEGIN OF ITAB_DEL OCCURS 1,
        TABIX    TYPE I,
        CODE(80) TYPE C,
      END OF ITAB_DEL.
  DATA: BEGIN OF ITAB_INDEX OCCURS 1,
        TAB(10)     TYPE C,
        INDEX       LIKE DD12L-DBINDEX,
        INDEX_TEXT  LIKE DD12T-DDTEXT,
        INDEX_FIELD LIKE DD17S-FIELDNAME,
        FIELD_TEXT  LIKE DD04T-DDTEXT,
        PLUS        TYPE C,
      END OF ITAB_INDEX.
  DATA: BEGIN OF ITAB_LEN OCCURS 1,
        LEN TYPE I,
      END OF ITAB_LEN.
  DATA: BEGIN OF ITAB_FIELD OCCURS 1,
        FIELD    LIKE DD03L-FIELDNAME,
        TEXT(40) TYPE C,
      END OF ITAB_FIELD.
  DATA: BEGIN OF ITAB_DIST OCCURS 1,
        CODE(80) TYPE C,
      END OF ITAB_DIST.
  DATA: BEGIN OF FCODE_TAB OCCURS 10,
        FCODE(4),
      END OF FCODE_TAB.
  DATA: SQL_TABIX      LIKE SY-TABIX,
      SELECT_KEY(10) TYPE C,
      ETC(80)        TYPE C.
  DATA: TEMP_COL(30)   TYPE C,
      TEMP_CHAR      TYPE C,
      COUNT1(2)      TYPE N,
      COUNT2(2)      TYPE N,
      LIKE_COL(30)   TYPE C,
      COL_LIN        TYPE I,
      ENDLEN(3)      TYPE N VALUE 1.
  DATA: FROM_FLAG    TYPE C,
      ALIAS_FLAG   TYPE C,
      END_FLAG     TYPE C,
      UPDATE_FLAG  TYPE C,
      CONFIRM_FLAG TYPE C.
  DATA: COL_LENGTH LIKE DD03L-LENG.
  DATA: PROG(8)      TYPE C,
      MSG(120)     TYPE C,
      MSG_TEXT(80) TYPE C,
      SUBRC        LIKE SY-SUBRC,
      MARK         TYPE C VALUE 'X',
      LINE_CNT     TYPE I,
      FILESIZE     TYPE I.
  SET TITLEBAR '000'.
SET PF-STATUS 'PFSTA00'.
WRITE: /1 'Edit Your SQL ...............' COLOR 2.
  
INITIALIZATION.
  AT USER-COMMAND.
  IF SY-UCOMM = 'EDIT'.
    PERFORM EDIT_SQL.
    PERFORM WRITE_SQL_REPORT.
  ELSEIF SY-UCOMM = 'EXEC'.
    IF UPDATE_FLAG = SPACE.
      PERFORM SQL_GENERATE USING 'Y' ITAB_COL-COL 'A'.  "INIT FLAG = 'Y'
      IF SY-SUBRC <> 0.
        EXIT.
      ENDIF.
      PERFORM CHECK_SQL_CODE.
      IF SY-SUBRC <> 0.
        MESSAGE I315 WITH 'Check your SQL statement!!!'.
        EXIT.
      ENDIF.
      READ TABLE ITAB_COL INDEX 1.
      IF SY-SUBRC = 0.
        PERFORM EXEC_SQL.
      ENDIF.
    ELSE.
      IF SY-UNAME = '31034951' OR SY-UNAME = 'GOLDENMP'
      OR SY-UNAME = 'MMI01' OR SY-UNAME = 'BBLEE' OR SY-UNAME = 'HYHAN'
      OR SY-UNAME = '11101080'
      OR SY-UNAME = 'QMP09' OR SY-UNAME = '31871741'.
*****>  PERFORM CONFIRM_UPDATE.
        PERFORM EXEC_SQL_UPDATE.
*       CASE CONFIRM_FLAG.
*         WHEN 'N'. EXIT.
*         WHEN 'A'. EXIT.
*         WHEN 'J'. PERFORM EXEC_SQL_UPDATE.
*       ENDCASE.
      ELSE.
        MESSAGE I315 WITH '寸脚俊霸绰 弊繁 SQL阑 镜 鼻茄捞 绝嚼聪促.'.
        EXIT.
      ENDIF.
    ENDIF.
  ELSEIF SY-UCOMM = 'BBCK'.
    SY-LSIND = 0.
  ELSEIF SY-UCOMM = 'BCCK'.
    REFRESH ITAB_INDEX.
    SY-LSIND = SY-LSIND - 3.
  ELSEIF SY-UCOMM = 'PLAN'.
    PERFORM EXPLAIN_SQLTAB(RSXPLAIN) TABLES ITAB_SQL
                                     USING  SUBRC.
  ELSEIF SY-UCOMM = 'INDX'.
    PERFORM VIEW_INDX_TAB.
  ELSEIF SY-UCOMM = 'TABL' OR SY-UCOMM = 'DIST'.
    IF SY-UCOMM = 'TABL'.
      SET TITLEBAR 'W03'.
    ELSE.
      SET TITLEBAR 'W05'.
    ENDIF.
    PERFORM VIEW_FIELD_TAB.
  ELSEIF SY-UCOMM = 'CHOS'.
    PERFORM CHOS_INDX_TAB.
  ELSEIF SY-UCOMM = 'CHSE'.
    IF ITAB_TAB-TAB = SPACE.
      EXIT.
    ENDIF.
    IF SY-TITLE = 'Choose Table for field search'.
      PERFORM CHSE_VIEW_FIELD.
    ELSEIF SY-TITLE = 'Choose Table for field distribution'.
      PERFORM CHSE_FIELD_DIST.
    ELSEIF SY-TITLE = 'Choose Field for distribution'.
      PERFORM SEL_FIELD_DIST.
    ENDIF.
  ELSEIF SY-UCOMM = 'SASC'.
    PERFORM EXEC_SASC.
  ELSEIF SY-UCOMM = 'SDES'.
    PERFORM EXEC_SDES.
  ELSEIF SY-UCOMM = 'GRAF'.
    PERFORM CREATE_GRAF.
  ELSEIF SY-UCOMM = 'UPLD'.
    PERFORM SQL_UPLOAD.
    IF SY-SUBRC <> 0.
      MESSAGE I315 WITH 'Upload Error'.
      EXIT.
    ENDIF.
    IF FILESIZE <> 0.
      PERFORM EDIT_SQL.
      PERFORM WRITE_SQL_REPORT.
    ENDIF.
  ELSEIF SY-UCOMM = 'DOWN'.
    PERFORM SQL_DOWNLOAD.
    IF SY-SUBRC <> 0.
      MESSAGE I315 WITH 'Download Error'.
    ENDIF.
  ELSEIF SY-UCOMM = 'HELP'.
    SUBMIT ZCSQL1 AND RETURN.
  ENDIF.
  AT LINE-SELECTION.
  IF SY-LSIND >= 3 AND ITAB_INDEX-INDEX <> SPACE.
    PERFORM WRITE_INDEX_HIER.
  ELSEIF SY-PFKEY = 'PFSTA04' AND ITAB_TAB-TAB <> SPACE.
    IF SY-TITLE = 'Choose Table for field search'.
      PERFORM CHSE_VIEW_FIELD.
    ELSEIF SY-TITLE = 'Choose Table for field distribution'.
      PERFORM CHSE_FIELD_DIST.
    ELSEIF SY-TITLE = 'Choose Field for distribution'
           AND ITAB_FIELD-FIELD <> SPACE.
      PERFORM SEL_FIELD_DIST.
    ENDIF.
  ENDIF.
  *&---------------------------------------------------------------------*
*&      Form  SQL_PARSING
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SQL_PARSING.
  DATA: AGGR_FLAG TYPE C,
        AGGR_CNT  TYPE I.
  LOOP AT ITAB_SQL.
    IF SY-TABIX = 1.
      SHIFT ITAB_SQL-CODE LEFT DELETING LEADING SPACE.
    ENDIF.
    SQL_TABIX = SY-TABIX + 1.
    SPLIT ITAB_SQL-CODE AT SPACE INTO SELECT_KEY ETC.
    IF SELECT_KEY = 'SELECT'.
      CLEAR: TEMP_COL, TEMP_CHAR, COUNT1, COUNT2, FROM_FLAG, ALIAS_FLAG,
             UPDATE_FLAG, END_FLAG.
      DO.
        TEMP_CHAR = ETC+COUNT2(1).
        IF TEMP_CHAR = '('.
          IF AGGR_CNT = 0.
            AGGR_FLAG = 'Y'.
          ENDIF.
          AGGR_CNT = AGGR_CNT + 1.
        ELSEIF TEMP_CHAR = ')'.
          AGGR_CNT  = AGGR_CNT - 1.
          IF AGGR_CNT = 0.
            AGGR_FLAG = ' '.
          ENDIF.
        ENDIF.
        IF TEMP_CHAR = SPACE OR TEMP_CHAR = ','.
          IF FROM_FLAG = 'Y'.
            IF TEMP_COL <> SPACE AND TEMP_COL <> 'WHERE'.
              IF TEMP_CHAR = SPACE.
                IF ITAB_TAB-TAB = SPACE.
                  ITAB_TAB-TAB = TEMP_COL.
                  ALIAS_FLAG = 'Y'.
                ELSE.
                  ITAB_TAB-ALIAS = TEMP_COL.
                ENDIF.
              ELSEIF ALIAS_FLAG <> 'Y'.
                ITAB_TAB-TAB = TEMP_COL.
                APPEND ITAB_TAB.
                CLEAR ITAB_TAB.
              ELSEIF ALIAS_FLAG = 'Y'.
                ITAB_TAB-ALIAS = TEMP_COL.
                APPEND ITAB_TAB.
                CLEAR ITAB_TAB.
                CLEAR ALIAS_FLAG.
              ENDIF.
            ELSEIF TEMP_COL = 'WHERE'.
              IF ITAB_TAB-TAB <> SPACE.
                COLLECT ITAB_TAB.
              ENDIF.
              EXIT.
            ENDIF.
            CLEAR: TEMP_COL, COUNT1.
            COUNT2 = COUNT2 + 1.
            IF COUNT2 >= 80.
              PERFORM READ_NEXT_SQL.
              IF END_FLAG = 'Y'.
                EXIT.
              ENDIF.
            ENDIF.
            CONTINUE.
          ELSE.
            IF TEMP_COL <> SPACE AND TEMP_COL <> 'FROM'
                 AND TEMP_COL <> 'DISTINCT'
                 AND ( TEMP_CHAR = ',' OR TEMP_CHAR = ' ' )
                 AND AGGR_FLAG = ' ' .
              SEARCH TEMP_COL FOR '('.
              IF SY-FDPOS = 0.
                SPLIT TEMP_COL AT '.' INTO ITAB_COL-ALIAS ITAB_COL-COL.
                IF ITAB_COL-COL = SPACE.
                  ITAB_COL-COL = ITAB_COL-ALIAS.
                  CLEAR ITAB_COL-ALIAS.
                ENDIF.
              ELSE.
                ITAB_COL-COL = TEMP_COL.
              ENDIF.
              APPEND ITAB_COL.
            ELSEIF TEMP_COL = 'FROM'.
              FROM_FLAG = 'Y'.
            ENDIF.
            IF AGGR_FLAG <> 'Y'.
              CLEAR: TEMP_COL, COUNT1.
            ELSE.
              IF TEMP_CHAR <> '''' AND  TEMP_CHAR <> ','
                 AND COUNT1 < 28.
                TEMP_COL+COUNT1(1) = ETC+COUNT2(1).
                COUNT1 = COUNT1 + 1.
              ENDIF.
            ENDIF.
            COUNT2 = COUNT2 + 1.
            IF COUNT2 >= 80.
              PERFORM READ_NEXT_SQL.
              IF END_FLAG = 'Y'.
                EXIT.
              ENDIF.
            ENDIF.
            CONTINUE.
          ENDIF.
        ELSE.
          IF TEMP_CHAR <> '''' AND  TEMP_CHAR <> ',' AND COUNT1 < 28.
            TEMP_COL+COUNT1(1) = ETC+COUNT2(1).
          ENDIF.
        ENDIF.
  COUNT1 = COUNT1 + 1.
        COUNT2 = COUNT2 + 1.
  ENDDO.
      IF ITAB_TAB-TAB <> SPACE.
        COLLECT ITAB_TAB.
      ENDIF.
    ELSEIF SELECT_KEY = 'DELETE' OR  SELECT_KEY = 'UPDATE'
           OR  SELECT_KEY = 'INSERT'.
      UPDATE_FLAG = 'Y'.
    ENDIF.
  ENDLOOP.
ENDFORM.                               " SQL_PARSING
*&---------------------------------------------------------------------*
*&      Form  READ_NEXT_SQL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM READ_NEXT_SQL.
  READ TABLE ITAB_SQL INDEX SQL_TABIX.
  IF SY-SUBRC <> 0.
    END_FLAG = 'Y'.
    EXIT.
  ENDIF.
  ETC = ITAB_SQL-CODE.
  SQL_TABIX = SQL_TABIX + 1.
  CLEAR: TEMP_COL, COUNT1, COUNT2.
  ENDFORM.                               " READ_NEXT_SQL
*&---------------------------------------------------------------------*
*&      Form  DECLARE_HEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DECLARE_HEADER.
  ITAB_PROG-CODE = 'PROGRAM SUBPOOL.'.
  APPEND ITAB_PROG.
  ITAB_PROG-CODE = 'DATA REC_COUNT(7) TYPE N.'.
  APPEND ITAB_PROG.
  ITAB_PROG-CODE = 'DATA: BEGIN OF ITAB_DATA OCCURS 1,'.
  APPEND ITAB_PROG.
  ITAB_WRITE-DATA = 'WRITE: /1 '.
  APPEND ITAB_WRITE.
  DESCRIBE TABLE ITAB_COL LINES COL_LIN.
  LOOP AT ITAB_COL.
    COUNT1 = SY-TABIX.
    READ TABLE ITAB_TAB WITH KEY ALIAS = ITAB_COL-ALIAS.
    CONCATENATE 'COL' COUNT1 INTO TEMP_COL.
    SEARCH ITAB_COL-COL FOR '('.
    IF SY-FDPOS <> 0.
      CONCATENATE 'COL' COUNT1 '(15)' INTO ITAB_PROG-CODE.
      CONCATENATE ITAB_PROG-CODE 'TYPE C,'
             INTO ITAB_PROG-CODE SEPARATED BY SPACE.
    ELSE.
      CONCATENATE ITAB_TAB-TAB '-' ITAB_COL-COL INTO LIKE_COL.
      CONCATENATE TEMP_COL 'LIKE' LIKE_COL ','
             INTO ITAB_PROG-CODE SEPARATED BY SPACE.
    ENDIF.
    APPEND ITAB_PROG.
    IF COUNT1 = 1 AND COUNT1 <> COL_LIN.
      CONCATENATE 'INTO :ITAB_DATA-' TEMP_COL ',' INTO ITAB_INTO-CODE.
      APPEND ITAB_INTO.
      CONCATENATE 'SY-VLINE, ITAB_DATA-' TEMP_COL ','
                  INTO ITAB_WRITE-DATA.
      APPEND ITAB_WRITE.
    ELSEIF COUNT1 < COL_LIN.
      CONCATENATE ':ITAB_DATA-' TEMP_COL ',' INTO ITAB_INTO-CODE.
      APPEND ITAB_INTO.
      CONCATENATE 'SY-VLINE, ITAB_DATA-' TEMP_COL ','
                  INTO ITAB_WRITE-DATA.
      APPEND ITAB_WRITE.
    ELSE.
      IF COUNT1 = 1.
        CONCATENATE 'INTO :ITAB_DATA-' TEMP_COL INTO ITAB_INTO-CODE.
        APPEND ITAB_INTO.
      ELSE.
        CONCATENATE ':ITAB_DATA-' TEMP_COL INTO ITAB_INTO-CODE.
        APPEND ITAB_INTO.
      ENDIF.
      CONCATENATE ' SY-VLINE,ITAB_DATA-' TEMP_COL ', SY-VLINE.'
             INTO ITAB_WRITE-DATA.
      APPEND ITAB_WRITE.
    ENDIF.
  ENDLOOP.
  ITAB_PROG-CODE = '      END OF ITAB_DATA.'.
  APPEND ITAB_PROG.
  ITAB_PROG-CODE = 'FORM DYN1.'.
  APPEND ITAB_PROG.
  ENDFORM.                               " DECLARE_HEADER
  *&---------------------------------------------------------------------*
*&      Form  WRITE_EXEC_SQL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM WRITE_EXEC_SQL.
  DATA: RES_SQL(80) TYPE C,
        RES_LEN     TYPE I,
        INTO_TABIX  LIKE SY-TABIX,
        ORDER_FLAG  TYPE C.
  ITAB_PROG-CODE = 'EXEC SQL PERFORMING WRITE_DATA.'.
  APPEND ITAB_PROG.
  SEARCH ITAB_SQL FOR 'FROM'.
  READ TABLE ITAB_SQL INDEX SY-TABIX.
  IF SY-FDPOS <> 0 AND SY-FDPOS <> 1.
    RES_SQL = ITAB_SQL-CODE+0(SY-FDPOS).
    RES_LEN = 80 - SY-FDPOS.
    ITAB_SQL-CODE = ITAB_SQL-CODE+SY-FDPOS(RES_LEN).
    MODIFY ITAB_SQL INDEX SY-TABIX.
    ITAB_SQL-CODE = RES_SQL.
    INSERT ITAB_SQL INDEX SY-TABIX.
    SY-TABIX = SY-TABIX + 1.
  ENDIF.
  INTO_TABIX = SY-TABIX.
  LOOP AT ITAB_INTO.
    ITAB_SQL-CODE = ITAB_INTO-CODE.
    INSERT ITAB_SQL INDEX INTO_TABIX.
    INTO_TABIX = INTO_TABIX + 1.
  ENDLOOP.
  SEARCH ITAB_SQL FOR 'ORDER BY'.
  IF SY-SUBRC = 0.
    ORDER_FLAG = 'Y'.
    READ TABLE ITAB_SQL INDEX SY-TABIX.
    IF SY-FDPOS <> 0 AND SY-FDPOS <> 1.
      RES_SQL = ITAB_SQL-CODE+0(SY-FDPOS).
      RES_LEN = 80 - SY-FDPOS.
      ITAB_SQL-CODE = ITAB_SQL-CODE+SY-FDPOS(RES_LEN).
      MODIFY ITAB_SQL INDEX SY-TABIX.
      ITAB_SQL-CODE = RES_SQL.
      INSERT ITAB_SQL INDEX SY-TABIX.
      SY-TABIX = SY-TABIX + 1.
    ENDIF.
  ELSE.
    ORDER_FLAG = 'N'.
  ENDIF.
  LOOP AT ITAB_SQL.
    IF SY-TABIX > 1 AND ITAB_SQL-CODE+0(1) <> SPACE.
      ITAB_SQL-CODE+1(79) = ITAB_SQL-CODE+(79).
      ITAB_SQL-CODE+0(1) = ' '.
      MODIFY ITAB_SQL INDEX SY-TABIX.
    ENDIF.
    ITAB_PROG-CODE = ITAB_SQL-CODE.
    APPEND ITAB_PROG.
  ENDLOOP.
  IF ORDER_FLAG = 'N'.
    READ TABLE ITAB_COL INDEX 1.
    SEARCH ITAB_SQL FOR '('.
    IF SY-SUBRC <> 0.
      CONCATENATE 'ORDER BY' ITAB_COL-COL
                  INTO ITAB_PROG-CODE SEPARATED BY SPACE.
      APPEND ITAB_PROG.
    ENDIF.
  ENDIF.
  ITAB_PROG-CODE = 'ENDEXEC.'.
  APPEND ITAB_PROG.
  CONCATENATE  'ULINE /1' '(' ENDLEN ')' '.' INTO ITAB_PROG-CODE.
  APPEND ITAB_PROG.
  ITAB_PROG-CODE = 'SET TITLEBAR ''001'' WITH REC_COUNT ''Record''.'.
  APPEND ITAB_PROG.
  ITAB_PROG-CODE = 'ENDFORM.'.
  APPEND ITAB_PROG.
  ENDFORM.                               " WRITE_EXEC_SQL
  *&---------------------------------------------------------------------*
*&      Form  WRITE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM WRITE_DATA.
  ITAB_PROG-CODE = 'FORM WRITE_DATA.'.
  APPEND ITAB_PROG.
  ITAB_PROG-CODE = 'FORMAT INTENSIFIED OFF.'.
  APPEND ITAB_PROG.
  ITAB_PROG-CODE = 'FORMAT COLOR 2.'.
  APPEND ITAB_PROG.
  LOOP AT ITAB_WRITE.
    ITAB_PROG-CODE = ITAB_WRITE-DATA.
    APPEND ITAB_PROG.
  ENDLOOP.
  ITAB_PROG-CODE = 'REC_COUNT = REC_COUNT + 1.'.
  APPEND ITAB_PROG.
  ITAB_PROG-CODE = 'ENDFORM.'.
  APPEND ITAB_PROG.
  ENDFORM.                               " WRITE_DATA
*&---------------------------------------------------------------------*
*&      Form  WRITE_HEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM WRITE_HEADER.
  DATA: DOMNAME     LIKE DD03L-DOMNAME,
        ULINE_TABIX LIKE SY-TABIX.
  ITAB_PROG-CODE = 'FORMAT INTENSIFIED ON.'.
  APPEND ITAB_PROG.
  ITAB_PROG-CODE = 'FORMAT COLOR 1.'.
  APPEND ITAB_PROG.
  ULINE_TABIX = SY-TABIX + 1.
  ITAB_PROG = 'WRITE: /1 '.
  APPEND ITAB_PROG.
  LOOP AT ITAB_COL.
    READ TABLE ITAB_TAB WITH KEY ALIAS = ITAB_COL-ALIAS.
    SELECT SINGLE DOMNAME INTO DOMNAME
                          FROM DD03L
                          WHERE TABNAME = ITAB_TAB-TAB
                            AND FIELDNAME = ITAB_COL-COL.
    IF SY-SUBRC = 0.
      SELECT SINGLE OUTPUTLEN INTO COL_LENGTH
                              FROM DD01L
                              WHERE DOMNAME = DOMNAME
                                AND AS4LOCAL = 'A'.
      CONCATENATE '(' COL_LENGTH ')' INTO TEMP_COL.
      ENDLEN = COL_LENGTH + 3 + ENDLEN.
    ELSE.
      CONCATENATE '(' '15' ')' INTO TEMP_COL.
      ENDLEN = 18 + ENDLEN.
    ENDIF.
    ITAB_LEN-LEN = ENDLEN.
    APPEND ITAB_LEN.
  CONCATENATE '''' ITAB_COL-COL '''' INTO ITAB_COL-COL.
    CONCATENATE 'SY-VLINE,' TEMP_COL ITAB_COL-COL
                'CENTERED,' INTO ITAB_PROG SEPARATED BY SPACE.
    APPEND ITAB_PROG.
  ENDLOOP.
  ITAB_PROG = 'SY-VLINE.'.
  APPEND ITAB_PROG.
  CONCATENATE  'ULINE /1' '(' ENDLEN ')' '.' INTO ITAB_PROG-CODE.
  APPEND ITAB_PROG.
  CONCATENATE  'ULINE /1' '(' ENDLEN ')' '.' INTO ITAB_PROG-CODE.
  INSERT ITAB_PROG INDEX ULINE_TABIX.
  CONCATENATE 'NEW-PAGE LINE-SIZE' ENDLEN '.' INTO ITAB_PROG-CODE
                                              SEPARATED BY SPACE.
  INSERT ITAB_PROG INDEX ULINE_TABIX.
  ENDFORM.                               " WRITE_HEADER
*&---------------------------------------------------------------------*
*&      Form  TRANS_UPPER_ITAB_SQL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM TRANS_UPPER_ITAB_SQL.
  DATA: SAVE_TABIX  LIKE SY-TABIX,
        TABIX_COUNT TYPE I.
  REFRESH ITAB_DEL.
  LOOP AT ITAB_SQL.
    SAVE_TABIX  = SY-TABIX.
    TABIX_COUNT = TABIX_COUNT + 1.
    IF ITAB_SQL-CODE = SPACE OR ITAB_SQL-CODE+(1) = '*'.
      IF ITAB_SQL-CODE+(1) = '*'.
        CLEAR ITAB_DEL.
        ITAB_DEL-TABIX = TABIX_COUNT.
        ITAB_DEL-CODE  = ITAB_SQL-CODE.
        APPEND ITAB_DEL.
      ENDIF.
      DELETE ITAB_SQL INDEX SAVE_TABIX.
      CONTINUE.
    ENDIF.
    TRANSLATE ITAB_SQL-CODE TO UPPER CASE.
    MODIFY ITAB_SQL INDEX SAVE_TABIX.
  ENDLOOP.
ENDFORM.                               " TRANS_UPPER_ITAB_SQL
*&---------------------------------------------------------------------*
*&      Form  CLEAR_VAR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CLEAR_VAR.
  REFRESH: ITAB_PROG, ITAB_COL, ITAB_WRITE, ITAB_INTO, ITAB_TAB.
  CLEAR:   ITAB_PROG, ITAB_COL, ITAB_WRITE, ITAB_INTO, ITAB_TAB.
  ENDLEN = 1.
  ENDFORM.                               " CLEAR_VAR
*&---------------------------------------------------------------------*
*&      Form  EDIT_SQL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM EDIT_SQL.
  DATA: CHANGED LIKE S38E-BUF_VARIED,
        FCODE LIKE SY-UCOMM,
        SUBRC LIKE SY-SUBRC.
  LOOP AT ITAB_DEL.
    ITAB_SQL-CODE = ITAB_DEL-CODE.
    INSERT ITAB_SQL INDEX ITAB_DEL-TABIX.
  ENDLOOP.
  CALL FUNCTION 'EDITOR_APPLICATION'
       EXPORTING
            APPLICATION = 'BF'
            DISPLAY     = ' '
            NAME        = 'Input Your SQL......'
       IMPORTING
            FCODE       = FCODE
            CHANGED     = CHANGED
       TABLES
            CONTENT     = ITAB_SQL.
  CASE FCODE.
    WHEN 'BACK'. SUBRC = 4.
    WHEN 'UPD'.  SUBRC = 0.
    WHEN OTHERS. SUBRC = 8.
  ENDCASE.
  IF SUBRC <> 0.
    PERFORM CLEAR_VAR.
    REFRESH ITAB_SQL.
    EXIT.
  ENDIF.
  PERFORM CLEAR_VAR.
  PERFORM TRANS_UPPER_ITAB_SQL.
  PERFORM SQL_PARSING.
  IF UPDATE_FLAG = 'Y'.
    REFRESH FCODE_TAB.
    FCODE_TAB = 'PLAN'.
    APPEND FCODE_TAB.
    FCODE_TAB = 'INDX'.
    APPEND FCODE_TAB.
    FCODE_TAB = 'TABL'.
    APPEND FCODE_TAB.
    FCODE_TAB = 'DIST'.
    APPEND FCODE_TAB.
    SET PF-STATUS 'PFSTA00' EXCLUDING FCODE_TAB.
    EXIT.
  ENDIF.
  SET PF-STATUS 'PFSTA00'.
  READ TABLE ITAB_COL INDEX 1.
  IF ITAB_COL-COL = '*'.
    PERFORM GET_ITAB_COL_ALL.
  ENDIF.
  PERFORM DECLARE_HEADER.
  PERFORM WRITE_HEADER.
  PERFORM WRITE_EXEC_SQL.
  PERFORM WRITE_DATA.
  SEARCH ITAB_SQL FOR 'INTO'.
  IF SY-SUBRC = 0.
    LOOP AT ITAB_SQL FROM SY-TABIX.
      IF ITAB_SQL-CODE+1(4) <> 'FROM'.
        DELETE ITAB_SQL INDEX SY-TABIX.
      ELSE.
        EXIT.
      ENDIF.
    ENDLOOP.
  ENDIF.
  ENDFORM.                               " EDIT_SQL
*&---------------------------------------------------------------------*
*&      Form  GET_LINE_CHECK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_LINE_CHECK.
  DATA: CUR_LINE TYPE I.
  CUR_LINE = 1.
  DO.
    CLEAR MARK.
    READ LINE CUR_LINE FIELD VALUE MARK.
    IF SY-SUBRC <> 0.
      EXIT.
    ENDIF.
    IF MARK = 'X'.
      PERFORM GET_PRIMARY_INDEX.
      CLEAR ITAB_INDEX.
      ITAB_INDEX-PLUS  = '4'.
      ITAB_INDEX-TAB   = ITAB_TAB-TAB.
      SELECT * FROM DD17S
               WHERE SQLTAB = ITAB_TAB-TAB
               ORDER BY POSITION.
        ITAB_INDEX-INDEX = ITAB_TAB-TAB.
        ITAB_INDEX-INDEX+10(3) = DD17S-INDEXNAME.
        SELECT SINGLE * FROM DD12T
                        WHERE DDLANGUAGE = 'E'
                          AND SQLTAB = ITAB_TAB-TAB
                          AND INDEXNAME = DD17S-INDEXNAME.
        ITAB_INDEX-INDEX_TEXT  = DD12T-DDTEXT.
        SELECT SINGLE * FROM DD03L
                        WHERE TABNAME = ITAB_TAB-TAB
                          AND FIELDNAME = DD17S-FIELDNAME.
        IF SY-SUBRC = 0.
          SELECT SINGLE DDTEXT FROM DD04T
                               INTO ITAB_INDEX-FIELD_TEXT
                               WHERE ROLLNAME = DD03L-ROLLNAME
                                  AND DDLANGUAGE = 'E'.
        ENDIF.
        ITAB_INDEX-INDEX_FIELD = DD17S-FIELDNAME.
        COLLECT ITAB_INDEX.
      ENDSELECT.
    ENDIF.
    CUR_LINE = CUR_LINE + 1.
  ENDDO.
  ENDFORM.                               " GET_LINE_CHECK
  *&---------------------------------------------------------------------*
*&      Form  WRITE_INDEX
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM WRITE_INDEX.
  DATA: TEMP_INDEX LIKE ITAB_INDEX.
  SET PF-STATUS 'PFSTA03'.
  SET TITLEBAR 'W02'.
  NEW-PAGE LINE-SIZE 100.
  LOOP AT ITAB_INDEX.
    MOVE-CORRESPONDING ITAB_INDEX TO TEMP_INDEX.
    AT NEW TAB.
      SKIP 2.
      WRITE: /1 'List Index for Table.' COLOR 1,
                ' - ', ITAB_INDEX-TAB COLOR 4.
      ULINE: /1(83).
    ENDAT.
    AT NEW INDEX.
      IF TEMP_INDEX-PLUS = '4'.
        WRITE: /3 SY-VLINE, /3(2) SY-ULINE,
                  SYM_PLUS_FOLDER AS SYMBOL HOTSPOT ON COLOR 7,
                  ITAB_INDEX-INDEX COLOR 3,
                  TEMP_INDEX-INDEX_TEXT COLOR 2.
        HIDE: ITAB_INDEX-INDEX.
      ELSE.
        WRITE: /3 SY-VLINE, /3(2) SY-ULINE,
                  SYM_MINUS_FOLDER AS SYMBOL HOTSPOT ON COLOR 7,
                  ITAB_INDEX-INDEX COLOR 3,
                  TEMP_INDEX-INDEX_TEXT COLOR 2.
        HIDE: ITAB_INDEX-INDEX.
        LOOP AT ITAB_INDEX WHERE INDEX = TEMP_INDEX-INDEX.
          IF SY-TABIX = 1.
            WRITE: /9 SY-VLINE, /9  LINE_BOTTOM_LEFT_CORNER AS LINE,
                      ITAB_INDEX-INDEX_FIELD COLOR 2.
          ELSE.
            WRITE: /9 LINE_BOTTOM_LEFT_CORNER AS LINE,
                      ITAB_INDEX-INDEX_FIELD COLOR 2.
          ENDIF.
          WRITE: ITAB_INDEX-FIELD_TEXT
                               UNDER TEMP_INDEX-INDEX_TEXT COLOR 2.
        ENDLOOP.
      ENDIF.
    ENDAT.
  ENDLOOP.
  CLEAR ITAB_INDEX-INDEX.
ENDFORM.                               " WRITE_INDEX
*&---------------------------------------------------------------------*
*&      Form  GET_PRIMARY_INDEX
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_PRIMARY_INDEX.
  CLEAR ITAB_INDEX.
  ITAB_INDEX-PLUS  = '4'.
  ITAB_INDEX-TAB   = ITAB_TAB-TAB.
  ITAB_INDEX-INDEX = ITAB_TAB-TAB.
  ITAB_INDEX-INDEX+10(1) = '0'.
  ITAB_INDEX-INDEX_TEXT  = 'Primary Key'.
  SELECT * FROM DD03L
           WHERE TABNAME = ITAB_TAB-TAB
           ORDER BY POSITION.
    SELECT SINGLE DDTEXT FROM DD04T
                         INTO ITAB_INDEX-FIELD_TEXT
                         WHERE ROLLNAME = DD03L-ROLLNAME
                           AND DDLANGUAGE = 'E'.
    ITAB_INDEX-INDEX_FIELD = DD03L-FIELDNAME.
    APPEND ITAB_INDEX.
  ENDSELECT.
ENDFORM.                               " GET_PRIMARY_INDEX
  *&---------------------------------------------------------------------*
*&      Form  EXEC-SQL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM EXEC_SQL.
  SET TITLEBAR '001'.
  SET PF-STATUS 'PFSTA01'.
  PERFORM DYN1 IN PROGRAM (PROG).
  ENDFORM.                               " EXEC_SQL
*&---------------------------------------------------------------------*
*&      Form  WRITE_SQL_REPORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM WRITE_SQL_REPORT.
  SY-LSIND = 0.
  DESCRIBE TABLE ITAB_SQL LINES LINE_CNT.
  IF LINE_CNT = 0 OR ( LINE_CNT = 1 AND ITAB_SQL-CODE = SPACE ).
    WRITE: /1 'Edit Your SQL ................' COLOR 2.
  ELSE.
    LOOP AT ITAB_SQL.
      WRITE: /1 ITAB_SQL-CODE.
    ENDLOOP.
  ENDIF.
ENDFORM.                               " WRITE_SQL_REPORT
*&---------------------------------------------------------------------*
*&      Form  VIEW_INDX_TAB
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM VIEW_INDX_TAB.
  SET TITLEBAR 'W01'.
  SET PF-STATUS 'PFSTA02'.
  WINDOW STARTING AT 15 5 ENDING AT 75 15.
  LOOP AT ITAB_TAB.
    SELECT SINGLE * FROM DD02T
                    WHERE TABNAME = ITAB_TAB-TAB
                      AND DDLANGUAGE = 'E'.
    WRITE: /3 MARK AS CHECKBOX, 7 ITAB_TAB-TAB, DD02T-DDTEXT.
    HIDE: ITAB_TAB-TAB.
  ENDLOOP.
  CLEAR ITAB_TAB-TAB.
  ENDFORM.                               " VIEW_INDX_TAB
  *&---------------------------------------------------------------------*
*&      Form  VIEW_FIELD_TAB
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM VIEW_FIELD_TAB.
  SET PF-STATUS 'PFSTA04' EXCLUDING 'GRAF'.
  WINDOW STARTING AT 15 5 ENDING AT 90 15.
  LOOP AT ITAB_TAB.
    SELECT SINGLE * FROM DD02T
                    WHERE TABNAME = ITAB_TAB-TAB
                      AND DDLANGUAGE = 'E'.
    WRITE: /3 ITAB_TAB-TAB, DD02T-DDTEXT.
    HIDE: ITAB_TAB-TAB.
  ENDLOOP.
  CLEAR ITAB_TAB-TAB.
  ENDFORM.                               " VIEW_FIELD_TAB
  *&---------------------------------------------------------------------*
*&      Form  CHOS_INDX_TAB
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CHOS_INDX_TAB.
  PERFORM GET_LINE_CHECK.
  DESCRIBE TABLE ITAB_INDEX LINES LINE_CNT.
  IF LINE_CNT > 0.
    PERFORM WRITE_INDEX.
  ELSE.
    MESSAGE S315 WITH 'Not Choose any table'.
  ENDIF.
  ENDFORM.                               " CHOS_INDX_TAB
  *&---------------------------------------------------------------------*
*&      Form  CHSE_VIEW_FIELD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CHSE_VIEW_FIELD.
  REFRESH FCODE_TAB.
  FCODE_TAB = 'CHSE'.
  APPEND FCODE_TAB.
  FCODE_TAB = 'GRAF'.
  APPEND FCODE_TAB.
  SY-LSIND = SY-LSIND - 1.
  SET TITLEBAR 'W04' WITH ITAB_TAB-TAB.
  SET PF-STATUS 'PFSTA04' EXCLUDING FCODE_TAB.
  REFRESH ITAB_FIELD.
  SELECT * FROM DD03L
           WHERE TABNAME = ITAB_TAB-TAB
           ORDER BY POSITION.
    ITAB_FIELD-FIELD = DD03L-FIELDNAME.
    SELECT SINGLE DDTEXT FROM DD04T
                         INTO ITAB_FIELD-TEXT
                         WHERE ROLLNAME = DD03L-ROLLNAME
                           AND DDLANGUAGE = '3'.
    APPEND ITAB_FIELD.
  ENDSELECT.
  LOOP AT ITAB_FIELD.
    WRITE: /3 ITAB_FIELD-FIELD COLOR 4, ITAB_FIELD-TEXT COLOR 2.
  ENDLOOP.
  CLEAR ITAB_TAB-TAB.
  ENDFORM.                               " CHSE_VIEW_FIELD
  *&---------------------------------------------------------------------*
*&      Form  CHSE_FIELD_DIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CHSE_FIELD_DIST.
  SY-LSIND = SY-LSIND - 1.
  SET TITLEBAR 'W06'.
  SET PF-STATUS 'PFSTA04' EXCLUDING 'GRAF'.
  REFRESH ITAB_FIELD.
  SELECT * FROM DD03L
           WHERE TABNAME = ITAB_TAB-TAB
           ORDER BY POSITION.
    ITAB_FIELD-FIELD = DD03L-FIELDNAME.
    SELECT SINGLE DDTEXT FROM DD04T
                         INTO ITAB_FIELD-TEXT
                         WHERE ROLLNAME = DD03L-ROLLNAME
                           AND DDLANGUAGE = '3'.
    APPEND ITAB_FIELD.
  ENDSELECT.
  LOOP AT ITAB_FIELD.
    WRITE: /3 ITAB_FIELD-FIELD COLOR 4, ITAB_FIELD-TEXT COLOR 2.
    HIDE ITAB_FIELD-FIELD.
  ENDLOOP.
  CLEAR ITAB_FIELD-FIELD.
ENDFORM.                               " CHSE_FIELD_DIST
  *&---------------------------------------------------------------------*
*&      Form  EXEC_SASC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM EXEC_SASC.
  DATA: POSITION TYPE I.
  POSITION = SY-STACO + SY-CUCOL.
  LOOP AT ITAB_LEN.
    IF ITAB_LEN-LEN > POSITION.
      READ TABLE ITAB_COL INDEX SY-TABIX.
      PERFORM SQL_GENERATE USING 'N' ITAB_COL-COL 'A'.  "INIT FLAG = 'N'
      IF SY-SUBRC <> 0.
        EXIT.
      ENDIF.
      PERFORM EXEC_SQL.
      EXIT.
    ENDIF.
  ENDLOOP.
  ENDFORM.                               " EXEC_SASC
  *&---------------------------------------------------------------------*
*&      Form  EXEC_SDES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM EXEC_SDES.
  DATA: POSITION TYPE I.
  POSITION = SY-STACO + SY-CUCOL.
  LOOP AT ITAB_LEN.
    IF ITAB_LEN-LEN > POSITION.
      READ TABLE ITAB_COL INDEX SY-TABIX.
      PERFORM SQL_GENERATE USING 'N' ITAB_COL-COL 'D'.  "INIT FLAG = 'N'
      IF SY-SUBRC <> 0.
        EXIT.
      ENDIF.
      PERFORM EXEC_SQL.
      EXIT.
    ENDIF.
  ENDLOOP.
  ENDFORM.                               " EXEC_SDES
  *&---------------------------------------------------------------------*
*&      Form  WRITE_INDEX_HIER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM WRITE_INDEX_HIER.
  SY-LSIND = 3.
  READ CURRENT LINE.
  READ TABLE ITAB_INDEX WITH KEY INDEX = ITAB_INDEX-INDEX.
  IF ITAB_INDEX-PLUS = '3'.
    ITAB_INDEX-PLUS = '4'.
  ELSE.
    ITAB_INDEX-PLUS = '3'.
  ENDIF.
  MODIFY ITAB_INDEX INDEX SY-TABIX.
  PERFORM WRITE_INDEX.
  CLEAR ITAB_INDEX-INDEX.
  ENDFORM.                               " WRITE_INDEX_HIER
  *&---------------------------------------------------------------------*
*&      Form  SEL_FIELD_DIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SEL_FIELD_DIST.
  REFRESH ITAB_DIST.
  SY-LSIND = SY-LSIND - 1.
  SET TITLEBAR 'W07' WITH ITAB_FIELD-FIELD ITAB_TAB-TAB.
  SET PF-STATUS 'PFSTA04' EXCLUDING 'CHSE'.
  PERFORM GET_ITAB_DIST.
  GENERATE SUBROUTINE POOL ITAB_DIST NAME PROG
                                     MESSAGE MSG.
  IF SY-SUBRC <> 0.
    MSG_TEXT = MSG+(80).
    WRITE: /1 MSG_TEXT.
    MSG_TEXT = MSG+80(40).
    WRITE: /1 MSG_TEXT.
  ELSE.
    PERFORM DYN2 IN PROGRAM (PROG).
  ENDIF.
  CLEAR ITAB_FIELD-FIELD.
  ENDFORM.                               " SEL_FIELD_DIST
  *&---------------------------------------------------------------------*
*&      Form  GET_ITAB_DIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_ITAB_DIST.
  DATA: DOMNAME     LIKE DD03L-DOMNAME.
  SELECT SINGLE * FROM DD03L
                  WHERE TABNAME = ITAB_TAB-TAB
                    AND POSITION = '0001'.
  ITAB_DIST-CODE = 'PROGRAM SUBPOOL.'.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'DATA: BEGIN OF ITAB_DATA OCCURS 1,'.
  APPEND ITAB_DIST.
  CONCATENATE ITAB_TAB-TAB '-' ITAB_FIELD-FIELD INTO ITAB_DIST-CODE.
  CONCATENATE 'COL1 LIKE' ITAB_DIST-CODE ','
              INTO ITAB_DIST-CODE SEPARATED BY SPACE.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'COL2(15) TYPE C,'.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = '       END OF ITAB_DATA.'.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'DATA: LIN_CNT TYPE I,'.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = '      D_RATE(5) TYPE P DECIMALS 2.'.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'FORM DYN2.'.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'EXEC SQL PERFORMING WRITE_DATA.'.
  APPEND ITAB_DIST.
  CONCATENATE 'SELECT DISTINCT' ITAB_FIELD-FIELD ','
              'COUNT(' ITAB_FIELD-FIELD ')'
              INTO ITAB_DIST-CODE  SEPARATED BY SPACE.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'INTO :ITAB_DATA-COL1, :ITAB_DATA-COL2'.
  APPEND ITAB_DIST.
  CONCATENATE 'FROM' ITAB_TAB-TAB
              INTO ITAB_DIST-CODE  SEPARATED BY SPACE.
  APPEND ITAB_DIST.
  IF DD03L-FIELDNAME CP '*MANDT'.
    CONCATENATE 'WHERE' DD03L-FIELDNAME '= :SY-MANDT'
                INTO ITAB_DIST-CODE  SEPARATED BY SPACE.
    APPEND ITAB_DIST.
  ENDIF.
  CONCATENATE 'GROUP BY' ITAB_FIELD-FIELD
              INTO ITAB_DIST-CODE  SEPARATED BY SPACE.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'ENDEXEC.'.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'DESCRIBE TABLE ITAB_DATA LINES LIN_CNT.'.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'WRITE: /1 ''Data Kinds      : '', LIN_CNT COLOR 3,'.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = '''Kinds''.'.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'D_RATE = 1 / LIN_CNT * 100.'.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'WRITE: /1 ''Distribute Rate : '', D_RATE COLOR 3,'.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = '''%''.'.
  APPEND ITAB_DIST.
  SELECT SINGLE DOMNAME INTO DOMNAME
                          FROM DD03L
                          WHERE TABNAME = ITAB_TAB-TAB
                            AND FIELDNAME = ITAB_FIELD-FIELD.
  IF SY-SUBRC = 0.
    SELECT SINGLE OUTPUTLEN INTO COL_LENGTH
                            FROM DD01L
                            WHERE DOMNAME = DOMNAME
                              AND AS4LOCAL = 'A'.
    ENDLEN = COL_LENGTH + 3 + 18 + 1.
  ENDIF.
  CONCATENATE  'ULINE /1' '(' ENDLEN ')' '.' INTO ITAB_DIST-CODE.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'FORMAT COLOR 4.'.
  APPEND ITAB_DIST.
  CONCATENATE 'WRITE: /1 SY-VLINE, (' COL_LENGTH ')'
              INTO ITAB_DIST-CODE.
  CONCATENATE ITAB_DIST-CODE '''' ITAB_FIELD-FIELD '''' ','
              'SY-VLINE, (15) ''Records'', SY-VLINE.'
              INTO ITAB_DIST-CODE  SEPARATED BY SPACE.
  APPEND ITAB_DIST.
  CONCATENATE  'ULINE /1' '(' ENDLEN ')' '.' INTO ITAB_DIST-CODE.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'FORMAT COLOR 2.'.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'LOOP AT ITAB_DATA.'.
  APPEND ITAB_DIST.
  CONCATENATE 'WRITE: /1 SY-VLINE,' 'ITAB_DATA-COL1,'
              INTO ITAB_DIST-CODE  SEPARATED BY SPACE.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'SY-VLINE, ITAB_DATA-COL2, SY-VLINE.'.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'ENDLOOP.'.
  APPEND ITAB_DIST.
  CONCATENATE  'ULINE /1' '(' ENDLEN ')' '.' INTO ITAB_DIST-CODE.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'ENDFORM.'.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'FORM WRITE_DATA.'.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'APPEND ITAB_DATA.'.
  APPEND ITAB_DIST.
  ITAB_DIST-CODE = 'ENDFORM.'.
  APPEND ITAB_DIST.
ENDFORM.                               " GET_ITAB_DIST
*&---------------------------------------------------------------------*
*&      Form  CREATE_GRAF
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CREATE_GRAF.
  DATA: BEGIN OF ITAB_GRAF OCCURS 1,
          DATA1(50) TYPE C,
          DATA2     TYPE I,
        END OF ITAB_GRAF.
  DATA: CUR_LINE TYPE I VALUE 6,
        INTO1(50) TYPE C,
        INTO2(17) TYPE C,
        DEL_CHAR TYPE C.
  DO.
    READ LINE CUR_LINE.
    IF SY-SUBRC <> 0.
      EXIT.
    ENDIF.
    SPLIT SY-LISEL AT '|' INTO DEL_CHAR INTO1 INTO2 DEL_CHAR.
    ITAB_GRAF-DATA1 = INTO1.
    ITAB_GRAF-DATA2 = INTO2.
    APPEND ITAB_GRAF.
    CUR_LINE = CUR_LINE + 1.
  ENDDO.
  CALL FUNCTION 'GRAPH_2D'
       EXPORTING
            TITL = SY-TITLE
       TABLES
            DATA = ITAB_GRAF.
  ENDFORM.                               " CREATE_GRAF
*&---------------------------------------------------------------------*
*&      Form  CONFIRM_UPDATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CONFIRM_UPDATE.
  CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
       EXPORTING
            TEXTLINE1 = 'Do you want to really UPDATE?'
            TITEL     = 'Exit'
       IMPORTING
            ANSWER    = CONFIRM_FLAG.
  CASE CONFIRM_FLAG.
    WHEN 'N'. EXIT.
    WHEN 'A'. EXIT.
    WHEN 'J'.
  ENDCASE.
  CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
       EXPORTING
            TEXTLINE1 = '措翠阑 肋 秦具 邓聪促. 舅疽嚼聪鳖?'
            TITEL     = 'Exit'
       IMPORTING
            ANSWER    = CONFIRM_FLAG.
  CASE CONFIRM_FLAG.
    WHEN 'N'. EXIT.
    WHEN 'A'.
    WHEN 'J'. EXIT.
  ENDCASE.
  CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
       EXPORTING
            TEXTLINE1 = '构窍矾 秒家甫 窍瘤夸? 馆亲钦聪鳖?'
            TITEL     = 'Exit'
       IMPORTING
            ANSWER    = CONFIRM_FLAG.
  CASE CONFIRM_FLAG.
    WHEN 'N'. EXIT.
    WHEN 'A'. EXIT.
    WHEN 'J'.
  ENDCASE.
  CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
       EXPORTING
            TEXTLINE1 = '捞 扁瓷篮 穿备档 镜荐绝栏聪瘪 荤侩摹付技夸.'
            TITEL     = 'Exit'
       IMPORTING
            ANSWER    = CONFIRM_FLAG.
  CASE CONFIRM_FLAG.
    WHEN 'N'. EXIT.
    WHEN 'A'.
    WHEN 'J'. EXIT.
  ENDCASE.
  CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
       EXPORTING
            TEXTLINE1 = '龙扁矫焙夸...荤侩窍矫登 酒林炼缴窍技夸.'
            TITEL     = 'Exit'
       IMPORTING
            ANSWER    = CONFIRM_FLAG.
  CASE CONFIRM_FLAG.
    WHEN 'N'. EXIT.
    WHEN 'A'. EXIT.
    WHEN 'J'. PERFORM EXEC_SQL_UPDATE.
  ENDCASE.
ENDFORM.                               " CONFIRM_UPDATE
  *&---------------------------------------------------------------------*
*&      Form  EXEC_SQL_UPDATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM EXEC_SQL_UPDATE.
  ITAB_PROG-CODE = 'PROGRAM SUBPOOL MESSAGE-ID AT.'.
  APPEND ITAB_PROG.
  ITAB_PROG-CODE = 'DATA: COUNT TYPE I.'.
  APPEND ITAB_PROG.
  ITAB_PROG-CODE = 'FORM DYN3.'.
  APPEND ITAB_PROG.
  ITAB_PROG-CODE = 'EXEC SQL.'.
  APPEND ITAB_PROG.
  LOOP AT ITAB_SQL.
    ITAB_PROG-CODE = ITAB_SQL-CODE.
    APPEND ITAB_PROG.
  ENDLOOP.
  ITAB_PROG-CODE = 'ENDEXEC.'.
  APPEND ITAB_PROG.
  ITAB_PROG-CODE = 'MESSAGE I315 WITH ''performed'' SY-DBCNT'.
  CONCATENATE ITAB_PROG-CODE '''' 'Records' '''' '.'
              INTO ITAB_PROG-CODE SEPARATED BY SPACE.
  APPEND ITAB_PROG.
  ITAB_PROG-CODE = 'ENDFORM.'.
  APPEND ITAB_PROG.
  GENERATE SUBROUTINE POOL ITAB_PROG NAME PROG
                                     MESSAGE MSG.
  IF SY-SUBRC <> 0.
    MSG_TEXT = MSG+(80).
    WRITE: /1 MSG_TEXT.
    MSG_TEXT = MSG+80(40).
    WRITE: /1 MSG_TEXT.
  ELSE.
    PERFORM DYN3 IN PROGRAM (PROG).
  ENDIF.
  ENDFORM.                               " EXEC_SQL_UPDATE
*&---------------------------------------------------------------------*
*&      Form  CHECK_SQL_CODE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CHECK_SQL_CODE.
  DATA: BEGIN OF VALUE_TAB OCCURS 20.
          INCLUDE STRUCTURE EXPL_VALUE.
  DATA: END OF VALUE_TAB.
  DATA: STATEMENT(32000).
  DATA: LENGTH TYPE I.
  LOOP AT ITAB_SQL.
    CONCATENATE STATEMENT ITAB_SQL-CODE INTO STATEMENT
                                        SEPARATED BY SPACE.
  ENDLOOP.
  LENGTH = STRLEN( STATEMENT ).
  CALL 'DB_EXPLAIN_PLAN'
       ID 'STATEMENT' FIELD STATEMENT
       ID 'LENGTH'    FIELD LENGTH
       ID 'VALUES'    FIELD VALUE_TAB.
  ENDFORM.                               " CHECK_SQL_CODE
*&---------------------------------------------------------------------*
*&      Form  SQL_GENERATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SQL_GENERATE USING INIT_FLAG ORDER_COL SORT_FLAG.
  DATA: ORDER_TABIX LIKE SY-TABIX.
  IF INIT_FLAG = 'N'.
    SEARCH ITAB_PROG FOR 'ORDER BY'.
    IF SY-SUBRC = 0.
      READ TABLE ITAB_PROG INDEX SY-TABIX.
      IF SORT_FLAG = 'A'.
        CONCATENATE 'ORDER BY' ORDER_COL
                    INTO ITAB_PROG-CODE SEPARATED BY SPACE.
      ELSE.
        CONCATENATE 'ORDER BY' ORDER_COL 'DESC'
                    INTO ITAB_PROG-CODE SEPARATED BY SPACE.
      ENDIF.
      MODIFY ITAB_PROG INDEX SY-TABIX.
  ORDER_TABIX = SY-TABIX + 1.
      LOOP AT ITAB_PROG FROM ORDER_TABIX.
        IF ITAB_PROG-CODE+(7) = 'ENDEXEC'.
          EXIT.
        ENDIF.
        DELETE ITAB_PROG INDEX SY-TABIX.
      ENDLOOP.
    ENDIF.
  ENDIF.
  GENERATE SUBROUTINE POOL ITAB_PROG NAME PROG
                                     MESSAGE MSG.
  IF SY-SUBRC <> 0.
    MSG_TEXT = MSG+(80).
    WRITE: /1 MSG_TEXT.
    MSG_TEXT = MSG+80(40).
    WRITE: /1 MSG_TEXT.
  ENDIF.
  ENDFORM.                               " SQL_GENERATE
*&---------------------------------------------------------------------*
*&      Form  SQL_UPLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SQL_UPLOAD.
  CALL FUNCTION 'UPLOAD'
       EXPORTING
            FILENAME            = 'C:\TEMP\SQL.TXT'
            FILETYPE            = 'asc'
       IMPORTING
            FILESIZE            = FILESIZE
       TABLES
            DATA_TAB            = ITAB_SQL
       EXCEPTIONS
            CONVERSION_ERROR    = 1
            INVALID_TABLE_WIDTH = 2
            INVALID_TYPE        = 3
            NO_BATCH            = 4
            UNKNOWN_ERROR       = 5.
  ENDFORM.                               " SQL_UPLOAD
  *&---------------------------------------------------------------------*
*&      Form  SQL_DOWNLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SQL_DOWNLOAD.
  CALL FUNCTION 'DOWNLOAD'
       EXPORTING
            FILENAME = 'C:\TEMP\SQL.TXT'
            FILETYPE = 'asc'
       TABLES
            DATA_TAB = ITAB_SQL.
  ENDFORM.                               " SQL_DOWNLOAD
*&---------------------------------------------------------------------*
*&      Form  GET_ITAB_COL_ALL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_ITAB_COL_ALL.
  REFRESH ITAB_COL.
  READ TABLE ITAB_TAB INDEX 1.
  SELECT * FROM DD03L
           WHERE TABNAME = ITAB_TAB-TAB
           ORDER BY POSITION.
    ITAB_COL-COL = DD03L-FIELDNAME.
    APPEND ITAB_COL.
  ENDSELECT.
  ENDFORM.                               " GET_ITAB_COL_ALL

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-115916-1-1.html 上篇帖子: [SAP ABAP开发技术总结]列表屏幕 下篇帖子: sap学习笔记一
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表