SAP ABAP 查表数据接口

查 SAP 表数据的接口
1.使用范例:

字段注释
QUERY_TABLE查询的表名
FIELDNAME查询的字段
ROWCOUNT查询的行数
ROWCOUNT查询的行数
OPTIONS查询条件
FIELDS查询字段的释义和字符长度
DATA查询的数据
TOTALROWS符合条件数据的行数

在这里插入图片描述
FIELDS 结果:
在这里插入图片描述
在这里插入图片描述
外围系统接口调用此接口,需要通过 FIELDS 的长度去划分 DATA 的字段内容。

2.传参内容:


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.详细源码:

FUNCTION zfm_query_table.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(QUERY_TABLE) TYPE  DD02L-TABNAME
*"     VALUE(FIELDNAME) TYPE  BAPI_MSG
*"     VALUE(DELIMITER) TYPE  SONV-FLAG DEFAULT SPACE
*"     VALUE(NO_DATA) TYPE  SONV-FLAG DEFAULT SPACE
*"     VALUE(ROWSKIPS) TYPE  SOID-ACCNT DEFAULT 0
*"     VALUE(ROWCOUNT) TYPE  SOID-ACCNT DEFAULT 0
*"     VALUE(OPTIONS) TYPE  CHAR300 OPTIONAL
*"  EXPORTING
*"     VALUE(TOTALROWS) TYPE  SOID-ACCNT
*"  TABLES
*"      FIELDS STRUCTURE  RFC_DB_FLD
*"      DATA STRUCTURE  CHAR8000
*"  EXCEPTIONS
*"      TABLE_NOT_AVAILABLE
*"      TABLE_WITHOUT_DATA
*"      OPTION_NOT_VALID
*"      FIELD_NOT_VALID
*"      NOT_AUTHORIZED
*"      DATA_BUFFER_EXCEEDED
*"----------------------------------------------------------------------

  CALL FUNCTION 'VIEW_AUTHORITY_CHECK'
    EXPORTING
      view_action                    = 'S'
      view_name                      = query_table
    EXCEPTIONS
      no_authority                   = 2
      no_clientindependent_authority = 2
      no_linedependent_authority     = 2
      OTHERS                         = 1.

  IF sy-subrc = 2.
    RAISE not_authorized.
  ELSEIF sy-subrc = 1.
    RAISE table_not_available.
  ENDIF.

* ----------------------------------------------------------------------
*  find out about the structure of QUERY_TABLE
* ----------------------------------------------------------------------
  DATA BEGIN OF table_structure OCCURS 10.
  INCLUDE STRUCTURE dfies.
  DATA END OF table_structure.
  "DATA TABLE_HEADER LIKE X030L.
  DATA table_type TYPE dd02v-tabclass.

  CALL FUNCTION 'DDIF_FIELDINFO_GET'
    EXPORTING
      tabname        = query_table
*     FIELDNAME      = ' '
*     LANGU          = SY-LANGU
*     LFIELDNAME     = ' '
*     ALL_TYPES      = ' '
*     GROUP_NAMES    = ' '
    IMPORTING
*     X030L_WA       =
      ddobjtype      = table_type
*     DFIES_WA       =
*     LINES_DESCR    =
    TABLES
      dfies_tab      = table_structure
*     FIXED_VALUES   =
    EXCEPTIONS
      not_found      = 1
      internal_error = 2
      OTHERS         = 3.
  IF sy-subrc <> 0.
    RAISE table_not_available.
  ENDIF.
  IF table_type = 'INTTAB'.
    RAISE table_without_data.
  ENDIF.

* ----------------------------------------------------------------------
*  isolate first field of DATA as output field
*  (i.e. allow for changes to structure DATA!)
* ----------------------------------------------------------------------
  DATA line_length TYPE i.
  FIELD-SYMBOLS <d>.
  ASSIGN COMPONENT 0 OF STRUCTURE data TO <d>.

* If this line leads to a syntax error
* please just delete the 'in character mode'
  DESCRIBE FIELD <d> LENGTH line_length IN CHARACTER MODE.


* ----------------------------------------------------------------------
*  if FIELDS are not specified, read all available fields
* ----------------------------------------------------------------------
  DATA number_of_fields TYPE i.
  DESCRIBE TABLE fields LINES number_of_fields.
  IF number_of_fields = 0.
    LOOP AT table_structure.
      MOVE table_structure-fieldname TO fields-fieldname.
      APPEND fields.
    ENDLOOP.
  ENDIF.

