ABAP 创建动态内表示例
根据年月输出不同列,比如201812->31 列,201802->28列
*&---------------------------------------------------------------------*
*& Report ZDEMO_CRT_DYN_ITAB
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZDEMO_CRT_DYN_ITAB.
PARAMETERS:
P_YEAR TYPE /BCV/FND_YEAR OBLIGATORY, "年度
P_MONTH TYPE MONTH OBLIGATORY. "月份
INITIALIZATION.
P_YEAR = SY-DATUM+0(4).
P_MONTH = SY-DATUM+4(2).
AT SELECTION-SCREEN.
START-OF-SELECTION.
"Create dynamic internal table
PERFORM FRM_CT_DYN_ITAB.
*&---------------------------------------------------------------------*
*& Form FRM_CT_DYN_ITAB
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_CT_DYN_ITAB .
DATA: LV_BEG_DATE TYPE SY-DATUM,
LV_END_DATE TYPE SY-DATUM,
LV_DAYS TYPE I.
DATA:LT_FDCAT TYPE LVC_T_FCAT.
"Set dynamic itab
LV_BEG_DATE = |{ P_YEAR }{ P_MONTH ALPHA = IN }01|.
"Get final day of curren month
CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
EXPORTING
I_DATE = LV_BEG_DATE
IMPORTING
E_DATE = LV_END_DATE.
LV_DAYS = LV_END_DATE+6(2).
DO LV_DAYS TIMES.
LT_FDCAT = VALUE #( BASE LT_FDCAT
( FIELDNAME = |DAY{ SY-INDEX }|
INTTYPE = |P|
INTLEN = |13|
DECIMALS = |2|
SCRTEXT_L = |DAY{ SY-INDEX }|
SCRTEXT_M = |DAY{ SY-INDEX }|
SCRTEXT_S = |DAY{ SY-INDEX }| ) ).
ENDDO.
CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE(
EXPORTING
IT_FIELDCATALOG = LT_FDCAT " Field Catalog
IMPORTING
EP_TABLE = DATA(LS_EP_TABLE)
EXCEPTIONS
GENERATE_SUBPOOL_DIR_FULL = 1
OTHERS = 2
).
FIELD-SYMBOLS:<FT_TAB> TYPE STANDARD TABLE.
ASSIGN LS_EP_TABLE->* TO <FT_TAB>.
"Set value
APPEND INITIAL LINE TO <FT_TAB> ASSIGNING FIELD-SYMBOL(<FS_TAB>).
DO LV_DAYS TIMES.
ASSIGN COMPONENT SY-INDEX OF STRUCTURE <FS_TAB> TO FIELD-SYMBOL(<FD>).
IF <FD> IS ASSIGNED.
<FD> = SY-INDEX.
UNASSIGN <FD>.
ENDIF.
ENDDO.
"ALV
CL_SALV_TABLE=>FACTORY(
IMPORTING
R_SALV_TABLE = DATA(LCL_ALV)
CHANGING
T_TABLE = <FT_TAB> ).
LCL_ALV->DISPLAY( ).
ENDFORM.
生成的动态内表<FT_TAB>