日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ABAP动态生成内表的三种方法

發布時間:2025/3/20 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ABAP动态生成内表的三种方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
動態內表的創建和使用主要有以下幾點:
  • 動態內表的創建,首先要定義動態結構,然后再根據定義的動態結構利用系統一個標準的method:”cl_ALV_table_create=>create_dynamic_table“生成動態內表。
  • 動態內表的賦值,遍歷動態結構,獲取指定的字段,然后給指定的字段賦值。
  • 動態內表的讀取顯示,與賦值相似,遍歷動態結構,獲取指定的字段,然后讀取對應字段的值。

其中方法三最簡單。

1、方法一
  • TYPE-POOLS:ABAP.
  • PARAMETERS p_name TYPE tabname.
  • DATA lt_table TYPE TABLE OF dfies. "字段結構表
  • DATA ls_table TYPE dfies.
  • DATA lr_struc TYPE REF TO cl_abap_structdescr.
  • DATA lr_table TYPE REF TO cl_abap_tabledescr.
  • DATA lr_type TYPE REF TO cl_abap_typedescr.
  • DATA lr_data TYPE REF TO cl_abap_datadescr.
  • DATA lt_comp TYPE abap_component_tab.
  • DATA ls_comp LIKE LINE OF lt_comp.
  • DATA dyn_wa TYPE REF TO data.
  • DATA dyn_table TYPE REF TO data.
  • DATA l_string TYPE string.
  • FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
  • <dyn_wa> TYPE ANY.
  • *1.獲取表中的字段結構
  • CALL FUNCTION 'DDIF_NAMETAB_GET'
  • EXPORTING
  • tabname = p_name
  • TABLES
  • dfies_tab = lt_table
  • EXCEPTIONS
  • not_found = 1
  • OTHERS = 2.
  • IF sy-subrc <> 0.
  • MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  • WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  • ENDIF.

  • LOOP AT lt_table INTO ls_table.
  • CONCATENATE ls_table-tabname '-' ls_table-fieldname INTO l_string.
  • ls_comp-name = ls_table-fieldname.
  • *讀取字段類型
  • CALL METHOD cl_abap_datadescr=>describe_by_name
  • EXPORTING
  • p_name = l_string
  • RECEIVING
  • p_descr_ref = lr_type
  • EXCEPTIONS
  • type_not_found = 1
  • OTHERS = 2.
  • IF sy-subrc <> 0.
  • MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  • WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  • ENDIF.
  • ls_comp-type ?= lr_type.
  • APPEND ls_comp TO lt_comp.
  • CLEAR ls_comp.
  • ENDLOOP.
  • *根據字段目錄創建動態結構類型
  • CALL METHOD cl_abap_structdescr=>create
  • EXPORTING
  • p_components = lt_comp
  • RECEIVING
  • p_result = lr_struc.
  • *根據動態結構創建動態內表類型
  • CALL METHOD cl_abap_tabledescr=>create
  • EXPORTING
  • p_line_type = lr_struc
  • RECEIVING
  • p_result = lr_table.
  • *參照動態結構類型和動態內表類型創建內表與工作區
  • CREATE DATA dyn_wa TYPE HANDLE lr_struc.
  • CREATE DATA dyn_table TYPE HANDLE lr_table.
  • *指定內表與工作區到字段符號
  • ASSIGN dyn_wa->* TO <dyn_wa>.
  • ASSIGN dyn_table->* TO <dyn_table>.

  • *從動態表中取數到動態內表中
  • SELECT * INTO CORRESPONDING FIELDS OF TABLE <dyn_table> UP TO 100
  • ROWS FROM (p_name).
  • *顯示內表中的數據
  • CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  • EXPORTING
  • i_structure_name = p_name
  • TABLES
  • t_outtab = <dyn_table>
  • EXCEPTIONS
  • program_error = 1
  • OTHERS = 2.
  • IF sy-subrc <> 0.
  • MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  • WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  • ENDIF.
  • 復制代碼
    2、方法二
  • TYPE-POOLS:abap.
  • PARAMETERS p_name TYPE tabname.
  • DATA: d_ref TYPE REF TO data,
  • lt_alv_cat TYPE TABLE OF lvc_s_fcat,
  • ls_alv_cat LIKE LINE OF lt_alv_cat.

  • DATA: lt_table LIKE TABLE OF dntab.
  • DATA: ls_table TYPE dntab.

  • FIELD-SYMBOLS : <dyn_table> TYPE table,
  • <dyn_wa> TYPE ANY,
  • <dyn_field> TYPE ANY.
  • *取出表結構的字段目錄
  • CALL FUNCTION 'NAMETAB_GET'
  • EXPORTING
  • langu = sy-langu
  • tabname = p_name
  • TABLES
  • nametab = lt_table
  • EXCEPTIONS
  • no_texts_found = 1.
  • *根據取出的字段目錄生成參考字段目錄
  • LOOP AT lt_table INTO ls_table.
  • ls_alv_cat-fieldname = ls_table-fieldname.
  • ls_alv_cat-ref_table = p_name.
  • ls_alv_cat-ref_field = ls_table-fieldname.
  • APPEND ls_alv_cat TO lt_alv_cat.
  • CLEAR ls_alv_cat.
  • ENDLOOP.
  • *內表創建
  • CALL METHOD cl_alv_table_create=>create_dynamic_table
  • EXPORTING
  • it_fieldcatalog = lt_alv_cat
  • IMPORTING
  • ep_table = d_ref.
  • *指定生成的內表到字段符號
  • ASSIGN d_ref->* TO <dyn_table>.
  • *從動態表中取數到動態內表中
  • SELECT * INTO CORRESPONDING FIELDS OF TABLE <dyn_table> UP TO 100
  • ROWS FROM (p_name).
  • *顯示內表中的數據
  • CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  • EXPORTING
  • i_structure_name = p_name
  • TABLES
  • t_outtab = <dyn_table>
  • EXCEPTIONS
  • program_error = 1
  • OTHERS = 2.
  • IF sy-subrc <> 0.
  • MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  • WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  • ENDIF.
  • 復制代碼
    3、方法三
  • PARAMETERS p_name TYPE tabname.

  • DATA: dyn_table TYPE REF TO data.
  • DATA: dyn_wa TYPE REF TO data.

  • FIELD-SYMBOLS: <dyn_table> TYPE table,
  • <dyn_wa> TYPE ANY.

  • *創建動態表結構
  • CREATE DATA dyn_table TYPE TABLE OF (p_name).
  • *創建動態內表
  • ASSIGN dyn_table->* TO <dyn_table>.
  • *創建動態工作區結構
  • CREATE DATA dyn_wa LIKE LINE OF <dyn_table>.
  • *創建動態工作區
  • ASSIGN dyn_wa->* TO <dyn_wa>.

  • *從動態表中取數到動態內表中
  • SELECT * INTO CORRESPONDING FIELDS OF TABLE <dyn_table> UP TO 100
  • ROWS FROM (p_name).
  • *對取出數據進行處理
  • LOOP AT <dyn_table> assigning <dyn_wa>.
  • "內表數據處理
  • ENDLOOP.
  • *顯示內表中的數據
  • CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  • EXPORTING
  • i_structure_name = p_name
  • TABLES
  • t_outtab = <dyn_table>
  • EXCEPTIONS
  • program_error = 1
  • OTHERS = 2.
  • IF sy-subrc <> 0.
  • MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  • WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  • ENDIF.
  • 復制代碼 與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的ABAP动态生成内表的三种方法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。