*&---------------------------------------------------------------------*
*& 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
abap调整程序代码
于 2023-02-20 17:46:31 首次发布