ABAP内置函数 RFC_READ_TABLE

ABAP内置函数 RFC_READ_TABLE  


http://blog.163.com/flh_0726/blog/static/17128668320109189539735/?fromdm&fromSearch&isFromSearchEngine=yes

主要功能:输入参数(表名),将得到的数据放入一个内表后返回。

参数介绍:

IMPORTING

QUERY_TABLE:读取的表名(必输项)

DELIMITER:字段之间的分隔符(当选择多个字段时)

NO_DATA:输入'X'时,不向传出表DATA输出数据

ROWCOUNT:输出的第一条数据的行号(从0开始)

ROWCOUNT:从ROWCOUNT开始,一共输出的数据行数(0代表所有数据)

TABLE:

OPTIONS:表查询条件,比如对BSIS表来说,可以写成BELNR = '14700000123',留空 代表所有数据。

FIELDS:输出的表字段,留空代表输出所有字段。

DATA:输出的数据记录。

举例说明:

  ************************************************************
* 程序代号:ZFIPZDTTODX                                       *
* 程序名称:顶通凭证导入顶新                                     *
* 程序目的:将在顶通系统中产生的凭证导入到顶新系统                   *
*                                                           *
* 设计人员:***                                               *
* 设计时间:2010/10/13                                        *
*                                                           *
* 修改记录                                                    *
*-----------------------------------------------------------*
* 序号   修改时间      修改人     修改说明                        *
*------------------------------------------------------------*
* 001                                                        *
*                                                            *
*                                                            *
**************************************************************

REPORT  ZFIPZDTTODX LINE-SIZE 160 NO STANDARD PAGE HEADING
                                  MESSAGE-ID ZF.
INCLUDE ZBDCRECXFIRFC1.
TABLES: BSIS,BSAS,T001,ZFIRFCKOSTL,ZFIRFCSAKNR.

DATA: IT_SEL_TAB LIKE BDSEL_STAT OCCURS 0 WITH HEADER LINE.

DATABEGIN OF ITAB1 OCCURS 0,
  BUKRS(4),"bsis-bukrs,公司代码
  HKONT(10),"bsis-hkont,总账科目
  GJAHR(4),"会计年度
  BELNR(10),"BSIS-BELNR 凭证编号
  BUZEI(3),"BSIS-BUZEI,行项目
  BUDAT(8),"BUDAT,凭证过账日期
  BLDAT(8),"BLDAT,凭证日期
  WAERS(5),"货币码
  BLART(2),"凭证类型
  MONAT(2),"记账期间
  BSCHL(2),"记账码
  SHKZG(1),"借贷标识
  GSBER(4),"业务范围
  DMBTR(13),"按本位币计的金额
  WRBTR(13),"凭证货币金额
  SGTXT(50),"项目文本
  KOSTL(10),"成本中心
  VALUT(8),"起息日
  PSWSL(5),"更新总分类帐交易数字货币
  VBUND(6),"贸易伙伴的公司标识
  END OF ITAB1.

DATA ITAB LIKE ITAB1 OCCURS 0 WITH HEADER LINE.

DATA: BELNR LIKE ITAB1-BELNR.
DATA: PASSID TYPE I.

DATA: I_BUKR LIKE BSIS-BUKRS,
      DATE_BEGIN LIKE SY-DATUM,
      DATE_END LIKE SY-DATUM.

