一、报表逻辑






二、报表界面



三、报表代码
*&———————————————————————*
*& Report ZRPPP_0019
*&———————————————————————*
*&
*&———————————————————————*
REPORT zrppp_0019.
TABLES: marc, mara,plaf .
*INCLUDE <color>.
DATA: gr_table TYPE REF TO cl_salv_table,
gr_layout TYPE REF TO cl_salv_layout,
gs_program TYPE salv_s_layout_key,
gr_columns TYPE REF TO cl_salv_columns_table,
gr_column TYPE REF TO cl_salv_column_table,
gr_display TYPE REF TO cl_salv_display_settings,
gt_s_color TYPE lvc_t_scol,
gs_s_color TYPE lvc_s_scol.
TYPES: BEGIN OF ty_tab ,
znum TYPE char5,
werks TYPE marc-werks,
matnr TYPE marc-matnr,
maktx TYPE makt-maktx,
berid TYPE plaf-berid,
dispo TYPE plaf-dispo,
mtart TYPE mara-mtart,
plnmg TYPE pbed-plnmg,
zmeng TYPE vbap-zmeng,
bdmng TYPE resb-bdmng,
bdmng1 TYPE resb-bdmng,
zsum TYPE menge_d,
labst TYPE mard-labst,
lblab TYPE mslb-lblab,
gamng TYPE afko-gamng,
gsmng TYPE plaf-gsmng,
zsum2 TYPE menge_d,
pr_qty TYPE menge_d,
po_qty TYPE menge_d,
zsum1 TYPE menge_d,
labst1 TYPE mard-labst,
plnmg_01 TYPE pbed-plnmg, “计划数量
“wpc新增字段
zz_xbc TYPE menge_d, “线边仓
zz_dc TYPE menge_d, “大仓
zz_wip TYPE menge_d, “WIP
zz_iqc TYPE menge_d, “IQC
zz_opo TYPE menge_d, “OPO
zz_wz TYPE menge_d, “未转
zz_so TYPE menge_d, “销售未清
END OF ty_tab .
DATA:BEGIN OF gt_tab OCCURS 0 .
INCLUDE TYPE ty_tab .
DATA:
zflag TYPE C,
END OF gt_tab .
DATA:BEGIN OF gw_info.
DATA: ztype TYPE bapi_mtype,
zmsg TYPE bapi_msg,
zauth_wrk TYPE char1, “工厂权限
END OF gw_info .
DATA:gv_flag TYPE C .
DATA:del_flag TYPE C .
SELECTION-SCREEN BEGIN OF BLOCK part1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
s_werks FOR marc-werks NO INTERVALS OBLIGATORY MEMORY ID wrk,
s_matnr FOR marc-matnr ,
s_mtart FOR mara-mtart ,
s_dispo FOR marc-dispo ,
s_berid FOR plaf-berid NO INTERVALS NO-EXTENSION .
SELECTION-SCREEN SKIP 1 .
PARAMETERS:chk AS CHECKBOX DEFAULT 'X' .
SELECTION-SCREEN END OF BLOCK part1.
CLASS l_cl_handle_events DEFINITION.
PUBLIC SECTION.
METHODS: on_user_command FOR EVENT added_function OF cl_salv_events_table
IMPORTING e_salv_function.
METHODS: on_link_click FOR EVENT link_click OF cl_salv_events_table
IMPORTING row column.
ENDCLASS.
CLASS l_cl_handle_events IMPLEMENTATION.
METHOD on_user_command.
PERFORM handle_user_command USING e_salv_function.
ENDMETHOD.
METHOD on_link_click.
PERFORM handle_link_click USING row column.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
PERFORM frm_check_input .
CHECK gw_info-ztype NE 'E' .
PERFORM frm_get_data .
PERFORM frm_show_alv .
*&———————————————————————*
*& Form frm_get_data
*&———————————————————————*
*& text
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM frm_get_data .
SELECT *
* marc~werks,
* marc~matnr,
* plaf~berid,
* marc~dispo,
* mara~mtart
INTO CORRESPONDING FIELDS OF TABLE @gt_tab
FROM marc INNER JOIN mara ON marc~matnr = mara~matnr
* LEFT JOIN plaf ON marc~werks = plaf~pwwrk AND marc~matnr = plaf~matnr
WHERE werks IN @s_werks AND marc~matnr IN @s_matnr
AND mara~mtart IN @s_mtart AND marc~dispo IN @s_dispo .
* AND plaf~berid IN @s_berid .
CHECK NOT gt_tab[] IS INITIAL.
* BREAK guoxiongjie .
SELECT pwwrk, matnr, berid INTO TABLE @DATA(lt_plaf)
FROM plaf FOR ALL ENTRIES IN @gt_tab
WHERE pwwrk = @gt_tab-werks AND matnr = @gt_tab-matnr AND berid IN @s_berid.
* RANGES:r_matnr FOR makt-matnr .
TYPES:BEGIN OF ty_mat,
werks TYPE werks_d,
matnr TYPE matnr,
END OF ty_mat .
DATA:lt_mat TYPE TABLE OF ty_mat .
LOOP AT gt_tab.
READ TABLE lt_plaf INTO DATA(lw_plaf) WITH KEY pwwrk = gt_tab-werks matnr = gt_tab-matnr .
IF sy-subrc NE 0 AND NOT s_berid[] IS INITIAL..
gt_tab-zflag = 'X' .
MODIFY gt_tab TRANSPORTING zflag .
CHECK 1 = 2 .
ENDIF.
gt_tab-berid = lw_plaf-berid .
MODIFY gt_tab TRANSPORTING berid .
* INSERT VALUE #( sign = 'I' option = 'EQ' low = gt_tab-matnr ) INTO TABLE r_matnr.
INSERT VALUE #( werks = gt_tab-werks matnr = gt_tab-matnr ) INTO TABLE lt_mat.
ENDLOOP.
DELETE ADJACENT DUPLICATES FROM lt_mat .
DELETE gt_tab WHERE zflag = 'X' .
* SELECT matnr, maktx INTO TABLE @DATA(lt_makt) FROM makt WHERE matnr IN @r_matnr AND spras = @sy-langu .
SELECT makt~matnr, maktx FROM makt INNER JOIN @lt_mat AS a ON makt~matnr = a~matnr WHERE spras = @sy-langu INTO TABLE @DATA(lt_makt) .
* 物料= MSLB-MATNR、工厂= MSLB- WERKS,取MSLB-LABST
* SELECT werks,matnr,SUM( lblab ) AS sum_qty INTO TABLE @DATA(lt_mslb) FROM mslb WHERE werks = @s_werks-low AND matnr IN @r_matnr
* GROUP BY werks, matnr.
SELECT mslb~werks,mslb~matnr,SUM( lblab ) AS sum_qty FROM mslb INNER JOIN @lt_mat AS a ON mslb~matnr = a~matnr WHERE mslb~werks IN @s_werks
GROUP BY mslb~werks, mslb~matnr INTO TABLE @DATA(lt_mslb) .
“库存数量
DATA: wheresql TYPE TABLE OF edpline .
RANGES: r_lgort FOR mdlg-lgort.
APPEND 'mard~werks IN @s_werks ' TO wheresql .
SELECT CAST( 'I' AS CHAR( 1 ) ) AS SIGN,CAST( 'EQ' AS CHAR( 2 ) ) AS option, lgort AS low
INTO TABLE @r_lgort FROM mdlg WHERE berid LIKE '%ND' AND werks IN @s_werks .
IF sy-subrc EQ 0.
APPEND 'AND lgort NOT IN @r_lgort' TO wheresql .
ENDIF.
SELECT mard~werks ,mard~matnr, SUM( labst ) AS labst
FROM mard INNER JOIN @lt_mat AS a ON mard~matnr = a~matnr AND mard~werks = a~werks
WHERE (wheresql) GROUP BY mard~werks, mard~matnr
INTO TABLE @DATA(lt_mard) .
“线别仓
IF gv_flag = 'X'.
BREAK guoxiongjie .
DATA: r_matnr1 TYPE RANGE OF resb-matnr.
r_matnr1 = VALUE #( FOR wa IN gt_tab ( SIGN = 'I' option = 'EQ' low = wa-matnr ) ).
SORT r_matnr1 .
DELETE ADJACENT DUPLICATES FROM r_matnr1[].
APPEND 'AND LGORT LIKE ''8%'' ' TO wheresql .
SELECT mard~werks, mard~matnr, SUM( labst ) AS labst
FROM mard INNER JOIN @lt_mat AS a ON mard~matnr = a~matnr AND mard~werks = a~werks
WHERE (wheresql) GROUP BY mard~werks, mard~matnr
INTO TABLE @DATA(lt_mard_xb) .
“已审批未转PO的PR数据
SELECT werks ,matnr, SUM( menge ) AS menge
FROM eban
WHERE
frgzu EQ 'X' AND
bsmng EQ 0 AND
loekz EQ ' ' AND
* statu EQ 'N'
werks IN @s_werks AND
matnr IN @r_matnr1
GROUP BY werks, matnr
INTO TABLE @DATA(lt_eban).
“在制品数量
FIELD-SYMBOLS: <lt_data> TYPE TABLE .
DATA: ls_data TYPE REF TO DATA .
TYPES: BEGIN OF ty_tab ,
dwerk TYPE werks_d,
werks TYPE ekpo-werks,
matnr1 TYPE afpo-matnr,
zenmng2 TYPE resb-enmng,
matnr TYPE afpo-matnr,
zdjsl TYPE menge_d,
END OF ty_tab .
DATA :lt_tab TYPE TABLE OF ty_tab.
DATA :lt_tab_dj TYPE TABLE OF ty_tab.
DATA :lt_tab_tmp TYPE TABLE OF ty_tab.
CLEAR lt_tab[] .
SELECT werks FROM t001w WHERE werks IN @s_werks
INTO TABLE @DATA(lt_wrk) .
LOOP AT lt_wrk INTO DATA(lw_wrk).
CALL METHOD cl_salv_bs_runtime_info=>set
EXPORTING
display = abap_false
metadata = abap_false
DATA = abap_true.
SUBMIT zrppp_0015 ” Tcode ZPP015.
WITH s_dwerk = lw_wrk-werks “s_werks-low
WITH s_matnr1 IN r_matnr1
AND RETURN.
TRY.
cl_salv_bs_runtime_info=>get_data_ref(
IMPORTING r_data = ls_data ).
ASSIGN ls_data->* TO <lt_data>.
CATCH cx_salv_bs_sc_runtime_info.
* MESSAGE 'Unable to retrieve ALV data' TYPE 'E'.
ENDTRY.
cl_salv_bs_runtime_info=>clear_all( ).
IF <lt_data>[] IS NOT INITIAL .
CLEAR lt_tab_tmp[].
MOVE-CORRESPONDING <lt_data>[] TO lt_tab_tmp[] .
APPEND LINES OF lt_tab_tmp TO lt_tab .
ENDIF.
ENDLOOP.
“IQC待检
CALL METHOD cl_salv_bs_runtime_info=>set
EXPORTING
display = abap_false
metadata = abap_false
DATA = abap_true.
SUBMIT zrpmm_0009 ” Tcode ZPP015.
WITH s_werks IN s_werks
WITH s_matnr IN r_matnr1
AND RETURN.
TRY.
cl_salv_bs_runtime_info=>get_data_ref(
IMPORTING r_data = ls_data ).
ASSIGN ls_data->* TO <lt_data>.
CATCH cx_salv_bs_sc_runtime_info.
* MESSAGE 'Unable to retrieve ALV data' TYPE 'E'.
ENDTRY.
cl_salv_bs_runtime_info=>clear_all( ).
IF <lt_data>[] IS NOT INITIAL .
CLEAR lt_tab_tmp[].
MOVE-CORRESPONDING <lt_data>[] TO lt_tab_tmp[] .
APPEND LINES OF lt_tab_tmp TO lt_tab_dj .
ENDIF.
ENDIF.
DATA: lt_mrp_items LIKE bapi_mrp_items OCCURS 0 WITH HEADER LINE,
lt_lines LIKE bapi_mrp_ind_lines OCCURS 0 WITH HEADER LINE,
lt_lines_po LIKE bapi_mrp_ind_lines OCCURS 0 WITH HEADER LINE,
lv_row TYPE I,
lv_matnr TYPE matnr18.
DATA: lv_percentage TYPE I VALUE 0,
lv_lines TYPE I.
lv_lines = LINES( gt_tab ) .
SELECT DISTINCT
werzg AS werks,
ortzg AS lgort
FROM mdlv
WHERE berty EQ '02' AND werzg IN @s_werks
INTO TABLE @DATA(t_lgort_nd) .
APPEND 'IEQ9999' TO t_lgort_nd .
LOOP AT gt_tab ASSIGNING FIELD-SYMBOL(<sy_tab>).
lv_matnr = <sy_tab>-matnr .
ADD 1 TO lv_percentage .
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = lv_percentage
TEXT = '数据处理中… ' && lv_row && ' / ' && lv_lines.
IF lv_percentage = 100 .
lv_percentage = 0 .
ENDIF.
IF <sy_tab>-mtart = 'Z011'.”20220505_LYS
SELECT SINGLE SUM( plnmg ) INTO <sy_tab>-plnmg_01 FROM pbim JOIN pbed ON pbim~bdzei = pbed~bdzei WHERE matnr = <sy_tab>-matnr AND werks = <sy_tab>-werks.
ENDIF.
READ TABLE lt_makt INTO DATA(lw_makt) WITH KEY matnr = <sy_tab>-matnr .
IF sy-subrc EQ 0.
<sy_tab>-maktx = lw_makt-maktx .
ENDIF.
CLEAR:lt_mrp_items,lt_mrp_items[].
CALL FUNCTION 'BAPI_MATERIAL_STOCK_REQ_LIST'
EXPORTING
material = lv_matnr
plant = <sy_tab>-werks
mrp_area = <sy_tab>-berid
get_item_details = 'X'
get_ind_lines = 'X'
get_total_lines = ''
* IMPORTING
* MRP_LIST =
* MRP_CONTROL_PARAM =
* MRP_STOCK_DETAIL =
* RETURN =
TABLES
* mrp_items = lt_mrp_items
mrp_ind_lines = lt_lines
* MRP_TOTAL_LINES =
* EXTENSIONOUT =
.
CLEAR del_flag .
“需求:计划独立需求
PERFORM frm_qty_total TABLES lt_lines USING '2' '05' 'PP' '-' '' CHANGING <sy_tab>-plnmg .
<sy_tab>-plnmg = 0 – <sy_tab>-plnmg .
“需求:标准订单
PERFORM frm_qty_total TABLES lt_lines USING '2' '03/05' 'VC/PR/RP/VJ/U1' '-' '' CHANGING <sy_tab>-zmeng .
<sy_tab>-zmeng = 0 – <sy_tab>-zmeng .
SELECT DISTINCT
CAST( 'I' AS CHAR( 1 ) ) AS SIGN ,
CAST( 'EQ' AS CHAR( 2 ) ) AS option ,
a~lgort AS low,
CAST( @space AS CHAR( 4 ) ) AS high
FROM @t_lgort_nd AS a
WHERE a~werks = @<sy_tab>-werks
INTO TABLE @DATA(r_lgort_nd) .
DELETE lt_lines WHERE storage_loc IN r_lgort_nd .
“需求:预留
PERFORM frm_qty_total TABLES lt_lines USING '2/0' '07/04/08/02' 'SB/BB/SH' '-/B' '' CHANGING <sy_tab>-bdmng .
<sy_tab>-bdmng = 0 – <sy_tab>-bdmng .
“需求:生产工单需求
PERFORM frm_qty_total TABLES lt_lines USING '2' '04' 'AR' '-' '' CHANGING <sy_tab>-bdmng1 .
<sy_tab>-bdmng1 = 0 – <sy_tab>-bdmng1 .
“需求:小计
<sy_tab>-zsum = <sy_tab>-plnmg + <sy_tab>-zmeng + <sy_tab>-bdmng + <sy_tab>-bdmng1 .
“供给:O库存(供应商)
READ TABLE lt_mslb INTO DATA(lw_mslb) WITH KEY werks = <sy_tab>-werks matnr = <sy_tab>-matnr .
IF sy-subrc EQ 0.
<sy_tab>-lblab = lw_mslb-sum_qty .
ENDIF.
“供给:当前可用库存(SW)
* PERFORM frm_qty_total TABLES lt_lines USING '0' '01' 'WB' 'B' '' CHANGING <sy_tab>-labst .
* <sy_tab>-labst = <sy_tab>-labst – <sy_tab>-lblab .
READ TABLE lt_mard INTO DATA(lw_mard) WITH KEY werks = <sy_tab>-werks matnr = <sy_tab>-matnr .
IF sy-subrc EQ 0 .
<sy_tab>-labst = lw_mard-labst .
ENDIF.
“供给:生产工单
PERFORM frm_qty_total TABLES lt_lines USING '1' '03' 'FE' '+' '' CHANGING <sy_tab>-gamng .
“供给:计划订单
PERFORM frm_qty_total TABLES lt_lines USING '1' '07' 'PA' '+' '' CHANGING <sy_tab>-gsmng .
“小计
<sy_tab>-zsum2 = <sy_tab>-gamng + <sy_tab>-gsmng .
“供给:采购申请
PERFORM frm_qty_total TABLES lt_lines USING '1' '06' 'BA' '+' '' CHANGING <sy_tab>-pr_qty .
“供给:采购订单
CLEAR lt_lines_po[].
MOVE-CORRESPONDING lt_lines[] TO lt_lines_po[].
* DELETE lt_lines_po WHERE sortind_01 NE '1' OR sortind_02 NE '04' OR mrp_element_ind NE 'BE' OR plus_minus NE '+'.
* LOOP AT lt_lines_po INTO DATA(lw_lines_po).
* DATA(lv_po) = lw_lines_po-elemnt_data+0(10) .
* SELECT SINGLE bsart INTO @DATA(lv_bsart) FROM ekko WHERE ebeln = @lv_po.
* IF lv_bsart = 'Z002'. “制样PO
* DELETE lt_lines_po WHERE elemnt_data = lw_lines_po-elemnt_data .
* ENDIF.
* ENDLOOP.
PERFORM frm_qty_total TABLES lt_lines_po USING '1' '03/04/05' 'BE/VT/U1' '+' '' CHANGING <sy_tab>-po_qty .
* PERFORM frm_qty_total TABLES lt_lines_po USING '1' '04' 'BE' '+' '' CHANGING <sy_tab>-po_qty .
“供给:小计
<sy_tab>-zsum1 = <sy_tab>-labst + <sy_tab>-gamng + <sy_tab>-gsmng + <sy_tab>-pr_qty + <sy_tab>-po_qty + <sy_tab>-lblab .
“预计可用库存
<sy_tab>-labst1 = <sy_tab>-zsum1 – <sy_tab>-zsum .
IF gv_flag = 'X' .
READ TABLE lt_mard_xb INTO lw_mard WITH KEY werks = <sy_tab>-werks matnr = <sy_tab>-matnr .
IF sy-subrc EQ 0 .
“线边仓库库存
<sy_tab>-zz_xbc = lw_mard-labst .
ENDIF.
“大仓库存
<sy_tab>-zz_dc = <sy_tab>-labst – <sy_tab>-zz_xbc .
“WIP
SELECT SUM( a~zenmng2 ) AS menge FROM @lt_tab AS a WHERE matnr1 = @<sy_tab>-matnr AND dwerk = @<sy_tab>-werks
INTO @<sy_tab>-zz_wip .
“IQC检验数量
SELECT SUM( a~zdjsl ) AS menge FROM @lt_tab_dj AS a WHERE matnr = @<sy_tab>-matnr AND werks = @<sy_tab>-werks
INTO @<sy_tab>-zz_iqc .
“OPO
<sy_tab>-zz_opo = <sy_tab>-po_qty – <sy_tab>-zz_iqc .
“未转
SELECT SUM( a~menge ) AS menge FROM @lt_eban AS a WHERE matnr = @<sy_tab>-matnr AND werks = @<sy_tab>-werks
INTO @<sy_tab>-zz_wz .
“销售未清数量
<sy_tab>-zz_so = <sy_tab>-zmeng – <sy_tab>-labst .
ENDIF.
IF <sy_tab>-plnmg = 0 AND <sy_tab>-zmeng = 0 AND <sy_tab>-bdmng = 0 AND
<sy_tab>-zsum = 0 AND <sy_tab>-labst = 0 AND <sy_tab>-lblab = 0 AND
<sy_tab>-gamng = 0 AND <sy_tab>-gsmng = 0 AND <sy_tab>-zsum1 = 0 AND
<sy_tab>-labst1 = 0 AND chk = 'X'.
<sy_tab>-zflag = 'X' .
IF chk = 'X'AND <sy_tab>-zz_wip > 0 .
<sy_tab>-zflag = '' .
ENDIF.
IF <sy_tab>-zflag = 'X' .
CHECK 1 = 2 .
ENDIF.
ENDIF.
ADD 1 TO lv_row .
<sy_tab>-znum = lv_row .
* CLEAR <sy_tab> .
ENDLOOP.
IF chk = 'X'.
DELETE gt_tab WHERE zflag = 'X' .
ENDIF.
lv_lines = LINES( gt_tab ) .
MESSAGE '已查询数据行' && lv_lines TYPE 'S' .
ENDFORM.
*&———————————————————————*
*& Form frm_show_alv
*&———————————————————————*
*& text
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM frm_show_alv .
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = gt_tab[]
).
CATCH cx_salv_msg.
ENDTRY.
gr_columns = gr_table->get_columns( ).
gr_columns->set_optimize( 'X' ).
DEFINE mcr_undisplay.
TRY.
gr_column ?= gr_columns->get_column( &1 ).
gr_column->set_visible( cl_salv_column_table=>false ).
gr_column->set_technical( 'X' ) .
CATCH cx_salv_not_found .
ENDTRY.
END-OF-DEFINITION.
DATA: lv_datatype TYPE datatype_d,
s TYPE scrtext_s,
l TYPE scrtext_l,
M TYPE scrtext_m.
DEFINE mcr_setcoltext.
TRY.
s = &2 .
l = &2 .
M = &2 .
gr_column ?= gr_columns->get_column( &1 ).
gr_column->set_short_text( s ).
gr_column->set_long_text( l ).
gr_column->set_medium_text( M ).
lv_datatype = gr_column->get_ddic_datatype( ) .
IF lv_datatype = 'QUAN' OR lv_datatype = 'CURR'
OR gr_column->get_ddic_inttype( ) = 'P'.
gr_column->set_edit_mask( '==ZZERO' ).
ENDIF.
CATCH cx_salv_not_found .
ENDTRY.
END-OF-DEFINITION.
DEFINE mcr_zzero.
TRY.
gr_column ?= gr_columns->get_column( &1 ).
gr_column->set_edit_mask( '==ZZERO' ).
CATCH cx_salv_not_found .
ENDTRY.
END-OF-DEFINITION.
DATA: COLOR TYPE lvc_s_colo,
c_col TYPE char3,
c1 TYPE C,
c2 TYPE C,
c3 TYPE C.
DEFINE mcr_color.
TRY.
c_col = &2 .
c1 = c_col+0(1).
c2 = c_col+1(1).
c3 = c_col+2(1).
COLOR-col = c1.
COLOR-int = c2.
COLOR-inv = c3.
gr_column ?= gr_columns->get_column( &1 ).
gr_column->set_color( COLOR ).
CATCH cx_salv_not_found .
ENDTRY.
END-OF-DEFINITION.
mcr_undisplay:'ZFLAG'.
IF gv_flag = '' .
mcr_undisplay: 'ZZ_XBC','ZZ_DC','ZZ_WIP','ZZ_IQC','ZZ_OPO','ZZ_WZ','ZZ_SO' .
ELSE.
mcr_setcoltext:
'ZZ_XBC' '线边仓库库存',
'ZZ_DC' '大仓库存',
'ZZ_WIP' 'WIP',
'ZZ_IQC' 'IQC检验数量',
'ZZ_OPO' 'OPO',
'ZZ_WZ' '未转',
'ZZ_SO' '销售未清数量'.
mcr_color:
'ZZ_XBC' '410',
'ZZ_DC' '410',
'ZZ_WIP' '410',
'ZZ_IQC' '410',
'ZZ_OPO' '410',
'ZZ_WZ' '410',
'ZZ_SO' '410'.
ENDIF.
mcr_setcoltext:
'ZNUM' '序号',
'WERKS' '工厂',
'MATNR' '物料编码',
'MAKTX' '物料描述',
'BERID' 'MRP范围',
'DISPO' 'MRP控制者',
'MTART' '物料类别',
'PLNMG_01' '预测数量',
'PLNMG' '需求:计划独立需求',
'ZMENG' '需求:标准订单',
'BDMNG' '需求:其它预留',
'BDMNG1' '需求:生产工单预留',
'ZSUM' '需求:小计',
'LABST' '供给:当前可用库存(SW)',
'LBLAB' '供给:O库存(供应商)',
'GAMNG' '供给:生产订单',
'GSMNG' '供给:计划订单',
'ZSUM2' '小计(生产工单+计划订单)',
'PR_QTY' '供给:采购申请',
'PO_QTY' '供给:采购订单',
'ZSUM1' '供给:小计',
'LABST1' '预计可用库存'.
* mcr_zzero: 'PLNMG', 'ZMENG','BDMNG','ZSUM','LABST' ,'LBLAB' ,'GAMNG' ,'GSMNG' ,'ZSUM1','LABST1'.
mcr_color: 'PLNMG' '300',
'ZMENG' '300',
'BDMNG' '300',
'BDMNG1' '300',
'ZSUM' '300',
'LABST' '500',
'LBLAB' '500',
'GAMNG' '500',
'GSMNG' '500',
'PR_QTY' '500',
'PO_QTY' '500',
'ZSUM1' '500',
'PLNMG_01' '500' .
“热点
TRY.
gr_column ?= gr_columns->get_column( 'MATNR' ).
gr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
CATCH cx_salv_not_found .
ENDTRY.
TRY.
DATA lv_status TYPE sypfkey .
lv_status = 'STANDARD' .
CALL METHOD gr_table->set_screen_status
EXPORTING
REPORT = sy-repid
pfstatus = lv_status
set_functions = gr_table->c_functions_all.
CATCH cx_sy_arithmetic_error INTO DATA(exc).
ENDTRY.
* TRY.
* gr_columns->set_color_column( 'T_COLOR' ).
* CATCH cx_salv_data_error.
* ENDTRY.
gr_layout = gr_table->get_layout( ).
gs_program-REPORT = sy-repid.
gr_layout->set_key( gs_program ).
gr_layout->set_save_restriction( cl_salv_layout=>restrict_none ).
gr_layout->set_default( 'X' ).
“=====获取事件对象
DATA: lr_event TYPE REF TO cl_salv_events_table.
lr_event = gr_table->get_event( ).
“=====事件注册
DATA: lr_handle_event TYPE REF TO l_cl_handle_events.
CREATE OBJECT lr_handle_event.
SET HANDLER lr_handle_event->on_link_click FOR lr_event.
SET HANDLER lr_handle_event->on_user_command FOR lr_event.
gr_table->display( ).
ENDFORM.
*&———————————————————————*
*& Form frm_check_input
*&———————————————————————*
*& text
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM frm_check_input .
* “判断权限
* gw_info-zauth_wrk = 'X'.
* AUTHORITY-CHECK OBJECT 'ZAOPP_WRK'
* ID 'ZWERKS' FIELD s_werks-low
* ID 'ZACTIVE' FIELD 'X'.
* IF sy-subrc <> 0.
* gw_info-ztype = 'E'.
* gw_info-zmsg = '您没有此工厂的BOM查询权限' .
* gw_info-zauth_wrk = ''.
* ENDIF.
CLEAR gv_flag .
SELECT SINGLE * FROM ztbc_wrk_config WHERE werks IN @s_werks AND cfg_type = 'A6' AND active = 'X'
INTO @DATA(lw_config).
IF sy-subrc EQ 0.
gv_flag = 'X' .
ENDIF.
ENDFORM.
*&———————————————————————*
*& Form frm_qty_total
*&———————————————————————*
*& text
*&———————————————————————*
*& –> LT_LINES
*& –> P_
*& –> P_
*& –> P_
*& –> P_
*& –> P_
*& <– <SY_TAB>_PLNMG
*&———————————————————————*
FORM frm_qty_total TABLES pt_lines
USING sortind_01 sortind_02 mrp_element_ind plus_minus elemnt_data
CHANGING pv_plnmg.
DATA: lt_tab LIKE bapi_mrp_ind_lines OCCURS 0 WITH HEADER LINE,
lw_tab TYPE bapi_mrp_ind_lines.
DATA:BEGIN OF lt_sortind_01 OCCURS 0 ,
sortind_01 TYPE sort1,
END OF lt_sortind_01 .
RANGES: r_sort1 FOR bapi_mrp_ind_lines-sortind_01 .
SPLIT sortind_01 AT '/' INTO TABLE lt_sortind_01 .
LOOP AT lt_sortind_01.
INSERT VALUE #( SIGN = 'I' option = 'EQ' low = lt_sortind_01-sortind_01 ) INTO TABLE r_sort1.
ENDLOOP.
DATA:BEGIN OF lt_sortind_02 OCCURS 0 ,
sortind_02 TYPE sort2,
END OF lt_sortind_02 .
RANGES: r_sort2 FOR bapi_mrp_ind_lines-sortind_02 .
SPLIT sortind_02 AT '/' INTO TABLE lt_sortind_02 .
LOOP AT lt_sortind_02.
INSERT VALUE #( SIGN = 'I' option = 'EQ' low = lt_sortind_02-sortind_02 ) INTO TABLE r_sort2.
ENDLOOP.
DATA:BEGIN OF lt_element OCCURS 0 ,
element_ind TYPE delkz,
END OF lt_element .
RANGES: r_element FOR bapi_mrp_ind_lines-mrp_element_ind .
SPLIT mrp_element_ind AT '/' INTO TABLE lt_element .
LOOP AT lt_element.
INSERT VALUE #( SIGN = 'I' option = 'EQ' low = lt_element-element_ind ) INTO TABLE r_element.
ENDLOOP.
DATA:BEGIN OF lt_plus_minus OCCURS 0 ,
plus_minus TYPE plumi,
END OF lt_plus_minus .
RANGES: r_plus_minus FOR bapi_mrp_ind_lines-plus_minus .
SPLIT plus_minus AT '/' INTO TABLE lt_plus_minus .
LOOP AT lt_plus_minus.
INSERT VALUE #( SIGN = 'I' option = 'EQ' low = lt_plus_minus-plus_minus ) INTO TABLE r_plus_minus.
ENDLOOP.
DATA: WHERE TYPE TABLE OF edpline .
APPEND 'sortind_01 IN r_sort1 AND sortind_02 IN r_sort2 ' TO WHERE .
APPEND 'AND mrp_element_ind IN r_element AND plus_minus IN r_plus_minus ' TO WHERE .
IF NOT elemnt_data IS INITIAL.
APPEND 'AND elemnt_data+0(3) = elemnt_data ' TO WHERE .
ENDIF.
MOVE-CORRESPONDING pt_lines[] TO lt_tab[] .
CLEAR:pv_plnmg .
LOOP AT lt_tab INTO lw_tab WHERE (WHERE) .
* sortind_01 = sortind_01 AND sortind_02 IN r_sort2 AND mrp_element_ind IN r_element AND
* plus_minus = plus_minus AND elemnt_data = elemnt_data .
pv_plnmg = pv_plnmg + lw_tab-rec_reqd_qty.
ENDLOOP.
ENDFORM.
*&———————————————————————*
*& Form handle_user_command
*&———————————————————————*
*& text
*&———————————————————————*
*& –> E_SALV_FUNCTION
*&———————————————————————*
FORM handle_user_command USING p_e_salv_function.
BREAK guoxiongjie .
ENDFORM.
*&———————————————————————*
*& Form handle_link_click
*&———————————————————————*
*& text
*&———————————————————————*
*& –> ROW
*& –> COLUMN
*&———————————————————————*
FORM handle_link_click USING p_row
p_column.
IF p_column = 'MATNR'.
READ TABLE gt_tab INTO DATA(lw_tab) INDEX p_row .
IF sy-subrc EQ 0.
SET PARAMETER ID 'MAT' FIELD lw_tab-matnr.
SET PARAMETER ID 'WRK' FIELD lw_tab-werks.
SET PARAMETER ID 'BERID' FIELD lw_tab-berid.
CALL TRANSACTION 'MD04' AND SKIP FIRST SCREEN.
ENDIF.
ENDIF.
ENDFORM.


















暂无评论内容