库存账龄报表

76 篇文章 4 订阅
16 篇文章 3 订阅

&---------------------------------------------------------------------
*& 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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值