&---------------------------------------------------------------------
*& Report ZCORP009
&---------------------------------------------------------------------
*&
&---------------------------------------------------------------------
REPORT zcorp009.
SELECTION-SCREEN: FUNCTION KEY 1. "激活
TYPE-POOLS: slis .
DATA: gt_cat TYPE slis_t_fieldcat_alv,
wa_cat TYPE slis_fieldcat_alv,
gt_layout TYPE slis_layout_alv,
lr_grid TYPE REF TO cl_gui_alv_grid.
TABLES: marc,mara,t001l,sscrfields.
**>Start of IntMsg 4666154 2012
TYPES: BEGIN OF ts_pdate,
index TYPE i,
pdates TYPE zzl,
low TYPE zzl,
high TYPE zzl,
ptitle TYPE c LENGTH 50,
END OF ts_pdate.
TYPES:tt_pdate TYPE TABLE OF ts_pdate.
DATA: BEGIN OF ls_mx,
kcsj LIKE sy-datum,
bukrs LIKE mseg-bukrs,
butxt LIKE t001-butxt,
werks LIKE mseg-werks,
lgort LIKE t001l-lgort,
name1 LIKE t001w-name1,
lgobe LIKE t001l-lgobe,
matnr LIKE mseg-matnr,
maktx LIKE makt-maktx,
labor LIKE mara-labor,
matkl LIKE mara-matkl,
wgbez LIKE t023t-wgbez,
bklas LIKE mbew-bklas,
bkbez LIKE t025t-bkbez,
" spart LIKE mara-spart, "产品组
" vtext LIKE tspat-vtext,
kdauf LIKE mseg-kdauf, "销售订单
kdpos LIKE mseg-kdpos,
poski LIKE prps-poski,
post1 LIKE prps-post1,
sobkz LIKE mseg-sobkz, "库存标识
lifnr LIKE mseg-lifnr,
budatrk LIKE mseg-budat_mkpf,
budatck LIKE mseg-budat_mkpf,
menge LIKE mseg-menge,
dmbtr TYPE p DECIMALS 5, "LIKE MSEG-DMBTR,
pjdj TYPE p LENGTH 16 DECIMALS 10,
km01 LIKE mseg-menge,
kd01 TYPE p DECIMALS 5, "LIKE MSEG-DMBTR,
km02 LIKE mseg-menge,
kd02 TYPE p DECIMALS 5, "LIKE MSEG-DMBTR,
km03 LIKE mseg-menge,
kd03 TYPE p DECIMALS 5, "LIKE MSEG-DMBTR,
km04 LIKE mseg-menge,
kd04 TYPE p DECIMALS 5, "LIKE MSEG-DMBTR,
km05 LIKE mseg-menge,
kd05 TYPE p DECIMALS 5, "LIKE MSEG-DMBTR,
km06 LIKE mseg-menge,
kd06 TYPE p DECIMALS 5, "LIKE MSEG-DMBTR,
km07 LIKE mseg-menge,
kd07 TYPE p DECIMALS 5, "LIKE MSEG-DMBTR,
km08 LIKE mseg-menge,
kd08 TYPE p DECIMALS 5, "LIKE MSEG-DMBTR,
km09 LIKE mseg-menge,
kd09 TYPE p DECIMALS 5, "LIKE MSEG-DMBTR,
km10 LIKE mseg-menge,
kd10 TYPE p DECIMALS 5, "LIKE MSEG-DMBTR,
pspnr LIKE mseg-ps_psp_pnr,
bwkey LIKE t001w-bwkey,
kalnr LIKE ckmlhd-kalnr,
linecolor(4) TYPE c,
saknr TYPE saknr,
txt20 TYPE txt20_skat,
meins TYPE mara-meins,
qty LIKE mseg-menge,
amount TYPE p DECIMALS 5,
END OF ls_mx,
lt_mx LIKE TABLE OF ls_mx.
DATA: BEGIN OF ls_wk,
bukrs TYPE bukrs,
werks TYPE werks_d,
name1 LIKE t001w-name1,
END OF ls_wk,
lt_wk LIKE TABLE OF ls_wk.
DATA: BEGIN OF gt_mseg OCCURS 0,
mblnr LIKE mseg-mblnr,
mjahr LIKE mseg-mjahr,
zeile LIKE mseg-zeile,
bwart LIKE mseg-bwart,
matnr LIKE mseg-matnr,
werks LIKE mseg-werks,
lgort LIKE mseg-lgort,
charg LIKE mseg-charg,
budat LIKE mseg-budat_mkpf,
END OF gt_mseg.
DATA gt_pdates TYPE tt_pdate.
DATA gt_pdates_new TYPE tt_pdate.
DATA gs_pdate TYPE ts_pdate.
DATA gs_pdate_new TYPE ts_pdate.
DATA gw_pdate TYPE ts_pdate.
DATA: BEGIN OF gs_date_intvl,
num TYPE zzl,
END OF gs_date_intvl.
DATA gt_date_intvl LIKE TABLE OF gs_date_intvl.
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE TEXT-s01 .
PARAMETERS: p_bukrs LIKE bkpf-bukrs OBLIGATORY.
SELECT-OPTIONS : s_werks FOR marc-werks,
s_matnr FOR mara-matnr,
s_lgort FOR t001l-lgort,
s_mtart FOR mara-mtart,
s_matkl FOR mara-matkl.
PARAMETERS: p_jzrq LIKE sy-datum OBLIGATORY.
SELECTION-SCREEN: BEGIN OF BLOCK blk0 .
PARAMETERS: p_ck1 TYPE c RADIOBUTTON GROUP grp1 DEFAULT ‘X’ USER-COMMAND a,
p_ck6 TYPE c RADIOBUTTON GROUP grp1.
SELECTION-SCREEN END OF BLOCK blk0.
-
PARAMETERS: p_ck1 AS CHECKBOX DEFAULT ‘X’, "工厂库存
-
p_ck2 AS CHECKBOX DEFAULT 'X', "批次库存
-
p_ck3 AS CHECKBOX DEFAULT 'X', "项目库存
-
p_ck4 AS CHECKBOX DEFAULT 'X', "销售订单库存
-
p_ck5 AS CHECKBOX DEFAULT 'X', "客户寄售库存
-
p_ck6 AS CHECKBOX DEFAULT ''. "委外商库存
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(8) com_zl.
SELECTION-SCREEN END OF LINE.SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(8) com_zl1.
SELECTION-SCREEN POSITION 10.
PARAMETERS: p_zl1 TYPE zzl DEFAULT 30.
SELECTION-SCREEN COMMENT 18(4) com_t1.
SELECTION-SCREEN END OF LINE.SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(8) com_zl2.
SELECTION-SCREEN POSITION 10.
PARAMETERS: p_zl2 TYPE zzl DEFAULT 60.
SELECTION-SCREEN COMMENT 18(4) com_t2.
SELECTION-SCREEN END OF LINE.SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(8) com_zl3.
SELECTION-SCREEN POSITION 10.
PARAMETERS: p_zl3 TYPE zzl DEFAULT 90.
SELECTION-SCREEN COMMENT 18(4) com_t3.
SELECTION-SCREEN END OF LINE.SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(8) com_zl4.
SELECTION-SCREEN POSITION 10.
PARAMETERS: p_zl4 TYPE zzl DEFAULT 120.
SELECTION-SCREEN COMMENT 18(4) com_t4.
SELECTION-SCREEN END OF LINE.SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(8) com_zl5.
SELECTION-SCREEN POSITION 10.
PARAMETERS: p_zl5 TYPE zzl DEFAULT 180.
SELECTION-SCREEN COMMENT 18(4) com_t5.
SELECTION-SCREEN END OF LINE.SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(8) com_zl6.
SELECTION-SCREEN POSITION 10.
PARAMETERS: p_zl6 TYPE zzl DEFAULT 360.
SELECTION-SCREEN COMMENT 18(4) com_t6.
SELECTION-SCREEN END OF LINE.SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(8) com_zl7.
SELECTION-SCREEN POSITION 10.
PARAMETERS: p_zl7 TYPE zzl DEFAULT 720.
SELECTION-SCREEN COMMENT 18(4) com_t7.
SELECTION-SCREEN END OF LINE.SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(8) com_zl8.
SELECTION-SCREEN POSITION 10.
PARAMETERS: p_zl8 TYPE zzl DEFAULT 1440.
SELECTION-SCREEN COMMENT 18(4) com_t8.
SELECTION-SCREEN END OF LINE.SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(8) com_zl9.
SELECTION-SCREEN POSITION 10.
PARAMETERS: p_zl9 TYPE zzl.
SELECTION-SCREEN COMMENT 18(8) com_t9.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b01 .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_werks-low.
PERFORM sub_werks_vq.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_werks-high.
PERFORM sub_werks_vq.
INITIALIZATION .
- com_mx = ‘明细显示’.
- com_hz = ‘汇总显示’.
- com_km = ‘科目汇总显示’.
com_zl = ‘账龄间隔’.
com_zl1 = ‘账龄间隔1:’.com_zl2 = ‘账龄间隔2:’.com_zl3 = ‘账龄间隔3:’.com_zl4 = ‘账龄间隔4:’.com_zl5 = ‘账龄间隔5:’.
com_zl6 = ‘账龄间隔6:’.com_zl7 = ‘账龄间隔7:’.com_zl8 = ‘账龄间隔8:’.com_zl9 = ‘账龄间隔9:’.
com_t1 = ‘天’.com_t2 = ‘天’.com_t3 = ‘天’.com_t4 = ‘天’.com_t5 = ‘天’.com_t6 = ‘天’.com_t7 = ‘天’.com_t8 = ‘天’.com_t9 = ‘天’.
p_jzrq = sy-datum.
sscrfields-functxt_01 = icon_tools && ‘期初库龄’.
AT SELECTION-SCREEN.
IF sscrfields-ucomm = ‘ONLI’.
PERFORM frm_check_date.
ELSEIF sscrfields-ucomm = ‘FC01’.
SUBMIT zco012a VIA SELECTION-SCREEN AND RETURN.
ENDIF.
START-OF-SELECTION.
IF p_zl1 = 0 OR p_zl1 IS INITIAL.
MESSAGE ‘账龄间隔1 不能为空或0’ TYPE ‘S’ DISPLAY LIKE ‘E’.
STOP.
ENDIF.
AUTHORITY-CHECK OBJECT ‘F_BKPF_BUK’
ID ‘BUKRS’ FIELD p_bukrs
ID ‘ACTVT’ FIELD ‘03’.
IF sy-subrc NE 0.
MESSAGE ‘缺失公司代码 权限’ TYPE ‘I’ DISPLAY LIKE ‘E’.
STOP.
ENDIF.
PERFORM ready_report.
FORM sub_werks_vq .
DATA dynpfields TYPE TABLE OF dynpread WITH HEADER LINE.
dynpfields-fieldname = ‘P_BUKRS’.
APPEND dynpfields.
CALL FUNCTION ‘DYNP_VALUES_READ’
EXPORTING
dyname = sy-cprog
dynumb = sy-dynnr
TABLES
dynpfields = dynpfields
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
IF sy-subrc EQ 0.
READ TABLE dynpfields WITH KEY ‘P_BUKRS’.
IF sy-subrc = 0.
p_bukrs = dynpfields-fieldvalue.
TRANSLATE p_bukrs TO UPPER CASE.
ENDIF.
ENDIF.
SELECT DISTINCT a~werks b~bukrs a~name1 INTO CORRESPONDING FIELDS OF TABLE lt_wk
FROM t001w AS a INNER JOIN t001k AS b ON a~bwkey = b~bwkey
WHERE b~bukrs = p_bukrs.
CALL FUNCTION ‘F4IF_INT_TABLE_VALUE_REQUEST’
EXPORTING
retfield = ‘WERKS’
dynpprog = sy-cprog
dynpnr = ‘1000’
dynprofield = ‘S_WERKS’
value_org = ‘S’
TABLES
value_tab = lt_wk
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
FORM ready_report .
PERFORM get_data.
PERFORM pre_fieldcat.
PERFORM set_layout.
PERFORM f_alv_display .
ENDFORM.
FORM pre_fieldcat .
REFRESH gt_cat.
DEFINE ht.
CLEAR wa_cat.
wa_cat-fieldname = &1.
wa_cat-seltext_l = &2.
wa_cat-checkbox = &3 .
wa_cat-edit = &4.
wa_cat-intlen = &5.
IF wa_cat-fieldname = ‘MENGE’ OR
wa_cat-fieldname = ‘QTY’.
wa_cat-qfieldname = ‘MEINS’.
ENDIF.
APPEND wa_cat TO gt_cat.
END-OF-DEFINITION .
ht: ‘KCSJ’ ‘库存日期’ ‘’ ‘’ ‘’ .
ht: ‘BUKRS’ ‘公司代码’ ‘’ ‘’ ‘’ .
ht: ‘BUTXT’ ‘公司描述’ ‘’ ‘’ ‘’ .
- IF p_hz = ‘X’ OR p_mx = ‘X’.
ht: ‘WERKS’ ‘工厂编码’ ‘’ ‘’ ‘’ .
ht: ‘NAME1’ ‘工厂描述’ ‘’ ‘’ ‘’ .
ht: ‘LGORT’ ‘库位’ ‘’ ‘’ ‘’ .
ht: ‘LGOBE’ ‘库位描述’ ‘’ ‘’ ‘’ .
ht: ‘MATNR’ ‘物料编码’ ‘’ ‘’ ‘18’ .
ht: ‘MAKTX’ ‘物料描述’ ‘’ ‘’ ‘’ . - ht: ‘LABOR’ ‘实验室/办公室’ ‘’ ‘’.
ht: ‘MATKL’ ‘物料组’ ‘’ ‘’ ‘’ .
ht: ‘WGBEZ’ ‘物料组描述’ ‘’ ‘’ ‘’ . - ht: ‘SPART’ ‘产品组’ ‘’ ‘’.
- ht: ‘VTEXT’ ‘产品组描述’ ‘’ ‘’.
ht: ‘BKLAS’ ‘评估类’ ‘’ ‘’ ‘’ .
ht: ‘BKBEZ’ ‘评估类描述’ ‘’ ‘’ ‘’ .
- ENDIF.
- IF p_km = ‘X’.
- ht: ‘SAKNR’ ‘科目编码’ ‘’ ‘’.
- ht: ‘TXT20’ ‘科目描述’ ‘’ ‘’.
- ENDIF.
ht: ‘SOBKZ’ ‘特殊库存’ ‘’ ‘’ ‘’ .
ht: ‘LIFNR’ ‘供应商’ ‘’ ‘’ ‘’ . - IF p_mx = ‘X’.
ht: ‘KDAUF’ ‘销售订单’ ‘’ ‘’ ‘’ .
ht: ‘KDPOS’ ‘销售订单行项目’ ‘’ ‘’ ‘’ . - ENDIF.
ht: ‘BUDATRK’ ‘最后入库时间’ ‘’ ‘’ ‘’ .
ht: ‘BUDATCK’ ‘最后出库时间’ ‘’ ‘’ ‘’ .
ht: ‘QTY’ ‘总数量’ ‘’ ‘’ ‘’ . - ht: ‘MENGE’ ‘当前库存总数量’ ‘’ ‘’.
- IF p_km = ‘X’.
- ELSE.
ht: ‘MEINS’ ‘单位’ ‘’ ‘’ ‘’ . - ENDIF.
ht: ‘AMOUNT’ ‘总金额’ ‘’ ‘’ ‘’ .
- ht: ‘DMBTR’ ‘当前库存总金额’ ‘’ ‘’.
- IF p_km = ‘X’.
- ELSE.
ht: ‘PJDJ’ ‘平均单价’ ‘’ ‘’ ‘’ . - ENDIF.
gt_pdates_new[] = gt_pdates[].
SORT gt_pdates_new BY index ASCENDING.
DATA: lw_char1(20) TYPE c.
DATA: lw_char2(20) TYPE c.
DATA: lv_lines TYPE i.
lv_lines = 0.
LOOP AT gt_pdates_new INTO gs_pdate_new.
ADD 1 TO lv_lines.
CLEAR: lw_char1.
CONCATENATE gs_pdate_new-ptitle '数量' INTO lw_char1.
CONCATENATE gs_pdate_new-ptitle '金额' INTO lw_char2.
CASE lv_lines.
WHEN 1.
ht: 'KM01' lw_char1 '' '' ''.
ht: 'KD01' lw_char2 '' '' ''.
WHEN 2.
ht: 'KM02' lw_char1 '' '' ''.
ht: 'KD02' lw_char2 '' '' ''.
WHEN 3.
ht: 'KM03' lw_char1 '' '' ''.
ht: 'KD03' lw_char2 '' '' ''.
WHEN 4.
ht: 'KM04' lw_char1 '' '' ''.
ht: 'KD04' lw_char2 '' '' ''.
WHEN 5.
ht: 'KM05' lw_char1 '' '' ''.
ht: 'KD05' lw_char2 '' '' ''.
WHEN 6.
ht: 'KM06' lw_char1 '' '' ''.
ht: 'KD06' lw_char2 '' '' ''.
WHEN 7.
ht: 'KM07' lw_char1 '' '' ''.
ht: 'KD07' lw_char2 '' '' ''.
WHEN 8.
ht: 'KM08' lw_char1 '' '' ''.
ht: 'KD08' lw_char2 '' '' ''.
WHEN 9.
ht: 'KM09' lw_char1 '' '' ''.
ht: 'KD09' lw_char2 '' '' ''.
WHEN 10.
ht: 'KM10' lw_char1 '' '' ''.
ht: 'KD10' lw_char2 '' '' ''.
ENDCASE.
ENDLOOP.
ENDFORM.
FORM get_data.
DATA: ls_mslb LIKE mslb,
lt_mslb LIKE TABLE OF ls_mslb,
ls_mslbh LIKE mslbh,
lt_mslbh LIKE TABLE OF ls_mslbh.
CLEAR: lt_mx.
DATA: l_lfgja TYPE lfgja,
l_lfmon TYPE lfmon.
l_lfgja = p_jzrq+0(4).
l_lfmon = p_jzrq+4(2).
IF s_werks[] IS INITIAL.
SELECT DISTINCT a~werks b~bukrs a~name1
INTO CORRESPONDING FIELDS OF TABLE lt_wk
FROM t001w AS a INNER JOIN t001k AS b
ON a~bwkey = b~bwkey
WHERE b~bukrs = p_bukrs.
LOOP AT lt_wk INTO ls_wk.
CLEAR s_werks.
s_werks-sign = 'I'.
s_werks-option = 'EQ'.
s_werks-low = ls_wk-werks.
APPEND s_werks.
ENDLOOP.
ENDIF.
"期初库存
SELECT * INTO TABLE @DATA(gt_ztco012) FROM ztco012
WHERE werks IN @s_werks.
SORT gt_ztco012 BY werks matnr lgort sobkz lifnr budat .
DATA: BEGIN OF ls_m,
matnr TYPE matnr,
werks TYPE werks_d,
lgort TYPE lgort_d,
charg TYPE charg_d,
sobkz TYPE sobkz,
kunnr TYPE kunnr,
kdauf TYPE kdauf,
kdpos TYPE kdpos,
lifnr TYPE lifnr,
pspnr TYPE ps_psp_pnr,
bwart TYPE bwart,
labst TYPE labst,
datum TYPE datum,
dmbtr TYPE dmbtr,
lbkum TYPE lbkum,
salk3 TYPE salk3,
-
uzeit TYPE uzeit, sernr LIKE objk-sernr, END OF ls_m, lt_m LIKE TABLE OF ls_m, lt_mw like table of ls_m.
CLEAR: ls_m,lt_m.
DATA: ls_mard LIKE mard,
lt_mard LIKE TABLE OF ls_mard,
ls_mardh LIKE mardh,
lt_mardh LIKE TABLE OF ls_mardh.
DATA: ls_marc LIKE marc,
lt_marc LIKE TABLE OF ls_marc,
ls_march LIKE march,
lt_march LIKE TABLE OF ls_march.
DATA: ls_mska LIKE mska,
lt_mska LIKE TABLE OF ls_mska,
ls_mskah LIKE mskah,
lt_mskah LIKE TABLE OF ls_mskah.
RANGES: r_xlm FOR mara-matnr,
r_qtm FOR mara-matnr.
DATA: l_quant TYPE ml4h_quantity,
l_stval TYPE ml4h_stval,
l_per TYPE ml4h_jahrper.
DATA: lwedt TYPE mch1-lwedt.DATA: lw_ TYPE c,
lw_rq TYPE sy-datum,
lw_lx TYPE i,
lw_sl LIKE mseg-menge,
lw_so LIKE mseg-menge,
ls_xl LIKE ls_m,
lt_xl LIKE TABLE OF ls_xl,
ls_qt LIKE ls_m,
lt_qt LIKE TABLE OF ls_qt,
lt_qto LIKE TABLE OF ls_qt,
lt_qts LIKE TABLE OF ls_qt,
gt_qt LIKE TABLE OF ls_qt,
lt_qth LIKE TABLE OF ls_qt,
gs_qth LIKE ls_qt,
gt_qth LIKE TABLE OF ls_qt,
ls_qts LIKE ls_qt,
gt_qt413 LIKE TABLE OF ls_qt,
gs_qt411 LIKE ls_qt,
gt_qt411 LIKE TABLE OF ls_qt.
DATA: ls_ckmlcr TYPE ckmlcr,
lt_ckmlcr TYPE TABLE OF ckmlcr,
num TYPE i,
fag type char1.
"库位库龄
IF p_ck1 = ‘X’.CLEAR: lt_mard,lt_mardh.
SELECT *
INTO TABLE lt_mard
FROM mard
WHERE werks IN s_werks
AND matnr IN s_matnr
AND matnr IN ( SELECT matnr FROM mara WHERE matnr IN s_matnr AND lgort IN s_lgort AND mtart IN s_mtart AND matkl IN s_matkl AND xchpf = ‘’ ).SELECT *
INTO TABLE lt_mardh
FROM mardh
WHERE werks IN s_werks
AND matnr IN s_matnr
AND matnr IN ( SELECT matnr FROM mara WHERE matnr IN s_matnr AND lgort IN s_lgort AND mtart IN s_mtart AND matkl IN s_matkl AND xchpf = ‘’)
AND lfgja = l_lfgja
AND lfmon = l_lfmon
AND ( labst > 0 OR insme > 0 OR speme > 0 ).LOOP AT lt_mard INTO ls_mard.
IF ( ( ls_mard-lfgja = l_lfgja AND ls_mard-lfmon <= l_lfmon ) OR ls_mard-lfgja < l_lfgja ).
ls_m-matnr = ls_mard-matnr.
ls_m-werks = ls_mard-werks.
ls_m-lgort = ls_mard-lgort.
ls_m-labst = ls_mard-labst + ls_mard-insme + ls_mard-speme + ls_mard-umlme.
COLLECT ls_m INTO lt_m.
ELSE.
CLEAR:ls_mardh.
READ TABLE lt_mardh INTO ls_mardh WITH KEY matnr = ls_mard-matnr
werks = ls_mard-werks
lgort = ls_mard-lgort
lfgja = l_lfgja
lfmon = l_lfmon.
IF sy-subrc = 0.
ls_m-matnr = ls_mardh-matnr.
ls_m-werks = ls_mardh-werks.
ls_m-lgort = ls_mardh-lgort.
ls_m-labst = ls_mardh-labst + ls_mardh-insme + ls_mardh-speme + ls_mard-umlme.
COLLECT ls_m INTO lt_m.
ENDIF.
ENDIF.
CLEAR: ls_m,ls_mard.
ENDLOOP.CLEAR: lt_marc,lt_march.
SELECT *
INTO TABLE lt_marc
FROM marc
WHERE werks IN s_werks
AND matnr IN s_matnr
AND matnr IN ( SELECT matnr FROM mara WHERE matnr IN s_matnr AND mtart IN s_mtart AND matkl IN s_matkl AND xchpf = ‘’).SELECT *
INTO TABLE lt_march
FROM march
WHERE werks IN s_werks
AND matnr IN s_matnr
AND matnr IN ( SELECT matnr FROM mara WHERE matnr IN s_matnr AND mtart IN s_mtart AND matkl IN s_matkl AND xchpf = ‘’)
AND lfgja = l_lfgja
AND lfmon = l_lfmon
AND ( bwesb > 0 OR trame > 0 OR umlmc > 0 ).LOOP AT lt_marc INTO ls_marc.
IF ( ( ls_marc-lfgja = l_lfgja AND ls_marc-lfmon <= l_lfmon ) OR ls_marc-lfgja < l_lfgja ).
ls_m-matnr = ls_marc-matnr.
ls_m-werks = ls_marc-werks.
ls_m-labst = ls_marc-bwesb + ls_marc-trame + ls_marc-umlmc.
COLLECT ls_m INTO lt_m.
ELSE.
CLEAR:ls_march.
READ TABLE lt_march INTO ls_march WITH KEY matnr = ls_marc-matnr
werks = ls_marc-werks
lfgja = l_lfgja
lfmon = l_lfmon.
IF sy-subrc = 0.
ls_m-matnr = ls_march-matnr.
ls_m-werks = ls_march-werks.
ls_m-labst = ls_march-bwesb + ls_march-trame + ls_march-umlmc.
COLLECT ls_m INTO lt_m.
ENDIF.
ENDIF.
CLEAR: ls_m,ls_marc.
ENDLOOP. -
ENDIF.
"销售订单库存
-
IF p_ck4 = ‘X’.
CLEAR: lt_mska,lt_mskah.
SELECT *
INTO TABLE lt_mska
FROM mska
WHERE werks IN s_werks
AND matnr IN s_matnr
AND matnr IN ( SELECT matnr FROM mara WHERE matnr IN s_matnr AND lgort IN s_lgort AND mtart IN s_mtart AND matkl IN s_matkl ).SELECT *
INTO TABLE lt_mskah
FROM mskah
WHERE werks IN s_werks
AND matnr IN s_matnr
AND matnr IN ( SELECT matnr FROM mara WHERE matnr IN s_matnr AND lgort IN s_lgort AND mtart IN s_mtart AND matkl IN s_matkl )
AND lfgja = l_lfgja
AND lfmon = l_lfmon
AND ( kalab > 0 OR kains > 0 OR kaspe > 0 ).LOOP AT lt_mska INTO ls_mska.
IF ( ( ls_mska-lfgja = l_lfgja AND ls_mska-lfmon <= l_lfmon ) OR ls_mska-lfgja < l_lfgja ).
ls_m-matnr = ls_mska-matnr.
ls_m-werks = ls_mska-werks.
ls_m-lgort = ls_mska-lgort.
ls_m-charg = ls_mska-charg.
ls_m-sobkz = ls_mska-sobkz.
ls_m-kdauf = ls_mska-vbeln.
ls_m-kdpos = ls_mska-posnr.
ls_m-labst = ls_mska-kalab + ls_mska-kains + ls_mska-kaspe.
COLLECT ls_m INTO lt_m.
ELSE.
CLEAR:ls_mskah.
READ TABLE lt_mskah INTO ls_mskah WITH KEY matnr = ls_mska-matnr
werks = ls_mska-werks
charg = ls_mska-charg
sobkz = ls_mska-sobkz
vbeln = ls_mska-vbeln
posnr = ls_mska-posnr
lgort = ls_mska-lgort
lfgja = l_lfgja
lfmon = l_lfmon.
IF sy-subrc = 0.
ls_m-matnr = ls_mskah-matnr.
ls_m-werks = ls_mskah-werks.
ls_m-lgort = ls_mskah-lgort.
ls_m-charg = ls_mskah-charg.
ls_m-sobkz = ls_mskah-sobkz.
ls_m-kdauf = ls_mskah-vbeln.
ls_m-kdpos = ls_mskah-posnr.
ls_m-labst = ls_mskah-kalab + ls_mskah-kains + ls_mskah-kaspe.
COLLECT ls_m INTO lt_m.
ENDIF.
ENDIF.
CLEAR: ls_m,ls_mska.
ENDLOOP. -
ENDIF.
"委外供应商库存
CLEAR: lt_mslb,lt_mslbh.
SELECT *
INTO TABLE lt_mslb
FROM mslb
WHERE werks IN s_werks
AND matnr IN s_matnr
AND matnr IN ( SELECT matnr FROM mara WHERE matnr IN s_matnr AND mtart IN s_mtart AND matkl IN s_matkl ).SELECT *
INTO TABLE lt_mslbh
FROM mslbh
WHERE werks IN s_werks
AND matnr IN s_matnr
AND matnr IN ( SELECT matnr FROM mara WHERE matnr IN s_matnr AND mtart IN s_mtart AND matkl IN s_matkl )
AND lfgja = l_lfgja
AND lfmon = l_lfmon
AND ( lblab > 0 OR lbins > 0 ).LOOP AT lt_mslb INTO ls_mslb.
IF ( ( ls_mslb-lfgja = l_lfgja AND ls_mslb-lfmon <= l_lfmon ) OR ls_mslb-lfgja < l_lfgja ) .
ls_m-matnr = ls_mslb-matnr.
ls_m-werks = ls_mslb-werks.
ls_m-charg = ls_mslb-charg.
ls_m-sobkz = ls_mslb-sobkz.
ls_m-lifnr = ls_mslb-lifnr.
ls_m-labst = ls_mslb-lblab + ls_mslb-lbins.
COLLECT ls_m INTO lt_m.
ELSE.
CLEAR:ls_mslbh.
READ TABLE lt_mslbh INTO ls_mslbh WITH KEY matnr = ls_mslb-matnr
werks = ls_mslb-werks
charg = ls_mslb-charg
sobkz = ls_mslb-sobkz
lifnr = ls_mslb-lifnr
lfgja = l_lfgja
lfmon = l_lfmon.
IF sy-subrc = 0.
ls_m-matnr = ls_mslbh-matnr.
ls_m-werks = ls_mslbh-werks.
ls_m-charg = ls_mslbh-charg.
ls_m-sobkz = ls_mslbh-sobkz.
ls_m-lifnr = ls_mslbh-lifnr.
ls_m-labst = ls_mslbh-lblab + ls_mslbh-lbins.
COLLECT ls_m INTO lt_m.
ENDIF.
ENDIF.
ENDLOOP.DELETE lt_m WHERE labst = 0.
-
DATA: BEGIN OF ls_wl,
-
matnr TYPE matnr,
-
werks TYPE werks_d,
-
xchpf TYPE xchpf,
-
sernp LIKE marc-sernp,
-
END OF ls_wl,
-
lt_wl LIKE TABLE OF ls_wl.
-
CLEAR: lt_wl.
-
SELECT DISTINCT a~matnr a~werks a~sernp b~xchpf
-
INTO CORRESPONDING FIELDS OF TABLE lt_wl
-
FROM marc AS a INNER JOIN mara AS b
-
ON a~matnr = b~matnr
-
FOR ALL ENTRIES IN lt_m
-
WHERE a~matnr = lt_m-matnr
-
AND a~werks = lt_m-werks.
-
DELETE lt_wl WHERE xchpf = ‘’ AND sernp = ‘’.
-
SORT lt_wl BY matnr werks.
CLEAR: r_xlm[],r_qtm[].
LOOP AT lt_m INTO ls_m.
ls_mx-bukrs = p_bukrs.
ls_mx-werks = ls_m-werks.
ls_mx-matnr = ls_m-matnr.
ls_mx-lgort = ls_m-lgort.
ls_mx-kdauf = ls_m-kdauf.
ls_mx-kdpos = ls_m-kdpos.
ls_mx-lifnr = ls_m-lifnr.
ls_mx-pspnr = ls_m-pspnr.
ls_mx-sobkz = ls_m-sobkz.
ls_mx-qty = ls_m-labst.
ls_mx-menge = ls_m-labst.
COLLECT ls_mx INTO lt_mx. -
LOOP AT lt_wl INTO ls_wl WHERE matnr = ls_m-matnr AND werks = ls_m-werks AND sernp IS NOT INITIAL.
-
EXIT.
-
ENDLOOP.
-
IF sy-subrc = 0.
r_xlm-sign = ‘I’.
r_xlm-option = ‘EQ’.
r_xlm-low = ls_m-matnr.
IF r_xlm[] IS INITIAL OR ls_m-matnr NOT IN r_xlm.
APPEND r_xlm.
ENDIF. -
ENDIF.
-
READ TABLE lt_wl INTO ls_wl WITH KEY matnr = ls_m-matnr werks = ls_m-werks.
-
IF sy-subrc <> 0.
-
r_qtm-sign = 'I'.
-
r_qtm-option = 'EQ'.
-
r_qtm-low = ls_m-matnr.
-
IF r_qtm[] IS INITIAL OR ls_m-matnr NOT IN r_qtm.
-
APPEND r_qtm.
-
ENDIF.
-
ENDIF.
CLEAR: ls_m,ls_mx.
ENDLOOP.
l_per+0(4) = l_lfgja.
l_per+4(1) = '0'.
l_per+5(2) = l_lfmon.
CLEAR: lt_xl,lt_qt,gt_qt.
IF r_xlm[] IS NOT INITIAL.
SELECT a~matnr a~werks a~lgort a~sobkz a~kunnr a~mat_kdauf AS kdauf a~lifnr
a~mat_kdpos AS kdpos a~mat_pspnr AS pspnr a~menge AS labst b~budat AS datum a~bwart
INTO CORRESPONDING FIELDS OF TABLE lt_qt
FROM mseg AS a INNER JOIN mkpf AS b ON a~mblnr = b~mblnr AND a~mjahr = b~mjahr
WHERE b~budat <= p_jzrq AND a~matnr IN r_xlm AND werks IN s_werks AND a~shkzg = 'S'
AND bwart <> '103'
ORDER BY b~budat DESCENDING.
SELECT a~matnr a~werks a~lgort a~sobkz a~kunnr a~mat_kdauf AS kdauf a~lifnr
a~mat_kdpos AS kdpos a~mat_pspnr AS pspnr a~menge AS labst b~budat AS datum a~bwart
INTO CORRESPONDING FIELDS OF TABLE gt_qth
FROM mseg AS a INNER JOIN mkpf AS b ON a~mblnr = b~mblnr AND a~mjahr = b~mjahr
WHERE b~budat <= p_jzrq AND a~matnr IN r_xlm AND werks IN s_werks AND a~shkzg = 'H'
AND bwart <> '104' AND bwart <> '124'
ORDER BY b~budat DESCENDING.
LOOP AT gt_qth INTO gs_qth WHERE sobkz <> 'O'.
CLEAR:gs_qth-lifnr.
MODIFY gt_qth FROM gs_qth.
ENDLOOP.
SORT gt_qth BY werks matnr lgort sobkz kdauf kdpos lifnr datum DESCENDING.
DELETE ADJACENT DUPLICATES FROM gt_qth COMPARING werks matnr lgort sobkz lifnr kdauf kdpos .
SORT gt_qth BY werks matnr lgort sobkz kdauf kdpos lifnr.
ENDIF.
LOOP AT lt_qt INTO ls_qt WHERE sobkz <> 'O'.
CLEAR:ls_qt-lifnr.
MODIFY lt_qt FROM ls_qt.
ENDLOOP.
LOOP AT lt_mx INTO ls_mx.
SELECT SINGLE butxt INTO ls_mx-butxt FROM t001 WHERE bukrs = ls_mx-bukrs.
SELECT SINGLE maktx INTO ls_mx-maktx FROM makt WHERE spras = '1' AND matnr = ls_mx-matnr.
SELECT SINGLE name1 bwkey INTO (ls_mx-name1,ls_mx-bwkey) FROM t001w WHERE werks = ls_mx-werks.
IF ls_mx-bwkey IS INITIAL.
ls_mx-bwkey = ls_mx-werks.
ENDIF.
SELECT SINGLE bklas INTO ls_mx-bklas FROM mbew WHERE matnr = ls_mx-matnr AND bwkey = ls_mx-bwkey.
SELECT SINGLE matkl labor INTO ( ls_mx-matkl,ls_mx-labor ) FROM mara WHERE matnr = ls_mx-matnr.
IF ls_mx-matkl IS NOT INITIAL.
SELECT SINGLE wgbez60 INTO ls_mx-wgbez FROM t023t WHERE spras = '1' AND matkl = ls_mx-matkl.
ENDIF.
IF ls_mx-bklas IS NOT INITIAL.
SELECT SINGLE bkbez INTO ls_mx-bkbez FROM t025t WHERE spras = '1' AND bklas = ls_mx-bklas.
ENDIF.
IF ls_mx-lgort IS NOT INITIAL.
SELECT SINGLE lgobe INTO ls_mx-lgobe FROM t001l WHERE werks = ls_mx-werks AND lgort = ls_mx-lgort.
ENDIF.
CLEAR: l_quant,l_stval.
"销售订单库存
SELECT SINGLE kalnr INTO ls_mx-kalnr FROM ckmlhd WHERE matnr = ls_mx-matnr AND bwkey = ls_mx-bwkey
AND vbeln = ls_mx-kdauf AND posnr = ls_mx-kdpos AND pspnr = ls_mx-pspnr.
IF sy-subrc EQ 0.
SELECT SUM( quant ) SUM( stval ) INTO ( l_quant,l_stval ) FROM mldoc WHERE kalnr = ls_mx-kalnr AND jahrper <= l_per.
IF l_quant <> 0.
ls_mx-pjdj = l_stval / l_quant.
ENDIF.
ELSE.
SELECT SINGLE kalnr INTO ls_mx-kalnr FROM ckmlhd WHERE matnr = ls_mx-matnr AND bwkey = ls_mx-bwkey.
IF sy-subrc EQ 0.
SELECT SUM( quant ) SUM( stval ) INTO ( l_quant,l_stval ) FROM mldoc WHERE kalnr = ls_mx-kalnr AND jahrper <= l_per.
IF l_quant <> 0.
ls_mx-pjdj = l_stval / l_quant.
ENDIF.
ENDIF.
ENDIF.
IF l_quant <> 0.
ls_mx-dmbtr = ls_mx-menge * l_stval / l_quant.
ls_mx-amount = ls_mx-menge * l_stval / l_quant.
ENDIF.
LOOP AT lt_m INTO ls_m WHERE matnr = ls_mx-matnr AND werks = ls_mx-werks AND lgort = ls_mx-lgort
AND kdauf = ls_mx-kdauf AND kdpos = ls_mx-kdpos AND lifnr = ls_mx-lifnr.
lw_sl = ls_m-labst.
CLEAR: lw_rq,lw_lx.
CLEAR:num.
LOOP AT lt_qt INTO ls_qt WHERE matnr = ls_m-matnr AND werks = ls_m-werks
AND charg = ls_m-charg AND sobkz = ls_m-sobkz AND lgort = ls_m-lgort
AND kdauf = ls_m-kdauf AND kdpos = ls_m-kdpos AND lifnr = ls_m-lifnr AND pspnr = ls_m-pspnr.
CLEAR lwedt.
num = num + 1.
IF num = 1.
ls_mx-budatrk = ls_qt-datum.
ENDIF.
IF ls_qt-bwart = '561'.
CLEAR:FAG.
LOOP AT gt_ztco012 INTO DATA(gw_ztco012) WHERE werks = ls_m-werks AND matnr = ls_m-matnr AND lgort = ls_m-lgort AND
sobkz = ls_m-sobkz AND lifnr = ls_m-lifnr.
ls_qt-datum = gw_ztco012-budat.
ls_qt-labst = gw_ztco012-menge.
PERFORM getqj USING ls_qt-datum CHANGING lw_lx.
IF lw_sl < ls_qt-labst.
ls_qt-labst = lw_sl.
ENDIF.
CASE lw_lx.
WHEN 1.
ls_mx-km01 = ls_mx-km01 + ls_qt-labst.
WHEN 2.
ls_mx-km02 = ls_mx-km02 + ls_qt-labst.
WHEN 3.
ls_mx-km03 = ls_mx-km03 + ls_qt-labst.
WHEN 4.
ls_mx-km04 = ls_mx-km04 + ls_qt-labst.
WHEN 5.
ls_mx-km05 = ls_mx-km05 + ls_qt-labst.
WHEN 6.
ls_mx-km06 = ls_mx-km06 + ls_qt-labst.
WHEN 7.
ls_mx-km07 = ls_mx-km07 + ls_qt-labst.
WHEN 8.
ls_mx-km08 = ls_mx-km08 + ls_qt-labst.
WHEN 9.
ls_mx-km09 = ls_mx-km09 + ls_qt-labst.
WHEN 10.
ls_mx-km10 = ls_mx-km10 + ls_qt-labst.
ENDCASE.
lw_sl = lw_sl - ls_qt-labst.
IF lw_sl <= 0.
EXIT.
ENDIF.
fag = 'X'.
endloop.
IF fag ne 'X'.
PERFORM getqj USING ls_qt-datum CHANGING lw_lx.
IF lw_sl < ls_qt-labst.
ls_qt-labst = lw_sl.
ENDIF.
CASE lw_lx.
WHEN 1.
ls_mx-km01 = ls_mx-km01 + ls_qt-labst.
WHEN 2.
ls_mx-km02 = ls_mx-km02 + ls_qt-labst.
WHEN 3.
ls_mx-km03 = ls_mx-km03 + ls_qt-labst.
WHEN 4.
ls_mx-km04 = ls_mx-km04 + ls_qt-labst.
WHEN 5.
ls_mx-km05 = ls_mx-km05 + ls_qt-labst.
WHEN 6.
ls_mx-km06 = ls_mx-km06 + ls_qt-labst.
WHEN 7.
ls_mx-km07 = ls_mx-km07 + ls_qt-labst.
WHEN 8.
ls_mx-km08 = ls_mx-km08 + ls_qt-labst.
WHEN 9.
ls_mx-km09 = ls_mx-km09 + ls_qt-labst.
WHEN 10.
ls_mx-km10 = ls_mx-km10 + ls_qt-labst.
ENDCASE.
lw_sl = lw_sl - ls_qt-labst.
IF lw_sl <= 0.
EXIT.
ENDIF.
endif.
ELSE.
-
READ TABLE gt_mseg WITH KEY matnr = ls_m-matnr werks = ls_m-werks charg = ls_m-charg.
-
IF sy-subrc EQ 0.
-
SELECT SINGLE lwedt INTO lwedt FROM mch1 WHERE matnr = ls_m-matnr AND charg = ls_m-charg.
-
IF lwedt IS INITIAL.
-
SELECT SINGLE lwedt INTO lwedt FROM mcha WHERE matnr = ls_m-matnr AND werks = ls_m-werks AND charg = ls_m-charg.
-
ENDIF.
-
IF lwedt <= '20210331'.
-
ls_qt-datum = lwedt.
-
ENDIF.
-
ENDIF. PERFORM getqj USING ls_qt-datum CHANGING lw_lx. IF lw_sl < ls_qt-labst. ls_qt-labst = lw_sl. ENDIF. CASE lw_lx. WHEN 1. ls_mx-km01 = ls_mx-km01 + ls_qt-labst. WHEN 2. ls_mx-km02 = ls_mx-km02 + ls_qt-labst. WHEN 3. ls_mx-km03 = ls_mx-km03 + ls_qt-labst. WHEN 4. ls_mx-km04 = ls_mx-km04 + ls_qt-labst. WHEN 5. ls_mx-km05 = ls_mx-km05 + ls_qt-labst. WHEN 6. ls_mx-km06 = ls_mx-km06 + ls_qt-labst. WHEN 7. ls_mx-km07 = ls_mx-km07 + ls_qt-labst. WHEN 8. ls_mx-km08 = ls_mx-km08 + ls_qt-labst. WHEN 9. ls_mx-km09 = ls_mx-km09 + ls_qt-labst. WHEN 10. ls_mx-km10 = ls_mx-km10 + ls_qt-labst. ENDCASE. lw_sl = lw_sl - ls_qt-labst. IF lw_sl <= 0. EXIT. ENDIF. ENDIF. ENDLOOP.
-
ENDCASE.
-
IF lw_ = 'B' AND lw_sl > 0.
-
LOOP AT gt_qt INTO ls_qt WHERE sobkz <> 'W' .
-
CLEAR:ls_qt-kunnr.
-
MODIFY gt_qt FROM ls_qt.
-
ENDLOOP.
-
LOOP AT gt_qt INTO ls_qt WHERE sobkz <> 'O' .
-
CLEAR:ls_qt-lifnr.
-
MODIFY gt_qt FROM ls_qt.
-
ENDLOOP.
-
CLEAR:num.
-
LOOP AT gt_qt INTO ls_qt WHERE matnr = ls_m-matnr AND werks = ls_m-werks AND lgort = ls_m-lgort
-
AND charg = ls_m-charg AND sobkz = ls_m-sobkz AND kunnr = ls_m-kunnr
-
AND kdauf = ls_m-kdauf AND kdpos = ls_m-kdpos AND lifnr = ls_m-lifnr AND pspnr = ls_m-pspnr.
-
num = num + 1.
-
IF num = 1.
-
ls_mx-budatrk = ls_qt-datum.
-
ENDIF.
-
CLEAR lwedt.
-
READ TABLE gt_mseg WITH KEY matnr = ls_m-matnr werks = ls_m-werks charg = ls_m-charg.
-
IF sy-subrc EQ 0.
-
SELECT SINGLE lwedt INTO lwedt FROM mch1 WHERE matnr = ls_m-matnr AND charg = ls_m-charg.
-
IF lwedt IS INITIAL.
-
SELECT SINGLE lwedt INTO lwedt FROM mcha WHERE matnr = ls_m-matnr AND werks = ls_m-werks AND charg = ls_m-charg.
-
ENDIF.
-
IF lwedt <= '20210331'.
-
ls_qt-datum = lwedt.
-
ENDIF.
-
ENDIF.
-
PERFORM getqj USING ls_qt-datum CHANGING lw_lx.
-
IF lw_sl < ls_qt-labst.
-
ls_qt-labst = lw_sl.
-
ENDIF.
-
CASE lw_lx.
-
WHEN 1.
-
ls_mx-km01 = ls_mx-km01 + ls_qt-labst.
-
WHEN 2.
-
ls_mx-km02 = ls_mx-km02 + ls_qt-labst.
-
WHEN 3.
-
ls_mx-km03 = ls_mx-km03 + ls_qt-labst.
-
WHEN 4.
-
ls_mx-km04 = ls_mx-km04 + ls_qt-labst.
-
WHEN 5.
-
ls_mx-km05 = ls_mx-km05 + ls_qt-labst.
-
WHEN 6.
-
ls_mx-km06 = ls_mx-km06 + ls_qt-labst.
-
WHEN 7.
-
ls_mx-km07 = ls_mx-km07 + ls_qt-labst.
-
WHEN 8.
-
ls_mx-km08 = ls_mx-km08 + ls_qt-labst.
-
WHEN 9.
-
ls_mx-km09 = ls_mx-km09 + ls_qt-labst.
-
WHEN 10.
-
ls_mx-km10 = ls_mx-km10 + ls_qt-labst.
-
ENDCASE.
-
lw_sl = lw_sl - ls_qt-labst.
-
IF lw_sl <= 0.
-
EXIT.
-
ENDIF.
-
ENDLOOP.
-
ENDIF. CLEAR: ls_m. ENDLOOP. READ TABLE gt_qth INTO ls_qt WITH KEY werks = ls_mx-werks matnr = ls_mx-matnr lgort = ls_mx-lgort sobkz = ls_mx-sobkz kdauf = ls_mx-kdauf kdpos = ls_mx-kdpos lifnr = ls_mx-lifnr BINARY SEARCH. IF sy-subrc = 0. ls_mx-budatck = ls_qt-datum. ENDIF. ls_mx-kcsj = p_jzrq. IF l_quant <> 0. ls_mx-kd01 = ls_mx-km01 * l_stval / l_quant. ls_mx-kd02 = ls_mx-km02 * l_stval / l_quant. ls_mx-kd03 = ls_mx-km03 * l_stval / l_quant. ls_mx-kd04 = ls_mx-km04 * l_stval / l_quant. ls_mx-kd05 = ls_mx-km05 * l_stval / l_quant. ls_mx-kd06 = ls_mx-km06 * l_stval / l_quant. ls_mx-kd07 = ls_mx-km07 * l_stval / l_quant. ls_mx-kd08 = ls_mx-km08 * l_stval / l_quant. ls_mx-kd09 = ls_mx-km09 * l_stval / l_quant. ls_mx-kd10 = ls_mx-km10 * l_stval / l_quant. ENDIF.
-
SELECT SINGLE konts INTO ls_mx-saknr FROM t030 WHERE bklas = ls_mx-bklas AND ktosl = 'BSX' AND ktopl = '1000'.
-
IF sy-subrc = 0.
-
SELECT SINGLE txt20 INTO ls_mx-txt20 FROM skat WHERE spras = '1' AND ktopl = '1000' AND saknr = ls_mx-saknr.
-
ENDIF. SELECT SINGLE meins INTO ls_mx-meins FROM mara WHERE matnr = ls_mx-matnr. CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT' EXPORTING input = ls_mx-matnr IMPORTING output = ls_mx-matnr. MODIFY lt_mx FROM ls_mx. CLEAR: ls_mx,l_quant,l_stval,lw_.
-
ENDLOOP.
ENDLOOP.
ENDIF.
"工厂库龄
IF p_ck6 = ‘X’.CLEAR: lt_mard,lt_mardh.
SELECT *
INTO TABLE lt_mard
FROM mard
WHERE werks IN s_werks
AND matnr IN s_matnr
AND matnr IN ( SELECT matnr FROM mara WHERE matnr IN s_matnr AND mtart IN s_mtart AND matkl IN s_matkl AND xchpf = ‘’ ).SELECT *
INTO TABLE lt_mardh
FROM mardh
WHERE werks IN s_werks
AND matnr IN s_matnr
AND matnr IN ( SELECT matnr FROM mara WHERE matnr IN s_matnr AND mtart IN s_mtart AND matkl IN s_matkl AND xchpf = ‘’)
AND lfgja = l_lfgja
AND lfmon = l_lfmon
AND ( labst > 0 OR insme > 0 OR speme > 0 ).LOOP AT lt_mard INTO ls_mard.
IF ( ( ls_mard-lfgja = l_lfgja AND ls_mard-lfmon <= l_lfmon ) OR ls_mard-lfgja < l_lfgja ).
ls_m-matnr = ls_mard-matnr.
ls_m-werks = ls_mard-werks. -
ls_m-lgort = ls_mard-lgort. ls_m-labst = ls_mard-labst + ls_mard-insme + ls_mard-speme + ls_mard-umlme. COLLECT ls_m INTO lt_m. ELSE. CLEAR:ls_mardh. READ TABLE lt_mardh INTO ls_mardh WITH KEY matnr = ls_mard-matnr werks = ls_mard-werks lgort = ls_mard-lgort lfgja = l_lfgja lfmon = l_lfmon. IF sy-subrc = 0. ls_m-matnr = ls_mardh-matnr. ls_m-werks = ls_mardh-werks.
-
ls_m-lgort = ls_mardh-lgort. ls_m-labst = ls_mardh-labst + ls_mardh-insme + ls_mardh-speme + ls_mard-umlme. COLLECT ls_m INTO lt_m. ENDIF. ENDIF. CLEAR: ls_m,ls_mard.
ENDLOOP.
" 委外
CLEAR: lt_mslb,lt_mslbh.
SELECT *
INTO TABLE lt_mslb
FROM mslb
WHERE werks IN s_werks
AND matnr IN s_matnr
AND matnr IN ( SELECT matnr FROM mara WHERE matnr IN s_matnr AND mtart IN s_mtart AND matkl IN s_matkl ).SELECT *
INTO TABLE lt_mslbh
FROM mslbh
WHERE werks IN s_werks
AND matnr IN s_matnr
AND matnr IN ( SELECT matnr FROM mara WHERE matnr IN s_matnr AND mtart IN s_mtart AND matkl IN s_matkl )
AND lfgja = l_lfgja
AND lfmon = l_lfmon
AND ( lblab > 0 OR lbins > 0 ).
CLEAR:ls_m.
LOOP AT lt_mslb INTO ls_mslb.
IF ( ( ls_mslb-lfgja = l_lfgja AND ls_mslb-lfmon <= l_lfmon ) OR ls_mslb-lfgja < l_lfgja ) .
ls_m-matnr = ls_mslb-matnr.
ls_m-werks = ls_mslb-werks.
ls_m-charg = ls_mslb-charg.
ls_m-sobkz = ls_mslb-sobkz.
ls_m-lifnr = ls_mslb-lifnr.
ls_m-labst = ls_mslb-lblab + ls_mslb-lbins.
COLLECT ls_m INTO lt_m.
collect ls_m into lt_mw.
ELSE.
CLEAR:ls_mslbh.
READ TABLE lt_mslbh INTO ls_mslbh WITH KEY matnr = ls_mslb-matnr
werks = ls_mslb-werks
charg = ls_mslb-charg
sobkz = ls_mslb-sobkz
lifnr = ls_mslb-lifnr
lfgja = l_lfgja
lfmon = l_lfmon.
IF sy-subrc = 0.
ls_m-matnr = ls_mslbh-matnr.
ls_m-werks = ls_mslbh-werks.
ls_m-charg = ls_mslbh-charg.
ls_m-sobkz = ls_mslbh-sobkz.
ls_m-lifnr = ls_mslbh-lifnr.
ls_m-labst = ls_mslbh-lblab + ls_mslbh-lbins.
COLLECT ls_m INTO lt_m. -
collect ls_m into lt_mw. ENDIF. ENDIF.
ENDLOOP.
"销售订单库存
CLEAR: lt_mska,lt_mskah.
SELECT *
INTO TABLE lt_mska
FROM mska
WHERE werks IN s_werks
AND matnr IN s_matnr
AND matnr IN ( SELECT matnr FROM mara WHERE matnr IN s_matnr AND mtart IN s_mtart AND matkl IN s_matkl ).SELECT *
INTO TABLE lt_mskah
FROM mskah
WHERE werks IN s_werks
AND matnr IN s_matnr
AND matnr IN ( SELECT matnr FROM mara WHERE matnr IN s_matnr AND mtart IN s_mtart AND matkl IN s_matkl )
AND lfgja = l_lfgja
AND lfmon = l_lfmon
AND ( kalab > 0 OR kains > 0 OR kaspe > 0 ).LOOP AT lt_mska INTO ls_mska.
IF ( ( ls_mska-lfgja = l_lfgja AND ls_mska-lfmon <= l_lfmon ) OR ls_mska-lfgja < l_lfgja ).
ls_m-matnr = ls_mska-matnr.
ls_m-werks = ls_mska-werks.
ls_m-charg = ls_mska-charg.
ls_m-sobkz = ls_mska-sobkz.
ls_m-kdauf = ls_mska-vbeln.
ls_m-kdpos = ls_mska-posnr.
ls_m-labst = ls_mska-kalab + ls_mska-kains + ls_mska-kaspe.
COLLECT ls_m INTO lt_m.
ELSE.
CLEAR:ls_mskah.
READ TABLE lt_mskah INTO ls_mskah WITH KEY matnr = ls_mska-matnr
werks = ls_mska-werks
charg = ls_mska-charg
sobkz = ls_mska-sobkz
vbeln = ls_mska-vbeln
posnr = ls_mska-posnr
lgort = ls_mska-lgort
lfgja = l_lfgja
lfmon = l_lfmon.
IF sy-subrc = 0.
ls_m-matnr = ls_mskah-matnr.
ls_m-werks = ls_mskah-werks. -
ls_m-lgort = ls_mskah-lgort. ls_m-charg = ls_mskah-charg. ls_m-sobkz = ls_mskah-sobkz. ls_m-kdauf = ls_mskah-vbeln. ls_m-kdpos = ls_mskah-posnr. ls_m-labst = ls_mskah-kalab + ls_mskah-kains + ls_mskah-kaspe. COLLECT ls_m INTO lt_m. ENDIF. ENDIF. CLEAR: ls_m,ls_mska.
ENDLOOP.
DELETE lt_m WHERE labst = 0.
CLEAR: r_xlm[],r_qtm[].
LOOP AT lt_m INTO ls_m.
ls_mx-bukrs = p_bukrs.
ls_mx-werks = ls_m-werks.
ls_mx-matnr = ls_m-matnr.
ls_mx-kdauf = ls_m-kdauf.
ls_mx-kdpos = ls_m-kdpos.
ls_mx-lifnr = ls_m-lifnr.
ls_mx-sobkz = ls_m-sobkz.
ls_mx-qty = ls_m-labst.
ls_mx-menge = ls_m-labst.
COLLECT ls_mx INTO lt_mx.r_xlm-sign = 'I'. r_xlm-option = 'EQ'. r_xlm-low = ls_m-matnr. IF r_xlm[] IS INITIAL OR ls_m-matnr NOT IN r_xlm. APPEND r_xlm. ENDIF. CLEAR: ls_m,ls_mx.
ENDLOOP.
l_per+0(4) = l_lfgja.
l_per+4(1) = ‘0’.
l_per+5(2) = l_lfmon.CLEAR: lt_xl,lt_qt,gt_qt.
IF r_xlm[] IS NOT INITIAL.SELECT a~matnr a~werks a~sobkz a~kunnr a~mat_kdauf AS kdauf a~lifnr a~lbkum a~salk3 a~mat_kdpos AS kdpos a~mat_pspnr AS pspnr a~menge AS labst b~budat AS datum a~bwart INTO CORRESPONDING FIELDS OF TABLE lt_qt FROM mseg AS a INNER JOIN mkpf AS b ON a~mblnr = b~mblnr AND a~mjahr = b~mjahr WHERE b~budat <= p_jzrq AND a~matnr IN r_xlm AND werks IN s_werks AND a~shkzg = 'S' AND bwart <> '103' AND bwart <> '411' AND bwart <> '413' AND bwart <> '311' AND bwart <> '541' ORDER BY b~budat DESCENDING. SELECT a~matnr a~werks a~sobkz a~kunnr a~mat_kdauf AS kdauf a~lifnr a~lbkum a~salk3 a~mat_kdpos AS kdpos a~mat_pspnr AS pspnr a~menge AS labst b~budat AS datum a~bwart INTO CORRESPONDING FIELDS OF TABLE lt_qto FROM mseg AS a INNER JOIN mkpf AS b ON a~mblnr = b~mblnr AND a~mjahr = b~mjahr WHERE b~budat <= p_jzrq AND a~matnr IN r_xlm AND werks IN s_werks AND a~shkzg = 'S' AND bwart = '541' AND a~sobkz = 'O' ORDER BY b~budat DESCENDING. SELECT a~matnr a~werks a~sobkz a~kunnr a~mat_kdauf AS kdauf a~lifnr a~lbkum a~salk3 a~mat_kdpos AS kdpos a~mat_pspnr AS pspnr a~menge AS labst b~budat AS datum a~bwart INTO CORRESPONDING FIELDS OF TABLE lt_qts FROM mseg AS a INNER JOIN mkpf AS b ON a~mblnr = b~mblnr AND a~mjahr = b~mjahr WHERE b~budat <= p_jzrq AND a~matnr IN r_xlm AND werks IN s_werks AND a~shkzg = 'S' AND a~sobkz = 'E' ORDER BY b~budat DESCENDING. SELECT a~matnr a~werks a~sobkz a~kunnr a~mat_kdauf AS kdauf a~lifnr a~lbkum a~salk3 a~mat_kdpos AS kdpos a~mat_pspnr AS pspnr a~menge AS labst b~budat AS datum a~bwart INTO CORRESPONDING FIELDS OF TABLE gt_qth FROM mseg AS a INNER JOIN mkpf AS b ON a~mblnr = b~mblnr AND a~mjahr = b~mjahr WHERE b~budat <= p_jzrq AND a~matnr IN r_xlm AND werks IN s_werks AND a~shkzg = 'H' AND bwart <> '104' AND bwart <> '124' AND bwart <> '411' AND bwart <> '413' AND bwart <> '311' AND bwart <> '541' ORDER BY b~budat DESCENDING. SELECT a~matnr a~werks a~sobkz a~kunnr a~mat_kdauf AS kdauf a~lifnr a~lbkum a~salk3 a~mat_kdpos AS kdpos a~mat_pspnr AS pspnr a~menge AS labst b~budat AS datum a~bwart INTO CORRESPONDING FIELDS OF TABLE gt_qt411 FROM mseg AS a INNER JOIN mkpf AS b ON a~mblnr = b~mblnr AND a~mjahr = b~mjahr WHERE b~budat <= p_jzrq AND a~matnr IN r_xlm AND werks IN s_werks AND a~shkzg = 'S' AND bwart = '411' ORDER BY b~budat DESCENDING. SELECT a~matnr a~werks a~sobkz a~kunnr a~mat_kdauf AS kdauf a~lifnr a~lbkum a~salk3 a~mat_kdpos AS kdpos a~mat_pspnr AS pspnr a~menge AS labst b~budat AS datum a~bwart INTO CORRESPONDING FIELDS OF TABLE gt_qt413 FROM mseg AS a INNER JOIN mkpf AS b ON a~mblnr = b~mblnr AND a~mjahr = b~mjahr WHERE b~budat <= p_jzrq AND a~matnr IN r_xlm AND werks IN s_werks AND a~shkzg = 'S' and bwart = '413' ORDER BY b~budat DESCENDING. LOOP AT lt_qt INTO ls_qt WHERE sobkz <> 'O'. CLEAR:ls_qt-lifnr. MODIFY lt_qt FROM ls_qt. ENDLOOP. LOOP AT gt_qth INTO gs_qth WHERE sobkz <> 'O'. CLEAR:gs_qth-lifnr. MODIFY gt_qth FROM gs_qth. ENDLOOP. SORT gt_qth BY werks matnr lgort sobkz kdauf kdpos lifnr datum DESCENDING. SORT gt_qt411 BY werks matnr lgort sobkz kdauf kdpos lifnr datum DESCENDING. SORT gt_qt413 BY werks matnr lgort sobkz kdauf kdpos lifnr datum DESCENDING. DELETE ADJACENT DUPLICATES FROM gt_qth COMPARING werks matnr lgort sobkz lifnr kdauf kdpos . SORT gt_qth BY werks matnr lgort sobkz kdauf kdpos lifnr.
ENDIF.
LOOP AT lt_mx INTO ls_mx.
SELECT SINGLE butxt INTO ls_mx-butxt FROM t001 WHERE bukrs = ls_mx-bukrs. SELECT SINGLE maktx INTO ls_mx-maktx FROM makt WHERE spras = '1' AND matnr = ls_mx-matnr. SELECT SINGLE name1 bwkey INTO (ls_mx-name1,ls_mx-bwkey) FROM t001w WHERE werks = ls_mx-werks. IF ls_mx-bwkey IS INITIAL. ls_mx-bwkey = ls_mx-werks. ENDIF. SELECT SINGLE bklas INTO ls_mx-bklas FROM mbew WHERE matnr = ls_mx-matnr AND bwkey = ls_mx-bwkey. SELECT SINGLE matkl labor INTO ( ls_mx-matkl,ls_mx-labor ) FROM mara WHERE matnr = ls_mx-matnr. IF ls_mx-matkl IS NOT INITIAL. SELECT SINGLE wgbez60 INTO ls_mx-wgbez FROM t023t WHERE spras = '1' AND matkl = ls_mx-matkl. ENDIF. IF ls_mx-bklas IS NOT INITIAL. SELECT SINGLE bkbez INTO ls_mx-bkbez FROM t025t WHERE spras = '1' AND bklas = ls_mx-bklas. ENDIF.
-
IF ls_mx-lgort IS NOT INITIAL.
-
SELECT SINGLE lgobe INTO ls_mx-lgobe FROM t001l WHERE werks = ls_mx-werks AND lgort = ls_mx-lgort.
-
ENDIF. CLEAR: l_quant,l_stval. "销售订单库存 SELECT SINGLE kalnr INTO ls_mx-kalnr FROM ckmlhd WHERE matnr = ls_mx-matnr AND bwkey = ls_mx-bwkey AND vbeln = ls_mx-kdauf AND posnr = ls_mx-kdpos AND pspnr = ls_mx-pspnr. IF sy-subrc EQ 0. SELECT SUM( quant ) SUM( stval ) INTO ( l_quant,l_stval ) FROM mldoc WHERE kalnr = ls_mx-kalnr AND jahrper <= l_per. IF l_quant <> 0. ls_mx-pjdj = l_stval / l_quant. ENDIF. ELSE. SELECT SINGLE kalnr INTO ls_mx-kalnr FROM ckmlhd WHERE matnr = ls_mx-matnr AND bwkey = ls_mx-bwkey. IF sy-subrc EQ 0. SELECT SUM( quant ) SUM( stval ) INTO ( l_quant,l_stval ) FROM mldoc WHERE kalnr = ls_mx-kalnr AND jahrper <= l_per. IF l_quant <> 0. ls_mx-pjdj = l_stval / l_quant. ENDIF. ENDIF. ENDIF. IF l_quant <> 0. ls_mx-dmbtr = ls_mx-menge * l_stval / l_quant. ls_mx-amount = ls_mx-menge * l_stval / l_quant. ENDIF. LOOP AT lt_m INTO ls_m WHERE matnr = ls_mx-matnr AND werks = ls_mx-werks AND lgort = ls_mx-lgort AND kdauf = ls_mx-kdauf AND kdpos = ls_mx-kdpos AND lifnr = ls_mx-lifnr. lw_sl = ls_m-labst. CLEAR: lw_rq,lw_lx. "委外库存 查询原始库龄时间 IF ls_mx-lifnr IS NOT INITIAL. clear:lw_so. LOOP AT lt_qto INTO DATA(lw_qto) WHERE matnr = ls_m-matnr AND werks = ls_m-werks AND sobkz = ls_m-sobkz AND kdauf = ls_m-kdauf AND kdpos = ls_m-kdpos AND lifnr = ls_m-lifnr . if lw_sl < lw_qto-labst . lw_so = lw_sl. else. lw_so = lw_qto-labst. endif. CLEAR:num. LOOP AT lt_qt INTO ls_qt WHERE matnr = ls_m-matnr AND werks = ls_m-werks AND datum <= lw_qto-datum AND kdauf = ls_m-kdauf AND kdpos = ls_m-kdpos . num = num + 1. IF num = 1. ls_mx-budatrk = ls_qt-datum. ENDIF. CLEAR lwedt. IF ls_qt-bwart = '561'. clear:fag. LOOP AT gt_ztco012 INTO DATA(lw_ztco012) WHERE werks = ls_m-werks AND matnr = ls_m-matnr AND sobkz = ls_m-sobkz AND lifnr = ls_m-lifnr. ls_qt-datum = lw_ztco012-budat. ls_qt-labst = lw_ztco012-menge. num = num + 1. if num = 2. ls_mx-budatrk = ls_qt-datum. endif. PERFORM getqj USING ls_qt-datum CHANGING lw_lx. IF lw_so < ls_qt-labst . ls_qt-labst = lw_so. ENDIF. CASE lw_lx. WHEN 1. ls_mx-km01 = ls_mx-km01 + ls_qt-labst. WHEN 2. ls_mx-km02 = ls_mx-km02 + ls_qt-labst. WHEN 3. ls_mx-km03 = ls_mx-km03 + ls_qt-labst. WHEN 4. ls_mx-km04 = ls_mx-km04 + ls_qt-labst. WHEN 5. ls_mx-km05 = ls_mx-km05 + ls_qt-labst. WHEN 6. ls_mx-km06 = ls_mx-km06 + ls_qt-labst. WHEN 7. ls_mx-km07 = ls_mx-km07 + ls_qt-labst. WHEN 8. ls_mx-km08 = ls_mx-km08 + ls_qt-labst. WHEN 9. ls_mx-km09 = ls_mx-km09 + ls_qt-labst. WHEN 10. ls_mx-km10 = ls_mx-km10 + ls_qt-labst. ENDCASE. lw_so = lw_so - ls_qt-labst. IF lw_so <= 0. EXIT. ENDIF. fag = 'X'. ENDLOOP. if fag ne 'X'. PERFORM getqj USING ls_qt-datum CHANGING lw_lx. IF lw_so < ls_qt-labst . ls_qt-labst = lw_so. ENDIF. CASE lw_lx. WHEN 1. ls_mx-km01 = ls_mx-km01 + ls_qt-labst. WHEN 2. ls_mx-km02 = ls_mx-km02 + ls_qt-labst. WHEN 3. ls_mx-km03 = ls_mx-km03 + ls_qt-labst. WHEN 4. ls_mx-km04 = ls_mx-km04 + ls_qt-labst. WHEN 5. ls_mx-km05 = ls_mx-km05 + ls_qt-labst. WHEN 6. ls_mx-km06 = ls_mx-km06 + ls_qt-labst. WHEN 7. ls_mx-km07 = ls_mx-km07 + ls_qt-labst. WHEN 8. ls_mx-km08 = ls_mx-km08 + ls_qt-labst. WHEN 9. ls_mx-km09 = ls_mx-km09 + ls_qt-labst. WHEN 10. ls_mx-km10 = ls_mx-km10 + ls_qt-labst. ENDCASE. lw_so = lw_so - ls_qt-labst. IF lw_so <= 0. EXIT. ENDIF. endif. ELSE. num = num + 1. IF num = 1. ls_mx-budatrk = ls_qt-datum. ENDIF.
-
READ TABLE gt_mseg WITH KEY matnr = ls_m-matnr werks = ls_m-werks charg = ls_m-charg.
-
IF sy-subrc EQ 0.
-
SELECT SINGLE lwedt INTO lwedt FROM mch1 WHERE matnr = ls_m-matnr AND charg = ls_m-charg.
-
IF lwedt IS INITIAL.
-
SELECT SINGLE lwedt INTO lwedt FROM mcha WHERE matnr = ls_m-matnr AND werks = ls_m-werks AND charg = ls_m-charg.
-
ENDIF.
-
IF lwedt <= '20210331'.
-
ls_qt-datum = lwedt.
-
ENDIF.
-
ENDIF. PERFORM getqj USING ls_qt-datum CHANGING lw_lx. IF lw_so < ls_qt-labst. ls_qt-labst = lw_so. ENDIF. CASE lw_lx. WHEN 1. ls_mx-km01 = ls_mx-km01 + ls_qt-labst. WHEN 2. ls_mx-km02 = ls_mx-km02 + ls_qt-labst. WHEN 3. ls_mx-km03 = ls_mx-km03 + ls_qt-labst. WHEN 4. ls_mx-km04 = ls_mx-km04 + ls_qt-labst. WHEN 5. ls_mx-km05 = ls_mx-km05 + ls_qt-labst. WHEN 6. ls_mx-km06 = ls_mx-km06 + ls_qt-labst. WHEN 7. ls_mx-km07 = ls_mx-km07 + ls_qt-labst. WHEN 8. ls_mx-km08 = ls_mx-km08 + ls_qt-labst. WHEN 9. ls_mx-km09 = ls_mx-km09 + ls_qt-labst. WHEN 10. ls_mx-km10 = ls_mx-km10 + ls_qt-labst. ENDCASE. lw_so = lw_so - ls_qt-labst. IF lw_so <= 0. EXIT. ENDIF. ENDIF. ENDLOOP. lw_sl = lw_sl - lw_qto-labst. if lw_sl <= 0. exit. endif. ENDLOOP. "销售订单库龄 ELSEIF ls_m-kdauf IS NOT INITIAL. clear:num. LOOP AT lt_qts INTO ls_qts WHERE matnr = ls_m-matnr AND werks = ls_m-werks AND sobkz = ls_m-sobkz AND kdauf = ls_m-kdauf AND kdpos = ls_m-kdpos . CLEAR lwedt. num = num + 1. IF num = 1. ls_mx-budatrk = ls_qts-datum. ENDIF. PERFORM getqj USING ls_qts-datum CHANGING lw_lx. IF lw_sl < ls_qts-labst. ls_qts-labst = lw_sl. ENDIF. CASE lw_lx. WHEN 1. ls_mx-km01 = ls_mx-km01 + ls_qts-labst. WHEN 2. ls_mx-km02 = ls_mx-km02 + ls_qts-labst. WHEN 3. ls_mx-km03 = ls_mx-km03 + ls_qts-labst. WHEN 4. ls_mx-km04 = ls_mx-km04 + ls_qts-labst. WHEN 5. ls_mx-km05 = ls_mx-km05 + ls_qts-labst. WHEN 6. ls_mx-km06 = ls_mx-km06 + ls_qts-labst. WHEN 7. ls_mx-km07 = ls_mx-km07 + ls_qts-labst. WHEN 8. ls_mx-km08 = ls_mx-km08 + ls_qts-labst. WHEN 9. ls_mx-km09 = ls_mx-km09 + ls_qts-labst. WHEN 10. ls_mx-km10 = ls_mx-km10 + ls_qts-labst. ENDCASE. lw_sl = lw_sl - ls_qts-labst. IF lw_sl <= 0. EXIT. ENDIF. ENDLOOP.
if lw_sl > 0 .
LOOP AT gt_qt413 into ls_qts WHERE matnr = ls_m-matnr AND werks = ls_m-werks AND sobkz = ls_m-sobkz
AND kdauf = ls_m-kdauf AND kdpos = ls_m-kdpos .
CLEAR lwedt.
num = num + 1.
IF num = 1.
ls_mx-budatrk = ls_qts-datum.
ENDIF.
PERFORM getqj USING ls_qts-datum CHANGING lw_lx.
IF lw_sl < ls_qts-labst.
ls_qts-labst = lw_sl.
ENDIF.
CASE lw_lx.
WHEN 1.
ls_mx-km01 = ls_mx-km01 + ls_qts-labst.
WHEN 2.
ls_mx-km02 = ls_mx-km02 + ls_qts-labst.
WHEN 3.
ls_mx-km03 = ls_mx-km03 + ls_qts-labst.
WHEN 4.
ls_mx-km04 = ls_mx-km04 + ls_qts-labst.
WHEN 5.
ls_mx-km05 = ls_mx-km05 + ls_qts-labst.
WHEN 6.
ls_mx-km06 = ls_mx-km06 + ls_qts-labst.
WHEN 7.
ls_mx-km07 = ls_mx-km07 + ls_qts-labst.
WHEN 8.
ls_mx-km08 = ls_mx-km08 + ls_qts-labst.
WHEN 9.
ls_mx-km09 = ls_mx-km09 + ls_qts-labst.
WHEN 10.
ls_mx-km10 = ls_mx-km10 + ls_qts-labst.
ENDCASE.
lw_sl = lw_sl - ls_qts-labst.
IF lw_sl <= 0.
EXIT.
ENDIF.ENDLOOP. endif. ELSE. CLEAR:num. LOOP AT lt_qt INTO ls_qt WHERE matnr = ls_m-matnr AND werks = ls_m-werks AND sobkz = ls_m-sobkz AND kdauf = ls_m-kdauf AND kdpos = ls_m-kdpos AND lifnr = ls_m-lifnr . CLEAR lwedt. num = num + 1. IF num = 1. ls_mx-budatrk = ls_qt-datum. ENDIF. IF ls_qt-bwart = '561'. clear:fag. LOOP AT gt_ztco012 INTO gw_ztco012 WHERE werks = ls_m-werks AND matnr = ls_m-matnr AND sobkz = ls_m-sobkz AND lifnr = ls_m-lifnr. ls_qt-datum = gw_ztco012-budat. ls_qt-labst = gw_ztco012-menge . PERFORM getqj USING ls_qt-datum CHANGING lw_lx. IF lw_sl < ls_qt-labst. ls_qt-labst = lw_sl. ENDIF. CASE lw_lx. WHEN 1. ls_mx-km01 = ls_mx-km01 + ls_qt-labst. WHEN 2. ls_mx-km02 = ls_mx-km02 + ls_qt-labst. WHEN 3. ls_mx-km03 = ls_mx-km03 + ls_qt-labst. WHEN 4. ls_mx-km04 = ls_mx-km04 + ls_qt-labst. WHEN 5. ls_mx-km05 = ls_mx-km05 + ls_qt-labst. WHEN 6. ls_mx-km06 = ls_mx-km06 + ls_qt-labst. WHEN 7. ls_mx-km07 = ls_mx-km07 + ls_qt-labst. WHEN 8. ls_mx-km08 = ls_mx-km08 + ls_qt-labst. WHEN 9. ls_mx-km09 = ls_mx-km09 + ls_qt-labst. WHEN 10. ls_mx-km10 = ls_mx-km10 + ls_qt-labst. ENDCASE. lw_sl = lw_sl - ls_qt-labst. IF lw_sl <= 0. EXIT. ENDIF. fag = 'X'. ENDLOOP. if fag ne 'X'. PERFORM getqj USING ls_qt-datum CHANGING lw_lx. IF lw_sl < ls_qt-labst. ls_qt-labst = lw_sl. ENDIF. CASE lw_lx. WHEN 1. ls_mx-km01 = ls_mx-km01 + ls_qt-labst. WHEN 2. ls_mx-km02 = ls_mx-km02 + ls_qt-labst. WHEN 3. ls_mx-km03 = ls_mx-km03 + ls_qt-labst. WHEN 4. ls_mx-km04 = ls_mx-km04 + ls_qt-labst. WHEN 5. ls_mx-km05 = ls_mx-km05 + ls_qt-labst. WHEN 6. ls_mx-km06 = ls_mx-km06 + ls_qt-labst. WHEN 7. ls_mx-km07 = ls_mx-km07 + ls_qt-labst. WHEN 8. ls_mx-km08 = ls_mx-km08 + ls_qt-labst. WHEN 9. ls_mx-km09 = ls_mx-km09 + ls_qt-labst. WHEN 10. ls_mx-km10 = ls_mx-km10 + ls_qt-labst. ENDCASE. lw_sl = lw_sl - ls_qt-labst. IF lw_sl <= 0. EXIT. ENDIF. endif. ELSE.
-
READ TABLE gt_mseg WITH KEY matnr = ls_m-matnr werks = ls_m-werks charg = ls_m-charg.
-
IF sy-subrc EQ 0.
-
SELECT SINGLE lwedt INTO lwedt FROM mch1 WHERE matnr = ls_m-matnr AND charg = ls_m-charg.
-
IF lwedt IS INITIAL.
-
SELECT SINGLE lwedt INTO lwedt FROM mcha WHERE matnr = ls_m-matnr AND werks = ls_m-werks AND charg = ls_m-charg.
-
ENDIF.
-
IF lwedt <= '20210331'.
-
ls_qt-datum = lwedt.
-
ENDIF.
-
ENDIF. PERFORM getqj USING ls_qt-datum CHANGING lw_lx. IF lw_sl < ls_qt-labst. ls_qt-labst = lw_sl. ENDIF. CASE lw_lx. WHEN 1. ls_mx-km01 = ls_mx-km01 + ls_qt-labst. WHEN 2. ls_mx-km02 = ls_mx-km02 + ls_qt-labst. WHEN 3. ls_mx-km03 = ls_mx-km03 + ls_qt-labst. WHEN 4. ls_mx-km04 = ls_mx-km04 + ls_qt-labst. WHEN 5. ls_mx-km05 = ls_mx-km05 + ls_qt-labst. WHEN 6. ls_mx-km06 = ls_mx-km06 + ls_qt-labst. WHEN 7. ls_mx-km07 = ls_mx-km07 + ls_qt-labst. WHEN 8. ls_mx-km08 = ls_mx-km08 + ls_qt-labst. WHEN 9. ls_mx-km09 = ls_mx-km09 + ls_qt-labst. WHEN 10. ls_mx-km10 = ls_mx-km10 + ls_qt-labst. ENDCASE. lw_sl = lw_sl - ls_qt-labst. IF lw_sl <= 0. EXIT. ENDIF. ENDIF. ENDLOOP. if lw_sl > 0. LOOP AT gt_qt411 INTO ls_qt WHERE matnr = ls_m-matnr AND werks = ls_m-werks AND sobkz = ls_m-sobkz AND kdauf = ls_m-kdauf AND kdpos = ls_m-kdpos AND lifnr = ls_m-lifnr . CLEAR lwedt. num = num + 1. IF num = 1. ls_mx-budatrk = ls_qt-datum. ENDIF. PERFORM getqj USING ls_qt-datum CHANGING lw_lx. IF lw_sl < ls_qt-labst. ls_qt-labst = lw_sl. ENDIF. CASE lw_lx. WHEN 1. ls_mx-km01 = ls_mx-km01 + ls_qt-labst. WHEN 2. ls_mx-km02 = ls_mx-km02 + ls_qt-labst. WHEN 3. ls_mx-km03 = ls_mx-km03 + ls_qt-labst. WHEN 4. ls_mx-km04 = ls_mx-km04 + ls_qt-labst. WHEN 5. ls_mx-km05 = ls_mx-km05 + ls_qt-labst. WHEN 6. ls_mx-km06 = ls_mx-km06 + ls_qt-labst. WHEN 7. ls_mx-km07 = ls_mx-km07 + ls_qt-labst. WHEN 8. ls_mx-km08 = ls_mx-km08 + ls_qt-labst. WHEN 9. ls_mx-km09 = ls_mx-km09 + ls_qt-labst. WHEN 10. ls_mx-km10 = ls_mx-km10 + ls_qt-labst. ENDCASE. lw_sl = lw_sl - ls_qt-labst. IF lw_sl <= 0. EXIT. ENDIF. ENDLOOP. endif. CLEAR: ls_m. ENDIF. ENDLOOP. READ TABLE gt_qth INTO ls_qt WITH KEY werks = ls_mx-werks matnr = ls_mx-matnr sobkz = ls_mx-sobkz kdauf = ls_mx-kdauf kdpos = ls_mx-kdpos lifnr = ls_mx-lifnr BINARY SEARCH. IF sy-subrc = 0. ls_mx-budatck = ls_qt-datum. ENDIF. ls_mx-kcsj = p_jzrq. IF l_quant <> 0. ls_mx-kd01 = ls_mx-km01 * l_stval / l_quant. ls_mx-kd02 = ls_mx-km02 * l_stval / l_quant. ls_mx-kd03 = ls_mx-km03 * l_stval / l_quant. ls_mx-kd04 = ls_mx-km04 * l_stval / l_quant. ls_mx-kd05 = ls_mx-km05 * l_stval / l_quant. ls_mx-kd06 = ls_mx-km06 * l_stval / l_quant. ls_mx-kd07 = ls_mx-km07 * l_stval / l_quant. ls_mx-kd08 = ls_mx-km08 * l_stval / l_quant. ls_mx-kd09 = ls_mx-km09 * l_stval / l_quant. ls_mx-kd10 = ls_mx-km10 * l_stval / l_quant. ENDIF. SELECT SINGLE meins INTO ls_mx-meins FROM mara WHERE matnr = ls_mx-matnr. CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT' EXPORTING input = ls_mx-matnr IMPORTING output = ls_mx-matnr. MODIFY lt_mx FROM ls_mx. CLEAR: ls_mx,l_quant,l_stval,lw_.
-
ENDLOOP.
ENDLOOP.
ENDIF.
ENDFORM.
FORM set_layout .
gt_layout-zebra = ‘X’.
gt_layout-detail_popup = ‘X’.
gt_layout-colwidth_optimize = ‘X’.
gt_layout-cell_merge = ‘X’.
gt_layout-detail_initial_lines = ‘X’.
gt_layout-edit_mode = ‘B’ .
gt_layout-info_fieldname = ‘LINECOLOR’.
ENDFORM.
FORM f_alv_display .
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = ‘SUB_STATUS_SET’
is_layout = gt_layout
it_fieldcat = gt_cat
i_save = ‘A’
TABLES
t_outtab = lt_mx
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM.
FORM getqj USING i_gzrq TYPE sy-datum CHANGING o_lx TYPE i.
DATA: lw_ts TYPE i.
lw_ts = p_jzrq - i_gzrq.
LOOP AT gt_pdates INTO gs_pdate.
IF lw_ts >= gs_pdate-low AND lw_ts <= gs_pdate-high.
o_lx = gs_pdate-index.
EXIT.
ENDIF.
ENDLOOP.
ENDFORM.
&---------------------------------------------------------------------
*& Form SUB_STATUS_SET
&---------------------------------------------------------------------
-
text
----------------------------------------------------------------------
FORM sub_status_set USING rt_extab TYPE slis_t_extab.
SET PF-STATUS ‘STATUS01’.
- SET TITLEBAR ‘TITLE’.
ENDFORM. "SUB_STATUS_SET
&---------------------------------------------------------------------
*& Form frm_check_date
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_check_date .
DATA: str1 TYPE string,
str2 TYPE string.
IF p_zl1 = 0 OR p_zl1 IS INITIAL.
MESSAGE ‘账龄间隔1 不能为空或0’ TYPE ‘E’ .
ENDIF.
REFRESH gt_pdates.
REFRESH gt_date_intvl.
CLEAR gs_pdate.
gs_pdate-index = 1.
gs_pdate-pdates = p_zl1.
gs_pdate-low = 0.
gs_pdate-high = p_zl1.
str1 = 0.
str2 = p_zl1.
CONDENSE: str1,str2 NO-GAPS.
CONCATENATE ‘库龄’ str1 ‘-’ str2 ‘天’ INTO gs_pdate-ptitle.
APPEND gs_pdate TO gt_pdates.
CLEAR gs_pdate.
gs_pdate-index = 2.
gs_pdate-pdates = p_zl2.
gs_pdate-low = p_zl1 + 1.
gs_pdate-high = p_zl2.
str1 = p_zl1 + 1.
str2 = p_zl2.
CONDENSE: str1,str2 NO-GAPS.
CONCATENATE ‘库龄’ str1 ‘-’ str2 ‘天’ INTO gs_pdate-ptitle.
APPEND gs_pdate TO gt_pdates.
CLEAR gs_pdate.
gs_pdate-index = 3.
gs_pdate-pdates = p_zl3.
gs_pdate-low = p_zl2 + 1.
gs_pdate-high = p_zl3.
str1 = p_zl2 + 1.
str2 = p_zl3.
CONDENSE: str1,str2 NO-GAPS.
CONCATENATE ‘库龄’ str1 ‘-’ str2 ‘天’ INTO gs_pdate-ptitle.
APPEND gs_pdate TO gt_pdates.
CLEAR gs_pdate.
gs_pdate-index = 4.
gs_pdate-pdates = p_zl4.
gs_pdate-low = p_zl3 + 1.
gs_pdate-high = p_zl4.
str1 = p_zl3 + 1.
str2 = p_zl4.
CONDENSE: str1,str2 NO-GAPS.
CONCATENATE ‘库龄’ str1 ‘-’ str2 ‘天’ INTO gs_pdate-ptitle.
APPEND gs_pdate TO gt_pdates.
CLEAR gs_pdate.
gs_pdate-index = 5.
gs_pdate-pdates = p_zl5.
gs_pdate-low = p_zl4 + 1.
gs_pdate-high = p_zl5.
str1 = p_zl4 + 1.
str2 = p_zl5.
CONDENSE: str1,str2 NO-GAPS.
CONCATENATE ‘库龄’ str1 ‘-’ str2 ‘天’ INTO gs_pdate-ptitle.
APPEND gs_pdate TO gt_pdates.
CLEAR gs_pdate.
gs_pdate-index = 6.
gs_pdate-pdates = p_zl6.
gs_pdate-low = p_zl5 + 1.
gs_pdate-high = p_zl6.
str1 = p_zl5 + 1.
str2 = p_zl6.
CONDENSE: str1,str2 NO-GAPS.
CONCATENATE ‘库龄’ str1 ‘-’ str2 ‘天’ INTO gs_pdate-ptitle.
APPEND gs_pdate TO gt_pdates.
CLEAR gs_pdate.
gs_pdate-index = 7.
gs_pdate-pdates = p_zl7.
gs_pdate-low = p_zl6 + 1.
gs_pdate-high = p_zl7.
str1 = p_zl6 + 1.
str2 = p_zl7.
CONDENSE: str1,str2 NO-GAPS.
CONCATENATE ‘库龄’ str1 ‘-’ str2 ‘天’ INTO gs_pdate-ptitle.
APPEND gs_pdate TO gt_pdates.
CLEAR gs_pdate.
gs_pdate-index = 8.
gs_pdate-pdates = p_zl8.
gs_pdate-low = p_zl7 + 1.
gs_pdate-high = p_zl8.
str1 = p_zl7 + 1.
str2 = p_zl8.
CONDENSE: str1,str2 NO-GAPS.
CONCATENATE ‘库龄’ str1 ‘-’ str2 ‘天’ INTO gs_pdate-ptitle.
APPEND gs_pdate TO gt_pdates.
CLEAR gs_pdate.
gs_pdate-index = 9.
gs_pdate-pdates = p_zl9.
gs_pdate-low = p_zl8 + 1.
gs_pdate-high = p_zl9.
str1 = p_zl8 + 1.
str2 = p_zl9.
CONDENSE: str1,str2 NO-GAPS.
CONCATENATE ‘库龄’ str1 ‘-’ str2 ‘天’ INTO gs_pdate-ptitle.
APPEND gs_pdate TO gt_pdates.
SORT gt_pdates BY index DESCENDING.
DATA lv_inx TYPE i.
DATA lv_loop TYPE i.
lv_loop = 0.
LOOP AT gt_pdates INTO gs_pdate.
ADD 1 TO lv_loop.
IF lv_loop = 1.
IF gs_pdate-pdates = 0.
lv_inx = gs_pdate-index.
CONTINUE.
ELSE.
lv_inx = gs_pdate-index + 1.
CLEAR gw_pdate.
gw_pdate-index = lv_inx.
gw_pdate-pdates = gs_pdate-pdates + 1.
gw_pdate-low = gs_pdate-pdates + 1.
str1 = gs_pdate-pdates.
gw_pdate-high = ‘9998’.
CONCATENATE ‘库龄’ str1 ‘天以上’ INTO gw_pdate-ptitle.
APPEND gw_pdate TO gt_pdates.
EXIT.
ENDIF.
ENDIF.
DELETE gt_pdates WHERE index = lv_inx.
IF gs_pdate-pdates = 0.
lv_inx = gs_pdate-index.
ELSE.
CLEAR gw_pdate.
gw_pdate-index = lv_inx.
gw_pdate-pdates = gs_pdate-pdates + 1.
gw_pdate-low = gs_pdate-pdates + 1.
str1 = gs_pdate-pdates.
gw_pdate-high = '9998'.
CONCATENATE '库龄' str1 '天以上' INTO gw_pdate-ptitle.
APPEND gw_pdate TO gt_pdates.
EXIT.
ENDIF.
ENDLOOP.
SORT gt_pdates BY index DESCENDING.
LOOP AT gt_pdates INTO gs_pdate.
CLEAR gs_date_intvl.
gs_date_intvl-num = gs_pdate-pdates.
INSERT gs_date_intvl INTO gt_date_intvl INDEX 1.
ENDLOOP.
LOOP AT gt_date_intvl INTO gs_date_intvl
WHERE num GT ‘9998’.
MESSAGE ‘账龄间隔 上限中最多输入 9998 天’ TYPE ‘E’.
ENDLOOP.
DATA lv_pre TYPE i.
lv_loop = 0.
LOOP AT gt_date_intvl INTO gs_date_intvl.
ADD 1 TO lv_loop.
IF lv_loop = 1.
lv_pre = gs_date_intvl-num.
CONTINUE.
ENDIF.
IF gs_date_intvl-num <= lv_pre.
MESSAGE ‘账龄间隔 请输入一个有顺序的排序清单’ TYPE ‘E’.
EXIT.
ENDIF.
lv_pre = gs_date_intvl-num.
ENDLOOP.
ENDFORM.