您的位置:首页 > 其它

[程序收藏]一个不错的下载ABAP程序和表格的程序

2006-10-13 16:02 381 查看
今天在群里回答了一个群友贴的一段代码问题,解决问题的同时发现这段程序挺有用的。可以用来进行开发统计,或者个人代码备份之用,不敢独享,贴到小博里供大家参考。选屏界面的字段描述需要自行添加,可以参看我后面的附图。


*&---------------------------------------------------------------------*


*& 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

选屏界面

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: