ITPub博客

首页 > 应用开发 > IT综合 > 根據選擇的物料顯示其特性值

根據選擇的物料顯示其特性值

原创 IT综合 作者:tolyhuang 时间:2007-12-07 11:36:34 0 删除 编辑
程式代碼:[@more@] report zrp_show_material_chara.

include .

tables: mara, makt, marc, ausp, kssk, klah, ksml, cabn, cabnt.

data: gt_fieldcat type lvc_t_fcat.
data: gp_table type ref to data.
field-symbols: type table.
data: g_title type string.

data: begin of wa_fieldlist,
atinn like ausp-atinn, "特性碼
atbez like cabnt-atbez, "特性名稱
atfor like cabn-atfor, "資料類型
anzst like cabn-anzst, "字元數
anzdz like cabn-anzdz, "小數位數
end of wa_fieldlist.

data: it_fieldlist like wa_fieldlist occurs 0 with header line.

data: ok_code like sy-ucomm,
g_container type scrfname value 'BCALV_GRID_DEMO_0100_CONT1',
grid1 type ref to cl_gui_alv_grid,
g_custom_container type ref to cl_gui_custom_container.


"ALV定義
type-pools: slis.
data: fieldcat type slis_t_fieldcat_alv,
gt_sort type slis_t_sortinfo_alv,
gs_sort type slis_sortinfo_alv,
fieldcat_ln like line of fieldcat,
event_exit type slis_t_event_exit,
event_exit_ln like line of event_exit,
sortcat type slis_t_sortinfo_alv,
sortcat_ln like line of sortcat,
eventcat type slis_t_event,
eventcat_ln like line of eventcat.

data: gt_list_top_of_page type slis_t_listheader.
data: gc_formname_top_of_page type slis_formname value 'ALV_TOP_OF_PAGE'.
data : ps_layout type slis_layout_alv.

data: begin of wa_itab,
matnr like mara-matnr, "物料編碼
maktx like makt-maktx, "物料短文說明
lvorm like mara-lvorm, "標識刪除物料
class like klah-class, "分類碼
atinn like ausp-atinn, "特性碼
atbez like cabnt-atbez, "特性說明
atfor like cabn-atfor, "類值型
atwrt like ausp-atwrt, "特性字串值
atflv like ausp-atflv, "物料數據值
zvalue like ausp-atwrt, "特性值
aterf like cabn-aterf, "必須輸入
msehi like cabn-msehi, "單位
end of wa_itab.

data: itab like wa_itab occurs 0 with header line.


selection-screen begin of block b2 with frame title t2.
parameter: p_opt1 radiobutton group grp1 default 'X',
p_opt2 radiobutton group grp1 .
selection-screen end of block b2.

selection-screen begin of block b1 with frame title t1.
select-options: v_matnr for mara-matnr,
v_werks for marc-werks,
v_mtart for mara-mtart,
v_matkl for mara-matkl,
v_bismt for mara-bismt,
v_atinn for ausp-atinn,
v_ersda for mara-ersda,
v_ernam for mara-ernam,
v_laeda for mara-laeda,
v_aenam for mara-aenam.
parameter: p_class like rmclm-class.
selection-screen end of block b1.

selection-screen begin of block b3 with frame title t3.
parameter: chk_a as checkbox default ''.
selection-screen end of block b3.

initialization.
t1 = '選擇物料條件'.
t2 = '選擇報表方式'.
t3 = '是否顯示刪除物料'.

authority-check object 'S_TCODE' id 'TCD' field 'ZMM12'.
if sy-subrc <> 0.
message s000(zmsg_wt_pub_01) with 'ZMM12'.
leave to screen 0.
endif.

start-of-selection.

if p_opt1 = 'X'.
if p_class = ''.
message '必須要輸入物料分類資料.' type 'S'.
else.
perform create_dynamic_itab.
call screen 100.
endif.
else.
perform get_data.
refresh gt_list_top_of_page[].
perform e04_comment_build .
clear fieldcat.
refresh fieldcat.
perform build_fieldcat.
perform build_sortcat.
perform build_eventcat.
perform alv_display.
sort itab by matnr.
endif.

