动态内表
關(guān)鍵技巧:
1,?創(chuàng)建動態(tài)內(nèi)表:
a,?動態(tài)內(nèi)表的結(jié)構(gòu)的定義.
動態(tài)內(nèi)表表結(jié)構(gòu)的定義必須使用表結(jié)構(gòu)與?table?type:?lvc_t_fcat一樣的內(nèi)表.
一般情況下,我們都內(nèi)表的所有列定義成字符型.
b,?根據(jù)表結(jié)構(gòu)生成內(nèi)表.
系統(tǒng)提供了一個標(biāo)準(zhǔn)的method來產(chǎn)生動態(tài)表,使用方法如下:
2,?動態(tài)內(nèi)表的賦值:
a,?獲取指定的字段
b,?給指定的字段賦值
3,?讀取動態(tài)內(nèi)表的值:
a,?獲取指定的字段
b,?讀取指定的字段值
REPORT??zdyn_test.
FIELD-SYMBOLS:?<dyn_table>?TYPE?STANDARD?TABLE,
???????????????<dyn_wa>,
???????????????<dyn_field>.
DATA:?dy_table?TYPE?REF?TO?data,
??????dy_line??TYPE?REF?TO?data,
??????it_structure?TYPE?lvc_t_fcat,
??????wa_structure?TYPE?lvc_s_fcat.
START-OF-SELECTION.
??PERFORM?create_structure.??"?定義內(nèi)表的結(jié)構(gòu)
??PERFORM?create_dynamic_table.??"?按照定義的內(nèi)表結(jié)構(gòu),產(chǎn)生一個內(nèi)表
??PERFORM?write_data_to_dyntable.??"?向動態(tài)內(nèi)表中寫數(shù)
??PERFORM?output_dyntable_data.???"?從動態(tài)內(nèi)表中取數(shù),并寫到屏幕
*&---------------------------------------------------------------------*
*&??????Form??create_structure
*&---------------------------------------------------------------------*
FORM?create_structure?.
??wa_structure-fieldname?=?'COL1'.??"?第一列列名
??wa_structure-col_pos???=?1.???????"?表示第一列?---?可心省略,默認(rèn)情況下,第一行對應(yīng)到生產(chǎn)內(nèi)表的第一列,如果指定,則按指定的列順序生成內(nèi)表
??wa_structure-inttype?=?'C'.???????"?數(shù)據(jù)類型
??wa_structure-intlen?=?6.??????????"?長度
??APPEND?wa_structure?TO?it_structure.
??wa_structure-fieldname?=?'COL2'.??"?第二列列名
??wa_structure-col_pos???=?2.???????"?表示第二列---?可心省略,默認(rèn)情況下,第一行對應(yīng)到生產(chǎn)內(nèi)表的第一列,如果指定,則按指定的列順序生成內(nèi)表
??wa_structure-inttype?=?'C'.???????"?數(shù)據(jù)類型
??wa_structure-intlen?=?6.??????????"?長度
??APPEND?wa_structure?TO?it_structure.
??wa_structure-fieldname?=?'COL3'.??"?第三列名
??wa_structure-col_pos???=?3.???????"?表示第三列?---?可心省略,默認(rèn)情況下,第一行對應(yīng)到生產(chǎn)內(nèi)表的第一列,如果指定,則按指定的列順序生成內(nèi)表
??wa_structure-inttype?=?'C'.???????"?數(shù)據(jù)類型
??wa_structure-intlen?=?6.??????????"?長度
??APPEND?wa_structure?TO?it_structure.
ENDFORM.????????????????????"?create_structure
*&---------------------------------------------------------------------*
*&??????Form??create_dynamic_table
*&---------------------------------------------------------------------*
FORM?create_dynamic_table?.
??CALL?METHOD?cl_alv_table_create=>create_dynamic_table
????EXPORTING
??????it_fieldcatalog?=?it_structure
????IMPORTING
??????ep_table????????=?dy_table.
??ASSIGN?dy_table->*?TO?<dyn_table>.????"?用表類型指針?<dyn_table>?指向?數(shù)據(jù)對象的內(nèi)容.
ENDFORM.????????????????????"?create_dynamic_table
*&---------------------------------------------------------------------*
*&??????Form??write_data_to_dyntable
*&---------------------------------------------------------------------*
FORM?write_data_to_dyntable?.
??DATA:wa_new_line?TYPE?REF?TO?data.
??DATA:i?TYPE?n.
??DATA:j?TYPE?n.
??CREATE?DATA?wa_new_line?LIKE?LINE?OF?<dyn_table>.??"?建立一個與動態(tài)內(nèi)表結(jié)構(gòu)相同的數(shù)據(jù)對象,且數(shù)據(jù)對象為是一個結(jié)構(gòu)
??ASSIGN?wa_new_line->*?TO?<dyn_wa>.
??"?用<dyn_wa>指針指向該結(jié)構(gòu)
??DO?3?TIMES.
????i?=?i?+?1.
????CLEAR?j.
????LOOP?AT?it_structure?INTO?wa_structure.
??????j?=?j?+?1.
??????ASSIGN?COMPONENT?wa_structure-fieldname?OF?STRUCTURE?<dyn_wa>?TO?<dyn_field>.??"?用指針?<dyn_field>指向工作區(qū)<dyn_wa>中的一個字段,字段名為wa_structure-fieldname.
??????CONCATENATE?i?j?INTO?<dyn_field>.??????????????????????????????????????????????"?給指針指向的字段賦值
????ENDLOOP.
????APPEND?<dyn_wa>?TO?<dyn_table>.
??ENDDO.
ENDFORM.????????????????????"?write_data_to_dyntable
*&---------------------------------------------------------------------*
*&??????Form??output_dyntable_data
*&---------------------------------------------------------------------*
FORM?output_dyntable_data?.
??LOOP?AT?it_structure?INTO?wa_structure.
????WRITE:?wa_structure-fieldname(5).
??ENDLOOP.
??LOOP?AT?<dyn_table>?INTO?<dyn_wa>.
????WRITE:?/?.
????LOOP?AT?it_structure?INTO?wa_structure.
??????ASSIGN?COMPONENT?wa_structure-fieldname?OF?STRUCTURE?<dyn_wa>?TO?<dyn_field>.??"?用指針?<dyn_field>指向工作區(qū)<dyn_wa>中的一個字段,字段名為wa_structure-fieldname.
??????WRITE:?<dyn_field>.
????ENDLOOP.
??ENDLOOP.
ENDFORM.????????????????????"?output_dyntable_data
總結(jié)