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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ABAP中创建动态内表的三种方法(转载)

發布時間:2023/11/30 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ABAP中创建动态内表的三种方法(转载) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

BAP中創建動態內表的三種方法

第一種:

如果我們需要的動態內表字段或者動態工作區和數據字典中的類型一致,可以直接使用CREATE DATA生成,當然也可以是自定義類型。

比如要產生和數據表MARA結構一致的動態內表:

DATA : DY_TABLE TYPE REF TO DATA, WA_LINE TYPE REF TO DATA.

FIELD-SYMBOLS: <DYN_TABLE> TYPE STANDARD TABLE .

CREATE DATA DY_TABLE TYPE TABLE OF MARA.?
ASSIGN DY_TABLE->* TO <DYN_TABLE>.

CREATE DATA WA_LINE LIKE LINE OF <DYN_TABLE>.
ASSIGN WA_LINE->* TO <DYN_WA>.

如果在程序中需要動態生成多個不同的動態內表,可以將表名設置為變量

CREATE DATA DY_TABLE TYPE TABLE OF (tabname).

第二種:

如果需要對動態內表進行輸出,控制輸出順序等屬性??梢允褂孟率龇椒?#xff1a;

CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_CLIENT_NEVER_DISPLAY = ''
I_STRUCTURE_NAME = TABNAME
CHANGING
CT_FIELDCAT = IT_STRUCTURE
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.

使用該方法創建輸入的tabname對應的字段目錄

之后根據該字段目錄產生與之對應的動態內表結構

CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = IT_STRUCTURE
* I_LENGTH_IN_BYTE = 'X'
IMPORTING
EP_TABLE = DY_TABLE.

ASSIGN DY_TABLE->* TO <DYN_TABLE>.

動態工作區的產生跟第一種一樣。

該方法有一種弊端,僅能連續使用36次。即改方法產生動態是使用創建子例程的方法,當連續使用36次時,會出現子例程池溢出的異常,以為該方法是針對ALV技術的處理,所以用于其它地方的時候需要慎重。

第三種:

第三種的基本思路跟第二種是一樣的,只是使用的類和方法不一樣,導致輸入的數據不一樣。

首先產生結構

CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_CLIENT_NEVER_DISPLAY = ''
I_STRUCTURE_NAME = TABNAME
CHANGING
CT_FIELDCAT = IT_STRUCTURE
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.

根據字段產生的字段目錄生成相應的接口參數ZCOMPONENTS

DATA ZCOMPONENTS TYPE ABAP_COMPONENT_TAB. 在聲明該變量前要聲明 TYPE-POOLS:ABAP.

ABAP_COMPONENT_TAB這個結構中的字段如下所示:

name TYPE string,
type TYPE REF TO cl_abap_datadescr,
as_include TYPE abap_bool,
suffix TYPE string,

?

所以循環之前產生的字段目錄內表,

name字段是結構名或者表名 即TABNAME

type是一個對象,可以使用 CL_ABAP_DATADESCR=>DESCRIBE_BY_NAME 這個方法得到,其中 P_NAME 這個參數是表名或結構名+字段名 type 使用?=符號來獲取 P_DESCR_REF 的實例

后兩個可以不填

?


產生結構

CALL METHOD CL_ABAP_STRUCTDESCR=>CREATE
EXPORTING
P_COMPONENTS = ZCOMPONENTS?
RECEIVING
P_RESULT = ZRESULT .

產生表

CALL METHOD CL_ABAP_TABLEDESCR=>CREATE
EXPORTING
P_LINE_TYPE = ZRESULT

RECEIVING
P_RESULT = WRESULT.

CREATE DATA WA_LINE TYPE HANDLE ZRESULT.
CREATE DATA DYN_TABLE TYPE HANDLE WRESULT.

該方法可以避免方法2的弊端。

轉載于:https://www.cnblogs.com/yanglikun/p/4177973.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

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

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