* ----------------------------------------------------------------------
*  for each field which has to be read, copy structure information
*  into tables FIELDS_INT (internal use) and FIELDS (output)
* ----------------------------------------------------------------------
  DATA: BEGIN OF fields_int OCCURS 10,
          fieldname  LIKE table_structure-fieldname,
          type       LIKE table_structure-inttype,
          decimals   LIKE table_structure-decimals,
          length_src LIKE table_structure-intlen,
          length_dst LIKE table_structure-leng,
          offset_src LIKE table_structure-offset,
          offset_dst LIKE table_structure-offset,
        END OF fields_int,
        line_cursor TYPE i.
*--------insert by Steve at23.05.2017 22:09:58 Begin-------*
  DATA: BEGIN OF it_fldnm OCCURS 0,
          fieldname(500) TYPE c,
        END OF it_fldnm.
  SPLIT fieldname AT ',' INTO TABLE it_fldnm.

*--------insert by Steve at23.05.2017 22:09:58 End----------*

  line_cursor = 0.
*  for each field which has to be read ...
  LOOP AT fields.
*--------insert by Steve at23.05.2017 22:10:17 Begin-------*
    READ TABLE it_fldnm WITH KEY fieldname = fields-fieldname.
    IF sy-subrc NE 0.
      DELETE fields.
      CONTINUE.
    ENDIF.
*--------insert by Steve at23.05.2017 22:10:17 End----------*


    READ TABLE table_structure WITH KEY fieldname = fields-fieldname.
    IF sy-subrc NE 0.
      RAISE field_not_valid.
    ENDIF.

* compute the place for field contents in DATA rows:
* if not first field in row, allow space for delimiter
    IF line_cursor <> 0.
      IF no_data EQ space AND delimiter NE space.
        MOVE delimiter TO data+line_cursor.
      ENDIF.
      line_cursor = line_cursor + strlen( delimiter ).
    ENDIF.

* ... copy structure information into tables FIELDS_INT
* (which is used internally during SELECT) ...
    fields_int-fieldname  = table_structure-fieldname.
    fields_int-length_src = table_structure-intlen.
*  FIELDS_INT-LENGTH_DST = TABLE_STRUCTURE-LENG.
* modified by Theobald, 2007-11-20
    fields_int-length_dst = table_structure-outputlen.

    fields_int-offset_src = table_structure-offset.
    fields_int-offset_dst = line_cursor.
    fields_int-type       = table_structure-inttype.
    fields_int-decimals   = table_structure-decimals.

* compute the place for contents of next field in DATA rows
*  LINE_CURSOR = LINE_CURSOR + TABLE_STRUCTURE-LENG.
* modified by Theobald, 2007-11-20
    line_cursor = line_cursor + table_structure-outputlen.



    IF line_cursor > line_length AND no_data EQ space.
      RAISE data_buffer_exceeded.
    ENDIF.
    APPEND fields_int.

* ... and into table FIELDS (which is output to the caller)
    fields-fieldtext = table_structure-fieldtext.
    fields-type      = table_structure-inttype.
    fields-length    = fields_int-length_dst.
    fields-offset    = fields_int-offset_dst.
    MODIFY fields.

  ENDLOOP.
* end of loop at FIELDS

* ----------------------------------------------------------------------
*  read data from the database and copy relevant portions into DATA
* ----------------------------------------------------------------------
* output data only if NO_DATA equals space (otherwise the structure
* information in FIELDS is the only result of the module)
  IF no_data EQ space.

    DATA: BEGIN OF work, buffer(30000), f TYPE f, END OF work.
    DATA:lv_rowcount TYPE i.

    FIELD-SYMBOLS: <wa>   TYPE any, <comp> TYPE any.
    ASSIGN work TO <wa> CASTING TYPE (query_table).

    IF rowcount > 0.
      rowcount = rowcount + rowskips.
      lv_rowcount = rowcount + 1.
    ENDIF.

    SELECT * FROM (query_table) INTO <wa> WHERE (options).

      IF sy-dbcnt GT rowskips.

        IF rowcount > 0 AND sy-dbcnt GE lv_rowcount.
          CONTINUE.
        ENDIF.
