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

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

例如程序输入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.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中的vector是一种动态数组,可以存储不同类型的元素。sort函数是C++ STL库中的一个算法函数,用于对容器中的元素进行排序。该函数可以接受三个参数,分别是要排序的容器的起始迭代器、结束迭代器和一个比较函数。 在引用中的例子中,使用sort函数对vector容器中的元素进行排序。sort函数默认使用小于号运算符(operator<)进行比较,因此默认情况下是按照升序对容器中的元素进行排序。 在引用中的例子中,定义了两个比较函数GreaterSort和LessSort,分别用于降序和升序排序。通过传入这些比较函数作为sort函数的第三个参数,可以实现自定义的排序方式。 在引用中的例子中,使用greater<int>()作为sort函数的第三个参数,实现了对容器中元素的降序排序。而没有传入第三个参数时,默认按照小于号运算符进行升序排序。 因此,C++中的vector容器可以通过sort函数进行排序,并且可以根据需要使用默认比较函数或自定义比较函数来实现不同的排序方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C++中,结构体vector使用sort排序](https://blog.csdn.net/zhouxun623/article/details/49887555)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [C++vector容器使用sort排序(含升序以及降序)](https://blog.csdn.net/G_matinal/article/details/126769371)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值