有时内表部分字段是明确的,部分字段需要在运行时动态添加。
1.先把明确固定的字段声明一个结构,注意字段参照数据元素,或数据字典中的字段。如:
DATA:BEGIN OF gs_main1,
werks LIKE marc-werks,
matnr LIKE mara-matnr,
matne LIKE mara-matnr,
maktx LIKE makt-maktx,
groes LIKE mara-groes,
zzprd LIKE mara-zzprd,
mfrpn LIKE mara-mfrpn,
meins LIKE mara-meins,
plifz LIKE marc-plifz,
mtart LIKE mara-mtart,
mtbez LIKE t134t-mtbez,
lifnr LIKE lfa1-lifnr,
lifnr_name1 LIKE lfa1-name1,
alpgr LIKE stpo-alpgr,
alprf LIKE stpo-alprf,
plnmg TYPE pbed-plnmg, "总需求
labst TYPE mard-labst, "总库存
enmng TYPE resb-enmng, "总在制数量
bstmg TYPE ekpo-menge. "总未交货数量
DATA END OF gs_main1.
2. 根据以上结构生成字段列表:
DATA: r_tabdescr TYPE REF TO cl_abap_structdescr.
DATA: wa_field TYPE dfies,
t_dfies TYPE ddfields.
DATA: gs_fieldcat TYPE lvc_s_fcat,
gt_fieldcat TYPE lvc_t_fcat.
r_tabdescr ?= cl_abap_structdescr=>describe_by_data( gs_main1 ).
CALL METHOD cl_salv_data_descr=>read_structdescr
EXPORTING
r_structdescr = r_tabdescr
RECEIVING
t_dfies = t_dfies.
LOOP AT t_dfies INTO wa_field.
CLEAR gs_fieldcat.
MOVE-CORRESPONDING wa_field TO gs_fieldcat.
gs_fieldcat-coltext = gs_fieldcat-scrtext_m.
IF gs_fieldcat-inttype = 'P'.
gs_fieldcat-intlen = 23.
ENDIF.
APPEND gs_fieldcat TO gt_fieldcat.
ENDLOOP.
* 根据周期生成字段:周期在运行是才能确定
SORT gt_week.
LOOP AT gt_week.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'F' && gt_week.
gs_fieldcat-coltext = gt_week && '周'.
gs_fieldcat-inttype = 'P'.
gs_fieldcat-intlen = 23.
gs_fieldcat-decimals = 3.
APPEND gs_fieldcat TO gt_fieldcat.
ENDLOOP.
3. 根据字段清单创建内表
DATA: dy_table TYPE REF TO data.
FIELD-SYMBOLS:<gt_out> TYPE STANDARD TABLE.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = gt_fieldcat
IMPORTING
ep_table = dy_table.
ASSIGN dy_table->* TO <gt_out>.