Chinaunix首页 | 论坛 | 博客
  • 博客访问: 203403
  • 博文数量: 54
  • 博客积分: 2056
  • 博客等级: 大尉
  • 技术积分: 568
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-25 12:07
文章分类

全部博文(54)

文章存档

2014年(1)

2013年(1)

2012年(1)

2011年(2)

2010年(1)

2009年(11)

2008年(28)

2007年(9)

我的朋友

分类:

2008-04-24 10:04:20

 

 

*&---------------------------------------------------------------------*
*& Report  Z14841_DOWN
*&---------------------------------------------------------------------*
*&批量下载程序和表结构
*&---------------------------------------------------------------------*

REPORT  z14841_down 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(150).
DATA: tt(500) OCCURS 0 WITH HEADER LINE.
DATA: rn(72).

DATA:fields(40),
lin TYPE i,
val(30),
rep(40).

DATA:filename TYPE string .
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME.
PARAMETERS:dow AS CHECKBOX. "是否下载
PARAMETERS:p_dir(50) DEFAULT 'D:\SAP开发程序'. "下载路径
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.     "开发人
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.

      filename = yyname.
      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          filename = filename
          filetype = 'ASC'
        TABLES
          data_tab = tt.

*      CALL FUNCTION 'WS_DOWNLOAD'
*        EXPORTING
*          filename = yyname
*          filetype = 'ASC'
*        TABLES
*          data_tab = itab.

      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.

      filename = yyname.
      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          filename = filename
          filetype = 'ASC'
        TABLES
          data_tab = tt.

*      CALL FUNCTION 'WS_DOWNLOAD'
*        EXPORTING
*          filename = yyname
*          filetype = 'ASC'
*        TABLES
*          data_tab = itab.

    ELSE.
      ULINE.
    ENDIF.

  ENDLOOP.
ENDFORM.                    "GET_TABLE_DATA

 

阅读(648) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~