SAP ABAP 万能修改表程序

更多内容关注公众号:SAP Technical 

各位可以关注我的公众号:SAP Technical

*&---------------------------------------------------------------------*
*& Report  ZSE16N
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZSE16N.

DATA: GV_OBJTYPE TYPE OBJTYPE.
DATA:IT_SELFIELDS LIKE TABLE OF SE16N_SELTAB WITH HEADER LINE.

PARAMETERS:
  P_TNAME LIKE DD02L-TABNAME OBLIGATORY,
  P_MAXL  LIKE SY-TABIX DEFAULT '500'.

AT SELECTION-SCREEN.
  IF P_TNAME IS NOT INITIAL.
    IF P_TNAME+0(1) <> 'Z' AND P_TNAME+0(1) <> 'Y' AND SY-UNAME <> '0181'.
      MESSAGE '非自定义表,不能修改' TYPE 'E'.
    ELSE.
      CALL FUNCTION 'INTERN_DD_TABL_TYPE'
        EXPORTING
          OBJNAME              = P_TNAME
          OBJSTATE             = 'M'
        IMPORTING
          OBJTYPE              = GV_OBJTYPE
        EXCEPTIONS
          OBJECT_NOT_FOUND     = 1
          OBJECT_NOT_SPECIFIED = 2
          OTHERS               = 3.
      IF SY-SUBRC <> 0.
        MESSAGE '输入的表不存在' TYPE 'E'.
      ELSE.
        IF GV_OBJTYPE <> 'T' AND GV_OBJTYPE <> 'V'.
          MESSAGE '输入的表或视图' TYPE 'E'.
        ENDIF.
      ENDIF.

    ENDIF.
  ENDIF.

START-OF-SELECTION.
  PERFORM CALL_SELECTION_COND.
  PERFORM CALL_SE16N.

*&---------------------------------------------------------------------*
*&      Form  CALL_SELECTION_COND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CALL_SELECTION_COND .
  DATA SELID         TYPE  RSDYNSEL-SELID.
  DATA: FIELD_TAB TYPE TABLE OF RSDSFIELDS,
        LW_FIELD  TYPE RSDSFIELDS.
  DATA TABLE_TAB     TYPE TABLE OF RSDSTABS.
  DATA TABLE         LIKE LINE OF TABLE_TAB.
  DATA:FIELD_RANGES TYPE  RSDS_TRANGE,
       LW_RSDS_R    TYPE RSDS_RANGE,
       LW_RSDS      TYPE RSDS_FRANGE,
       LW_SELOPT    TYPE RSDSSELOPT.
  TABLE-PRIM_TAB = P_TNAME.
  APPEND TABLE TO TABLE_TAB.

  DATA : REF_TABLE_DES TYPE REF TO CL_ABAP_STRUCTDESCR.
  DATA : IDETAILS TYPE ABAP_COMPDESCR_TAB,
         XDETAILS TYPE ABAP_COMPDESCR.
  REF_TABLE_DES ?= CL_ABAP_TABLEDESCR=>DESCRIBE_BY_NAME( P_TNAME ).
  IDETAILS[] = REF_TABLE_DES->COMPONENTS[].
  LOOP AT IDETAILS INTO XDETAILS FROM 2 TO 10.
    LW_FIELD-TABLENAME = P_TNAME.
    LW_FIELD-FIELDNAME = XDETAILS-NAME.
    APPEND LW_FIELD TO FIELD_TAB.
  ENDLOOP.


  CALL FUNCTION 'FREE_SELECTIONS_INIT'
    EXPORTING
      KIND         = GV_OBJTYPE
    IMPORTING
      SELECTION_ID = SELID
    TABLES
      TABLES_TAB   = TABLE_TAB
      FIELDS_TAB   = FIELD_TAB
    EXCEPTIONS
      OTHERS       = 4.

  CALL FUNCTION 'FREE_SELECTIONS_DIALOG'
    EXPORTING
      SELECTION_ID = SELID
      TITLE        = '选择条件'
      AS_WINDOW    = ' '
    IMPORTING
      FIELD_RANGES = FIELD_RANGES
    TABLES
      FIELDS_TAB   = FIELD_TAB
    EXCEPTIONS
      OTHERS       = 4.


  LOOP AT FIELD_RANGES INTO LW_RSDS_R.
    LOOP AT LW_RSDS_R-FRANGE_T INTO LW_RSDS.
      IT_SELFIELDS-FIELD = LW_RSDS-FIELDNAME.
      LOOP AT LW_RSDS-SELOPT_T INTO LW_SELOPT.
        IT_SELFIELDS-SIGN = LW_SELOPT-SIGN.
        IT_SELFIELDS-OPTION = LW_SELOPT-OPTION.
        IT_SELFIELDS-LOW = LW_SELOPT-LOW.
        IT_SELFIELDS-HIGH = LW_SELOPT-HIGH.
        APPEND IT_SELFIELDS.
      ENDLOOP.
      CLEAR IT_SELFIELDS.
    ENDLOOP.
  ENDLOOP.
*FIELD
*SIGN
*OPTION
*LOW
*HIGH
ENDFORM.                    " CALL_SELECTION_COND

*&---------------------------------------------------------------------*
*&      Form  CALL_SE16N
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CALL_SE16N .
  DATA: I_TAB TYPE SE16N_TAB.
  I_TAB = P_TNAME.
  CALL FUNCTION 'SE16N_INTERFACE'
    EXPORTING
      I_TAB        = I_TAB
      I_EDIT       = 'X'
      I_SAPEDIT    = 'X'
*     I_NO_TXT     = ' '
      I_MAX_LINES  = P_MAXL
*     I_LINE_DET   = ' '
*     I_DISPLAY    = 'X'
*     I_CLNT_SPEZ  = ' '
*     I_CLNT_DEP   = ' '
*     I_VARIANT    = ' '
*     I_OLD_ALV    = ' '
*     I_CHECKKEY   = ' '
*     I_TECH_NAMES = ' '
*     I_CWIDTH_OPT_OFF            = ' '
*     I_SCROLL     = ' '
*     I_NO_CONVEXIT               = ' '
*     I_LAYOUT_GET = ' '
*     I_ADD_FIELD  =
*     I_ADD_FIELDS_ON             =
*     I_UNAME      =
*     I_HANA_ACTIVE               = ' '
*     I_DBCON      = ' '
*     I_OJKEY      = ' '
*     I_DISPLAY_ALL               = ' '
* IMPORTING
*     E_LINE_NR    =
*     E_DREF       =
*     ET_FIELDCAT  =
    TABLES
      IT_SELFIELDS = IT_SELFIELDS[]
*     IT_OUTPUT_FIELDS            =
*     IT_OR_SELFIELDS             =
*     IT_CALLBACK_EVENTS          =
*     IT_ADD_UP_CURR_FIELDS       =
*     IT_ADD_UP_QUAN_FIELDS       =
*     IT_SUM_UP_FIELDS            =
*     IT_GROUP_BY_FIELDS          =
*     IT_ORDER_BY_FIELDS          =
*     IT_AGGREGATE_FIELDS         =
*     IT_TOPLOW_FIELDS            =
*     IT_SORTORDER_FIELDS         =
    EXCEPTIONS
      NO_VALUES    = 1
      OTHERS       = 2.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.
ENDFORM.                    " CALL_SE16N

发布了685 篇原创文章 · 获赞 97 · 访问量 92万+

猜你喜欢

转载自blog.csdn.net/SAPmatinal/article/details/103970631
今日推荐