*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_data .
data: fnumfieldvalue(15) type p decimals 3.

if p_class <> ''.
if v_werks <> ''.
select * into corresponding fields of table itab from mara as a
inner join makt as h on a~matnr = h~matnr and h~spras = sy-langu
inner join marc as j on j~matnr = a~matnr
inner join kssk as e on a~matnr = e~objek and e~klart = '001'
inner join klah as f on e~clint = f~clint
inner join ksml as g on e~clint = g~clint

inner join ausp as b on g~imerk = b~atinn and b~objek = e~objek and b~klart = '001'
inner join cabn as c on c~atinn = g~imerk
inner join cabnt as d on d~atinn = g~imerk and d~spras = sy-langu

where a~matnr in v_matnr and matkl in v_matkl and bismt in v_bismt and mtart in v_mtart
and ersda in v_ersda and ernam in v_ernam and laeda in v_laeda and aenam in v_aenam
and g~imerk in v_atinn
and j~werks in v_werks
and f~class = p_class
order by a~matnr g~posnr g~imerk b~adzhl.
else.
select * into corresponding fields of table itab from mara as a
inner join makt as h on a~matnr = h~matnr and h~spras = sy-langu
inner join kssk as e on a~matnr = e~objek and e~klart = '001'
inner join klah as f on e~clint = f~clint
inner join ksml as g on e~clint = g~clint

inner join ausp as b on g~imerk = b~atinn and b~objek = e~objek and b~klart = '001'
inner join cabn as c on c~atinn = g~imerk
inner join cabnt as d on d~atinn = g~imerk and d~spras = sy-langu

where a~matnr in v_matnr and matkl in v_matkl and bismt in v_bismt and mtart in v_mtart
and ersda in v_ersda and ernam in v_ernam and laeda in v_laeda and aenam in v_aenam
and g~imerk in v_atinn
and f~class = p_class
order by a~matnr g~posnr g~imerk b~adzhl.
endif.
else.
if v_werks <> ''.
select * into corresponding fields of table itab from mara as a
inner join makt as h on a~matnr = h~matnr and h~spras = sy-langu
inner join marc as j on j~matnr = a~matnr
inner join kssk as e on a~matnr = e~objek and e~klart = '001'
inner join klah as f on e~clint = f~clint
inner join ksml as g on e~clint = g~clint

inner join ausp as b on g~imerk = b~atinn and b~objek = e~objek and b~klart = '001'
inner join cabn as c on c~atinn = g~imerk
inner join cabnt as d on d~atinn = g~imerk and d~spras = sy-langu

where a~matnr in v_matnr and matkl in v_matkl and bismt in v_bismt and mtart in v_mtart
and ersda in v_ersda and ernam in v_ernam and laeda in v_laeda and aenam in v_aenam
and g~imerk in v_atinn
and j~werks in v_werks
order by a~matnr g~posnr g~imerk b~adzhl.
else.
select * into corresponding fields of table itab from mara as a
inner join makt as h on a~matnr = h~matnr and h~spras = sy-langu
inner join kssk as e on a~matnr = e~objek and e~klart = '001'
inner join klah as f on e~clint = f~clint
inner join ksml as g on e~clint = g~clint

inner join ausp as b on g~imerk = b~atinn and b~objek = e~objek and b~klart = '001'
inner join cabn as c on c~atinn = g~imerk
inner join cabnt as d on d~atinn = g~imerk and d~spras = sy-langu

where a~matnr in v_matnr and matkl in v_matkl and bismt in v_bismt and mtart in v_mtart
and ersda in v_ersda and ernam in v_ernam and laeda in v_laeda and aenam in v_aenam
and g~imerk in v_atinn
order by a~matnr g~posnr g~imerk b~adzhl.
endif.
endif.

