B01 正常库存 8 8
B02 订单库存 8 8
E01 查询条件 8 8
E04 会计期间 8 8
P_DD 订单库存
P_JS 重新运算
P_LGORT 库存地点
P_MATKL 物料组
P_MATNR 物料
P_MONTH 过帐期间
P_MTART 物料类型
P_WERKS 工厂
P_YEAR ?...
P_ZC 正常库存
*&---------------------------------------------------------------------*
*& Report YMMR0108
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ymmr0108 MESSAGE-ID 1000.
INCLUDE y_alv_func.
INCLUDE zabap_public.
TABLES:mara,marc,mard,mkpf,mseg,mbew,s032,s031,mardh,mska.
DATA : it_show LIKE TABLE OF yios WITH HEADER LINE.
*TYPES:BEGIN OF t_mseg,
* matnr LIKE mseg-matnr,
* lgort LIKE mseg-lgort,
* shkzg LIKE mseg-shkzg,
* menge LIKE mseg-menge,
* maxbudat LIKE mkpf-budat,
* minbudat LIKE mkpf-budat,
*END OF t_mseg.
DATA:it_s032 TYPE HASHED TABLE OF s032 WITH UNIQUE KEY mandt
ssour
vrsio
werks
lgort
matnr.
DATA:wa_s032 TYPE s031.
**最近24月用量
DATA:dat24 LIKE sy-datum.
*DATA: it_mseg TYPE HASHED TABLE OF t_mseg WITH UNIQUE KEY matnr lgort .
*DATA: wa_mseg TYPE t_mseg.
DATA:it_s031 TYPE HASHED TABLE OF s031 WITH UNIQUE KEY matnr .
DATA:wa_s031 TYPE s031.
**最近库存结余期间到本月的业务量总和
DATA:it_s031b TYPE HASHED TABLE OF s031 WITH UNIQUE KEY matnr lgort.
DATA:wa_s031b TYPE s031.
**物料所有期间的收发量
DATA:it_s031c TYPE HASHED TABLE OF s031 WITH UNIQUE KEY matnr lgort.
**上月结余库存
DATA:it_mardh TYPE HASHED TABLE OF mardh WITH UNIQUE KEY matnr lgort.
DATA:wa_mardh TYPE mardh.
**订单库存
DATA:BEGIN OF it_mska OCCURS 0.
INCLUDE STRUCTURE yios .
DATA:
kalab LIKE mska-kalab,"非限制使用的估价的库存
kains LIKE mska-kains,"质量检验中的库存
kaspe LIKE mska-kaspe."冻结的库存
DATA:END OF it_mska.
**本月订单库存
DATA:it_mska1 TYPE HASHED TABLE OF mska WITH UNIQUE KEY matnr lgort.
**本月前所有库存
DATA:it_mska2 TYPE HASHED TABLE OF mska WITH UNIQUE KEY matnr lgort.
DATA:wa_mska TYPE mska .
**物料评估历史
DATA:wa_mbew TYPE mbew.
DATA: v_waers LIKE t001-waers,
v_fr_date TYPE d, "查询期间第一天
v_to_date TYPE d, "查询期间月底日
v_edate TYPE d. "上月最后一天,用于取上月期初
DATA: e_buper LIKE t009b-poper, "24个期间前月
e_gjahr LIKE t009b-bdatj. "24个期间前度
DATA: p_buper LIKE t009b-poper," 上期间月
p_gjahr LIKE t009b-bdatj. " 上期间年度
DATA:datnow LIKE sy-datum."当前日期
**最后收发时间
*DATA: it_mseg1 TYPE HASHED TABLE OF t_mseg WITH UNIQUE KEY matnr lgort shkzg.
*it_mska
**当前订单评估
SELECTION-SCREEN BEGIN OF BLOCK erblock WITH FRAME TITLE text-e01.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) text-e04 FOR FIELD p_year.
PARAMETERS: p_year LIKE t009b-bdatj OBLIGATORY DEFAULT sy-datum(4).
PARAMETERS: p_month LIKE bkpf-monat OBLIGATORY DEFAULT sy-datum+4(2).
SELECTION-SCREEN END OF LINE.
PARAMETERS: p_werks LIKE s032-werks DEFAULT 'LN01' OBLIGATORY .
SELECT-OPTIONS:p_lgort FOR s032-lgort.
SELECT-OPTIONS:p_mtart FOR mara-mtart.
SELECT-OPTIONS:p_matkl FOR mara-matkl.
SELECT-OPTIONS:p_matnr FOR mara-matnr.
SELECTION-SCREEN BEGIN OF LINE.
*正常库存
PARAMETERS:p_zc TYPE c RADIOBUTTON GROUP g1 .
SELECTION-SCREEN COMMENT 3(15) text-b01 FOR FIELD p_zc .
SELECTION-SCREEN POSITION 20.
*订单库存
PARAMETERS:p_dd TYPE c RADIOBUTTON GROUP g1 .
SELECTION-SCREEN COMMENT 23(15) text-b02 FOR FIELD p_dd.
SELECTION-SCREEN POSITION 40.
SELECTION-SCREEN END OF LINE.
.
PARAMETERS: p_js TYPE c AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK erblock.
INITIALIZATION .
p_zc = 'X'.
AT SELECTION-SCREEN .
* IF p_month < 1 OR p_month > 12.
* MESSAGE '月份错误' TYPE 'E'.
* EXIT.
* ENDIF.
AT SELECTION-SCREEN OUTPUT.
START-OF-SELECTION.
PERFORM check_authority_value.
IF p_zc = 'X'."正常库存
CLEAR it_show[].
IF p_js <> 'X'.
SELECT * FROM yios INTO CORRESPONDING FIELDS OF TABLE it_show
WHERE matnr IN p_matnr
AND mtart IN p_mtart
AND lgort IN p_lgort
AND werks = p_werks
AND bdatj = p_year
AND bumon = p_month.
ENDIF.
IF it_show[] IS INITIAL.
PERFORM get_data.
PERFORM pro_data.
ENDIF.
PERFORM show_data.
ELSE."订单库存
my_exit '此功能尚未开发' 'I' .
* PERFORM get_dd_data.
ENDIF.
*
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_data .
DATA: fr_spmon LIKE s031-spmon.
DATA: to_spmon LIKE s031-spmon.
DATA:month LIKE p_month.
month = e_buper+1(2).
CONCATENATE e_gjahr e_buper INTO fr_spmon.
CONCATENATE p_year p_month INTO to_spmon.
SELECT
marc~werks
s032~lgort
mara~matkl
mara~mtart
mara~matnr
s032~basme
s032~letztzug
s032~letztabg
s032~letztbew
s032~letztver
marc~loggr
marc~lgfsb
marc~lgpro
mara~mstae
mara~ersda
makt~maktx
mbew~vprsv
mbew~verpr
mbew~stprs
mbew~peinh
INTO CORRESPONDING FIELDS OF TABLE it_show
FROM s032
INNER JOIN mara ON s032~matnr = mara~matnr AND s032~mandt = mara~mandt
INNER JOIN marc ON s032~matnr = marc~matnr AND s032~werks = marc~werks AND s032~mandt = marc~mandt
INNER JOIN mbew ON s032~matnr = mbew~matnr AND s032~werks = mbew~bwkey AND s032~mandt = mbew~mandt
INNER JOIN makt ON mara~matnr = makt~matnr AND spras = 1 AND s032~mandt = makt~mandt
WHERE mara~matnr IN p_matnr
AND mara~mtart IN p_mtart
AND mara~matkl IN p_matkl
AND marc~werks = p_werks
AND s032~lgort IN p_lgort
AND mara~lvorm NE 'X'
AND marc~lvorm NE 'X'
* AND s032~lgort NE ''
.
IF it_show[] IS INITIAL .
my_exit '没有找到物料信息' ''.
ENDIF.
**查询所有物料的收发历史
SELECT matnr lgort
SUM( mzubb ) AS mzubb"评估的库存收货数
SUM( wzubb ) AS wzubb"估价的库存收货值
SUM( magbb ) AS magbb"估价库存发货的数量
SUM( wagbb ) AS wagbb"已发货的估价的库存值
SUM( magkb ) AS magkb"已发出的寄售库存数量
SUM( mgvbr ) AS mgvbr"全部使用数量
SUM( wgvbr ) AS wgvbr"总使用值
SUM( muvbr ) AS muvbr"未计划的用途数量
SUM( wuvbr ) AS wuvbr"未计划的用途数值
FROM s031 INTO CORRESPONDING FIELDS OF TABLE it_s031c
WHERE matnr IN p_matnr
AND werks = p_werks
AND lgort IN p_lgort
* AND mandt = sy-mandt
* AND spmon BETWEEN fr_spmon AND to_spmon
AND spmon <= to_spmon
GROUP BY matnr lgort.
*
******本月业务量
**
SELECT matnr lgort
mzubb"评估的库存收货数
wzubb"估价的库存收货值
magbb"估价库存发货的数量
wagbb"已发货的估价的库存值
magkb"已发出的寄售库存数量
mgvbr"全部使用数量
wgvbr"总使用值
muvbr"未计划的用途数量
wuvbr"未计划的用途数值
FROM s031 INTO CORRESPONDING FIELDS OF TABLE it_s031b
WHERE matnr IN p_matnr
AND werks = p_werks
AND lgort IN p_lgort
AND spmon = to_spmon
.
****最近24个月用量
SELECT matnr "lgort
SUM( mzubb ) AS mzubb"评估的库存收货数
SUM( wzubb ) AS wzubb"估价的库存收货值
SUM( magbb ) AS magbb"估价库存发货的数量
SUM( wagbb ) AS wagbb"已发货的估价的库存值
SUM( magkb ) AS magkb"已发出的寄售库存数量
SUM( mgvbr ) AS mgvbr"全部使用数量
SUM( wgvbr ) AS wgvbr"总使用值
SUM( muvbr ) AS muvbr"未计划的用途数量
SUM( wuvbr ) AS wuvbr"未计划的用途数值
FROM s031 INTO CORRESPONDING FIELDS OF TABLE it_s031
WHERE matnr IN p_matnr
AND werks = p_werks
AND lgort IN p_lgort
AND spmon BETWEEN fr_spmon AND to_spmon
GROUP BY matnr. "lgort.
CLEAR:it_mska1[],it_mska2[].
***总订单库存
* SELECT
* mska~lgort
* mska~matnr
* SUM( kalab ) AS kalab "非限制使用的估价的库存
* SUM( kains ) AS kains "质量检验中的库存
* SUM( kaspe ) AS kaspe "冻结的库存
* INTO CORRESPONDING FIELDS OF TABLE it_mska1
* FROM mska
* WHERE mska~matnr IN p_matnr
* AND mska~werks = p_werks
* AND mska~lgort IN p_lgort
*
* AND mska~lfgja <= p_year
* AND mska~lfmon <= p_month
* GROUP BY lgort matnr
* .
**本月订单库存
* SELECT
* mska~lgort
* mska~matnr
* mska~kalab"非限制使用的估价的库存
* mska~kains"质量检验中的库存
* mska~kaspe"冻结的库存
* INTO CORRESPONDING FIELDS OF TABLE it_mska2
* FROM mska
* WHERE mska~matnr IN p_matnr
* AND mska~werks = p_werks
* AND mska~lgort IN p_lgort
* AND mska~lfgja = p_year
* AND mska~lfmon = p_month
.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form PRO_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM pro_data .
DATA:date1 TYPE d.
DATA:itemp TYPE int4.
LOOP AT it_show.
it_show-bdatj = p_year.
it_show-bumon = p_month.
CLEAR: wa_s031,wa_s031b,itemp,wa_mardh,wa_mska .
* DATA: fr_spmon LIKE s031-spmon.
* DATA: to_spmon LIKE s031-spmon.
** CONCATENATE wa_mardh-lfgja wa_mardh-lfmon INTO fr_spmon.
* CONCATENATE p_year p_month INTO to_spmon.
***begin 查询期间库存
** 查询上月结余
* READ TABLE it_mardh WITH TABLE KEY matnr = it_show-matnr lgort = it_show-lgort INTO wa_mardh.
* IF sy-subrc <> 0."如果上月没有结余说明本月没有业务移动,库存=最近一次月结库存(冻结库存+非限制+质检库存)
* SELECT * FROM mardh
* UP TO 1 ROWS
* INTO CORRESPONDING FIELDS OF wa_mardh
* WHERE matnr = it_show-matnr
* AND werks = p_werks
* AND lgort = it_show-lgort
* AND (
* lfgja < p_gjahr OR ( lfgja = p_gjahr AND lfmon < p_buper ) )
* ORDER BY lfgja DESCENDING lfmon DESCENDING
* .
* ENDSELECT.
* IF sy-subrc <> 0.
* DELETE it_show.
* CONTINUE.
* ENDIF.
* it_show-mbwbest = wa_mardh-labst + wa_mardh-insme + wa_mardh-speme.
* SELECT
* SUM( mzubb ) AS mzubb"评估的库存收货数
* SUM( wzubb ) AS wzubb"估价的库存收货值
* SUM( magbb ) AS magbb"估价库存发货的数量
* SUM( wagbb ) AS wagbb"已发货的估价的库存值
* SUM( magkb ) AS magkb"已发出的寄售库存数量
* SUM( mgvbr ) AS mgvbr"全部使用数量
* SUM( wgvbr ) AS wgvbr"总使用值
* SUM( muvbr ) AS muvbr"未计划的用途数量
* SUM( wuvbr ) AS wuvbr"未计划的用途数值
* FROM s031 INTO CORRESPONDING FIELDS OF wa_s031
* WHERE matnr = it_show-matnr
* AND werks = p_werks
* AND lgort = it_show-lgort
** AND spmon BETWEEN fr_spmon AND to_spmon
* AND spmon <= to_spmon
* .
IF it_show-lgort IS INITIAL.
* SELECT SUM( lbkum )
* SUM( salk3 ) FROM ebew
* INTO (it_show-LBKUM,it_show-SALK3)
* WHERE matnr = it_show-matnr .
* IF sy-subrc <> 0 .
* DELETE it_show.
* CONTINUE.
* ENDIF.
*
* it_show-mbwbest = it_show-LBKUM.
* it_show-wbwbest = it_show-SALK3.
EXEC SQL .
select SUM( case when SHKZG = 'S' THEN MENGE ELSE -1*MENGE END ) as LBKUM
,SUM( case when SHKZG = 'S' THEN DMBTR ELSE -1*DMBTR END ) as salk3
from mseg
into :it_show-LBKUM,:it_show-salk3
WHERE matnr = :it_show-matnr
and exists (
select mblnr from mkpf
where BUDAT <= :v_to_date
and mkpf.mblnr = mseg.mblnr
and mkpf.MJAHR = mseg.MJAHR
and mkpf.mandt = mseg.mandt
)
and SOBKZ = 'E'
and mseg.mandt = :sy-mandt
ENDEXEC.
* IF sy-subrc <> 0 .
* DELETE it_show.
* CONTINUE.
* ENDIF.
* it_show-mbwbest = it_show-lbkum.
* it_show-salk3 = it_show-lbkum * it_show-verpr / it_show-peinh.
* it_show-wbwbest = it_show-salk3 .
ENDIF.
* READ TABLE it_mska1 WITH TABLE KEY matnr = it_show-matnr lgort = it_show-lgort INTO wa_mska.
READ TABLE it_s031c WITH TABLE KEY matnr = it_show-matnr lgort = it_show-lgort INTO wa_s031.
IF sy-subrc = 0 .
it_show-mbwbest = wa_s031-mzubb - wa_s031-magbb ."+ wa_mska-kalab + wa_mska-kains + wa_mska-kaspe..
it_show-wbwbest = wa_s031-wzubb - wa_s031-wagbb .
ENDIF.
CLEAR wa_mska.
* READ TABLE it_mska2 WITH TABLE KEY matnr = it_show-matnr lgort = it_show-lgort INTO wa_mska.
* READ TABLE it_s031b WITH TABLE KEY matnr = it_show-matnr lgort = it_show-lgort INTO wa_s031b.
* IF sy-subrc = 0 .
* it_show-sqkc = wa_s031b-mzubb + wa_s031b-magbb .
* ENDIF.
* IF it_show-mbwbest IS INITIAL AND it_show-lbkum IS INITIAL.
IF it_show-lgort IS INITIAL.
IF it_show-lgfsb IS NOT INITIAL.
it_show-lgort = it_show-lgfsb.
ELSE.
it_show-lgort = it_show-lgpro.
ENDIF.
* DELETE it_show.
* CONTINUE.
ENDIF.
* ELSE."如果上月有结余库存,库存 = 上月结余(冻结库存+非限制+质检库存) + 本月收货总数 - 本月发货总数。
**上期库存 = 当前库存 - 减去本月收 + 减去本月发
* CLEAR:wa_s031b.
* READ TABLE it_s031b WITH TABLE KEY matnr = it_show-matnr lgort = it_show-lgort INTO wa_s031b.
* it_show-mbwbest = wa_mardh-labst + wa_mardh-insme + wa_mardh-speme + wa_s031b-mzubb - wa_s031b-magbb.
* it_show-sqkc = wa_mardh-labst + wa_mardh-insme + wa_mardh-speme.
IF it_show-mbwbest = 0 AND it_show-lbkum = 0 AND it_show-wbwbest = 0.
DELETE it_show.
CONTINUE.
ENDIF.
* ENDIF.
*** 期间库存价值
* SELECT SINGLE vprsv
* verpr
* stprs
* peinh
* bklas FROM mbew
* INTO CORRESPONDING FIELDS OF wa_mbew
* WHERE matnr = it_show-matnr
* AND bwkey = p_werks
* AND lfmon = wa_mardh-lfmon
* AND lfgja = wa_mardh-lfgja
.
* IF sy-subrc <> 0 .
* DELETE it_show.
* CONTINUE.
* ENDIF.
* IF it_show-vprsv = 'S'.
* it_show-wbwbest = it_show-wbwbest + it_show-mbwbest * it_show-stprs / it_show-peinh .
** it_show-sqkcje = it_show-sqkcje + it_show-sqkc * it_show-stprs / it_show-peinh.
*
* ELSE.
* it_show-wbwbest = it_show-wbwbest + it_show-mbwbest * it_show-verpr / it_show-peinh .
** it_show-sqkcje = it_show-sqkcje + it_show-sqkc * it_show-verpr / it_show-peinh.
**
* ENDIF.
* READ TABLE it_s031b WITH TABLE KEY matnr = it_show-matnr lgort = it_show-lgort INTO wa_s031.
***end 查询期间库存
*** 最近24个月用量
CLEAR: wa_s031,itemp .
READ TABLE it_s031 WITH TABLE KEY matnr = it_show-matnr INTO wa_s031. "lgort = it_show-lgort
* SUM( mgvbr ) AS mgvbr"全部使用数量
* SUM( wgvbr ) AS wgvbr"总使用值
it_show-l24u = wa_s031-mgvbr .
it_show-l24v = wa_s031-wgvbr.
**新物料
itemp = datnow - it_show-ersda.
IF itemp < 365 .
it_show-xwl = 'X'.
ENDIF.
** 收货呆滞天数
IF it_show-letztzug IS INITIAL OR it_show-letztzug = '99991231'.
it_show-shdzts = 366.
ELSE.
it_show-shdzts = datnow - it_show-letztzug.
ENDIF.
**发货呆滞天数
IF it_show-letztabg IS INITIAL OR it_show-letztabg = '99991231'.
IF it_show-xwl = 'X'.
it_show-fhdzts = 1.
ELSE.
IF it_show-shdzts > 365.
it_show-fhdzts = 365.
ELSE.
it_show-fhdzts = it_show-shdzts.
ENDIF.
ENDIF.
ELSE.
it_show-fhdzts = datnow - it_show-letztabg.
ENDIF.
**呆滞天数取收货和发货呆滞天数中小的减一天
IF it_show-shdzts > it_show-fhdzts .
it_show-dzts = it_show-fhdzts - 1.
ELSE.
it_show-dzts = it_show-shdzts - 1.
ENDIF.
**obsolete
PERFORM sub_obsolete.
**inactive
PERFORM sub_inactive.
**surplus
PERFORM sub_surplus.
SHIFT it_show-matnr LEFT DELETING LEADING '0'.
MODIFY it_show.
ENDLOOP.
ENDFORM. " PRO_DATA
*&---------------------------------------------------------------------*
*& Form SUB_OBSOLETE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_obsolete .
DATA:mbwbest LIKE it_show-mbwbest,
wbwbest LIKE it_show-wbwbest.
mbwbest = it_show-mbwbest + it_show-lbkum.
wbwbest = it_show-wbwbest + it_show-salk3 .
IF it_show-mstae IS NOT INITIAL"停用标志
OR it_show-maktx CA '停用'"描述中有停用
OR it_show-lgort = '1002' "电工材料坏料仓
OR it_show-lgort = '1010' "电工OEM不良品专
OR it_show-lgort = '1102' "照明材料坏料仓
OR it_show-lgort = '1203' "变卖废品专用仓
.
*oqty TYPE p LENGTH 12 DECIMALS 3 ," Obsolete Qty
*oamt TYPE p LENGTH 12 DECIMALS 3 ," Obsolete Amount
it_show-oqty = mbwbest.
it_show-oamt = wbwbest.
ENDIF.
ENDFORM. " SUB_OBSOLETE
*&---------------------------------------------------------------------*
*& Form sub_inactive
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM sub_inactive.
*iqty TYPE p LENGTH 12 DECIMALS 3 ," Inactive Qty
*iamt TYPE p LENGTH 12 DECIMALS 3 ," Inactive Amount
DATA:mbwbest LIKE it_show-mbwbest,
wbwbest LIKE it_show-wbwbest.
mbwbest = it_show-mbwbest + it_show-lbkum.
wbwbest = it_show-wbwbest + it_show-salk3 .
IF it_show-xwl IS NOT INITIAL
AND it_show-oqty = 0
AND it_show-oamt = 0
AND
( it_show-dzts > 365
OR it_show-lgort = '1003'"电工物料呆滞仓
OR it_show-lgort = '1014'"电工成品呆滞仓
OR it_show-lgort = '1103'"照明物料呆滞仓
OR it_show-lgort = '1114'"照明成品呆滞仓
OR it_show-lgort = '1205'"OEM成品呆滞仓
)
.
it_show-iqty = mbwbest.
it_show-iamt = wbwbest.
ENDIF.
ENDFORM. "sub_inactive
*&---------------------------------------------------------------------*
*& Form SUB_SURPLUS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_surplus .
DATA:mbwbest LIKE it_show-mbwbest,
wbwbest LIKE it_show-wbwbest.
mbwbest = it_show-mbwbest + it_show-lbkum.
wbwbest = it_show-wbwbest + it_show-salk3 .
* New Material is only calculate quatity.
IF it_show-xwl = 'X'.
*splusqty TYPE p LENGTH 12 DECIMALS 3 ," surplus qty
*splusrsv TYPE p LENGTH 12 DECIMALS 3 ," surplus reserve
it_show-splusqty = mbwbest.
ENDIF.
* store-quantity - obsolate - inactive > 24mUes
IF it_show-oqty = 0 AND it_show-iqty = 0 AND mbwbest > it_show-l24u.
it_show-splusqty = mbwbest.
ENDIF.
IF it_show-oamt = 0 AND it_show-iamt = 0 AND wbwbest > it_show-l24v.
it_show-splusrsv = wbwbest.
ENDIF.
ENDFORM. " SUB_SURPLUS
*&---------------------------------------------------------------------*
*& Form SHOW_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM show_data .
DATA:v_title TYPE string.
v_title = LINES( it_show ).
CONCATENATE '数据条数:' v_title INTO v_title.
alv_set_status.
* alv_set_title v_title.
alv_clear_data.
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'WERKS' '工厂' ."工厂
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'LGORT' '实际仓位' ."仓位
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'MTART' '物料类型' ."物料类型
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'MATNR' '物料' ."物料
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'MAKTX' '物料描述' ."物料描述
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'BASME' '单位' ."单位
* alv_add_data 'IT_SHOW' 'X' ' ' '' 'X' 'CHAR' 'SQKC' '上前库存数量' ."
* alv_add_data 'IT_SHOW' 'X' ' ' '' 'X' 'CHAR' 'SQKCJE' '上前库存金额' .
alv_add_data 'IT_SHOW' 'X' ' ' '' 'X' 'CHAR' 'MBWBEST' '当前库存数量' ."
alv_add_data 'IT_SHOW' 'X' ' ' '' 'X' 'CHAR' 'WBWBEST' '当前库存金额' .
*
alv_add_data 'IT_SHOW' 'X' ' ' '' 'X' 'CHAR' 'LBKUM' '订单库存' ."
alv_add_data 'IT_SHOW' 'X' ' ' '' 'X' 'CHAR' 'SALK3' '订单库存金额' .
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'LETZTBEW' '最近移动' ."最后一次收货
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'LETZTZUG' '最后一次收货' ."最后一次收货
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'LETZTABG' '最后一次发货' ."最后一次发货
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'LETZTVER' '最后一次消耗' ."最后一次消耗
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'DZTS' '呆滞天数' ."呆滞天数
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'XWL' 'New 物料' ."New 物料
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'SHDZTS' 'Aging Days(收)' ."Aging Days(收)
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'FHDZTS' 'Aging Days(发)' ."Aging Days(发)
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'OQTY' 'Obsolete Qty' ."Obsolete Qty
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'OAMT' 'Obsolete Amount' ."Obsolete Amount
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'IQTY' 'Inactive Qty' ."Inactive Qty
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'IAMT' 'Inactive Amount' ."Inactive Amount
alv_add_data 'IT_SHOW' 'X' ' ' '' 'X' 'CHAR' 'L24U' '最近24个月用量' ."Last 24m Usage
alv_add_data 'IT_SHOW' 'X' ' ' '' 'X' 'CHAR' 'L24V' '最近24个月用值' ."Last 24m Usage
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'AFTIOQTY' 'Qty After IO' ."Qty After IO
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'SPLUSQTY' 'surplus qty' ."surplus qty
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'SPLUSRSV' 'surplus reserve' ."surplus reserve
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'LSTPRC' 'Latest Price' ."Latest Price
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'PRCCST' 'Price vs. Cost' ."Price vs. Cost
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'LCM' 'LCM' ."LCM
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'ZP' '展品(Y)' ."展品(Y)
alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'RMK(200)' 'Remark' ."Remark
* alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'VPRSV' '价格控制' ."
* alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'VERPR' '移动平均价' ."
* alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'STPRS' '标准价' .
* alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'PEINH' '价格单位' ."
* alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'LGFSB' '采购仓位' ."
* alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'LGPRO' '自制仓位' ."
* alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'LVORM' '删除标记' ."删除
* alv_add_data 'IT_SHOW' '' ' ' '' 'X' 'CHAR' 'MSTAE' '停用状态' ."
alv_show_data it_show.
ENDFORM. " SHOW_DATA
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
* text 处理双击事件
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
*
CASE r_ucomm.
WHEN '&IC1'.
* CASE rs_selfield-sel_tab_field.
* WHEN 'ITAB-VBELN'.
* SET PARAMETER ID 'AUN' FIELD rs_selfield-value.
* CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
* WHEN 'ITAB2-VBELN'.
* SET PARAMETER ID 'AUN' FIELD rs_selfield-value.
* CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
* ENDCASE.
WHEN '&SAV'.
IF p_dd = 'X'.
my_exit '订单库存查询时不能保存!' 'I'.
ENDIF.
DATA count TYPE i.
SELECT COUNT( * ) FROM yios INTO count
WHERE bdatj = p_year
AND bumon = p_month.
IF count > 0 .
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
defaultoption = 'Y'
textline1 = '此期间存在数据,保存将覆盖,点击"是"确认保存,点击"否" 取消保存'
textline2 = ''
titel = '保存提示'
start_column = 25
start_row = 6
cancel_display = ''
IMPORTING
answer = ucomm.
IF ucomm NE 'N'.
PERFORM save_data.
ELSE.
MESSAGE '操作被取消' TYPE 'S'.
ENDIF.
ELSE.
PERFORM save_data.
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDFORM. "user_command
*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'ZSTANDARD' .
ENDFORM. "set_pf_status
*&---------------------------------------------------------------------*
*& Form SAVE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM save_data .
MODIFY yios FROM TABLE it_show.
msg = LINES( it_show ).
CONCATENATE '成功保存:' msg '条数据!' INTO msg.
MESSAGE msg TYPE 'S'.
ENDFORM. " SAVE_DATA
**************************< 以下是过程 >********************************
*&---------------------------------------------------------------------*
*& Form CHECK_AUTHORITY_VALUE
*&---------------------------------------------------------------------*
FORM check_authority_value .
DATA: lv_monat(3) TYPE n, v_periv LIKE t001-periv.
AUTHORITY-CHECK OBJECT 'YREPORT'
ID 'BUKRS' FIELD 'HL01'
ID 'WERKS' FIELD 'LN01'.
IF sy-subrc NE 0.
MESSAGE e005(ymess) WITH 'No Authorization!'.
ENDIF.
* CONCATENATE p_gjahr p_monat '01' INTO v_fr_date. "得到本期间第一天 ZHOUXU V1.0 DEL
lv_monat = p_month.
SELECT SINGLE waers periv FROM t001
INTO (v_waers,v_periv)
WHERE bukrs = 'HL01'.
*------------------ 得到期间第一天--------------------
CALL FUNCTION 'FIRST_DAY_IN_PERIOD_GET' "取本月期间第一天
EXPORTING
i_gjahr = p_year "会计年度
i_periv = v_periv "会计年度变式K4
i_poper = lv_monat "期间(3位N)''
IMPORTING
e_date = v_fr_date.
*----------------begin 得到24个月的前的会计年度和月份-----------
v_edate = v_fr_date - 1.
DATA:dat TYPE d, "上个月的第一天,临时变量
i TYPE i.
dat = v_edate.
CALL FUNCTION 'DATE_TO_PERIOD_CONVERT' "得到上期间会计年度和月份
EXPORTING
i_date = dat
i_periv = v_periv
IMPORTING
e_buper = p_buper
e_gjahr = p_gjahr.
WHILE i < 24.
i = i + 1 .
CALL FUNCTION 'DATE_TO_PERIOD_CONVERT' "得到上期间会计年度和月份
EXPORTING
i_date = dat
i_periv = v_periv
IMPORTING
e_buper = e_buper
e_gjahr = e_gjahr.
CALL FUNCTION 'FIRST_DAY_IN_PERIOD_GET' "取本月期间第一天
EXPORTING
i_gjahr = e_gjahr "会计年度
i_periv = v_periv "会计年度变式K4
i_poper = e_buper "期间(3位N)''
IMPORTING
e_date = dat.
dat = dat - 1 .
ENDWHILE.
*----------------END 得到24个月的前的会计年度和月份-----------
CALL FUNCTION 'LAST_DAY_IN_PERIOD_GET' "取本月最后一天
EXPORTING
i_gjahr = p_year "会计年度
i_periv = v_periv "会计年度变式K4
i_poper = lv_monat "期间(3位N)''
IMPORTING
e_date = v_to_date.
IF v_edate = 0.
MESSAGE '[会计年度] 或 [会计期间] 输入错误, 请检查输入!' TYPE 'S' .
STOP.
ENDIF.
"得到上月末
IF v_edate(6) < '200808'.
MESSAGE '[会计年度] 或 [会计期间] 不能早于上线时间:2008年9月, 请检查输入!' TYPE 'S' .
STOP.
ENDIF.
IF v_to_date > sy-datum.
datnow = sy-datum.
ELSE.
datnow = v_to_date .
ENDIF.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = '程序正在运行中,请稍候...'.
ENDFORM. " CHECK_AUTHORITY_VALUE
*&---------------------------------------------------------------------*
*& Form APPEND_MSEG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
*FORM append_mseg .
* INSERT wa_mseg INTO TABLE it_mseg .
*ENDFORM. " APPEND_MSEG