&---------------------------------------------------------------------*
*& Report ZTESTDYNMICINTERNALTABLE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTESTDYNMICINTERNALTABLE.
*REPORT Z_BARRY_TEST_FIELDSYMOLS .
TYPE-POOLS: SLIS.
TABLES: MSEG,MKPF.
DATA: GD_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: SLA TYPE SLIS_LAYOUT_ALV ,
IVARIANT LIKE DISVARIANT,
I_REPID LIKE SY-REPID ,
I_EXCLUDING TYPE SLIS_T_EXTAB.
**define structure
TYPES: BEGIN OF TY_SUM ,
WERKS LIKE MSEG-WERKS , " Plant
MATNR LIKE MSEG-MATNR , " Material
LGORT LIKE MSEG-LGORT , " Location
BWART LIKE MSEG-BWART , " Movetype
* MENGE LIKE MSEG-MENGE , " Qty
* MENGE TYPE P DECIMALS 0 ,
MENGE TYPE P ,
END OF TY_SUM.
** 定议内表itab 来接查询出来的数据
DATA : ITAB TYPE STANDARD TABLE OF TY_SUM WITH HEADER LINE .
** 定议哈希内表并指明key
DATA : HS_SUM TYPE HASHED TABLE OF TY_SUM
WITH UNIQUE KEY WERKS MATNR LGORT BWART WITH HEADER LINE .
DATA : ITAB_SUM TYPE STANDARD TABLE OF TY_SUM WITH HEADER LINE .
**要把movetype 对应的数量做交叉分析
TYPES: BEGIN OF TY_BWART ,
BWART LIKE MSEG-BWART , " Movetype
END OF TY_BWART.
DATA : HS_BWART TYPE HASHED TABLE OF TY_BWART
WITH UNIQUE KEY BWART WITH HEADER LINE .
DATA : ITAB_BWART TYPE STANDARD TABLE OF TY_BWART WITH HEADER LINE .
FIELD-SYMBOLS: ,
TYPE STANDARD TABLE ,
.
DATA: MAX_COUNT TYPE I ,
DY_OUT TYPE REF TO DATA ,
DY_OUT_WA TYPE REF TO DATA,
XFC TYPE LVC_S_FCAT,
IFC TYPE LVC_T_FCAT.
DATA: C(2) TYPE N ,
TXT(20) TYPE C .
SELECT-OPTIONS: S_MBLNR FOR MSEG-MBLNR ,
S_BUDAT FOR MKPF-BUDAT .
PARAMETERS: P_SUM AS CHECKBOX .
START-OF-SELECTION.
PERFORM GETDATA. " 读取数据
** Form FIXDATA 把数据处理成交叉表格式.
PERFORM FIXDATA.
IF P_SUM = 'X'.
PERFORM OUTDATA. " 显示未处理前的数据传ITAB_SUM 给ALF function
ELSE.
PERFORM OUTDATA2. " 显示交叉表格式传 给ALV function
ENDIF.
*&---------------------------------------------------------------------*
*& Form GETDATA
*&---------------------------------------------------------------------*
FORM GETDATA.
SELECT WERKS MATNR LGORT BWART MENGE INTO TABLE ITAB
FROM MKPF INNER JOIN MSEG ON MKPF~MBLNR = MSEG~MBLNR AND
MKPF~MJAHR = MSEG~MJAHR
WHERE MKPF~MBLNR IN S_MBLNR AND
MKPF~BUDAT IN S_BUDAT .
* SORT ITAB BY WERKS MATNR .
ENDFORM. " GETDATA
*&---------------------------------------------------------------------*
*& Form FIXDATA
*&---------------------------------------------------------------------*
FORM FIXDATA.
DATA: INDEX LIKE SY-TABIX .
LOOP AT ITAB.
HS_SUM = ITAB.
COLLECT HS_SUM.
HS_BWART = ITAB-BWART .
COLLECT HS_BWART.
ENDLOOP.
SORT HS_BWART.
ITAB_BWART[] = HS_BWART[].
ITAB_SUM[] = HS_SUM[].
PERFORM CREAT_ITAB_OUT.
**SORT
DATA NAME1(10) TYPE C.
DATA NAME2(10) TYPE C.
NAME1 = 'WERKS'.
NAME2 = 'MATNR'.
LOOP AT ITAB_SUM.
ASSIGN COMPONENT 'WERKS' OF STRUCTURE TO .
= ITAB_SUM-WERKS.
ASSIGN COMPONENT 'MATNR' OF STRUCTURE TO .
= ITAB_SUM-MATNR.
ASSIGN COMPONENT 'LGORT' OF STRUCTURE TO .
= ITAB_SUM-LGORT.
READ TABLE ITAB_BWART WITH KEY BWART = ITAB_SUM-BWART .
INDEX = SY-TABIX + 3.
ASSIGN COMPONENT INDEX OF STRUCTURE TO .
= ITAB_SUM-MENGE.
ASSIGN COMPONENT 'LINE_SUM' OF STRUCTURE TO .
= ITAB_SUM-MENGE.
COLLECT INTO .
CLEAR .
ENDLOOP.
SORT BY (NAME1) (NAME2).
ENDFORM. " FIXDATA
*&---------------------------------------------------------------------*
*& Form outdata
*&---------------------------------------------------------------------*
FORM OUTDATA.
PERFORM FIELDCAT_INIT .
SLA-COLWIDTH_OPTIMIZE = 'X'.
SLA-ZEBRA = 'X'.
I_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = I_REPID
IT_FIELDCAT = GD_FIELDCAT[]
I_SAVE = 'A'
IS_VARIANT = IVARIANT
IS_LAYOUT = SLA
IT_EXCLUDING = I_EXCLUDING
* i_callback_user_command = 'USER_COMMAND'
TABLES
T_OUTTAB = ITAB_SUM
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. " outdata
*---------------------------------------------------------------------*
* FORM fieldcat_init *
*---------------------------------------------------------------------*
FORM FIELDCAT_INIT .
PERFORM FRM_CATLG_SET USING: 'WERKS' 'WERKS1' 'X' ,
'MATNR' 'MATNR1' 'X' ,
'LGORT' 'LGORT1' 'X' ,
'BWART' 'BWART1' '' ,
'MENGE' 'MENGE1' '' .
ENDFORM. "fieldcat_init
*---------------------------------------------------------------------*
* FORM fieldcat_init2 *
*---------------------------------------------------------------------*
FORM FIELDCAT_INIT2 .
CLEAR C .
PERFORM FRM_CATLG_SET USING: 'WERKS' 'WERKS1' 'X' ,
'MATNR' 'MATNR1' 'X' ,
'LGORT' 'LGORT1' 'X' .
LOOP AT HS_BWART .
C = C + 1.
CONCATENATE 'MENGE' C INTO TXT.
PERFORM FRM_CATLG_SET USING: TXT HS_BWART-BWART '' .
ENDLOOP.
PERFORM FRM_CATLG_SET USING: 'LINE_SUM' 'SUM' '' .
ENDFORM. "fieldcat_init
*---------------------------------------------------------------------*
* FORM frm_catlg_set *
*---------------------------------------------------------------------*
FORM FRM_CATLG_SET USING P_FIELD
P_TEXT
P_KEY.
DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
LS_FIELDCAT-FIELDNAME = P_FIELD.
LS_FIELDCAT-SELTEXT_L = P_TEXT.
LS_FIELDCAT-KEY = P_KEY.
LS_FIELDCAT-NO_ZERO = 'X'.
IF P_FIELD = 'LINE_SUM'.
LS_FIELDCAT-EMPHASIZE = 'C700'.
ENDIF.
IF P_FIELD = 'LINE_SUM'.
LS_FIELDCAT-DECIMALS_OUT = '0'.
ENDIF.
APPEND LS_FIELDCAT TO GD_FIELDCAT .
CLEAR LS_FIELDCAT .
ENDFORM. "frm_catlg_set
*&--------------------------------------------------------------------*
*& Form user_command
*&--------------------------------------------------------------------*
*FORM user_command USING r_ucomm LIKE sy-ucomm
* rs_selfield TYPE slis_selfield.
* READ TABLE itab INDEX rs_selfield-tabindex.
* CASE r_ucomm.
* WHEN '&IC1'. "双击
*
* WHEN 'EXIT'.
* LEAVE PROGRAM.
* ENDCASE.
** rs_selfield-refresh = 'X'. "自动刷新
*ENDFORM. "user_com
*---------------------------------------------------------------------*
* FORM outdata2 *
*---------------------------------------------------------------------*
FORM OUTDATA2.
PERFORM FIELDCAT_INIT2 .
SLA-COLWIDTH_OPTIMIZE = 'X'.
SLA-ZEBRA = 'X'.
I_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = I_REPID
IT_FIELDCAT = GD_FIELDCAT[]
I_SAVE = 'A'
IS_VARIANT = IVARIANT
IS_LAYOUT = SLA
IT_EXCLUDING = I_EXCLUDING
TABLES
T_OUTTAB =
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. " outdata
*---------------------------------------------------------------------*
* FORM creat_itab_out *
*---------------------------------------------------------------------*
FORM CREAT_ITAB_OUT.
CLEAR C.
PERFORM BUILD_ITAB_STRU USING: 'WERKS' 'MSEG' 'WERKS' ,
'MATNR' 'MSEG' 'MATNR' ,
'LGORT' 'MSEG' 'LGORT' .
LOOP AT HS_BWART.
C = C + 1.
CONCATENATE 'MENGE' C INTO TXT.
PERFORM BUILD_ITAB_STRU USING: TXT 'MSEG' 'MENGE' .
ENDLOOP.
PERFORM BUILD_ITAB_STRU USING: 'LINE_SUM' 'MSEG' 'MENGE' .
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = IFC
IMPORTING
EP_TABLE = DY_OUT.
ASSIGN DY_OUT->* TO .
CREATE DATA DY_OUT_WA LIKE LINE OF .
ASSIGN DY_OUT_WA->* TO .
ENDFORM.
*---------------------------------------------------------------------*
* FORM build_itab_stru *
*---------------------------------------------------------------------*
FORM BUILD_ITAB_STRU USING FDNAME REF_T REF_F.
XFC-FIELDNAME = FDNAME .
XFC-REF_TABLE = REF_T.
XFC-REF_FIELD = REF_F.
APPEND XFC TO IFC.
ENDFORM.
*& Report ZTESTDYNMICINTERNALTABLE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTESTDYNMICINTERNALTABLE.
*REPORT Z_BARRY_TEST_FIELDSYMOLS .
TYPE-POOLS: SLIS.
TABLES: MSEG,MKPF.
DATA: GD_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: SLA TYPE SLIS_LAYOUT_ALV ,
IVARIANT LIKE DISVARIANT,
I_REPID LIKE SY-REPID ,
I_EXCLUDING TYPE SLIS_T_EXTAB.
**define structure
TYPES: BEGIN OF TY_SUM ,
WERKS LIKE MSEG-WERKS , " Plant
MATNR LIKE MSEG-MATNR , " Material
LGORT LIKE MSEG-LGORT , " Location
BWART LIKE MSEG-BWART , " Movetype
* MENGE LIKE MSEG-MENGE , " Qty
* MENGE TYPE P DECIMALS 0 ,
MENGE TYPE P ,
END OF TY_SUM.
** 定议内表itab 来接查询出来的数据
DATA : ITAB TYPE STANDARD TABLE OF TY_SUM WITH HEADER LINE .
** 定议哈希内表并指明key
DATA : HS_SUM TYPE HASHED TABLE OF TY_SUM
WITH UNIQUE KEY WERKS MATNR LGORT BWART WITH HEADER LINE .
DATA : ITAB_SUM TYPE STANDARD TABLE OF TY_SUM WITH HEADER LINE .
**要把movetype 对应的数量做交叉分析
TYPES: BEGIN OF TY_BWART ,
BWART LIKE MSEG-BWART , " Movetype
END OF TY_BWART.
DATA : HS_BWART TYPE HASHED TABLE OF TY_BWART
WITH UNIQUE KEY BWART WITH HEADER LINE .
DATA : ITAB_BWART TYPE STANDARD TABLE OF TY_BWART WITH HEADER LINE .
FIELD-SYMBOLS: ,
TYPE STANDARD TABLE ,
.
DATA: MAX_COUNT TYPE I ,
DY_OUT TYPE REF TO DATA ,
DY_OUT_WA TYPE REF TO DATA,
XFC TYPE LVC_S_FCAT,
IFC TYPE LVC_T_FCAT.
DATA: C(2) TYPE N ,
TXT(20) TYPE C .
SELECT-OPTIONS: S_MBLNR FOR MSEG-MBLNR ,
S_BUDAT FOR MKPF-BUDAT .
PARAMETERS: P_SUM AS CHECKBOX .
START-OF-SELECTION.
PERFORM GETDATA. " 读取数据
** Form FIXDATA 把数据处理成交叉表格式.
PERFORM FIXDATA.
IF P_SUM = 'X'.
PERFORM OUTDATA. " 显示未处理前的数据传ITAB_SUM 给ALF function
ELSE.
PERFORM OUTDATA2. " 显示交叉表格式传 给ALV function
ENDIF.
*&---------------------------------------------------------------------*
*& Form GETDATA
*&---------------------------------------------------------------------*
FORM GETDATA.
SELECT WERKS MATNR LGORT BWART MENGE INTO TABLE ITAB
FROM MKPF INNER JOIN MSEG ON MKPF~MBLNR = MSEG~MBLNR AND
MKPF~MJAHR = MSEG~MJAHR
WHERE MKPF~MBLNR IN S_MBLNR AND
MKPF~BUDAT IN S_BUDAT .
* SORT ITAB BY WERKS MATNR .
ENDFORM. " GETDATA
*&---------------------------------------------------------------------*
*& Form FIXDATA
*&---------------------------------------------------------------------*
FORM FIXDATA.
DATA: INDEX LIKE SY-TABIX .
LOOP AT ITAB.
HS_SUM = ITAB.
COLLECT HS_SUM.
HS_BWART = ITAB-BWART .
COLLECT HS_BWART.
ENDLOOP.
SORT HS_BWART.
ITAB_BWART[] = HS_BWART[].
ITAB_SUM[] = HS_SUM[].
PERFORM CREAT_ITAB_OUT.
**SORT
DATA NAME1(10) TYPE C.
DATA NAME2(10) TYPE C.
NAME1 = 'WERKS'.
NAME2 = 'MATNR'.
LOOP AT ITAB_SUM.
ASSIGN COMPONENT 'WERKS' OF STRUCTURE TO .
= ITAB_SUM-WERKS.
ASSIGN COMPONENT 'MATNR' OF STRUCTURE TO .
= ITAB_SUM-MATNR.
ASSIGN COMPONENT 'LGORT' OF STRUCTURE TO .
= ITAB_SUM-LGORT.
READ TABLE ITAB_BWART WITH KEY BWART = ITAB_SUM-BWART .
INDEX = SY-TABIX + 3.
ASSIGN COMPONENT INDEX OF STRUCTURE TO .
= ITAB_SUM-MENGE.
ASSIGN COMPONENT 'LINE_SUM' OF STRUCTURE TO .
= ITAB_SUM-MENGE.
COLLECT INTO .
CLEAR .
ENDLOOP.
SORT BY (NAME1) (NAME2).
ENDFORM. " FIXDATA
*&---------------------------------------------------------------------*
*& Form outdata
*&---------------------------------------------------------------------*
FORM OUTDATA.
PERFORM FIELDCAT_INIT .
SLA-COLWIDTH_OPTIMIZE = 'X'.
SLA-ZEBRA = 'X'.
I_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = I_REPID
IT_FIELDCAT = GD_FIELDCAT[]
I_SAVE = 'A'
IS_VARIANT = IVARIANT
IS_LAYOUT = SLA
IT_EXCLUDING = I_EXCLUDING
* i_callback_user_command = 'USER_COMMAND'
TABLES
T_OUTTAB = ITAB_SUM
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. " outdata
*---------------------------------------------------------------------*
* FORM fieldcat_init *
*---------------------------------------------------------------------*
FORM FIELDCAT_INIT .
PERFORM FRM_CATLG_SET USING: 'WERKS' 'WERKS1' 'X' ,
'MATNR' 'MATNR1' 'X' ,
'LGORT' 'LGORT1' 'X' ,
'BWART' 'BWART1' '' ,
'MENGE' 'MENGE1' '' .
ENDFORM. "fieldcat_init
*---------------------------------------------------------------------*
* FORM fieldcat_init2 *
*---------------------------------------------------------------------*
FORM FIELDCAT_INIT2 .
CLEAR C .
PERFORM FRM_CATLG_SET USING: 'WERKS' 'WERKS1' 'X' ,
'MATNR' 'MATNR1' 'X' ,
'LGORT' 'LGORT1' 'X' .
LOOP AT HS_BWART .
C = C + 1.
CONCATENATE 'MENGE' C INTO TXT.
PERFORM FRM_CATLG_SET USING: TXT HS_BWART-BWART '' .
ENDLOOP.
PERFORM FRM_CATLG_SET USING: 'LINE_SUM' 'SUM' '' .
ENDFORM. "fieldcat_init
*---------------------------------------------------------------------*
* FORM frm_catlg_set *
*---------------------------------------------------------------------*
FORM FRM_CATLG_SET USING P_FIELD
P_TEXT
P_KEY.
DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
LS_FIELDCAT-FIELDNAME = P_FIELD.
LS_FIELDCAT-SELTEXT_L = P_TEXT.
LS_FIELDCAT-KEY = P_KEY.
LS_FIELDCAT-NO_ZERO = 'X'.
IF P_FIELD = 'LINE_SUM'.
LS_FIELDCAT-EMPHASIZE = 'C700'.
ENDIF.
IF P_FIELD = 'LINE_SUM'.
LS_FIELDCAT-DECIMALS_OUT = '0'.
ENDIF.
APPEND LS_FIELDCAT TO GD_FIELDCAT .
CLEAR LS_FIELDCAT .
ENDFORM. "frm_catlg_set
*&--------------------------------------------------------------------*
*& Form user_command
*&--------------------------------------------------------------------*
*FORM user_command USING r_ucomm LIKE sy-ucomm
* rs_selfield TYPE slis_selfield.
* READ TABLE itab INDEX rs_selfield-tabindex.
* CASE r_ucomm.
* WHEN '&IC1'. "双击
*
* WHEN 'EXIT'.
* LEAVE PROGRAM.
* ENDCASE.
** rs_selfield-refresh = 'X'. "自动刷新
*ENDFORM. "user_com
*---------------------------------------------------------------------*
* FORM outdata2 *
*---------------------------------------------------------------------*
FORM OUTDATA2.
PERFORM FIELDCAT_INIT2 .
SLA-COLWIDTH_OPTIMIZE = 'X'.
SLA-ZEBRA = 'X'.
I_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = I_REPID
IT_FIELDCAT = GD_FIELDCAT[]
I_SAVE = 'A'
IS_VARIANT = IVARIANT
IS_LAYOUT = SLA
IT_EXCLUDING = I_EXCLUDING
TABLES
T_OUTTAB =
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. " outdata
*---------------------------------------------------------------------*
* FORM creat_itab_out *
*---------------------------------------------------------------------*
FORM CREAT_ITAB_OUT.
CLEAR C.
PERFORM BUILD_ITAB_STRU USING: 'WERKS' 'MSEG' 'WERKS' ,
'MATNR' 'MSEG' 'MATNR' ,
'LGORT' 'MSEG' 'LGORT' .
LOOP AT HS_BWART.
C = C + 1.
CONCATENATE 'MENGE' C INTO TXT.
PERFORM BUILD_ITAB_STRU USING: TXT 'MSEG' 'MENGE' .
ENDLOOP.
PERFORM BUILD_ITAB_STRU USING: 'LINE_SUM' 'MSEG' 'MENGE' .
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = IFC
IMPORTING
EP_TABLE = DY_OUT.
ASSIGN DY_OUT->* TO .
CREATE DATA DY_OUT_WA LIKE LINE OF .
ASSIGN DY_OUT_WA->* TO .
ENDFORM.
*---------------------------------------------------------------------*
* FORM build_itab_stru *
*---------------------------------------------------------------------*
FORM BUILD_ITAB_STRU USING FDNAME REF_T REF_F.
XFC-FIELDNAME = FDNAME .
XFC-REF_TABLE = REF_T.
XFC-REF_FIELD = REF_F.
APPEND XFC TO IFC.
ENDFORM.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16794144/viewspace-743315/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/16794144/viewspace-743315/