delete adjacent duplicates from itab.

loop at itab into wa_itab.
if wa_itab-lvorm = 'X' and chk_a = ''.
delete itab index sy-tabix.
continue.
endif.
case wa_itab-atfor.
when 'CHAR'.
wa_itab-zvalue = wa_itab-atwrt.
when 'NUM' or 'CURR'.
fnumfieldvalue = wa_itab-atflv.
wa_itab-zvalue = fnumfieldvalue.
when 'DATE'.
data: fv like cawn-atflv.
data: dv like cawn-atwrt.
fv = wa_itab-atflv.

call function 'CTCV_CONVERT_FLOAT_TO_DATE'
exporting
float = fv
importing
date = dv.

concatenate dv+0(4) dv+4(2) dv+6(2) into wa_itab-zvalue separated by '-'.

when others.
wa_itab-zvalue = wa_itab-atflv.
endcase.
condense wa_itab-zvalue.
modify itab from wa_itab transporting zvalue.
endloop.
endform. " GET_DATA

*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form build_fieldcat .
data : col_pos type i value 0.

ps_layout-get_selinfos = 'X'.
ps_layout-colwidth_optimize = 'X'.
ps_layout-detail_popup = 'X'.
ps_layout-no_keyfix = ''.
ps_layout-colwidth_optimize = 'X'.
ps_layout-cell_merge = 'X'.

perform build_field using 'MATNR' '物料編碼' col_pos 'X'.
perform build_field using 'MAKTX' '物料說明' col_pos ''.
perform build_field using 'LVORM' '刪除標識' col_pos ''.
perform build_field using 'CLASS' '分類碼' col_pos ''.
perform build_field using 'ATINN' '特性碼' col_pos ''.
perform build_field using 'ATBEZ' '特性說明' col_pos ''.
perform build_field using 'ZVALUE' '特性值' col_pos ''.
perform build_field using 'ATFOR' '值類型' col_pos ''.
perform build_field using 'ATERF' '必須輸入' col_pos ''.
perform build_field using 'MSEHI' '單位' col_pos ''.

endform. " BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& Form BUILD_FIELD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_CFIELDNAME text
* -->P_CFIELDDESC text
*----------------------------------------------------------------------*
form build_field using p_cfieldname
p_cfielddesc col_pos ckey.
add 1 to col_pos.
clear fieldcat_ln.
fieldcat_ln-tabname = 'ITAB'.
fieldcat_ln-ref_fieldname = p_cfieldname.
fieldcat_ln-fieldname = p_cfieldname.
fieldcat_ln-key = ckey.
fieldcat_ln-no_zero = 'X'.
fieldcat_ln-seltext_s = p_cfielddesc.
fieldcat_ln-seltext_l = p_cfielddesc.
fieldcat_ln-seltext_m = fieldcat_ln-reptext_ddic = p_cfielddesc.
fieldcat_ln-col_pos = col_pos.
append fieldcat_ln to fieldcat.
endform. " BUILD_FIELD
*&---------------------------------------------------------------------*
*& Form BUILD_EVENTCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form build_eventcat .
data : ls_event type slis_alv_event.
call function 'REUSE_ALV_EVENTS_GET'
exporting
i_list_type = 0
importing
et_events = eventcat.

read table eventcat
with key name = slis_ev_top_of_page
into ls_event.
if sy-subrc = 0.
move gc_formname_top_of_page to ls_event-form.
append ls_event to eventcat.
endif.
endform. " BUILD_EVENTCAT
*&---------------------------------------------------------------------*
*& Form ALV_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form alv_display .
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
i_callback_program = 'ZRP_MM_W_1201'
i_callback_user_command = 'USER_COMMAND'
is_layout = ps_layout
it_fieldcat = fieldcat
i_save = 'A'
it_sort = gt_sort
it_events = eventcat
tables
t_outtab = itab
exceptions
program_error = 1
others = 2.
endform. " ALV_DISPLAY

