abap调整程序代码

*&---------------------------------------------------------------------*
*& Report  Y_CLY_PRO_TAB
*& "3239
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT Y_CLY_PRO_TAB .


PARAMETERS: P_RB1 RADIOBUTTON GROUP GR1 DEFAULT 'X'.    "TABLE
PARAMETERS: P_RB2 RADIOBUTTON GROUP GR1.                "REPORT
PARAMETERS: P_NAME(40).

START-OF-SELECTION.
  PERFORM FRM_DO_PROGRAM USING P_NAME.

*&---------------------------------------------------------------------*
*&      Form  FRM_DO_PROGRAM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_DO_PROGRAM USING P_NAME.

  IF P_RB1 = 'X'.                             " 修改表;
    PERFORM FRM_UPDATE_2TABLE   USING P_NAME.

  ELSEIF P_RB2 = 'X'.                         " 修改程序;
    PERFORM FRM_UPDATE_1PROGRAM USING P_NAME.

  ENDIF.

ENDFORM.                    " FRM_DO_PROGRAM
*&---------------------------------------------------------------------*
*&      Form  FRM_UPDATE_2TABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_P_NAME  text
*----------------------------------------------------------------------*
FORM FRM_UPDATE_2TABLE  USING    PV_NAME .


  DATA: LV_OBJTYPE    TYPE OBJTYPE.
  DATA: LT_SELFIELDS  LIKE TABLE OF SE16N_SELTAB WITH HEADER LINE.

  DATA: LV_TNAME      TYPE DD02L-TABNAME,
        LV_MAXL       TYPE SY-TABIX VALUE '500'.

  LV_TNAME = PV_NAME.

  PERFORM FRM_UPDATE_2TABLE_1CHECK  USING  LV_TNAME CHANGING LV_OBJTYPE.
  PERFORM FRM_UPDATE_2TABLE_2SELOPT TABLES LT_SELFIELDS USING LV_TNAME LV_OBJTYPE.

  PERFORM FRM_UPDATE_2TABLE_3SE16N  TABLES LT_SELFIELDS USING LV_TNAME LV_MAXL.

ENDFORM.                    " FRM_UPDATE_2TABLE
*&---------------------------------------------------------------------*
*&      Form  FRM_UPDATE_2TABLE_1CHECK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_P_TNAME  text
*      <--P_LV_OBJTYPE  text
*----------------------------------------------------------------------*
FORM FRM_UPDATE_2TABLE_1CHECK  USING    PV_TNAME
                               CHANGING CV_OBJTYPE.

  IF PV_TNAME IS NOT INITIAL.
    CALL FUNCTION 'INTERN_DD_TABL_TYPE'
      EXPORTING
        OBJNAME              = PV_TNAME
        OBJSTATE             = 'M'
      IMPORTING
        OBJTYPE              = CV_OBJTYPE
      EXCEPTIONS
        OBJECT_NOT_FOUND     = 1
        OBJECT_NOT_SPECIFIED = 2
        OTHERS               = 3.
    IF SY-SUBRC <> 0.
      MESSAGE '输入的表不存在' TYPE 'S' DISPLAY LIKE 'E'.
      LEAVE LIST-PROCESSING .
    ELSE.
      IF CV_OBJTYPE <> 'T' AND CV_OBJTYPE <> 'V'.
        MESSAGE '输入的表或视图' TYPE 'S' DISPLAY LIKE 'E'.
        LEAVE LIST-PROCESSING .
      ENDIF.
    ENDIF.

  ENDIF.