*   copy all relevant fields into DATA (output) table
        LOOP AT fields_int.
          IF fields_int-type = 'P'.
            ASSIGN COMPONENT fields_int-fieldname
            OF STRUCTURE <wa> TO <comp>
            TYPE     fields_int-type
            DECIMALS fields_int-decimals.
          ELSE.
            ASSIGN COMPONENT fields_int-fieldname
            OF STRUCTURE <wa> TO <comp>
            TYPE     fields_int-type.
          ENDIF.
          MOVE <comp> TO
          <d>+fields_int-offset_dst(fields_int-length_dst).
        ENDLOOP.
*   end of loop at FIELDS_INT
        APPEND data.

      ENDIF.

    ENDSELECT.
    totalrows = sy-dbcnt.

  ENDIF.

ENDFUNCTION.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: REPORT ZTEST.DATA: BEGIN OF ITAB OCCURS 0, VBELN LIKE VBAK-VBELN, VKBUR LIKE VBAK-VKBUR, END OF ITAB.SELECT * FROM VBAK INTO ITAB WHERE VBELN IN S_VBELN.LOOP AT ITAB. WRITE:/ ITAB-VBELN, ITAB-VKBUR. ENDLOOP. ### 回答2: SAP ABAP是一种流行的企业应用程序开发语言,用于在SAP系统中开发各种功能和报表。下面是一个示例的SAP ABAP数据报表代码: REPORT Z_MY_REPORT. DATA: lt_data TYPE STANDARD TABLE OF sflight, ls_data LIKE LINE OF lt_data. SELECT * FROM sflight INTO TABLE lt_data. WRITE: / 'FLIGHT', 'CARRIER', 'PRICE'. LOOP AT lt_data INTO ls_data. WRITE: / ls_data-fldate, ls_data-carrid, ls_data-seatsmax. ENDLOOP. 在这个示例中,我们首先定义了一个内表lt_data,类型为标准表(STANDARD TABLE),并声明了一个内表行ls_data,类型与lt_data的行相同。然后,我们使用SELECT语句从SFLIGHT表中选择所有数据,并将其存储在lt_data内表中。 接下来,我们使用LOOP AT语句循环遍历lt_data内表中的每一行,并将每一行的fldate、carrid和seatsmax字段值显示在屏幕上,使用WRITE语句实现输出功能。 这段代码会生成一个简单的报表,显示所有航班的日期、航空公司和座位最大数量。你可以根据需要修改代码来适应不同的数据源和显示要求。注意,SAP ABAP具有丰富的语法和功能,可以用于更复杂的报表开发和数据处理任务。 ### 回答3: SAP ABAP是一种用于编写SAP系统的应用程序的编程语言。数据报表是SAP系统中经常用于显示和处理数据的工具。以下是一个简单的SAP ABAP数据报表代码的示例: REPORT ZDATA_REPORT. TABLES: ZEMPLOYEE. DATA: GT_EMPLOYEE TYPE TABLE OF ZEMPLOYEE, GS_EMPLOYEE TYPE ZEMPLOYEE. START-OF-SELECTION. SELECT * FROM ZEMPLOYEE INTO TABLE GT_EMPLOYEE. LOOP AT GT_EMPLOYEE INTO GS_EMPLOYEE. WRITE: / GS_EMPLOYEE-EMP_NAME, GS_EMPLOYEE-EMP_DEPARTMENT, GS_EMPLOYEE-EMP_SALARY. ENDLOOP. 上述代码首先声明了一个数据表ZEMPLOYEE,然后定义了两个数据结构:GT_EMPLOYEE和GS_EMPLOYEE。GT_EMPLOYEE是ZEMPLOYEE的内表类型,用于存储从数据库中检索到的数据。GS_EMPLOYEE是ZEMPLOYEE的一行数据。 代码的START-OF-SELECTION部分是数据报表的主体代码。它使用SELECT语句从数据库中选择所有的ZEMPLOYEE数据,并将其存储到GT_EMPLOYEE内表中。 然后,通过LOOP语句遍历GT_EMPLOYEE内表,并使用WRITE语句将每个员工的姓名、部门和薪资输出到屏幕上。 以上代码是一个简单的SAP ABAP数据报表示例,它可以根据具体的需求进行扩展和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值