matinal:SAP ABAP 再次给出动态内表的实现

本文介绍了如何使用动态内表技术,根据输入参数动态调整字段数量,以适应不同数据结构,通过ALV在ABAP中展示。代码示例展示了如何初始化列、创建动态表格和填充数据的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是动态内表?动态内表就是字段的数量不是固定的,可以根据实际情况来改变内表的字段数量。

例如程序输入3行3列

ALV输出

如果输入10列3行

ALV输出

直接上代码

REPORT y4_b4_test MESSAGE-ID zmess .

FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE,
               <fs_line>  TYPE any.

DATA: lr_table TYPE REF TO data,
      lr_line  TYPE REF TO data.

*ALV字段列表。
DATA: gt_fieldcat TYPE lvc_t_fcat.

PARAMETERS: p_row TYPE i DEFAULT 3,
            p_col TYPE i DEFAULT 3.

START-OF-SELECTION.
  PERFORM frm_init_data.

END-OF-SELECTION.
  PERFORM frm_display_alv.

FORM frm_init_data .

  " 初始化列
  DO p_col TIMES.
    DATA(lv_comps) = |COL{ sy-index }|.
    DATA(lv_text) = |列{ sy-index }|.
    PERFORM frm_fill_fieldcat USING sy-index lv_comps lv_text.
  ENDDO.

  SORT gt_fieldcat BY col_pos.

  " 根据列创建动态内表
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = gt_fieldcat
    IMPORTING
      ep_table        = lr_table.

  " 将表对象分配给指针
  ASSIGN lr_table->* TO <fs_table>.

  " 根据表对象创建行对象
  CREATE DATA lr_line LIKE LINE OF <fs_table>.

  " 将行对象分配给指针
  ASSIGN lr_line->* TO <fs_line>.

  "初始化行
  DO p_row TIMES .

    APPEND INITIAL LINE TO <fs_table> .

  ENDDO .

  DATA:lv_index TYPE i .

  "把每一行的数据赋值
  LOOP AT <fs_table> ASSIGNING FIELD-SYMBOL(<a>) .

    lv_index = lv_index + 1 .

    IF <a> IS ASSIGNED .

      DO p_col TIMES .

        DATA(lv_comp) = |COL{ sy-index }|.
        "用指针指向这个字段
        ASSIGN COMPONENT lv_comp OF STRUCTURE <a> TO FIELD-SYMBOL(<fs_comp>).
        IF sy-subrc = 0.
          <fs_comp> = |{ lv_comp }--{ lv_index }|.
        ENDIF.

      ENDDO .

    ENDIF .

  ENDLOOP .

ENDFORM.

FORM frm_fill_fieldcat USING p_col p_fieldname p_text.

  APPEND INITIAL LINE TO gt_fieldcat ASSIGNING FIELD-SYMBOL(<fs_field>).
  IF <fs_field> IS ASSIGNED.
    <fs_field>-col_pos = p_col.
    <fs_field>-fieldname = p_fieldname.
    <fs_field>-scrtext_m = p_text.
  ENDIF.

ENDFORM.

FORM frm_display_alv .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program = sy-cprog
      it_fieldcat_lvc    = gt_fieldcat
      i_default          = 'X'
      i_save             = 'A'
    TABLES
      t_outtab           = <fs_table>.

ENDFORM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值