*&---------------------------------------------------------------------*
*& Report ZPP_R_017
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
report zpp_r_017.
tables: afko, afpo, mkpf.
*---输入屏幕
selection-screen: begin of block blk01 with frame title text-001.
select-options : s_dauat for afpo-dauat, "订单类型
s_dwerk for afpo-dwerk, "工厂
s_ablad for afpo-ablad, "班次
s_matnr for afpo-matnr, "成品物料编码
s_budat for mkpf-budat. "过账日期
selection-screen: end of block blk01.
*---数据定义
*---Output itable
data: begin of gt_output occurs 0,
zsel,
dauat like afpo-dauat, "订单类型
budat like mkpf-budat, "过账日期
matnr like afpo-matnr, "成品编号
maktx like makt-maktx,
matnr1 like mseg-matnr, "原材料物料编号
maktx1 like makt-maktx,
meins like afpo-meins, "计量单位
menge1 like mseg-menge, "产量
menge2 like mseg-menge, "标准用量
menge3 like mseg-menge, "实际用量
decimal1 type p decimals 4, "利用率
text_decimal1 type string,
cellcolor type lvc_t_scol, "a itab which save the color of alv cells
end of gt_output.
data: gt_output1 like table of gt_output with header line.
start-of-selection.
select distinct afpo~dauat "订单类型
afpo~matnr "成品编号
afpo~meins "单位
mkpf~budat "过账日期
mseg~matnr as matnr1
into corresponding fields of table gt_output
from afpo
inner join mseg on mseg~aufnr = afpo~aufnr
inner join mkpf on mkpf~mblnr = mseg~mblnr and mkpf~mjahr = mseg~mjahr
where afpo~dauat in s_dauat
and afpo~dwerk in s_dwerk
and afpo~ablad in s_ablad
and afpo~matnr in s_matnr
and mkpf~budat in s_budat
and mkpf~vgart = 'WA'. "WF:成品,'WA':生产所用原料
data: begin of gt_mara occurs 0,
matnr like mara-matnr,
mtart like mara-mtart,
end of gt_mara.
select matnr matkl into table gt_mara from mara
for all entries in gt_output where matnr = gt_output-matnr1
and mtart = 'ZVEP'.
loop at gt_output.
read table gt_mara with key matnr = gt_output-matnr1.
if sy-subrc <> 0.
delete gt_output.
endif.
endloop.
*---物料描述
data: begin of gt_makt occurs 0,
matnr like makt-matnr,
maktx like makt-maktx,
end of gt_makt.
select matnr
maktx
into corresponding fields of table gt_makt
from makt
for all entries in gt_output
where ( matnr = gt_output-matnr or matnr = gt_output-matnr1 )
and spras = '1'.
sort gt_makt by matnr.
*---实际用量
data: begin of gt_sum1 occurs 0,
dauat like afpo-dauat,
matnr like afpo-matnr,
budat like mkpf-budat,
vgart like mkpf-vgart,
bwart like mseg-bwart,
menge like mseg-menge,
end of gt_sum1.
select distinct afpo~dauat "订单类型
mseg~matnr "原材料编号
mkpf~budat "过账日期
mkpf~vgart "物料类型: WF:成品,WA:生产原料
mseg~bwart "移动类型
sum( mseg~menge ) as menge
into corresponding fields of table gt_sum1
from afpo
inner join mseg on mseg~aufnr = afpo~aufnr
inner join mkpf on mkpf~mblnr = mseg~mblnr and mkpf~mjahr = mseg~mjahr
where afpo~dauat in s_dauat
and afpo~dwerk in s_dwerk
and afpo~ablad in s_ablad
and afpo~matnr in s_matnr
and mkpf~budat in s_budat
group by afpo~dauat mseg~matnr mkpf~budat mkpf~vgart mseg~bwart. "成品,'WA':生产所用原料
sort gt_sum1 by dauat matnr budat vgart bwart.
*---标准用量
data: begin of gt_sum2 occurs 0,
dauat like afpo-dauat,
matnr like mseg-matnr,
budat like mkpf-budat,
menge like stpo-menge,
ausch like stpo-ausch,
end of gt_sum2.
select afpo~dauat "订单类型
mseg~matnr "成品编号
mkpf~budat "过账日期
sum( stpo~menge ) as menge "组件数量
sum( stpo~ausch ) as ausch "部件废品百分数
into corresponding fields of table gt_sum2
from afpo
inner join mseg on mseg~aufnr = afpo~aufnr
inner join mkpf on mkpf~mblnr = mseg~mblnr and mkpf~mjahr = mseg~mjahr
inner join mast on mast~matnr = afpo~matnr "成品
inner join stpo on stpo~stlnr = mast~stlnr and stpo~idnrk = mseg~matnr "原材料
where afpo~dauat in s_dauat
and afpo~dwerk in s_dwerk
and afpo~ablad in s_ablad
and afpo~matnr in s_matnr
and mkpf~budat in s_budat
group by afpo~dauat mseg~matnr mkpf~budat. "成品,'WA':生产所用原料
sort gt_sum2 by dauat matnr budat.
*---Process
loop at gt_output.
data: l_menge1 like mseg-menge,
l_menge2 like mseg-menge.
read table gt_makt with key matnr = gt_output-matnr binary search.
if sy-subrc = 0.
gt_output-maktx = gt_makt-maktx.
endif.
read table gt_makt with key matnr = gt_output-matnr1 binary search.
if sy-subrc = 0.
gt_output-maktx1 = gt_makt-maktx.
endif.
*---产量
clear l_menge1.
read table gt_sum1 with key dauat = gt_output-dauat matnr = gt_output-matnr budat = gt_output-budat vgart = 'WF' bwart = '101' binary search.
if sy-subrc = 0.
l_menge1 = gt_sum1-menge.
endif.
*---产量冲销
clear l_menge2.
read table gt_sum1 with key dauat = gt_output-dauat matnr = gt_output-matnr budat = gt_output-budat vgart = 'WF' bwart = '102' binary search.
if sy-subrc = 0.
l_menge2 = gt_sum1-menge.
endif.
gt_output-menge1 = l_menge1 - l_menge2.
*---标准用量
read table gt_sum2 with key dauat = gt_output-dauat matnr = gt_output-matnr1 budat = gt_output-budat binary search.
if sy-subrc = 0.
gt_output-menge2 = gt_output-menge1 * gt_sum2-menge * ( 1 + gt_sum2-ausch / 100 ) / 1000.
endif.
*---实际用量
clear l_menge1.
read table gt_sum1 with key dauat = gt_output-dauat matnr = gt_output-matnr1 budat = gt_output-budat vgart = 'WA' bwart = '261' binary search.
if sy-subrc = 0.
l_menge1 = gt_sum1-menge.
endif.
*---实际用量冲销
clear l_menge2.
read table gt_sum1 with key dauat = gt_output-dauat matnr = gt_output-matnr1 budat = gt_output-budat vgart = 'WA' bwart = '262' binary search.
if sy-subrc = 0.
l_menge2 = gt_sum1-menge.
endif.
gt_output-menge3 = l_menge1 - l_menge2.
*---利用率
if not gt_output-menge2 = 0.
gt_output-decimal1 = ( gt_output-menge3 - gt_output-menge2 ) / gt_output-menge2.
else.
gt_output-decimal1 = 0.
endif.
data: l_decimal1 type p decimals 3.
l_decimal1 = gt_output-decimal1 * 100.
gt_output-text_decimal1 = l_decimal1.
concatenate gt_output-text_decimal1 '%' into gt_output-text_decimal1.
*---color
if gt_output-decimal1 < 0.
data wa_cellcolor type lvc_s_scol. " 单元格颜色结构
wa_cellcolor-fname = 'TEXT_DECIMAL1'.
wa_cellcolor-color-col = '6'.
wa_cellcolor-color-int = '1'.
wa_cellcolor-color-inv = '0'.
append wa_cellcolor to gt_output-cellcolor.
endif.
modify gt_output.
endloop.
end-of-selection.
type-pools: slis.
data: gs_layout type slis_layout_alv.
gs_layout-zebra = 'X'.
gs_layout-colwidth_optimize = 'X'.
gs_layout-box_fieldname = 'ZSEL'.
gs_layout-coltab_fieldname = 'CELLCOLOR'. " 单元格颜色字段
data: gt_fieldcat type slis_t_fieldcat_alv,
gw_fieldcat type slis_fieldcat_alv.
define m_alv_head.
clear gw_fieldcat.
gw_fieldcat-fieldname = '&1'.
gw_fieldcat-seltext_m = '&2'.
gw_fieldcat-key = '&3'.
append gw_fieldcat to gt_fieldcat.
end-of-definition.
m_alv_head dauat 订单类型 x.
m_alv_head matnr 成品编号 x.
m_alv_head maktx 成品描述 x.
m_alv_head matnr1 原材料编号 x.
m_alv_head maktx1 原材料描述 x.
m_alv_head meins 单位 ''.
m_alv_head budat 过账日期 x.
m_alv_head menge1 产量 ''.
m_alv_head menge2 标准用量 ''.
m_alv_head menge3 实际用量 ''.
m_alv_head text_decimal1 利用率 ''.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
i_callback_program = sy-repid
is_layout = gs_layout
it_fieldcat = gt_fieldcat
i_save = 'A'
tables
t_outtab = gt_output
exceptions
program_error = 1
others = 2.
评论