*&---------------------------------------------------------------------*
*& Report ZTEST134
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
report ztest134.
"Define work area
tables:vbak,vbap,mast,stpo,makt,vbep.
"ALV
type-pools: slis.
data: l_alv_filed type slis_fieldcat_alv.
data: l_alv_filedcat type slis_t_fieldcat_alv.
data: gt_sort type slis_t_sortinfo_alv.
data: gt_color type slis_t_specialcol_alv with header line.
data: i_layout type slis_layout_alv.
data: i_grid_settings type lvc_s_glay.
data: pgm like sy-repid.
data: col_pos type i value 0.
"Define internal table for data output
data:begin of itab_ord occurs 10,
vbeln like vbak-vbeln,
posnr like vbap-posnr,
kunnr like vbak-kunnr,
mat_t type c length 10, " Material Type.
matnr like vbap-matnr,
maktx like makt-maktx,
potx1 like rc29p-potx1, "BOM TEXT 1
pkg_q like vbap-kwmeng,"Package Quantity
kwmeng like vbap-kwmeng,"Delivery quantity
edatu like vbep-edatu,"Delivery date
qty_f like caufvd-gamng,"Already finished quantity
qty_w like caufvd-gamng,
mtart like mara-mtart,
werks like vbap-werks,
stlnr like vbap-stlnr,
sposn like vbap-sposn,
top_matnr like vbap-matnr,
"Production Order
aufnr like afpo-aufnr,
psmng like afpo-psmng,"ORDER QUANTITY
wemng like afpo-wemng,"GR QUANTITY
vrkme like vbap-vrkme,
end of itab_ord.
"Define screen
selection-screen: begin of block b1 with frame title t1.
select-options: vbtyp for vbak-vbtyp.
select-options: vkorg for vbak-vkorg.
select-options: vtweg for vbak-vtweg.
select-options: spart for vbak-spart.
select-options: vkgrp for vbak-vkgrp.
select-options: vdatu for vbak-vdatu.
select-options: vbeln for vbak-vbeln.
selection-screen: end of block b1.
selection-screen: begin of block b2 with frame title t2.
select-options: matnr for vbap-matnr.
select-options: matkl for vbap-matkl.
select-options: posar for vbap-posar.
select-options: prodh for vbap-prodh.
select-options: werks for vbap-werks.
selection-screen: end of block b2.
initialization.
t1 = '销售表头资料'.
t2 = '销售项目行资料'.
start-of-selection.
perform get_data.
perform initial_fields using:
'VBELN' '销售单号' 'X' 'X' 15,
'POSNR' '行号' 'X' 'X' 5,
'KUNNR' '客户编号' 'X' 'X' 10,
'MAT_T' '物料类型' 'X' '' 10,
'MATNR' '物料编号' 'X' '' 15,
'MAKTX' '物料描述' 'X' '' 30,
'POTX1' '包装方式' 'X' '' 20,
'PKG_Q' '包装数量' 'X' '' 10,
'KWMENG' '交货数量' 'X' '' 10,
'VRKME' '交货单位' 'X' '' 10,
'EDATU' '交货日期' 'X' '' 10,
'QTY_F' '完工数量' 'X' '' 10,
'QTY_W' '未完工数量' 'X' '' 10.
perform alv_layout.
perform alv_data_group using 'VBELN'.
perform alv_data_group using 'POSNR'.
perform alv_data_group using 'KUNNR'.
perform alv_grid.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_data .
select
vbak~vbeln
vbap~posnr
vbak~kunnr
vbap~matnr
makt~maktx
vbap~kwmeng
mara~mtart
vbap~werks
vbap~stlnr
vbap~sposn
vbap~vrkme
into corresponding fields of table itab_ord
from
vbak
inner join vbap on vbak~vbeln = vbap~vbeln
inner join makt on vbap~matnr = makt~matnr and makt~spras = sy-langu
inner join mara on vbap~matnr = mara~matnr
where vbak~vbeln in vbeln and
vbap~matnr in matnr and
vbak~vbtyp in vbtyp and
vbak~vkorg in vkorg and
vbak~vtweg in vtweg and
vbak~spart in spart and
vbak~vkgrp in vkgrp and
vbak~vdatu in vdatu.
loop at itab_ord.
if itab_ord-mtart = 'ZBZ'.
itab_ord-mat_t = '包装物'.
clear:vbap.
select single potx1 into itab_ord-potx1 from stpo where stlnr = itab_ord-stlnr and posnr = itab_ord-sposn.
else.
itab_ord-mat_t = '产品'.
select edatu into itab_ord-edatu from vbep where vbeln = itab_ord-vbeln and posnr = itab_ord-posnr order by edatu ascending.exit.endselect.
select single aufnr psmng wemng into (itab_ord-aufnr, itab_ord-psmng, itab_ord-qty_f) from afpo where kdauf = itab_ord-vbeln and kdpos = itab_ord-posnr and xloek <> 'X' group by aufnr psmng wemng .
"ITAB_ORD-QTY_W = ITAB_ORD-PSMNG - ITAB_ORD-QTY_F.
itab_ord-qty_w = itab_ord-kwmeng - itab_ord-qty_f.
endif.
perform str_trim changing itab_ord-vbeln.
perform str_trim changing itab_ord-kunnr.
perform str_trim changing itab_ord-matnr.
modify itab_ord.
clear:itab_ord.
endloop.
clear:itab_ord.
endform. " GET_DATA
*&---------------------------------------------------------------------*
*& Form ALV_GRID
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form alv_grid.
pgm = sy-repid.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
it_fieldcat = l_alv_filedcat
it_sort = gt_sort[]
"i_callback_top_of_page = 'USER_TOP_PAGE'
i_callback_user_command = 'USER_CLICK_EVENT'
is_layout = i_layout
i_callback_program = pgm
"i_grid_title = ''
"i_grid_settings = i_grid_settings
i_default = 'X'
i_save = 'A'
tables
t_outtab = itab_ord[]
exceptions
program_error = 1
others = 2.
endform. "ALV_GRID
*&---------------------------------------------------------------------*
*& Form USER_CLICK_EVENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
form user_click_event using r_ucomm like sy-ucomm
rs_selfield type slis_selfield.
endform. "USER_CLICK_EVENT_so
*&---------------------------------------------------------------------*
*& Form INITIAL_FIELDS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FNAME text
* -->TEXT text
* -->NO_ZERO text
* -->KEY text
* -->LENGTH text
*----------------------------------------------------------------------*
form initial_fields using fname type c
text type c
no_zero type c
key type c
length type p.
l_alv_filed-col_pos = col_pos + 1.
l_alv_filed-outputlen = length.
l_alv_filed-fieldname = fname.
l_alv_filed-seltext_m = text.
l_alv_filed-no_zero = no_zero.
l_alv_filed-key = key.
append l_alv_filed to l_alv_filedcat.
endform. "initial_fields
*&---------------------------------------------------------------------*
*& Form ALV_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form alv_layout.
"i_layout-colwidth_optimize = 'X'.
"i_layout-zebra = 'X'.
i_layout-no_min_linesize = 'X'.
i_layout-group_buttons = 'X'.
i_layout-totals_before_items = 'X'.
i_layout-totals_text = 'X'.
i_layout-subtotals_text = 'X'.
i_layout-group_change_edit = 'X'.
endform. "ALV_LAYOUT
*&---------------------------------------------------------------------*
*& Form ALV_DATA_GROUP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FIELDNAME text
*----------------------------------------------------------------------*
form alv_data_group using fieldname type c.
data ls_sort type slis_sortinfo_alv.
clear ls_sort.
ls_sort-fieldname = fieldname.
ls_sort-spos = 1.
ls_sort-up = 'X'.
ls_sort-subtot = 'X'.
ls_sort-group = 'X'.
append ls_sort to gt_sort.
endform. "ALV_DATA_GROUP
*&---------------------------------------------------------------------*
*& Form STR_TRIM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->V_STR text
*----------------------------------------------------------------------*
form str_trim changing v_str.
call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
exporting
input = v_str
importing
output = v_str.
condense v_str.
endform. "STR_TRIM
*& Report ZTEST134
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
report ztest134.
"Define work area
tables:vbak,vbap,mast,stpo,makt,vbep.
"ALV
type-pools: slis.
data: l_alv_filed type slis_fieldcat_alv.
data: l_alv_filedcat type slis_t_fieldcat_alv.
data: gt_sort type slis_t_sortinfo_alv.
data: gt_color type slis_t_specialcol_alv with header line.
data: i_layout type slis_layout_alv.
data: i_grid_settings type lvc_s_glay.
data: pgm like sy-repid.
data: col_pos type i value 0.
"Define internal table for data output
data:begin of itab_ord occurs 10,
vbeln like vbak-vbeln,
posnr like vbap-posnr,
kunnr like vbak-kunnr,
mat_t type c length 10, " Material Type.
matnr like vbap-matnr,
maktx like makt-maktx,
potx1 like rc29p-potx1, "BOM TEXT 1
pkg_q like vbap-kwmeng,"Package Quantity
kwmeng like vbap-kwmeng,"Delivery quantity
edatu like vbep-edatu,"Delivery date
qty_f like caufvd-gamng,"Already finished quantity
qty_w like caufvd-gamng,
mtart like mara-mtart,
werks like vbap-werks,
stlnr like vbap-stlnr,
sposn like vbap-sposn,
top_matnr like vbap-matnr,
"Production Order
aufnr like afpo-aufnr,
psmng like afpo-psmng,"ORDER QUANTITY
wemng like afpo-wemng,"GR QUANTITY
vrkme like vbap-vrkme,
end of itab_ord.
"Define screen
selection-screen: begin of block b1 with frame title t1.
select-options: vbtyp for vbak-vbtyp.
select-options: vkorg for vbak-vkorg.
select-options: vtweg for vbak-vtweg.
select-options: spart for vbak-spart.
select-options: vkgrp for vbak-vkgrp.
select-options: vdatu for vbak-vdatu.
select-options: vbeln for vbak-vbeln.
selection-screen: end of block b1.
selection-screen: begin of block b2 with frame title t2.
select-options: matnr for vbap-matnr.
select-options: matkl for vbap-matkl.
select-options: posar for vbap-posar.
select-options: prodh for vbap-prodh.
select-options: werks for vbap-werks.
selection-screen: end of block b2.
initialization.
t1 = '销售表头资料'.
t2 = '销售项目行资料'.
start-of-selection.
perform get_data.
perform initial_fields using:
'VBELN' '销售单号' 'X' 'X' 15,
'POSNR' '行号' 'X' 'X' 5,
'KUNNR' '客户编号' 'X' 'X' 10,
'MAT_T' '物料类型' 'X' '' 10,
'MATNR' '物料编号' 'X' '' 15,
'MAKTX' '物料描述' 'X' '' 30,
'POTX1' '包装方式' 'X' '' 20,
'PKG_Q' '包装数量' 'X' '' 10,
'KWMENG' '交货数量' 'X' '' 10,
'VRKME' '交货单位' 'X' '' 10,
'EDATU' '交货日期' 'X' '' 10,
'QTY_F' '完工数量' 'X' '' 10,
'QTY_W' '未完工数量' 'X' '' 10.
perform alv_layout.
perform alv_data_group using 'VBELN'.
perform alv_data_group using 'POSNR'.
perform alv_data_group using 'KUNNR'.
perform alv_grid.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_data .
select
vbak~vbeln
vbap~posnr
vbak~kunnr
vbap~matnr
makt~maktx
vbap~kwmeng
mara~mtart
vbap~werks
vbap~stlnr
vbap~sposn
vbap~vrkme
into corresponding fields of table itab_ord
from
vbak
inner join vbap on vbak~vbeln = vbap~vbeln
inner join makt on vbap~matnr = makt~matnr and makt~spras = sy-langu
inner join mara on vbap~matnr = mara~matnr
where vbak~vbeln in vbeln and
vbap~matnr in matnr and
vbak~vbtyp in vbtyp and
vbak~vkorg in vkorg and
vbak~vtweg in vtweg and
vbak~spart in spart and
vbak~vkgrp in vkgrp and
vbak~vdatu in vdatu.
loop at itab_ord.
if itab_ord-mtart = 'ZBZ'.
itab_ord-mat_t = '包装物'.
clear:vbap.
select single potx1 into itab_ord-potx1 from stpo where stlnr = itab_ord-stlnr and posnr = itab_ord-sposn.
else.
itab_ord-mat_t = '产品'.
select edatu into itab_ord-edatu from vbep where vbeln = itab_ord-vbeln and posnr = itab_ord-posnr order by edatu ascending.exit.endselect.
select single aufnr psmng wemng into (itab_ord-aufnr, itab_ord-psmng, itab_ord-qty_f) from afpo where kdauf = itab_ord-vbeln and kdpos = itab_ord-posnr and xloek <> 'X' group by aufnr psmng wemng .
"ITAB_ORD-QTY_W = ITAB_ORD-PSMNG - ITAB_ORD-QTY_F.
itab_ord-qty_w = itab_ord-kwmeng - itab_ord-qty_f.
endif.
perform str_trim changing itab_ord-vbeln.
perform str_trim changing itab_ord-kunnr.
perform str_trim changing itab_ord-matnr.
modify itab_ord.
clear:itab_ord.
endloop.
clear:itab_ord.
endform. " GET_DATA
*&---------------------------------------------------------------------*
*& Form ALV_GRID
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form alv_grid.
pgm = sy-repid.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
it_fieldcat = l_alv_filedcat
it_sort = gt_sort[]
"i_callback_top_of_page = 'USER_TOP_PAGE'
i_callback_user_command = 'USER_CLICK_EVENT'
is_layout = i_layout
i_callback_program = pgm
"i_grid_title = ''
"i_grid_settings = i_grid_settings
i_default = 'X'
i_save = 'A'
tables
t_outtab = itab_ord[]
exceptions
program_error = 1
others = 2.
endform. "ALV_GRID
*&---------------------------------------------------------------------*
*& Form USER_CLICK_EVENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
form user_click_event using r_ucomm like sy-ucomm
rs_selfield type slis_selfield.
endform. "USER_CLICK_EVENT_so
*&---------------------------------------------------------------------*
*& Form INITIAL_FIELDS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FNAME text
* -->TEXT text
* -->NO_ZERO text
* -->KEY text
* -->LENGTH text
*----------------------------------------------------------------------*
form initial_fields using fname type c
text type c
no_zero type c
key type c
length type p.
l_alv_filed-col_pos = col_pos + 1.
l_alv_filed-outputlen = length.
l_alv_filed-fieldname = fname.
l_alv_filed-seltext_m = text.
l_alv_filed-no_zero = no_zero.
l_alv_filed-key = key.
append l_alv_filed to l_alv_filedcat.
endform. "initial_fields
*&---------------------------------------------------------------------*
*& Form ALV_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form alv_layout.
"i_layout-colwidth_optimize = 'X'.
"i_layout-zebra = 'X'.
i_layout-no_min_linesize = 'X'.
i_layout-group_buttons = 'X'.
i_layout-totals_before_items = 'X'.
i_layout-totals_text = 'X'.
i_layout-subtotals_text = 'X'.
i_layout-group_change_edit = 'X'.
endform. "ALV_LAYOUT
*&---------------------------------------------------------------------*
*& Form ALV_DATA_GROUP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FIELDNAME text
*----------------------------------------------------------------------*
form alv_data_group using fieldname type c.
data ls_sort type slis_sortinfo_alv.
clear ls_sort.
ls_sort-fieldname = fieldname.
ls_sort-spos = 1.
ls_sort-up = 'X'.
ls_sort-subtot = 'X'.
ls_sort-group = 'X'.
append ls_sort to gt_sort.
endform. "ALV_DATA_GROUP
*&---------------------------------------------------------------------*
*& Form STR_TRIM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->V_STR text
*----------------------------------------------------------------------*
form str_trim changing v_str.
call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
exporting
input = v_str
importing
output = v_str.
condense v_str.
endform. "STR_TRIM