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

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

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

选屏界面
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值