SAP 改造SE16N其中之一

代码如下:

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值