****************************************************************** * PROGRAM SOURCE HEADER
****************************************************************** *Program Name: ZHTFI_R019
*Description: 存货账龄分析明细表
*Date/Author: 2012.06.27/许林锋
*Table Update:
*Special Logic:
*Include:
****************************************************************** * MODIFICATION LOG
****************************************************************** *ChangeDate *Programer *Request *Desctiption
*-----------------------------------------------------------------
*2007.06.27 *许林锋 *DEVK900358 *New Program
*2007.06.28 *许林锋 *DEVK900358 *Change
*2007.06.29 *许林锋 *DEVK900358 *Change
*2007.07.02 *许林锋 *DEVK900358 *Change
*2007.07.03 *许林锋 *DEVK900358 *Change
*2007.07.04 *许林锋 *DEVK900358 *Change
*2007.07.05 *许林锋 *DEVK900358 *Change
*
****************************************************************** *-----------------------------------------------------------------
*Program Name
*-----------------------------------------------------------------
report zhtfi_r019.
tables: t001, t001w, t001l, mara, mbew.
*Data
*-----------------------------------------------------------------
*ALV
type-pools: slis.
data: i_fieldcat_alv type slis_t_fieldcat_alv with header line,
i_layout type slis_layout_alv, "alv的
w_fieldcat type slis_fieldcat_alv, "alv列属性
w_repid like sy-repid. "当前程序
data: d_pos type i value 0.
"ranges
ranges: r_bwkey for t001k-bwkey, "评估范围
r_bukrs for t001k-bukrs, "公司代码
r_werks for t001w-werks. "工厂
data: begin of it_data occurs 0,
bukrs like t001-bukrs, "公司
mjahr like mkpf-mjahr, "年度
rpmax(2) type c, "期间
matnr like mseg-matnr, "物料
maktx like makt-maktx, "物料描述
mtart like mara-mtart, "物料类型
matkl like mara-matkl, "物料组
werks like mseg-werks, "工厂
lgort like mseg-lgort, "库位
menge_e like mseg-menge, "期末数量
dmbtr_e like mseg-dmbtr, "期末金额
menge_1 like mseg-menge, "1-3月数量 dmbtr_1 like mseg-dmbtr, "1-3月金额
menge_2 like mseg-menge, "4-6月数量 dmbtr_2 like mseg-dmbtr, "4-6月金额
menge_3 like mseg-menge, "7-9月数量 dmbtr_3 like mseg-dmbtr, "7-9月金额
menge_4 like mseg-menge, "10-12月数量 dmbtr_4 like mseg-dmbtr, "10-12月金额 menge_5 like mseg-menge, "1-2年数量 dmbtr_5 like mseg-dmbtr, "1-2年金额
menge_6 like mseg-menge, "2-3年数量 dmbtr_6 like mseg-dmbtr, "2-3年金额
menge_7 like mseg-menge, "3年以上数量 dmbtr_7 like mseg-dmbtr, "3年以上金额 end of it_data.
data: begin of it_werks occurs 0,
bwkey like t001k-bwkey, "评估范围
bukrs like t001k-bukrs, "公司代码
werks like t001w-werks, "工厂
end of it_werks,
it_werks_b like table of it_werks with header line.
data: begin of it_matnr occurs 0,
matnr like mara-matnr, "物料号码
mtart like mara-mtart, "物料类型
matkl like mara-matkl, "物料组
maktx like makt-maktx, "物料描述
end of it_matnr.
data: begin of it_mseg occurs 0,
mblnr like mkpf-mblnr, "物料凭证
mjahr like mkpf-mjahr, "年度
budat like mkpf-budat, "过账日期
zeile like mseg-zeile, "项目
matnr like mseg-matnr, "物料
werks like mseg-werks, "工厂
lgort like mseg-lgort, "库位
shkzg like mseg-shkzg, "借/贷
dmbtr like mseg-dmbtr, "本位币金额
menge like mseg-menge, "数量
end of it_mseg.
data: begin of it_bsim occurs 0,
bukrs like bkpf-bukrs, "公司代码
belnr like bkpf-belnr, "会计凭证
gjahr like bkpf-gjahr, "会计年度
budat like bkpf-budat, "过账日期
buzei like bsim-buzei, "项目
matnr like bsim-matnr, "物料
shkzg like bsim-shkzg, "借/贷
dmbtr like bsim-dmbtr, "本位币金额
end of it_bsim.
data: begin of it_lgort occurs 0,
bukrs like t001-bukrs, "公司
werks like mseg-werks, "工厂
lgort like mseg-lgort, "库位
end of it_lgort.
data: begin of it_bukrs occurs 0,
bukrs like t001-bukrs, "公司代码
end of it_bukrs.
data: begin of it_perpr occurs 0,
matnr like mara-matnr, "物料
bukrs like t001-bukrs, "公司代码
perpr like mseg-dmbtr, "单价
end of it_perpr.
data: p_budat_low_f like mkpf-budat, "查询期间的第一天
p_budat_high_f like mkpf-budat, "查询期间的最后一天
"各个期间的开始结束日
p_budat_low_1 like mkpf-budat,
p_budat_high_1 like mkpf-budat,
p_budat_low_2 like mkpf-budat,
p_budat_high_2 like mkpf-budat,
p_budat_low_3 like mkpf-budat,
p_budat_high_3 like mkpf-budat,
p_budat_low_4 like mkpf-budat,
p_budat_high_4 like mkpf-budat,
p_budat_low_5 like mkpf-budat,
p_budat_high_5 like mkpf-budat,
p_budat_low_6 like mkpf-budat,
p_budat_high_6 like mkpf-budat,
p_budat_low_7 like mkpf-budat,
p_budat_high_7 like mkpf-budat,
p_budat_low like mkpf-budat, "期间的第一天
p_budat_high like mkpf-budat. "期间的最后一天
data: d_menge_i_1 like mseg-menge," d_dmbtr_i_1 like mseg-dmbtr, d_menge_i_2 like mseg-menge," d_dmbtr_i_2 like mseg-dmbtr,
d_menge_i_3 like mseg-menge," d_dmbtr_i_3 like mseg-dmbtr,
d_menge_i_4 like mseg-menge," d_dmbtr_i_4 like mseg-dmbtr,
d_menge_i_5 like mseg-menge," d_dmbtr_i_5 like mseg-dmbtr,
d_menge_i_6 like mseg-menge," d_dmbtr_i_6 like mseg-dmbtr,
d_menge_i_7 like mseg-menge," d_dmbtr_i_7 like mseg-dmbtr,
d_menge_i_e like mseg-menge, d_dmbtr_i_e like mseg-dmbtr,
d_menge_i_e_sum like mseg-menge, d_dmbtr_i_e_sum like mseg-dmbtr, * d_perpr like mseg-dmbtr. "单价
d_perpr type f.
data: d_menge_i like mseg-menge, d_dmbtr_i like mseg-dmbtr, d_menge_i_sub like mseg-menge, d_dmbtr_i_sub like mseg-dmbtr. data d_str type string.
*Selection Screen
*-----------------------------------------------------------------
selection-screen begin of block blk_1 with frame title text-blk.
select-options: s_bukrs for t001-bukrs obligatory, "公司
s_werks for t001w-werks, "工厂
s_lgort for t001l-lgort. "库位selection-screen skip.
select-options: s_matnr for mara-matnr, "物料
s_mtart for mara-mtart, "物料类型
s_matkl for mara-matkl. "物料组select-options: s_bklas for mbew-bklas. "估价类selection-screen skip.
parameter: p_mjahr like mkpf-mjahr obligatory, "年度 p_rpmax(2) type c obligatory. "期间selection-screen end of block blk_1.
*Define
*----------------------------------------------------------------- define move_sub.
d_menge_i = d_menge_i_sub. clear d_menge_i_sub.
* d_dmbtr_i = d_dmbtr_i_sub. clear d_dmbtr_i_sub. end-of-definition.
define sub_m_d.
d_menge_i_sub = d_menge_i - &1.
* d_dmbtr_i_sub = d_dmbtr_i - &2.
end-of-definition.
define move_m_d.
&1 = d_menge_i.
* &2 = d_dmbtr_i.
end-of-definition.
define write_screen.
call function 'SAP GUI_PROGRESS_INDICATOR' exporting
text = &1.
end-of-definition.
*Initialization
*----------------------------------------------------------------- initialization.
perform sub_initialization.
*At Selection Screen
*-----------------------------------------------------------------
at selection-screen.
perform func_check_authority.
*Start of selection
*----------------------------------------------------------------- start-of-selection.
perform sub_get_data.
*End Selection.
*-----------------------------------------------------------------
end-of-selection.
if it_data[] is initial.
"写屏幕
d_str = text-s04.
write_screen d_str.
else.
"写屏幕
d_str = text-s03.
write_screen d_str.
perform sub_build_layout.
perform sub_build_fields.
perform sub_dis_data.
endif.
*&---------------------------------------------------------------------* *& Form sub_get_data
*&---------------------------------------------------------------------* * text
*----------------------------------------------------------------------* * --> p1 text
* <-- p2 text
*----------------------------------------------------------------------* form sub_get_data .
*---取数
"写屏幕
d_str = text-s01.
write_screen d_str.
"取当前期间的第一天和第二天
concatenate p_mjahr p_rpmax '01' into p_budat_low_f. call function 'RP_LAST_DAY_OF_MONTHS'
exporting
day_in = p_budat_low_f
importing
last_day_of_month = p_budat_high_f
exceptions
day_in_no_date = 1
others = 2.
"取得选择
下的所有公司代码、评估范围、工厂
select a~bwkey a~bukrs b~werks
into table it_werks
from t001k as a
join t001w as b on a~bwkey = b~bwkey
where a~bukrs in s_bukrs
and b~werks in s_werks
.
if not it_werks[] is initial.
loop at it_werks.
clear: r_bukrs, r_bwkey, r_werks, it_bukrs.
"所有公司代码
it_bukrs-bukrs = it_werks-bukrs.
collect it_bukrs.
r_bukrs-sign = 'I'.
r_bukrs-option = 'EQ'.
r_bukrs-low = it_werks-bukrs.
append r_bukrs.
r_bwkey-sign = 'I'.
r_bwkey-option = 'EQ'.
r_bwkey-low = it_werks-bwkey.
append r_bwkey.
r_werks-sign = 'I'.
r_werks-option = 'EQ'.
r_werks-low = it_werks-werks.
append r_werks.
clear it_werks.
endloop.
else.
clear: r_bukrs, r_bwkey, r_werks.
r_bukrs-sign = 'I'.
r_bukrs-option = 'EQ'.
r_bukrs-low = 'XXXX'.
append r_bukrs.
r_bwkey-sign = 'I'.
r_bwkey-option = 'EQ'.
r_bwkey-low = 'XXXX'.
append r_bwkey.
r_werks-sign = 'I'.
r_werks-option = 'EQ'.
r_werks-low = 'XXXX'.
append r_werks.
endif.
sort: r_bukrs by low,
r_bwkey by low,
r_werks by low.
delete adjacent duplicates from: r_bukrs,
r_bwkey,
r_werks.
"取得所有公司代码下的工厂
select a~bwkey a~bukrs b~werks
into table it_werks_b
from t001k as a
join t001w as b on a~bwkey = b~bwkey
where a~bukrs in s_bukrs
.
"取得物料号码、物料类型、物料组、物料描述
select a~matnr a~mtart a~matkl b~maktx
into table it_matnr
from mara as a
join makt as b on a~matnr = b~matnr
join mbew as c on a~matnr = c~matnr
where a~matnr in s_matnr
and a~mtart in s_mtart
and a~matkl in s_matkl
and a~lvorm = '' " 为空表示未被删除物料。
and b~spras = '1'
and c~bklas in s_bklas
and c~lvorm = ''
.
sort it_matnr by matnr.
delete adjacent duplicates from it_matnr.
"取得所有工厂、库位
select distinct werks lgort
into corresponding fields of table it_lgort
from t001l
where werks in r_werks
and lgort in s_lgort
.
loop at it_lgort.
read table it_werks with key werks = it_lgort-werks.
it_lgort-bukrs = it_werks-bukrs.
modify it_lgort.
endloop.
if not it_matnr[] is initial.
"取MSEG表数据
select
a~mblnr
a~mjahr
a~budat
b~zeile
b~matnr
b~werks
b~lgort
b~shkzg
b~dmbtr
b~menge
into corresponding fields of table it_mseg
from mkpf as a
join mseg as b on a~mblnr = b~mblnr
and a~mjahr = b~mjahr
for all entries in it_matnr
where a~mjahr le p_mjahr
and a~budat le p_budat_high_f
and b~matnr = it_matnr-matnr
and b~werks in r_werks
and b~lgort in s_lgort
.
delete it_mseg where matnr is initial.
"取BSIM表数据
select
a~bukrs
a~belnr
a~gjahr
a~budat
b~buzei
b~matnr
b~shkzg
b~dmbtr
into corresponding fields of table it_bsim
from bkpf as a
join bsim as b on a~belnr = b~belnr
and a~gjahr = b~gjahr
and a~blart = b~blart
and a~budat = b~budat
for all entries in it_matnr
where a~bukrs in r_bukrs
and a~gjahr le p_mjahr
and a~budat le p_budat_high_f
and ( a~blart eq 'RE' or a~blart eq 'PR' )
and b~matnr eq it_matnr-matnr
and b~bwkey in r_bwkey
.
if not it_mseg[] is initial.
"计算各期间的开始日期和结束日期
p_budat_high_1 = p_budat_high_f.
perform func_get_date_before_3_month changing p_budat_low_1 p_budat_high_1.
p_budat_high_2 = p_budat_low_1 - 1.
perform func_get_date_before_3_month changing p_budat_low_2 p_budat_high_2.
p_budat_high_3 = p_budat_low_2 - 1.
perform func_get_date_before_3_month changing p_budat_low_3 p_budat_high_3.
p_budat_high_4 = p_budat_low_3 - 1.
perform func_get_date_before_3_month changing p_budat_low_4 p_budat_high_4.
p_budat_high_5 = p_budat_low_4.
perform func_get_date_before_1_year changing p_budat_low_5 p_budat_high_5.
p_budat_high_6 = p_budat_low_5.
perform func_get_date_before_1_year changing p_budat_low_6 p_budat_high_6.
p_budat_high_7 = p_budat_low_6 - 1.
p_budat_low_7 = '00010101'.
*---分期间累计数量、金额
"写屏幕
d_str = text-s02.
write_screen d_str.
loop at it_matnr.
loop at it_bukrs.
clear: d_menge_i_e_sum, d_dmbtr_i_e_sum, d_perpr.
"计算该公司内,选择的工厂+库位条件下的出入库数量
loop at it_lgort where bukrs = it_bukrs-bukrs.
clear: d_menge_i_1, d_menge_i_2, d_menge_i_3, d_menge_i_4, d_menge_i_5, d_menge_i_6, d_menge_i_7, d_menge_i_e,
d_dmbtr_i_e, it_data.
"--计算1-3月账龄物料的数据(入库数量、金额)
perform func_comp_data
using p_budat_low_1 p_budat_high_1
changing d_menge_i_1.
"--计算4-6月账龄物料的数据(入库数量、金额)
perform func_comp_data
using p_budat_low_2 p_budat_high_2
changing d_menge_i_2.
"--计算7-9月账龄物料的数据(入库数量、金额)
perform func_comp_data
using p_budat_low_3 p_budat_high_3
changing d_menge_i_3.
"--计算10-12月账龄物料的数据(入库数量、金额)
perform func_comp_data
using p_budat_low_4 p_budat_high_4
changing d_menge_i_4.
"--计算1-2年账龄物料的数据(入库数量、金额)
perform func_comp_data
using p_budat_low_5 p_budat_high_5
changing d_menge_i_5.
"--计算12-3年账龄物料的数据(入库数量、金额)
perform func_comp_data
using p_budat_low_6 p_budat_high_6
changing d_menge_i_6.
"--计算3年以上账龄物料的数据(入库数量、金额)
perform func_comp_data
using p_budat_low_7 p_budat_high_7
changing d_menge_i_7.
"--添加到it_data中
"如果期末数量、金额为0,则不添加
if d_menge_i_e ne 0.
clear it_data.
it_data-bukrs = it_bukrs-bukrs. "公司代码
it_data-mjahr = p_mjahr. "年度
it_data-rpmax = p_rpmax. "期间
move-corresponding: it_matnr to it_data,
it_lgort to it_data.
it_data-menge_e = d_menge_i_e.
"--根据期末库存+ 各期间入库数,判断各期间的库存数+ 金额 clear: d_menge_i.
d_menge_i = d_menge_i_e - d_menge_i_1. "数量
"--根据数量判断
if d_menge_i <= 0. "1-3月
it_data-menge_1 = d_menge_i_e.
else.
it_data-menge_1 = d_menge_i_1.
sub_m_d d_menge_i_2.
if d_menge_i_sub <= 0. "4-6月
move_m_d it_data-menge_2.
else.
it_data-menge_2 = d_menge_i_2.
move_sub.
sub_m_d d_menge_i_3.
if d_menge_i_sub <= 0. "7-9月
move_m_d it_data-menge_3.
else.
it_data-menge_3 = d_menge_i_3.
move_sub.
sub_m_d d_menge_i_4.
if d_menge_i_sub <= 0. "10-12月
move_m_d it_data-menge_4.
else.
it_data-menge_4 = d_menge_i_4.
move_sub.
sub_m_d d_menge_i_5.
if d_menge_i_sub <= 0. "1-2年
move_m_d it_data-menge_5.
else.
it_data-menge_5 = d_menge_i_5.
move_sub.
sub_m_d d_menge_i_6.
if d_menge_i_sub <= 0. "2-3月
move_m_d it_data-menge_6.
else. "3年以上
it_data-menge_6 = d_menge_i_6.
it_data-menge_7 = d_menge_i_sub.
endif.
endif.
endif.
endif.
endif.
endif.
append it_data.
endif.
"用于计算单价
d_menge_i_e_sum = d_menge_i_e + d_menge_i_e_sum.
d_dmbtr_i_e_sum = d_dmbtr_i_e + d_dmbtr_i_e_sum.
clear it_lgort.
endloop.
"---计算物料单价
"计算该公司内,选择的工厂+库位条件之外的出入库数量
loop at it_werks_b.
loop at it_mseg where matnr = it_matnr-matnr
and werks = it_werks_b-werks .
case it_mseg-shkzg.
when 'S'. "入库
"期末数量、金额
d_menge_i_e_sum = d_menge_i_e_sum + it_mseg-menge.
d_dmbtr_i_e_sum = d_dmbtr_i_e_sum + it_mseg-dmbtr.
when 'H'. "出库
"期末数量、金额
d_menge_i_e_sum = d_menge_i_e_sum - it_mseg-menge.
d_dmbtr_i_e_sum = d_dmbtr_i_e_sum - it_mseg-dmbtr.
endcase.
clear it_mseg.
endloop.
clear it_werks_b.
endloop.
"计算发票校验和价格调整
loop at it_bsim where matnr = it_matnr-matnr
and bukrs = it_bukrs-bukrs.
case it_bsim-shkzg.
when 'S'. "入库
"期末金额
d_dmbtr_i_e_sum = d_dmbtr_i_e_sum + it_bsim-dmbtr.
when 'H'. "出库
"期末金额
d_dmbtr_i_e_sum = d_dmbtr_i_e_sum - it_bsim-dmbtr.
endcase.
clear it_bsim.
endloop.
"计算单价
if d_menge_i_e_sum ne 0.
d_perpr = d_dmbtr_i_e_sum / d_menge_i_e_sum.
clear it_perpr.
it_perpr-matnr = it_matnr-matnr.
it_perpr-bukrs = it_bukrs-bukrs.
it_perpr-perpr = d_perpr.
append it_perpr.
endif.
clear it_bukrs.
endloop.
clear it_matnr.
endloop.
sort it_data by matnr bukrs.
"计算金额
loop at it_data.
read table it_perpr with key matnr = it_data-matnr
bukrs = it_data-bukrs.
it_data-dmbtr_e = it_data-menge_e * it_perpr-perpr.
it_data-dmbtr_1 = it_data-menge_1 * it_perpr-perpr.
it_data-dmbtr_2 = it_data-menge_2 * it_perpr-perpr.
it_data-dmbtr_3 = it_data-menge_3 * it_perpr-perpr.
it_data-dmbtr_4 = it_data-menge_4 * it_perpr-perpr.
it_data-dmbtr_5 = it_data-menge_5 * it_perpr-perpr.
it_data-dmbtr_6 = it_data-menge_6 * it_perpr-perpr.
it_data-dmbtr_7 = it_data-menge_7 * it_perpr-perpr.
modify it_data.
clear it_data.
endloop.
endif.
endif.
endform. " sub_get_data
*&---------------------------------------------------------------------*
*& Form sub_build_layout
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form sub_build_layout .
w_repid = sy-repid. "程序为当前程序
i_layout-zebra = 'X'. "斑马线
i_layout-detail_popup = 'X'. "是否弹出详细信息窗口
i_layout-f2code = '&ETA'. "设置触发弹出详细信息窗口的功能码,这里是双击 i_layout-no_vline = ' '. "这个用来设置列间隔线
i_layout-colwidth_optimize = 'X'. "优化列宽选项是否设置
i_layout-detail_initial_lines = 'X'.
i_layout-detail_titlebar = '详细内容'. "设置弹出窗口的标题栏
endform. " sub_build_layout
*&---------------------------------------------------------------------*
*& Form sub_build_fields
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form sub_build_fields .
refresh i_fieldcat_alv.
perform sub_set_field using 'MJA HR' text-h01.
perform sub_set_field using 'RPMAX' text-h02.
perform sub_set_field using 'MATNR' text-h03.
perform sub_set_field using 'MAKTX' text-h04.
perform sub_set_field using 'MTART' text-h05.
perform sub_set_field using 'MATKL' text-h06.
perform sub_set_field using 'WERKS' text-h07.
perform sub_set_field using 'LGORT' text-h08.
perform sub_set_field using 'MENGE_E' text-h09.
perform sub_set_field using 'DMBTR_E' text-h10.
perform sub_set_field using 'MENGE_1' text-h11.
perform sub_set_field using 'DMBTR_1' text-h12.
perform sub_set_field using 'MENGE_2' text-h13.
perform sub_set_field using 'DMBTR_2' text-h14.
perform sub_set_field using 'MENGE_3' text-h15.
perform sub_set_field using 'DMBTR_3' text-h16.
perform sub_set_field using 'MENGE_4' text-h17.
perform sub_set_field using 'DMBTR_4' text-h18.
perform sub_set_field using 'MENGE_5' text-h19.
perform sub_set_field using 'DMBTR_5' text-h20.
perform sub_set_field using 'MENGE_6' text-h21.
perform sub_set_field using 'DMBTR_6' text-h22.
perform sub_set_field using 'MENGE_7' text-h23.
perform sub_set_field using 'DMBTR_7' text-h24.
endform. " sub_build_fields
*&---------------------------------------------------------------------*
*& Form sub_dis_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form sub_dis_data .
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
i_callback_program = w_repid "当前程序
i_save = 'A'
is_layout = i_layout "子函数layout_build填充的格式定义 it_fieldcat = i_fieldcat_alv[] "子函数fields填充的各列
tables
t_outtab = it_data "数据都在IT_DATA内表中
exceptions
program_error = 1
others = 2.
endform. " sub_dis_data
*&---------------------------------------------------------------------*
*& Form sub_set_field
*&---------------------------------------------------------------------* * text
*----------------------------------------------------------------------* * -->P_name text
* -->P_TEXT text
*----------------------------------------------------------------------* form sub_set_field using value(name) p_text.
d_pos = d_pos + 1.
clear w_fieldcat.
w_fieldcat-col_pos = d_pos.
w_fieldcat-fieldname = name.
w_fieldcat-seltext_l = p_text.
append w_fieldcat to i_fieldcat_alv.
endform. " sub_set_field
*&---------------------------------------------------------------------* *& Form func_get_date_before_3_month
*&---------------------------------------------------------------------* * 3个月期间
*----------------------------------------------------------------------* * <--D_BUDAT_LOW text
* <--D_BUDAT_HIGH text
*----------------------------------------------------------------------* form func_get_date_before_3_month changing d_budat_low
d_budat_high.
data: d_year(4) type c value 0,
d_month(2) type c value 0,
d_year_i type i value 0,
d_month_i type i value 0.
d_year = d_budat_high(4).
d_month = d_budat_high+4(2).
move: d_month to d_month_i,
d_year to d_year_i.
d_month_i = d_month_i - 2.
"判断是否为上年
if d_month_i <= 0.
d_month_i = d_month_i + 12.
d_year_i = d_year_i - 1.
endif.
"取期间开始
move: d_year_i to d_year,
d_month_i to d_month.
if d_month_i < 10.
concatenate d_year '0' d_month '01' into d_budat_low.
else.
concatenate d_year d_month '01' into d_budat_low.
endif.
endform. " func_get_date_before_3_month
*&---------------------------------------------------------------------*
*& Form func_get_date_before_1_year
*&---------------------------------------------------------------------*
* 1年期间
*----------------------------------------------------------------------*
* <--D_BUDAT_LOW text
* <--D_BUDAT_HIGH text
*----------------------------------------------------------------------*
form func_get_date_before_1_year changing d_budat_low
d_budat_high.
data: d_year(4) type c value 0,
d_month(2) type c value 0,
d_year_i type i value 0.
d_year = d_budat_high(4).
d_month = d_budat_high+4(2).
move: d_year to d_year_i.
d_year_i = d_year_i - 1.
move d_year_i to d_year.
concatenate d_year d_month '01' into d_budat_low.
d_budat_high = d_budat_high - 1.
endform. " func_get_date_before_1_year
*&---------------------------------------------------------------------*
*& Form func_comp_data
*&---------------------------------------------------------------------*
* 累计期间内入库数量、金额;并累计多有出入库为这个期末数量、金额*----------------------------------------------------------------------*
* <--D_MENGE_I text
* <--D_DMBTR_I text
*----------------------------------------------------------------------*
form func_comp_data using d_budat_low
d_budat_high
changing d_menge_i.
loop at it_mseg where matnr = it_matnr-matnr
and werks = it_lgort-werks
and lgort = it_lgort-lgort
and budat >= d_budat_low
and budat <= d_budat_high
.
case it_mseg-shkzg.
when 'S'. "入库
"期间入库数量、金额
d_menge_i = d_menge_i + it_mseg-menge.
* d_dmbtr_i = d_dmbtr_i + it_mseg-dmbtr.
"期末数量、金额
d_menge_i_e = d_menge_i_e + it_mseg-menge.
d_dmbtr_i_e = d_dmbtr_i_e + it_mseg-dmbtr.
when 'H'. "出库
"期末数量、金额
d_menge_i_e = d_menge_i_e - it_mseg-menge.
d_dmbtr_i_e = d_dmbtr_i_e - it_mseg-dmbtr.
endcase.
delete it_mseg.
clear it_mseg.
endloop.
endform. " func_comp_data
*&---------------------------------------------------------------------* *& Form sub_initialization
*&---------------------------------------------------------------------* * text
*----------------------------------------------------------------------* * --> p1 text
* <-- p2 text
*----------------------------------------------------------------------* form sub_initialization .
data d_datum like mkpf-budat.
d_datum = sy-datum.
p_mjahr = d_datum(4).
p_rpmax = d_datum+4(2).
endform. " sub_initialization
*&---------------------------------------------------------------------* *& Form func_check_authority
*&---------------------------------------------------------------------* * text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form func_check_authority .
data: begin of it_bukrs occurs 0,
bukrs like t001-bukrs,
end of it_bukrs.
select bukrs into table it_bukrs from t001 where bukrs in s_bukrs. loop at it_bukrs.
authority-check object 'F_BKPF_BUK'
id 'BUKRS' field it_bukrs-bukrs.
if sy-subrc ne 0.
message '您没有该公司权限!' type 'E'.
exit.
endif.
endloop.
refresh it_bukrs.
endform. " func_check_authority