*&---------------------------------------------------------------------*
*& Form E04_COMMENT_BUILD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form e04_comment_build .
data : list_line like line of gt_list_top_of_page.
data: i_count type i, c_count(5) type c.
list_line-typ = 'H'.
list_line-key = ''.

describe table itab lines i_count.
c_count = i_count.

concatenate '符合條件的物料特性清單, 記錄數:' c_count into list_line-info.

append list_line to gt_list_top_of_page.

endform. " E04_COMMENT_BUILD

*&--------------------------------------------------------------------*
*& Form alv_top_of_page
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
form alv_top_of_page.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = gt_list_top_of_page.
* I_LOGO = 'ZUCP' .
* I_END_OF_LIST_GRID = 'X'.

endform. "ALV_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*& Form BUILD_SORTCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form build_sortcat .
clear gs_sort.
gs_sort-fieldname = 'MATNR'.
gs_sort-spos = '1'.
gs_sort-up = 'X'.
append gs_sort to gt_sort.

clear gs_sort.
gs_sort-fieldname = 'MAKTX'.
gs_sort-spos = '2'.
gs_sort-up = 'X'.
append gs_sort to gt_sort.

clear gs_sort.
gs_sort-fieldname = 'LVORM'.
gs_sort-spos = '3'.
gs_sort-up = 'X'.
append gs_sort to gt_sort.

clear gs_sort.
gs_sort-fieldname = 'CLASS'.
gs_sort-spos = '4'.
gs_sort-up = ''.
gs_sort-down = ''.
append gs_sort to gt_sort.
endform. " BUILD_SORTCAT

*&---------------------------------------------------------------------*
*& Form USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->UCOMM text
* -->SELFIELD text
*----------------------------------------------------------------------*
form user_command using ucomm like sy-ucomm
selfield type slis_selfield.
read table itab index selfield-tabindex.
check sy-subrc = 0.
case ucomm.
when '&IC1'.
case selfield-sel_tab_field.
when 'ITAB-MATNR'.
set parameter id 'MAT' field itab-matnr.
call transaction 'MM03' and skip first screen.
endcase.
when 'PRI' .
endcase.
endform. "USER_COMMAND
*&---------------------------------------------------------------------*
*& Form create_dynamic_itab
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form create_dynamic_itab .
perform fieldcat_build.

call method cl_alv_table_create=>create_dynamic_table
exporting
it_fieldcatalog = gt_fieldcat
importing
ep_table = gp_table.

assign gp_table->* to .

perform fill_table.

endform. " create_dynamic_itab
*&---------------------------------------------------------------------*
*& Form fieldcat_build
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form fieldcat_build .
data: ls_fieldcat type lvc_s_fcat.
data: ctype(1) type c.

select d~atinn d~atbez c~atfor c~anzst c~anzdz b~posnr
into corresponding fields of table it_fieldlist from klah as a
inner join ksml as b on a~clint = b~clint
inner join cabn as c on b~imerk = c~atinn
inner join cabnt as d on d~atinn = c~atinn and d~spras = sy-langu
where class = p_class
order by b~posnr.

clear gt_fieldcat.

ls_fieldcat-fieldname = 'MATNR'.
ls_fieldcat-key = 'X'.
ls_fieldcat-col_opt = 'X'.
* ls_fieldcat-no_zero = 'X'.
ls_fieldcat-convexit = 'MATN1'.
ls_fieldcat-inttype = 'C'.
ls_fieldcat-intlen = 18.
ls_fieldcat-coltext = '物料碼'.
ls_fieldcat-outputlen = 18.
append ls_fieldcat to gt_fieldcat.

ls_fieldcat-fieldname = 'MAKTX'.
ls_fieldcat-key = ''.
ls_fieldcat-col_opt = 'X'.
ls_fieldcat-inttype = 'C'.
ls_fieldcat-intlen = 40.
ls_fieldcat-coltext = '物料說明'.
ls_fieldcat-outputlen = 40.
append ls_fieldcat to gt_fieldcat.

