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.
TYPES: BEGIN OF ty_sum ,
werks LIKE mseg-werks ,
matnr LIKE mseg-matnr ,
lgort LIKE mseg-lgort ,
bwart LIKE
mseg-bwart ,
menge LIKE mseg-menge ,
END OF ty_sum.
DATA
: itab TYPE STANDARD TABLE OF ty_sum WITH HEADER LINE .
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
.
DATA: BEGIN OF itab_out OCCURS 0,
werks LIKE mseg-werks
,
matnr LIKE mseg-matnr ,
lgort LIKE mseg-lgort
,
menge01 TYPE i ,
menge02 TYPE i
,
menge03 TYPE i ,
menge04 TYPE i
,
menge05 TYPE i ,
menge06 TYPE i
,
menge07 TYPE i ,
menge08 TYPE i
,
menge09 TYPE i ,
menge10 TYPE i
,
menge11 TYPE i ,
menge12 TYPE i
,
menge13 TYPE i ,
menge14 TYPE i
,
menge15 TYPE i ,
menge16 TYPE i
,
menge17 TYPE i ,
menge18 TYPE i
,
menge19 TYPE i ,
menge20 TYPE i
,
menge21 TYPE i ,
menge22 TYPE i
,
menge23 TYPE i ,
menge24 TYPE i
,
menge25 TYPE i ,
menge26 TYPE i
,
line_sum TYPE i ,
END OF itab_out.
TYPES: BEGIN OF ty_bwart ,
bwart LIKE mseg-bwart ,
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: <f_fs1> ,
<f_fs2>.
DATA:
max_count TYPE i .
SELECT-OPTIONS: s_mblnr FOR mseg-mblnr ,
s_budat FOR
mkpf-budat .
PARAMETERS: p_sum AS CHECKBOX .
START-OF-SELECTION.
PERFORM getdata.
PERFORM fixdata.
IF p_sum =
'X'.
PERFORM outdata.
ELSE.
PERFORM outdata2.
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 .
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[].
LOOP AT itab_sum.
itab_out-werks = itab_sum-werks .
itab_out-matnr = itab_sum-matnr .
itab_out-lgort = itab_sum-lgort
.
READ TABLE itab_bwart WITH KEY bwart = itab_sum-bwart .
index =
sy-tabix + 3.
ASSIGN COMPONENT index OF STRUCTURE itab_out TO
<f_fs1>.
<f_fs1> = itab_sum-menge.
itab_out-line_sum =
itab_sum-menge.
COLLECT itab_out.
CLEAR
itab_out.
ENDLOOP.
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' 'WERKS' 'X'
,
'MATNR' 'MATNR' 'X'
,
'LGORT' 'LGORT' 'X'
,
'BWART' 'BWART' 'X'
,
'MENGE' 'MENGE' ''
.
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.
IF p_field = 'LINE_SUM'.
ls_fieldcat-emphasize =
'C700'.
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
i_callback_user_command = 'USER_COMMAND'
TABLES
t_outtab = itab_out
EXCEPTIONS
program_error = 1
OTHERS =
2.
ENDFORM. " outdata
*---------------------------------------------------------------------*
*
FORM fieldcat_init2
*
*---------------------------------------------------------------------*
FORM
fieldcat_init2 .
DATA: c(2) TYPE n ,
txt(20) TYPE c .
PERFORM frm_catlg_set USING: 'WERKS' 'WERKS' 'X'
,
'MATNR' 'MATNR' 'X'
,
'LGORT' 'LGORT' '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
使用指针动态生成内表的方法:
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.
TYPES: BEGIN OF ty_sum ,
werks LIKE mseg-werks ,
matnr LIKE mseg-matnr ,
lgort LIKE mseg-lgort ,
bwart LIKE
mseg-bwart ,
menge LIKE mseg-menge ,
END OF ty_sum.
DATA
: itab TYPE STANDARD TABLE OF ty_sum WITH HEADER LINE .
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
.
TYPES: BEGIN OF ty_bwart ,
bwart LIKE mseg-bwart ,
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: <f_fs1> ,
<f_out> TYPE
STANDARD TABLE ,
<f_out_wa> .
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.
PERFORM fixdata.
IF p_sum =
'X'.
PERFORM outdata.
ELSE.
PERFORM outdata2.
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 .
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.
LOOP AT itab_sum.
ASSIGN COMPONENT 'WERKS' OF STRUCTURE
<f_out_wa> TO <f_fs1>.
<f_fs1> = itab_sum-werks.
ASSIGN COMPONENT 'MATNR' OF STRUCTURE <f_out_wa> TO <f_fs1>.
<f_fs1> = itab_sum-matnr.
ASSIGN COMPONENT 'LGORT' OF STRUCTURE
<f_out_wa> TO <f_fs1>.
<f_fs1> = itab_sum-lgort.
READ TABLE itab_bwart WITH KEY bwart = itab_sum-bwart .
index =
sy-tabix + 3.
ASSIGN COMPONENT index OF STRUCTURE <f_out_wa> TO
<f_fs1>.
<f_fs1> = itab_sum-menge.
ASSIGN COMPONENT 'LINE_SUM' OF STRUCTURE <f_out_wa> TO
<f_fs1>.
<f_fs1> = itab_sum-menge.
COLLECT <f_out_wa> INTO <f_out> .
CLEAR
<f_out_wa>.
ENDLOOP.
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' 'WERKS' 'X'
,
'MATNR' 'MATNR' 'X'
,
'LGORT' 'LGORT' 'X'
,
'BWART' 'BWART' ''
,
'MENGE' 'MENGE' ''
.
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.
IF p_field = 'LINE_SUM'.
ls_fieldcat-emphasize =
'C700'.
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 = <f_out>
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. " outdata
*---------------------------------------------------------------------*
*
FORM fieldcat_init2
*
*---------------------------------------------------------------------*
FORM
fieldcat_init2 .
CLEAR c .
PERFORM frm_catlg_set USING: 'WERKS' 'WERKS'
'X' ,
'MATNR' 'MATNR' 'X'
,
'LGORT' 'LGORT' '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 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 <f_out>.
CREATE DATA dy_out_wa LIKE LINE OF <f_out>.
ASSIGN
dy_out_wa->* TO <f_out_wa>.
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.