ENDFORM.                    " FRM_UPDATE_2TABLE_1CHECK
*&---------------------------------------------------------------------*
*&      Form  FRM_UPDATE_2TABLE_2SELOPT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_UPDATE_2TABLE_2SELOPT TABLES PT_SELFIELDS STRUCTURE SE16N_SELTAB
                               USING  PV_TNAME PV_OBJTYPE.

  DATA: LV_SELID      TYPE RSDYNSEL-SELID.
  DATA: LT_FIELDS     TYPE TABLE OF RSDSFIELDS,
        LS_FIELDS     TYPE RSDSFIELDS.

  DATA: LT_TABLES       TYPE TABLE OF RSDSTABS.
  DATA: LS_TABLES       LIKE LINE  OF LT_TABLES.

  DATA: LT_FIELD_RANGES TYPE RSDS_TRANGE,
        LS_RSDS_R       TYPE RSDS_RANGE,
        LS_RSDS         TYPE RSDS_FRANGE,
        LS_SELOPT       TYPE RSDSSELOPT.

  DATA: L_REF_TABLE_DES TYPE REF TO CL_ABAP_STRUCTDESCR.

  "表字段清单
  DATA: LT_DETAILS     TYPE ABAP_COMPDESCR_TAB,
        LS_DETAILS     TYPE ABAP_COMPDESCR.


  LS_TABLES-PRIM_TAB = PV_TNAME.
  APPEND LS_TABLES TO LT_TABLES.

  L_REF_TABLE_DES ?= CL_ABAP_TABLEDESCR=>DESCRIBE_BY_NAME( PV_TNAME ).
  LT_DETAILS[] = L_REF_TABLE_DES->COMPONENTS[].

  LOOP AT LT_DETAILS INTO LS_DETAILS FROM 2 TO 10.
    LS_FIELDS-TABLENAME = PV_TNAME.
    LS_FIELDS-FIELDNAME = LS_DETAILS-NAME.
    APPEND LS_FIELDS TO LT_FIELDS.
  ENDLOOP.


  CALL FUNCTION 'FREE_SELECTIONS_INIT'
    EXPORTING
      KIND         = PV_OBJTYPE
    IMPORTING
      SELECTION_ID = LV_SELID
    TABLES
      TABLES_TAB   = LT_TABLES
      FIELDS_TAB   = LT_FIELDS
    EXCEPTIONS
      OTHERS       = 4.

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


  LOOP AT LT_FIELD_RANGES INTO LS_RSDS_R.
    LOOP AT LS_RSDS_R-FRANGE_T INTO LS_RSDS.
      PT_SELFIELDS-FIELD = LS_RSDS-FIELDNAME.
      LOOP AT LS_RSDS-SELOPT_T INTO LS_SELOPT.
        PT_SELFIELDS-SIGN   = LS_SELOPT-SIGN.
        PT_SELFIELDS-OPTION = LS_SELOPT-OPTION.
        PT_SELFIELDS-LOW    = LS_SELOPT-LOW.
        PT_SELFIELDS-HIGH   = LS_SELOPT-HIGH.
        APPEND PT_SELFIELDS.
      ENDLOOP.
      CLEAR PT_SELFIELDS.
    ENDLOOP.
  ENDLOOP.

ENDFORM.                    " FRM_UPDATE_2TABLE_2SELOPT
*&---------------------------------------------------------------------*
*&      Form  FRM_UPDATE_2TABLE_3SE16N
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_UPDATE_2TABLE_3SE16N TABLES PT_SELFIELDS USING PV_TNAME PV_MAXL.

  DATA: LV_TAB TYPE SE16N_TAB.
  LV_TAB = PV_TNAME.

  CALL FUNCTION 'SE16N_INTERFACE'
    EXPORTING
      I_TAB        = LV_TAB
      I_EDIT       = 'X'
      I_SAPEDIT    = 'X'
      I_MAX_LINES  = PV_MAXL
    TABLES
      IT_SELFIELDS = PT_SELFIELDS[]
    EXCEPTIONS
      NO_VALUES    = 1
      OTHERS       = 2.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.                    " CALL_SE16N

*&---------------------------------------------------------------------*
*&      Form  FRM_UPDATE_1PROGRAM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_P_NAME  text
*----------------------------------------------------------------------*
FORM FRM_UPDATE_1PROGRAM  USING    PV_NAME.
  DATA: LV_PROGRAM TYPE TRDIR-NAME.
  DATA: LS_TRDIR   TYPE TRDIR.

  DATA: BEGIN OF LT_CODE OCCURS 1,
          TXT(255) TYPE C,
        END OF LT_CODE.

  LV_PROGRAM = PV_NAME.

  SELECT SINGLE * INTO LS_TRDIR
    FROM TRDIR WHERE NAME = LV_PROGRAM.
  IF SY-SUBRC = 0.
    READ REPORT LV_PROGRAM INTO LT_CODE.

    EDITOR-CALL FOR LT_CODE.

    IF SY-SUBRC = 0.
      INSERT REPORT LV_PROGRAM FROM LT_CODE.
    ENDIF.

    UPDATE PROGDIR SET UNAM  = LS_TRDIR-UNAM    "LAST CHANGED
                       UDAT  = LS_TRDIR-UDAT    "更改日期
                       SDATE = LS_TRDIR-SDATE
                       STIME = LS_TRDIR-STIME
                       IDATE = LS_TRDIR-IDATE
                       ITIME = LS_TRDIR-ITIME
                 WHERE NAME  = LV_PROGRAM.
    IF SY-SUBRC = 0.
      MESSAGE S001(00) WITH 'Update succeed!' '' '' ''.
    ELSE.
      MESSAGE W001(00) WITH 'Update failed,try it again' '' '' ''.
    ENDIF.
  ELSE.
    MESSAGE S001(00) WITH 'Error Report,please check your input data' '' '' '' DISPLAY LIKE 'E'.
  ENDIF.

ENDFORM.                    " FRM_UPDATE_1PROGRAM

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值