ls_fieldcat-fieldname = 'LVORM'.
ls_fieldcat-key = ''.
ls_fieldcat-col_opt = 'X'.
ls_fieldcat-inttype = 'C'.
ls_fieldcat-intlen = 1.
ls_fieldcat-coltext = '刪除標識'.
ls_fieldcat-outputlen = 1.
append ls_fieldcat to gt_fieldcat.

loop at it_fieldlist into wa_fieldlist.
case wa_fieldlist-atfor.
when 'DATE'.
ctype = 'D'.
when others.
ctype = 'C'.
endcase.

ls_fieldcat-fieldname = wa_fieldlist-atinn.
ls_fieldcat-key = ''.
ls_fieldcat-col_opt = 'X'.
ls_fieldcat-inttype = ctype.
ls_fieldcat-intlen = wa_fieldlist-anzst.
ls_fieldcat-coltext = wa_fieldlist-atbez.
ls_fieldcat-decimals_o = wa_fieldlist-anzdz.
ls_fieldcat-outputlen = wa_fieldlist-anzst.
append ls_fieldcat to gt_fieldcat.
endloop.

endform. " fieldcat_build
*&---------------------------------------------------------------------*
*& Form fill_table
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form fill_table .
data: oldma like mara-matnr.
data: l_row type sy-index, cfield(10) type c, cvalue(33) type c.
field-symbols: .
field-symbols: .


perform get_data.

assign local copy of initial line of to .
clear .
loop at itab into wa_itab.
if oldma <> wa_itab-matnr.
if oldma <> ''.
append to .
clear .
endif.
oldma = wa_itab-matnr.
assign component 'MATNR' of structure to .
= wa_itab-matnr.
assign component 'MAKTX' of structure to .
= wa_itab-maktx.
assign component 'LVORM' of structure to .
= wa_itab-lvorm.
endif.
cfield = wa_itab-atinn.
assign component cfield of structure to .

clear cvalue.
if = ''.
concatenate wa_itab-zvalue ' ' wa_itab-msehi into cvalue.
else.
concatenate ';' wa_itab-zvalue ' ' wa_itab-msehi into cvalue.
endif.
condense cvalue.

= cvalue.
endloop.
if sy-subrc = 0.
append to .
endif.

endform. " fill_table

*----------------------------------------------------------------------*
* MODULE pbo OUTPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
module pbo output.
data: irecordcount type i, crecordcount(5) type c.
set pf-status 'MAIN100'.
set titlebar 'TITLE0100'.
irecordcount = lines( ).
crecordcount = irecordcount.
condense crecordcount.
clear g_title.
concatenate '符合分類: ' p_class ' 的物料記錄總數: ' crecordcount into g_title.

data: t_is_variant type disvariant.
t_is_variant-report = 'ZRP_MM_W_1201'.

if g_custom_container is initial.
create object g_custom_container
exporting container_name = g_container.
create object grid1
exporting i_parent = g_custom_container.
call method grid1->set_table_for_first_display
exporting
i_save = 'X'
is_variant = t_is_variant
changing
it_fieldcatalog = gt_fieldcat
it_outtab = .

endif.
endmodule. "pbo OUTPUT
*---------------------------------------------------------------------*
* MODULE PAI INPUT *
*---------------------------------------------------------------------*
module pai input.
case ok_code.
when 'EXIT' or 'BACK' or 'CANCEL'.
perform exit_program.
when others.
* do nothing
endcase.
clear ok_code.
endmodule. "pai INPUT

*&---------------------------------------------------------------------*
*& Form exit_program
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form exit_program.
call method g_custom_container->free.
call method cl_gui_cfw=>flush.
leave to screen 0.
endform. "exit_program

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9437124/viewspace-989521/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-07-22

  • 博文量
    268
  • 访问量
    1413843