ABAP RTTS(转)

REPORT z_barry_test                            .

TYPE-POOLS : abap.
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
               <dyn_wa>,
               <dyn_field>.
DATA: dy_table TYPE REF TO data,
      dy_line TYPE REF TO data,
      xfc TYPE lvc_s_fcat,
      ifc TYPE lvc_t_fcat.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS: p_table(30) TYPE c DEFAULT 'T001'.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.
PERFORM get_structure.
PERFORM create_dynamic_itab.
PERFORM get_data.
PERFORM write_out.
*---------------------------------------------------------------------*
*       FORM get_structure                                            *
*---------------------------------------------------------------------*
FORM get_structure.
DATA : idetails TYPE abap_compdescr_tab,
         xdetails TYPE abap_compdescr.
DATA : ref_table_des TYPE REF TO cl_abap_structdescr.

ref_table_des ?=
        cl_abap_typedescr=>describe_by_name( p_table ).
idetails[] = ref_table_des->components[].
LOOP AT idetails INTO xdetails.
    CLEAR xfc.
    xfc-fieldname = xdetails-name .
*    xfc-datatype = xdetails-type_kind.
    xfc-inttype = xdetails-type_kind.
    xfc-intlen = xdetails-length + xdetails-decimals.
    xfc-decimals = xdetails-decimals.
    APPEND xfc TO ifc.
ENDLOOP.
ENDFORM.                    "get_structure
*---------------------------------------------------------------------*
*       FORM create_dynamic_itab                                      *
*---------------------------------------------------------------------*
FORM create_dynamic_itab.

CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = ifc
    IMPORTING
      ep_table        = dy_table.
ASSIGN dy_table->* TO <dyn_table>.

CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
ENDFORM.                    "create_dynamic_itab

*---------------------------------------------------------------------*
*       FORM get_data                                                 *
*---------------------------------------------------------------------*
FORM get_data.
DATA: BEGIN OF itab OCCURS 0 .
          INCLUDE STRUCTURE spfli.
DATA: END OF itab.

SELECT * INTO CORRESPONDING FIELDS OF TABLE <dyn_table>
             FROM (p_table).
ENDFORM.                    "get_data
*---------------------------------------------------------------------*
*       FORM write_out                                                *
*---------------------------------------------------------------------*
FORM write_out.
LOOP AT <dyn_table> INTO <dyn_wa>.
    DO.
      ASSIGN COMPONENT sy-index
         OF STRUCTURE <dyn_wa> TO <dyn_field>.
      IF sy-subrc <> 0.
        EXIT.
      ENDIF.
      IF sy-index = 1.
        WRITE:/ <dyn_field>.
      ELSE.
        WRITE: <dyn_field>.
      ENDIF.
    ENDDO.
ENDLOOP.
ENDFORM.                    "write_out


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP中的行列是指将一行数据换为多列数据的操作。在ABAP中,可以使用内置函数和语句来实现行列的功能。 以下是一种常见的行列的实现方式: 1. 首先,定义一个内表(internal table)来存储原始数据。假设该内表为it_data,包含两个字段:col1和col2。 2. 使用LOOP语句遍历it_data内表中的每一行数据。 3. 在循环中,使用CONDENSE函数将每一行数据的字段值拼接成一个字符串,并使用字符串分隔符(如逗号)分隔。 4. 将拼接后的字符串赋值给新的字段,例如将col1字段的拼接结果赋值给new_col1字段。 5. 最后,将新的字段添加到一个新的内表(例如it_result)中。 下面是一个示例代码: DATA: it_data TYPE TABLE OF ty_data, " 原始数据内表 it_result TYPE TABLE OF ty_result. " 换后的结果内表 DATA: lv_new_col1 TYPE string, " 新的字段1 lv_new_col2 TYPE string. " 新的字段2 FIELD-SYMBOLS: <fs_data> TYPE ty_data. " 假设it_data已经填充了原始数据 LOOP AT it_data ASSIGNING <fs_data>. CONCATENATE <fs_data>-col1 ',' INTO lv_new_col1. CONCATENATE <fs_data>-col2 ',' INTO lv_new_col2. " 其他字段的拼接操作... APPEND INITIAL LINE TO it_result ASSIGNING FIELD-SYMBOL(<fs_result>). <fs_result>-new_col1 = lv_new_col1. <fs_result>-new_col2 = lv_new_col2. " 其他字段的赋值操作... ENDLOOP. 以上代码将原始数据内表it_data中的每一行数据的字段值拼接成字符串,并赋值给新的字段new_col1和new_col2,然后将新的字段添加到结果内表it_result中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值