DATA: ZFROMDATE(8TYPE C,
      ZENDDATE(8TYPE C,
      ZYEAR(4TYPE C,
      ZMONTH1(2TYPE C,
      ZMONTH2(2TYPE C VALUE SPACE,
      ZQIJIAN(20TYPE C,
      ZCNAME(20TYPE C"自己公司代码(5个)
DATA: DATE1 TYPE D.
DATA: DATE2 TYPE D.
DATA: STR1(6).
DATA: STR2 TYPE D.

*DEBUG
DATABEGIN OF NAMETAB1 OCCURS 100,
        FIELDNAME LIKE RFC_DB_FLD-FIELDNAME,
      END OF NAMETAB1.

****** 选择屏幕定义 ******
SELECTION-SCREEN:BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-001.
PARAMETERS:      ZBUKRS LIKE T001-BUKRS OBLIGATORY MEMORY ID BUK."公司代码
PARAMETERS:      ZGJAHR LIKE BSIK-GJAHR OBLIGATORY DEFAULT SY-DATUM."年度
SELECT-OPTIONS:  ZMONAT FOR BSIS-MONAT OBLIGATORY DEFAULT SY-DATUM+4(2).      "会计期间
*           IXSMS AS CHECKBOX DEFAULT 'X'.          "显示模式
SELECTION-SCREEN:END OF BLOCK BL1.
***********************************************************
*-----------------------权限检查----------------------------*
AT SELECTION-SCREEN.
  AUTHORITY-CHECK OBJECT 'G_REPO_LOC' ID 'BUKRS' FIELD ZBUKRS.
  IF SY-SUBRC <> 0.
    MESSAGE E012 WITH '您没有该公司的授权!'.
    STOP.
  ENDIF.

*---------------------------------------------------------*
  INCLUDE ZFIICHEK.     "计算月初,月末日期

START-OF-SELECTION.
  ZYEAR = ZGJAHR.
  ZMONTH1 = ZMONAT-LOW .
  ZMONTH2 = ZMONAT-HIGH .
  SELECT SINGLE * FROM T001 WHERE BUKRS = ZBUKRS.
  IF SY-SUBRC = 0.
    ZCNAME = T001-BUTXT.
  ELSE.
    "MESSAGE E012 WITH '请输入正确的公司代码!'.
  ENDIF.

*--------------------OPTIONS(WHERE)----------------------*
  IT_SEL_TAB = '( BUKRS = '''.
  IT_SEL_TAB+11(3) = ZBUKRS.
  IT_SEL_TAB+14(1) = ''''.
  IT_SEL_TAB+15(14) = ' AND GJAHR = '''.
  IT_SEL_TAB+29(4) = ZGJAHR.
  IT_SEL_TAB+33(1) = ''''.
  IT_SEL_TAB+34(20) = ' AND MONAT BETWEEN '''.
  IT_SEL_TAB+54(2) = ZMONTH1.
  IT_SEL_TAB+56(1) = ''''.
  IT_SEL_TAB+57(6) = ' AND '''.
  IT_SEL_TAB+63(2) = ZMONTH2.
  IT_SEL_TAB+65(1) = ''''.
  IT_SEL_TAB+66(2) = ' )'.
  APPEND IT_SEL_TAB.

*---------------------想取哪些字段--------------------------*
  NAMETAB1-FIELDNAME = 'BUKRS'.
  APPEND NAMETAB1.
  NAMETAB1-FIELDNAME = 'HKONT'.
  APPEND NAMETAB1.
  NAMETAB1-FIELDNAME = 'GJAHR'.
  APPEND NAMETAB1.
  NAMETAB1-FIELDNAME = 'BELNR'.
  APPEND NAMETAB1.
  NAMETAB1-FIELDNAME = 'BUZEI'.
  APPEND NAMETAB1.
  NAMETAB1-FIELDNAME = 'BUDAT'.
  APPEND NAMETAB1.
  NAMETAB1-FIELDNAME = 'BLDAT'.
  APPEND NAMETAB1.
  NAMETAB1-FIELDNAME = 'WAERS'.
  APPEND NAMETAB1.
  NAMETAB1-FIELDNAME = 'BLART'.
  APPEND NAMETAB1.
  NAMETAB1-FIELDNAME = 'MONAT'.
  APPEND NAMETAB1.
  NAMETAB1-FIELDNAME = 'BSCHL'.
  APPEND NAMETAB1.
  NAMETAB1-FIELDNAME = 'SHKZG'.
  APPEND NAMETAB1.
  NAMETAB1-FIELDNAME = 'GSBER'.
  APPEND NAMETAB1.
  NAMETAB1-FIELDNAME = 'DMBTR'.
  APPEND NAMETAB1.
  NAMETAB1-FIELDNAME = 'WRBTR'.
  APPEND NAMETAB1.
  NAMETAB1-FIELDNAME = 'SGTXT'.
  APPEND NAMETAB1.
  NAMETAB1-FIELDNAME = 'KOSTL'.
  APPEND NAMETAB1.
  NAMETAB1-FIELDNAME = 'VALUT'.
  APPEND NAMETAB1.
  NAMETAB1-FIELDNAME = 'PSWSL'.
  APPEND NAMETAB1.
  NAMETAB1-FIELDNAME = 'VBUND'.
  APPEND NAMETAB1.

  REFRESH ITAB.
  REFRESH ITAB1.
*----------------获取TRB中的 BSIS--------------------------*
  CALL FUNCTION 'RFC_READ_TABLE'
    DESTINATION 'TRB'  "跨服务器(另一服务器的R3系统的名称)
    EXPORTING
      QUERY_TABLE          = 'BSIS'
    TABLES
      OPTIONS              = IT_SEL_TAB
      FIELDS               = NAMETAB1
      DATA                 = ITAB1
    EXCEPTIONS
      TABLE_NOT_AVAILABLE  = 1
      TABLE_WITHOUT_DATA   = 2
      OPTION_NOT_VALID     = 3
      FIELD_NOT_VALID      = 4
      NOT_AUTHORIZED       = 5
      DATA_BUFFER_EXCEEDED = 6
      OTHERS               = 7.

  IF SY-SUBRC <> 0.
    CASE SY-SUBRC.
      WHEN 1.
        MESSAGE 'RFC Error : Internal Error' TYPE 'E' .
      WHEN 2.
        MESSAGE 'RFC Error : No fields in table' TYPE 'E' .
      WHEN 3.
        MESSAGE 'RFC Error : Table is not active' TYPE 'E' .
      WHEN 4.
        MESSAGE 'RFC Error : No authorization' TYPE 'E' .
      WHEN OTHERS.
        MESSAGE 'RFC Error : No records selected' TYPE 'E' .
    ENDCASE.
  ENDIF.

  APPEND LINES OF ITAB1 TO ITAB.
  CLEAR ITAB1.
  REFRESH ITAB1.
*-----------------获取TRB中的 BSAS--------------------------*
  CALL FUNCTION 'RFC_READ_TABLE'
    DESTINATION 'TRB'
    EXPORTING
      QUERY_TABLE          = 'BSAS'
    TABLES
      OPTIONS              = IT_SEL_TAB
      FIELDS               = NAMETAB1
      DATA                 = ITAB1
    EXCEPTIONS
      TABLE_NOT_AVAILABLE  = 1
      TABLE_WITHOUT_DATA   = 2
      OPTION_NOT_VALID     = 3
      FIELD_NOT_VALID      = 4
      NOT_AUTHORIZED       = 5
      DATA_BUFFER_EXCEEDED = 6
      OTHERS               = 7.

  IF SY-SUBRC <> 0.
    CASE SY-SUBRC.
      WHEN 1.
        MESSAGE 'RFC Error : Internal Error' TYPE 'E' .
      WHEN 2.
        MESSAGE 'RFC Error : No fields in table' TYPE 'E' .
      WHEN 3.
        MESSAGE 'RFC Error : Table is not active' TYPE 'E' .

posted @ 2011-09-22 22:27  VerySky  阅读(2217)  评论(0)    收藏  举报