今天在群里回答了一个群友贴的一段代码问题,解决问题的同时发现这段程序挺有用的。可以用来进行开发统计,或者个人代码备份之用,不敢独享,贴到小博里供大家参考。选屏界面的字段描述需要自行添加,可以参看我后面的附图。------注(本文源于网络)
*&---------------------------------------------------------------------**& Report ZZHENGXB_TEST_DOWNLOAD*& 批量下载程序和表结构*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*REPORT ZZHENGXB_TEST_UPLOAD NO STANDARD PAGE HEADING LINE-SIZE 200 MESSAGE-ID WA. TABLES:TADIR,TRDIRT,TSTC,DD03L,DD02L,DD04L,DD02T,DD03T,DD04T. DATA: BEGIN OF YTADIR OCCURS 0. INCLUDE STRUCTURE TADIR. INCLUDE STRUCTURE TRDIRT. DATA: END OF YTADIR. DATA:PROG(72) TYPE C OCCURS 0 WITH HEADER LINE.*表结构 DATA:BEGIN OF TAB OCCURS 0. INCLUDE STRUCTURE DD03L. DATA:TEXT(40). DATA:END OF TAB. DATA:BEGIN OF T1 OCCURS 0, TABNAME LIKE DD02L-TABNAME, DDTEXT LIKE DD02T-DDTEXT, END OF T1. DATA:BEGIN OF ITAB OCCURS 0, FIELD(15), "字段 KEY(6), "关键字 ELMENT(15), "字段类型 TYPE(10), "数据类型 LENG(8) , "长度 DECIMALS(8) , "小数 CHK(10), "表检查 CAN(10), "参考表 CFI(10), "参考字段 TEXT(40), "字段描述 END OF ITAB. DATA: YYNAME(128) TYPE C. DATA: TT TYPE STRING OCCURS 0 WITH HEADER LINE. DATA: RN(72). DATA:FIELDS(40), LIN TYPE I, VAL(30), REP(40). SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME. PARAMETERS:DOW AS CHECKBOX. "是否下载 PARAMETERS:P_DIR(50) DEFAULT 'D:'. "下载路径 PARAMETERS:STYPE(6) DEFAULT 'TXT'. PARAMETERS:R1 RADIOBUTTON GROUP R DEFAULT 'X', R2 RADIOBUTTON GROUP R. SELECTION-SCREEN END OF BLOCK BLK1. SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME. SELECT-OPTIONS:AUTHOR FOR TADIR-AUTHOR DEFAULT 'zhengxb'. "开发人 SELECT-OPTIONS:DEVCLASS FOR TADIR-DEVCLASS. "开发类 SELECT-OPTIONS:OBJ FOR TADIR-OBJ_NAME. "下载程序名称 SELECT-OPTIONS:TABNAME FOR DD02L-TABNAME. "下载表名称 SELECTION-SCREEN END OF BLOCK BLK2. INITIALIZATION . START-OF-SELECTION . IF R1 = 'X'. PERFORM GET_DATA. ENDIF. IF R2 = 'X'. IF TABNAME IS INITIAL. MESSAGE I009 WITH '请输入要下载的表名!'. ELSE. PERFORM GET_TABLE_DATA. ENDIF. ENDIF. AT LINE-SELECTION. CLEAR: FIELDS, LIN. GET CURSOR FIELD FIELDS LINE LIN VALUE VAL. LIN = LIN - 1. IF LIN >= 1. READ TABLE YTADIR INDEX LIN. IF SY-SUBRC = 0. CLEAR REP. CLEAR PROG. REP = YTADIR-OBJ_NAME. READ REPORT REP INTO PROG. EDITOR-CALL FOR PROG.* SET PARAMETER ID 'RID' FIELD REP.* CALL TRANSACTION 'SE38' AND SKIP FIRST SCREEN. ENDIF. ENDIF. END-OF-SELECTION.*---------------------------------------------------------------------** FORM GET_DATA **---------------------------------------------------------------------** ........ **---------------------------------------------------------------------* FORM GET_DATA. SELECT * INTO CORRESPONDING FIELDS OF TABLE YTADIR FROM TADIR INNER JOIN TRDIRT ON TADIR~OBJ_NAME = TRDIRT~NAME WHERE OBJECT = 'PROG' AND OBJ_NAME IN OBJ AND DEVCLASS IN DEVCLASS AND AUTHOR IN AUTHOR. SORT YTADIR BY OBJ_NAME. WRITE:/ '开发类','开发人','程序名称','程序标题'. LOOP AT YTADIR. IF DOW = 'X'. REFRESH TT. RN = YTADIR-OBJ_NAME. READ REPORT RN INTO TT. CONCATENATE P_DIR YTADIR-AUTHOR '_' YTADIR-OBJ_NAME '_' YTADIR-TEXT '.' STYPE INTO YYNAME. CALL FUNCTION 'WS_DOWNLOAD' EXPORTING FILENAME = YYNAME FILETYPE = 'ASC' TABLES DATA_TAB = TT EXCEPTIONS FILE_OPEN_ERROR = 1 FILE_WRITE_ERROR = 2 INVALID_FILESIZE = 3 INVALID_TABLE_WIDTH = 4 INVALID_TYPE = 5 NO_BATCH = 6 UNKNOWN_ERROR = 7. IF SY-SUBRC = 0. WRITE:/1(10) YTADIR-DEVCLASS, (8) YTADIR-AUTHOR, (15) YTADIR-OBJ_NAME, (40) YTADIR-TEXT. FORMAT COLOR 5. WRITE: '已下载'. FORMAT COLOR OFF. ELSE. WRITE:/ YTADIR-DEVCLASS,YTADIR-AUTHOR,YTADIR-OBJ_NAME,YTADIR-TEXT. FORMAT COLOR 4. WRITE: '无法下载'. FORMAT COLOR OFF. ENDIF. ELSE. WRITE:/ YTADIR-DEVCLASS,YTADIR-AUTHOR,YTADIR-OBJ_NAME,YTADIR-TEXT. ENDIF. ENDLOOP. ENDFORM. "GET_DATA*---------------------------------------------------------------------** FORM GET_TABLE_DATA **---------------------------------------------------------------------** ........ **---------------------------------------------------------------------* FORM GET_TABLE_DATA. SELECT DISTINCT * INTO CORRESPONDING FIELDS OF TABLE T1 FROM DD02T WHERE TABNAME IN TABNAME AND DDLANGUAGE EQ '1'. SELECT * INTO CORRESPONDING FIELDS OF TABLE TAB FROM DD03L AS A WHERE A~TABNAME IN TABNAME. SORT TAB BY TABNAME POSITION. WRITE:/'字段名','关键字','数据元素','数据类型','长度','小数', '表检查','参考表','参考字段','字段描述'. ULINE. LOOP AT T1. REFRESH ITAB. CLEAR YYNAME. IF DOW = 'X'. ITAB-FIELD = '字段名'. ITAB-KEY = '关键字'. ITAB-ELMENT = '数据元素'. ITAB-TYPE = '数据类型'. ITAB-LENG = '长度'. ITAB-DECIMALS = '小数'. ITAB-TEXT = '字段描述'. ITAB-CHK = '表检查'. ITAB-CAN = '参考表'. ITAB-CFI = '参考字段'. APPEND ITAB. CLEAR ITAB. ENDIF. CONCATENATE T1-TABNAME '_' T1-DDTEXT '的表结构如下:' INTO YYNAME. FORMAT COLOR 3. WRITE:/ YYNAME. FORMAT COLOR OFF. LOOP AT TAB WHERE TABNAME = T1-TABNAME. ITAB-FIELD = TAB-FIELDNAME. ITAB-KEY = TAB-KEYFLAG. ITAB-ELMENT = TAB-ROLLNAME. ITAB-TYPE = TAB-DATATYPE. ITAB-LENG = TAB-LENG. ITAB-CHK = TAB-CHECKTABLE. ITAB-CAN = TAB-REFTABLE. ITAB-CFI = TAB-REFFIELD. ITAB-DECIMALS = TAB-DECIMALS. IF TAB-ROLLNAME NE SPACE. SELECT SINGLE * FROM DD04T WHERE ROLLNAME = TAB-ROLLNAME AND DDLANGUAGE = '1'. IF SY-SUBRC = 0. ITAB-TEXT = DD04T-DDTEXT. ELSE. CLEAR ITAB-TEXT. ENDIF. ELSE. SELECT SINGLE * FROM DD03T WHERE TABNAME = TAB-TABNAME AND DDLANGUAGE = '1' AND FIELDNAME = TAB-FIELDNAME. IF SY-SUBRC = 0. ITAB-TEXT = DD03T-DDTEXT. ELSE. CLEAR ITAB-TEXT. ENDIF. ENDIF. APPEND ITAB. WRITE:/ ITAB-FIELD,ITAB-KEY,ITAB-ELMENT,ITAB-TYPE,ITAB-LENG, ITAB-DECIMALS,ITAB-CHK,ITAB-CAN,ITAB-CFI,ITAB-TEXT. CLEAR ITAB. ENDLOOP. IF DOW = 'X'. CONCATENATE P_DIR T1-TABNAME '_' T1-DDTEXT '.' STYPE INTO YYNAME. CALL FUNCTION 'WS_DOWNLOAD' EXPORTING FILENAME = YYNAME FILETYPE = 'ASC' TABLES DATA_TAB = ITAB. ELSE. ULINE. ENDIF. ENDLOOP. ENDFORM. "GET_TABLE_DATA