&---------------------------------------------------------------------* *& Report ZFIR005 *& *&---------------------------------------------------------------------* *& Programe ID: ZFIR005 *& Programe Discription: 財務庫齡表 *& Change Date: *& Change By: *& Version: Ver0.1 *&---------------------------------------------------------------------* REPORT ZFIR005 NO STANDARD PAGE HEADING. TYPE-POOLS: SLIS. *&---------------------------------------------------------------------* *& TYPES DEFINITION *&---------------------------------------------------------------------* * 物料數據 TYPES: BEGIN OF TP_MATNR, WERKS TYPE MARD-WERKS, "工廠 MATNR TYPE MARD-MATNR, "物料號 LGORT TYPE MARD-LGORT, "庫存地點 MAKTX TYPE MAKT-MAKTX, "物料描述 PRCTR TYPE MARC-PRCTR, "利潤中心 MATKL TYPE MARA-MATKL, "物料組 XCHPF TYPE MARA-XCHPF, "批次管理需求的標識 MENGE TYPE BSEG-MENGE, "數量 MEINS TYPE MARA-MEINS, "數量單位 END OF TP_MATNR. * 物料總數量 TYPES: BEGIN OF TP_QTY, WERKS TYPE BSEG-WERKS, "工廠 MATNR TYPE BSEG-MATNR, "物料號 MENGE TYPE BSEG-MENGE, "數量 DMBTR TYPE BSEG-DMBTR, "按本位幣計的金額 END OF TP_QTY. * 物料庫存數據 TYPES: BEGIN OF TP_DATA, WERKS TYPE MCHB-WERKS, "工廠 MATNR TYPE MCHB-MATNR, "物料號 LGORT TYPE MCHB-LGORT, "庫存地點 CHARG TYPE MCHB-CHARG, "批號 LFGJA TYPE MCHB-LFGJA, "當前期間的會計年度 LFMON TYPE MCHB-LFMON, "當前期間 SDATE TYPE SY-DATUM, "當前日期 CLABS TYPE MCHB-CLABS, "非限制使用的估價的庫存 CUMLM TYPE MCHB-CUMLM, "在運庫存 CINSM TYPE MCHB-CINSM, "質量檢驗中的庫存 SOBKZ TYPE MSKA-SOBKZ, "特殊庫存標識 VBELN TYPE MSKA-VBELN, "銷售和分銷憑證號 POSNR TYPE MSKA-POSNR, "銷售和分銷憑證的項目號 XCHPF TYPE MARA-XCHPF, "批次管理標志 MENGE TYPE MSEG-MENGE, "數量 LWEDT TYPE MCH1-LWEDT, "收貨日期 END OF TP_DATA. * 物料移動數據 TYPES: BEGIN OF TP_MSEG, BUKRS TYPE MSEG-BUKRS, "公司代碼 MBLNR TYPE MSEG-MBLNR, "物料憑證編號 MJAHR TYPE MSEG-MJAHR, "物料憑證年度 ZEILE TYPE MSEG-ZEILE, "物料憑證中的項目 MATNR TYPE MSEG-MATNR, "物料號 WERKS TYPE MSEG-WERKS, "工廠 LGORT TYPE MSEG-LGORT, "庫存地點 BWART TYPE MSEG-BWART, "移動類型 SHKZG TYPE MSEG-SHKZG, "借貸標識 MENGE TYPE MSEG-MENGE, "數量 EXBWR TYPE MSEG-EXBWR, "以本地貨幣計量的過帳金額 CHARG TYPE MSEG-CHARG, "批號 WAERS TYPE MSEG-WAERS, "價格單位 BUDAT TYPE MKPF-BUDAT, "憑證中的過帳日期 LWEDT TYPE MCH1-LWEDT, "最近的收貨日期 END OF TP_MSEG. * 會計憑證數據 TYPES: BEGIN OF TP_BSEG, BUKRS TYPE BSEG-BUKRS, "公司代碼 WERKS TYPE BSEG-WERKS, "工廠 BELNR TYPE BSEG-BELNR, "會計憑證編號 GJAHR TYPE BSEG-GJAHR, "會計年度 BUZEI TYPE BSEG-BUZEI, "項目號 SHKZG TYPE BSEG-SHKZG, "借方/貸方標識 DMBTR TYPE BSEG-DMBTR, "按本位幣計的金額 MATNR TYPE BSEG-MATNR, "物料號 MENGE TYPE BSEG-MENGE, "數量 MEINS TYPE BSEG-MEINS, "數量單位 BUDAT TYPE BKPF-BUDAT, "憑證中的過帳日期 BLART TYPE BKPF-BLART, "憑證類型 AWTYP TYPE BKPF-AWTYP, "參考交易 AWKEY TYPE BKPF-AWKEY, "字段參考關鍵 END OF TP_BSEG. * ALV 輸出字段 TYPES: BEGIN OF TP_ALV, CHK TYPE CHAR1, "CHECBOX WERKS TYPE MARD-WERKS, "工廠 LGORT TYPE MARD-LGORT, "庫存地點 ZYEAR TYPE CHAR4, "運行年份 ZMONTH TYPE CHAR2, "運行月份 MATNR TYPE MARD-MATNR, "物料號 MAKTX TYPE MAKT-MAKTX, "物料描述 MATKL TYPE MARA-MATKL, "物料組 PRCTR TYPE MARC-PRCTR, "利潤中心 PRTXT TYPE CEPCT-MCTXT, "利潤中心描述 XCHPF TYPE MARA-XCHPF, "批次管理 LDATE1 TYPE SY-DATUM, "最后異動日期 LDATE2 TYPE SY-DATUM, "最后銷售日期 PRICE TYPE MBEW-SALK3, "單價 SALK3 TYPE MBEW-SALK3, "庫存金額 LBKUM1 TYPE MBEW-LBKUM, "庫存數量 MEINS1 TYPE MARA-MEINS, "數量單位 LBKUM2 TYPE MBEW-LBKUM, "財務庫存數量 MEINS2 TYPE MARA-MEINS, "財務數量單位 QTY3M TYPE MBEW-LBKUM, "3月以內的庫齡數量 QTY6M TYPE MBEW-LBKUM, "4月到6月以內的庫齡數量 QTY9M TYPE MBEW-LBKUM, "7月到9月以內的庫齡數量 QTY12M TYPE MBEW-LBKUM, "10月到12月以內的庫齡數量 QTY18M TYPE MBEW-LBKUM, "13月到18月以內的庫齡數量 QTY24M TYPE MBEW-LBKUM, "19月到24月以內的庫齡數量 QTY36M TYPE MBEW-LBKUM, "25月到36月以內的庫齡數量 QTY60M TYPE MBEW-LBKUM, "37月到60月以內的庫齡數量 QTY61M TYPE MBEW-LBKUM, "61月以上的庫齡數量 PRC3M TYPE MBEW-SALK3, "3月以內的庫齡金額 PRC6M TYPE MBEW-SALK3, "4月到6月以內的庫齡金額 PRC9M TYPE MBEW-SALK3, "7月到9月以內的庫齡金額 PRC12M TYPE MBEW-SALK3, "10月到12月以內的庫齡金額 PRC18M TYPE MBEW-SALK3, "13月到18月以內的庫齡金額 PRC24M TYPE MBEW-SALK3, "19月到24月以內的庫齡金額 PRC36M TYPE MBEW-SALK3, "25月到36月以內的庫齡金額 PRC60M TYPE MBEW-SALK3, "37月到60月以內的庫齡金額 PRC61M TYPE MBEW-SALK3, "60月以上的庫齡金額 PERPRC TYPE MBEW-SALK3, "跌價金額 WAERS TYPE MSEG-WAERS, "價格單位 PERFLG TYPE CHAR1, "跌價規則維護標志 END OF TP_ALV. *&---------------------------------------------------------------------* *& DATA DEFINITION *&---------------------------------------------------------------------* DATA: V_GJAHR TYPE BSIS-GJAHR, V_MONAT TYPE BKPF-MONAT, V_WERKS TYPE T001W-WERKS, V_MATNR TYPE MARA-MATNR, V_LGORT TYPE MARD-LGORT, V_BWKEY TYPE T001W-BWKEY, V_QTY TYPE MBEW-LBKUM, V_DMBTR TYPE MBEW-SALK3, V_AWKEY TYPE BKPF-AWKEY, V_FDATE TYPE SY-DATUM, V_TDATE TYPE SY-DATUM, V_COUT TYPE I, V_NUM TYPE NUMC2, V_FIELD TYPE CHAR5, V_VALUE TYPE FAGLFLEXT-HSLVT. DATA: S_3M TYPE RANGE OF SY-DATUM, "過去3月以內的庫齡數量 S_6M TYPE RANGE OF SY-DATUM, "過去4月到6月以內的庫齡數量 S_9M TYPE RANGE OF SY-DATUM, "過去7月到9月以內的庫齡數量 S_12M TYPE RANGE OF SY-DATUM, "過去10月到12月以內的庫齡數量 S_18M TYPE RANGE OF SY-DATUM, "過去13月到18月以內的庫齡數量 S_24M TYPE RANGE OF SY-DATUM, "過去19月到24月以內的庫齡數量 S_36M TYPE RANGE OF SY-DATUM, "過去25月到36月以內的庫齡數量 S_60M TYPE RANGE OF SY-DATUM, "過去37月到60月以內的庫齡數量 S_61M TYPE SY-DATUM. "過去61月以上庫齡數量 DATA: WK_MATNR TYPE TP_MATNR, IT_MATNR TYPE STANDARD TABLE OF TP_MATNR, WK_MCHB TYPE TP_DATA, IT_MCHB TYPE STANDARD TABLE OF TP_DATA, WK_MARD TYPE TP_DATA, IT_MARD TYPE STANDARD TABLE OF TP_DATA, WK_MSKA TYPE TP_DATA, IT_MSKA TYPE STANDARD TABLE OF TP_DATA, WK_MARC TYPE TP_DATA, IT_MARC TYPE STANDARD TABLE OF TP_DATA, WK_CHARG TYPE TP_DATA, IT_CHARG TYPE STANDARD TABLE OF TP_DATA, WK_DATA TYPE TP_DATA, IT_DATA TYPE STANDARD TABLE OF TP_DATA, WK_ZMMT001 TYPE ZMMT001, IT_ZMMT001 TYPE STANDARD TABLE OF ZMMT001, WK_ZFIT015 TYPE ZFIT015, IT_ZFIT015 TYPE STANDARD TABLE OF ZFIT015, WK_ZFIT016 TYPE ZFIT016, IT_ZFIT016 TYPE STANDARD TABLE OF ZFIT016, WK_ZFIT017 TYPE ZFIT017, IT_ZFIT017 TYPE STANDARD TABLE OF ZFIT017, WK_OBJ TYPE FAGLFLEXT, WK_FAG1 TYPE FAGLFLEXT, IT_FAG1 TYPE STANDARD TABLE OF FAGLFLEXT, WK_MCH1 TYPE MCH1, IT_MCH1 TYPE STANDARD TABLE OF MCH1, WK_CEPCT TYPE CEPCT, IT_CEPCT TYPE STANDARD TABLE OF CEPCT, WK_MSEG TYPE TP_MSEG, IT_MSEG TYPE STANDARD TABLE OF TP_MSEG, IT_MSEG1 TYPE STANDARD TABLE OF TP_MSEG, WK_QTY TYPE TP_QTY, IT_QTY TYPE STANDARD TABLE OF TP_QTY, WK_BKPF TYPE BKPF, IT_BKPF TYPE STANDARD TABLE OF BKPF, WK_BSEG TYPE TP_BSEG, IT_BSEG TYPE STANDARD TABLE OF TP_BSEG, IT_AWKEY TYPE STANDARD TABLE OF TP_MSEG, WK_ALV TYPE TP_ALV, IT_ALV TYPE STANDARD TABLE OF TP_ALV, WK_LAYOUT TYPE SLIS_LAYOUT_ALV, IT_FIELDCAT TYPE STANDARD TABLE OF SLIS_FIELDCAT_ALV, IT_EVENT TYPE STANDARD TABLE OF SLIS_ALV_EVENT. FIELD-SYMBOLS: <FS_HEAD> TYPE FAGLFLEXT, <FS_FIELD> TYPE ANY, <FS_MSEG> TYPE TP_MSEG, <FS_CHARG> TYPE TP_DATA, <FS_MCHB> TYPE TP_DATA, <FS_MARD> TYPE TP_DATA, <FS_MSKA> TYPE TP_DATA, <FS_MARC> TYPE TP_DATA, <FS_ALV> TYPE TP_ALV. *&---------------------------------------------------------------------* *& PARAMETERS DEFINITION *&---------------------------------------------------------------------* *PARAMETERS: P_MONAT TYPE BKPF-MONAT OBLIGATORY, "Fiscal Period * P_GJAHR TYPE BSIS-GJAHR OBLIGATORY, "Fiscal Year PARAMETERS: P_SDATE TYPE SY-DATUM OBLIGATORY, P_BUKRS TYPE T001-BUKRS OBLIGATORY. "Company Code SELECT-OPTIONS: S_WERKS FOR V_WERKS OBLIGATORY, S_MATNR FOR V_MATNR, S_LGORT FOR V_LGORT. *&---------------------------------------------------------------------* *& CONSTANTS DEFINITION *&---------------------------------------------------------------------* CONSTANTS: C_X TYPE CHAR1 VALUE 'X', C_DAY TYPE CHAR2 VALUE '01'. *&---------------------------------------------------------------------* *& INITIALIZATION *&---------------------------------------------------------------------* INITIALIZATION. * 初始化數據 PERFORM INIT_DATA. * 查詢日期設置 PERFORM SET_DATE. *&---------------------------------------------------------------------* *& AT SELECTION-SCREEN *&---------------------------------------------------------------------* AT SELECTION-SCREEN. * 輸入檢查 PERFORM CHECK_INPUT. *&---------------------------------------------------------------------* *& START-OF-SELECTION *&---------------------------------------------------------------------* START-OF-SELECTION. * 得到對象數據 PERFORM GET_DATA. * 編輯對象數據 PERFORM EDIT_DATA. * 設定 FIELDCAT PERFORM SET_FIELDCAT. * 設定 LAYOUT PERFORM SET_LAYOUT. * 設定 Eventa PERFORM SET_ALV_EVENT. * 輸出 ALV PERFORM SHOW_ALV. *&---------------------------------------------------------------------* *& Form INIT_DATA *&---------------------------------------------------------------------* * 初始化數據 *----------------------------------------------------------------------* FORM INIT_DATA . CLEAR: V_WERKS, V_MATNR, V_LGORT, V_BWKEY, V_QTY, WK_MATNR, WK_ZMMT001, WK_MCH1, WK_MCH1, WK_MSEG, WK_ALV, WK_LAYOUT. REFRESH: IT_MATNR, IT_ZMMT001, IT_MCH1, IT_CEPCT, IT_MSEG, IT_ALV, IT_FIELDCAT, IT_EVENT. ENDFORM. " INIT_DATA *&---------------------------------------------------------------------* *& Form CHECK_INPUT *&---------------------------------------------------------------------* * 輸入檢查 *----------------------------------------------------------------------* FORM CHECK_INPUT . DATA: L_STR TYPE CHAR300, LT_T001K TYPE STANDARD TABLE OF T001K, LW_T001W TYPE T001W, LT_T001W TYPE STANDARD TABLE OF T001W. REFRESH LT_T001K. SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_T001K FROM T001K WHERE BUKRS = P_BUKRS. REFRESH LT_T001W. SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_T001W FROM T001W WHERE WERKS IN S_WERKS. * 輸入判斷 LOOP AT LT_T001W INTO LW_T001W. READ TABLE LT_T001K TRANSPORTING NO FIELDS WITH KEY BWKEY = LW_T001W-BWKEY. IF SY-SUBRC <> 0. CONCATENATE L_STR LW_T001W-WERKS INTO L_STR SEPARATED BY '/'. ENDIF. ENDLOOP. IF LT_T001W IS INITIAL. MESSAGE '工廠不存在,請重新輸入!' TYPE 'E'. LEAVE TO LIST-PROCESSING. ENDIF. IF L_STR IS NOT INITIAL. L_STR+0(1) = ''. CONCATENATE '該公司代碼不包含工廠:' L_STR INTO L_STR. MESSAGE E398(00) WITH L_STR. LEAVE TO LIST-PROCESSING. ENDIF. ENDFORM. " CHECK_INPUT *&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* * 得到對象數據 *----------------------------------------------------------------------* FORM GET_DATA . DATA: L_MENGE TYPE MSEG-MENGE, "數量 LW_MCHB TYPE TP_DATA, LT_MCHB TYPE STANDARD TABLE OF TP_DATA, LW_MSKA TYPE TP_DATA, LT_MSKA TYPE STANDARD TABLE OF TP_DATA, LW_MATNR TYPE TP_MATNR, LT_MATNR TYPE STANDARD TABLE OF TP_MATNR, LW_DATA TYPE TP_DATA, LT_DATA TYPE STANDARD TABLE OF TP_DATA. CLEAR V_FDATE. CONCATENATE P_SDATE+0(6) '01' INTO V_FDATE. V_GJAHR = P_SDATE+0(4). V_MONAT = P_SDATE+4(2). * 得到批次管理物料數據 REFRESH IT_MCHB. SELECT MCHB~MATNR "物料號 MCHB~WERKS "工廠 MCHB~LGORT "庫存地點 MCHB~CHARG "批號 MCHB~LFGJA "當前期間的會計年度 MCHB~LFMON "當前期間 MCHB~CLABS "非限制使用的估價的庫存 MCHB~CUMLM "在運庫存 MCHB~CINSM "質量檢驗中的庫存 MARA~XCHPF "批次管理標志 INTO CORRESPONDING FIELDS OF TABLE IT_MCHB FROM MCHB INNER JOIN MARA ON MCHB~MATNR = MARA~MATNR WHERE MCHB~MATNR IN S_MATNR AND MCHB~WERKS IN S_WERKS AND MCHB~LGORT IN S_LGORT AND MARA~XCHPF = 'X'. * 批次物料歷史庫存 SELECT MCHBH~MATNR "物料號 MCHBH~WERKS "工廠 MCHBH~LGORT "庫存地點 MCHBH~CHARG "批號 MCHBH~LFGJA "當前期間的會計年度 MCHBH~LFMON "當前期間 MCHBH~CLABS "非限制使用的估價的庫存 MCHBH~CUMLM "在運庫存 MCHBH~CINSM "質量檢驗中的庫存 MARA~XCHPF "批次管理標志 APPENDING CORRESPONDING FIELDS OF TABLE IT_MCHB FROM MCHBH INNER JOIN MARA ON MCHBH~MATNR = MARA~MATNR WHERE MCHBH~MATNR IN S_MATNR AND MCHBH~WERKS IN S_WERKS AND MCHBH~LGORT IN S_LGORT AND MARA~XCHPF = 'X'. * 查詢日期綁定 LOOP AT IT_MCHB ASSIGNING <FS_MCHB>. CONCATENATE <FS_MCHB>-LFGJA <FS_MCHB>-LFMON '01' INTO <FS_MCHB>-SDATE. ENDLOOP. * 排除庫存符合查詢期間的對象數據 DELETE IT_MCHB WHERE SDATE > V_FDATE. SORT IT_MCHB BY WERKS ASCENDING MATNR ASCENDING LGORT ASCENDING CHARG ASCENDING SDATE DESCENDING. * 得到滿足查詢條件的唯一的批次物料 DELETE ADJACENT DUPLICATES FROM IT_MCHB COMPARING WERKS MATNR LGORT CHARG. * 排除庫存數量為0的對象數據 DELETE IT_MCHB WHERE CLABS = 0 AND CUMLM = 0 AND CINSM = 0. APPEND LINES OF IT_MCHB TO IT_DATA. APPEND LINES OF IT_MCHB TO IT_CHARG. * 普通物料管理 REFRESH IT_MARD. SELECT MARD~MATNR "物料號 MARD~WERKS "工廠 MARD~LGORT "庫存地點 MARD~LFGJA "當前期間的會計年度 MARD~LFMON "當前期間 MARD~LABST AS CLABS "非限制使用的估價的庫存 MARD~UMLME AS CUMLM "在運庫存 MARD~INSME AS CINSM "質量檢驗中的庫存 INTO CORRESPONDING FIELDS OF TABLE IT_MARD FROM MARD INNER JOIN MARA ON MARD~MATNR = MARA~MATNR WHERE MARD~MATNR IN S_MATNR AND MARD~WERKS IN S_WERKS AND MARD~LGORT IN S_LGORT AND MARA~XCHPF <> 'X'. * 普通物料歷史庫存 SELECT MARDH~MATNR "物料號 MARDH~WERKS "工廠 MARDH~LGORT "庫存地點 MARDH~LFGJA "當前期間的會計年度 MARDH~LFMON "當前期間 MARDH~LABST AS CLABS "非限制使用的估價的庫存 MARDH~UMLME AS CUMLM "在運庫存 MARDH~INSME AS CINSM "質量檢驗中的庫存 APPENDING CORRESPONDING FIELDS OF TABLE IT_MARD FROM MARDH INNER JOIN MARA ON MARDH~MATNR = MARA~MATNR WHERE MARDH~MATNR IN S_MATNR AND MARDH~WERKS IN S_WERKS AND MARDH~LGORT IN S_LGORT AND MARA~XCHPF <> 'X'. * 查詢日期綁定 LOOP AT IT_MARD ASSIGNING <FS_MARD>. CONCATENATE <FS_MARD>-LFGJA <FS_MARD>-LFMON '01' INTO <FS_MARD>-SDATE. ENDLOOP. * 排除庫存符合查詢期間的對象數據 DELETE IT_MARD WHERE SDATE > V_FDATE. SORT IT_MARD BY WERKS ASCENDING MATNR ASCENDING LGORT ASCENDING SDATE DESCENDING. * 得到滿足查詢條件的唯一的批次物料 DELETE ADJACENT DUPLICATES FROM IT_MARD COMPARING WERKS MATNR LGORT. * 排除庫存數量為0的對象數據 DELETE IT_MARD WHERE CLABS = 0 AND CUMLM = 0 AND CINSM = 0. APPEND LINES OF IT_MARD TO IT_DATA. * 特殊物料管理 REFRESH IT_MSKA. SELECT MSKA~MATNR "物料號 MSKA~WERKS "工廠 MSKA~LGORT "庫存地點 MSKA~CHARG "批號 MSKA~SOBKZ "特殊庫存標識 MSKA~VBELN "銷售和分銷憑證號 MSKA~POSNR "銷售和分銷憑證的項目號 MSKA~KALAB AS CLABS "非限制使用的估價的庫存 MSKA~KAINS AS CINSM "質量檢驗中的庫存 MSKA~LFGJA "當前期間的會計年度 MSKA~LFMON "當前期間 INTO CORRESPONDING FIELDS OF TABLE IT_MSKA FROM MSKA WHERE MSKA~MATNR IN S_MATNR AND MSKA~WERKS IN S_WERKS AND MSKA~LGORT IN S_LGORT. * 特殊物料歷史庫存 SELECT MSKAH~MATNR "物料號 MSKAH~WERKS "工廠 MSKAH~LGORT "庫存地點 MSKAH~CHARG "批號 MSKAH~SOBKZ "特殊庫存標識 MSKAH~VBELN "銷售和分銷憑證號 MSKAH~POSNR "銷售和分銷憑證的項目號 MSKAH~KALAB AS CLABS "非限制使用的估價的庫存 MSKAH~KAINS AS CINSM "質量檢驗中的庫存 MSKAH~LFGJA "當前期間的會計年度 MSKAH~LFMON "當前期間 APPENDING CORRESPONDING FIELDS OF TABLE IT_MSKA FROM MSKAH WHERE MSKAH~MATNR IN S_MATNR AND MSKAH~WERKS IN S_WERKS AND MSKAH~LGORT IN S_LGORT. * 查詢日期綁定 LOOP AT IT_MSKA ASSIGNING <FS_MSKA>. CONCATENATE <FS_MSKA>-LFGJA <FS_MSKA>-LFMON '01' INTO <FS_MSKA>-SDATE. ENDLOOP. * 排除庫存符合查詢期間的對象數據 DELETE IT_MSKA WHERE SDATE > V_FDATE. SORT IT_MSKA BY WERKS ASCENDING MATNR ASCENDING LGORT ASCENDING CHARG ASCENDING SDATE DESCENDING. REFRESH LT_MSKA. APPEND LINES OF IT_MSKA TO LT_MSKA. * 得到滿足查詢條件的唯一的批次物料 DELETE ADJACENT DUPLICATES FROM IT_MSKA COMPARING WERKS MATNR LGORT CHARG. * 按批次合計銷售訂單 LOOP AT IT_MSKA ASSIGNING <FS_MSKA>. CLEAR: <FS_MSKA>-CLABS, <FS_MSKA>-CINSM, <FS_MSKA>-VBELN, <FS_MSKA>-POSNR. LOOP AT LT_MSKA INTO LW_MSKA WHERE WERKS = <FS_MSKA>-WERKS AND MATNR = <FS_MSKA>-MATNR AND LGORT = <FS_MSKA>-LGORT AND CHARG = <FS_MSKA>-CHARG AND SDATE = <FS_MSKA>-SDATE. <FS_MSKA>-CLABS = <FS_MSKA>-CLABS + LW_MSKA-CLABS. <FS_MSKA>-CINSM = <FS_MSKA>-CINSM + LW_MSKA-CINSM. ENDLOOP. ENDLOOP. * 排除庫存數量為0的對象數據 DELETE IT_MSKA WHERE CLABS = 0 AND CUMLM = 0 AND CINSM = 0. APPEND LINES OF IT_MSKA TO IT_DATA. APPEND LINES OF IT_MSKA TO IT_CHARG. * 在途庫存物料管理 REFRESH IT_MARC. SELECT MARC~MATNR "物料號 MARC~WERKS "工廠 MARC~UMLMC AS CLABS "非限制使用的估價的庫存 MARC~LFGJA "當前期間的會計年度 MARC~LFMON "當前期間 INTO CORRESPONDING FIELDS OF TABLE IT_MARC FROM MARC WHERE MARC~MATNR IN S_MATNR AND MARC~WERKS IN S_WERKS. * 特殊物料歷史庫存 SELECT MARCH~MATNR "物料號 MARCH~WERKS "工廠 MARCH~UMLMC AS CLABS "非限制使用的估價的庫存 MARCH~LFGJA "當前期間的會計年度 MARCH~LFMON "當前期間 APPENDING CORRESPONDING FIELDS OF TABLE IT_MARC FROM MARCH WHERE MARCH~MATNR IN S_MATNR AND MARCH~WERKS IN S_WERKS. * 查詢日期綁定 LOOP AT IT_MARC ASSIGNING <FS_MARC>. <FS_MARC>-LGORT = 'XXXX'. CONCATENATE <FS_MARC>-LFGJA <FS_MARC>-LFMON '01' INTO <FS_MARC>-SDATE. ENDLOOP. * 排除庫存符合查詢期間的對象數據 DELETE IT_MARC WHERE SDATE > V_FDATE. SORT IT_MARC BY WERKS ASCENDING MATNR ASCENDING SDATE DESCENDING. * 得到滿足查詢條件的唯一的批次物料 DELETE ADJACENT DUPLICATES FROM IT_MARC COMPARING WERKS MATNR. * 排除庫存數量為0的對象數據 DELETE IT_MARC WHERE CLABS = 0 AND CUMLM = 0 AND CINSM = 0. APPEND LINES OF IT_MARC TO IT_DATA. * 排除庫存數量為0的對象數據 DELETE IT_DATA WHERE ( CLABS = 0 AND CUMLM = 0 AND CINSM = 0 ) OR SDATE > V_FDATE. SORT IT_DATA BY WERKS ASCENDING MATNR ASCENDING LGORT ASCENDING SDATE DESCENDING. * 得到輸出對象 DELETE ADJACENT DUPLICATES FROM IT_DATA COMPARING WERKS MATNR LGORT. IF IT_DATA IS NOT INITIAL. * 得到物料屬性 REFRESH LT_MATNR. SELECT MARA~MATNR "物料號 MARA~MATKL "物料組 MAKT~MAKTX "物料描述 MARA~XCHPF "批次管理需求的標識 MARA~MEINS "數量單位 MARC~PRCTR "利潤中心 INTO CORRESPONDING FIELDS OF TABLE LT_MATNR FROM MARA INNER JOIN MARC ON MARC~MATNR = MARA~MATNR INNER JOIN MAKT ON MAKT~MATNR = MARA~MATNR AND MAKT~SPRAS = SY-LANGU FOR ALL ENTRIES IN IT_DATA WHERE MARA~MATNR = IT_DATA-MATNR AND MARC~WERKS = IT_DATA-WERKS. ENDIF. * 整合對象數據 REFRESH LT_DATA. LOOP AT IT_DATA INTO WK_DATA. CLEAR WK_MATNR. WK_MATNR-WERKS = WK_DATA-WERKS. WK_MATNR-LGORT = WK_DATA-LGORT. WK_MATNR-MATNR = WK_DATA-MATNR. CLEAR LW_MATNR. READ TABLE LT_MATNR INTO LW_MATNR WITH KEY MATNR = WK_DATA-MATNR. IF SY-SUBRC = 0. WK_MATNR-MAKTX = LW_MATNR-MAKTX. WK_MATNR-XCHPF = LW_MATNR-XCHPF. WK_MATNR-MEINS = LW_MATNR-MEINS. WK_MATNR-PRCTR = LW_MATNR-PRCTR. WK_MATNR-MATKL = LW_MATNR-MATKL. ENDIF. * 計算庫位總數量 IF WK_MATNR-XCHPF IS NOT INITIAL. LOOP AT IT_MCHB INTO WK_MCHB WHERE WERKS = WK_MATNR-WERKS AND MATNR = WK_MATNR-MATNR AND LGORT = WK_MATNR-LGORT. * 數量累計:限制使用的估價的庫存/在運庫存/質量檢驗中的庫存 CLEAR L_MENGE. L_MENGE = WK_MCHB-CLABS + WK_MCHB-CUMLM + WK_MCHB-CINSM. WK_MATNR-MENGE = WK_MATNR-MENGE + L_MENGE. ENDLOOP. ELSE. * 非批次管理物料設置 APPEND WK_DATA TO LT_DATA. LOOP AT IT_MARD INTO WK_MARD WHERE WERKS = WK_MATNR-WERKS AND MATNR = WK_MATNR-MATNR AND LGORT = WK_MATNR-LGORT. * 數量累計:限制使用的估價的庫存/在運庫存/質量檢驗中的庫存 CLEAR L_MENGE. L_MENGE = WK_MARD-CLABS + WK_MARD-CUMLM + WK_MARD-CINSM. WK_MATNR-MENGE = WK_MATNR-MENGE + L_MENGE. ENDLOOP. ENDIF. LOOP AT IT_MSKA INTO WK_MSKA WHERE WERKS = WK_MATNR-WERKS AND MATNR = WK_MATNR-MATNR AND LGORT = WK_MATNR-LGORT. * 數量累計:限制使用的估價的庫存/在運庫存/質量檢驗中的庫存 CLEAR L_MENGE. L_MENGE = WK_MSKA-CLABS + WK_MSKA-CUMLM + WK_MSKA-CINSM. WK_MATNR-MENGE = WK_MATNR-MENGE + L_MENGE. ENDLOOP. * 在途庫存設置 IF WK_MATNR-LGORT = 'XXXX'. CLEAR WK_MARC. READ TABLE IT_MARC INTO WK_MARC WITH KEY WERKS = WK_MATNR-WERKS MATNR = WK_MATNR-MATNR. IF SY-SUBRC = 0. WK_MATNR-MENGE = WK_MARC-CLABS. ENDIF. ENDIF. APPEND WK_MATNR TO IT_MATNR. ENDLOOP. * 非批次管理物料物料移動數據 IF LT_DATA IS NOT INITIAL. * 計算庫齡和最后物料移動時間 REFRESH IT_MSEG. SELECT MSEG~BUKRS "公司代碼 MSEG~MBLNR "物料憑證編號 MSEG~MJAHR "物料憑證年度 MSEG~ZEILE "物料憑證中的項目 MSEG~MATNR "物料號 MSEG~WERKS "工廠 MSEG~LGORT "庫存地點 MSEG~BWART "移動類型 MSEG~SHKZG "借貸標識 MSEG~MENGE "數量 MSEG~EXBWR "以本地貨幣計量的過帳金額 MSEG~CHARG "批號 MSEG~WAERS "價格單位 MKPF~BUDAT "憑證中的過帳日期 INTO CORRESPONDING FIELDS OF TABLE IT_MSEG FROM MKPF INNER JOIN MSEG ON MKPF~MBLNR = MSEG~MBLNR AND MKPF~MJAHR = MSEG~MJAHR FOR ALL ENTRIES IN LT_DATA WHERE MSEG~WERKS = LT_DATA-WERKS AND MSEG~MATNR = LT_DATA-MATNR AND MSEG~LGORT = LT_DATA-LGORT AND MSEG~BUKRS = P_BUKRS AND MKPF~BUDAT <= P_SDATE AND MSEG~MENGE <> 0 AND MSEG~BWART IN ('101', '701', '561') AND MSEG~XAUTO = ''. DELETE IT_MSEG WHERE MATNR IS INITIAL. SORT IT_MSEG BY WERKS ASCENDING MATNR ASCENDING LGORT ASCENDING BUDAT DESCENDING. ENDIF. IF IT_MATNR IS NOT INITIAL. * 得到批次管理的日期 IF IT_CHARG IS NOT INITIAL. REFRESH IT_MCH1. SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_MCH1 FROM MCH1 FOR ALL ENTRIES IN IT_CHARG WHERE MATNR = IT_CHARG-MATNR AND CHARG = IT_CHARG-CHARG. * 按照物料號/最近收貨日期排序 SORT IT_MCH1 BY MATNR ASCENDING CHARG ASCENDING LWEDT DESCENDING. ENDIF. * 批次收貨日期管理綁定 LOOP AT IT_CHARG ASSIGNING <FS_CHARG>. CLEAR WK_MCH1. READ TABLE IT_MCH1 INTO WK_MCH1 WITH KEY MATNR = <FS_CHARG>-MATNR CHARG = <FS_CHARG>-CHARG BINARY SEARCH. IF SY-SUBRC = 0. <FS_CHARG>-LWEDT = WK_MCH1-LWEDT. ENDIF. <FS_CHARG>-MENGE = <FS_CHARG>-CLABS + <FS_CHARG>-CUMLM + <FS_CHARG>-CINSM. ENDLOOP. * 得到庫齡金額 REFRESH IT_ZFIT015. IF P_BUKRS <> '3200' AND P_BUKRS <> '3300'. SELECT * FROM ZFIT015 INTO CORRESPONDING FIELDS OF TABLE IT_ZFIT015 FOR ALL ENTRIES IN IT_MATNR WHERE BUKRS = P_BUKRS AND MATNR = IT_MATNR-MATNR AND WERKS = IT_MATNR-WERKS AND GJAHR = V_GJAHR AND MONAT = V_MONAT. ELSE. SELECT * FROM ZFIT015 INTO CORRESPONDING FIELDS OF TABLE IT_ZFIT015 FOR ALL ENTRIES IN IT_MATNR WHERE BUKRS = P_BUKRS AND MATNR = IT_MATNR-MATNR AND GJAHR = V_GJAHR AND MONAT = V_MONAT. LOOP AT IT_ZFIT015 INTO WK_ZFIT015 WHERE WERKS IS INITIAL. WK_ZFIT015-WERKS = WK_ZFIT015-BUKRS. MODIFY IT_ZFIT015 FROM WK_ZFIT015 TRANSPORTING WERKS. ENDLOOP. ENDIF. SORT IT_ZFIT015 BY WERKS ASCENDING MATNR ASCENDING. * 得到跌價比率 REFRESH IT_ZFIT017. SELECT * FROM ZFIT017 INTO CORRESPONDING FIELDS OF TABLE IT_ZFIT017 FOR ALL ENTRIES IN IT_MATNR WHERE MATKL = IT_MATNR-MATKL AND PRCTR = IT_MATNR-PRCTR. SORT IT_ZFIT017 BY MATKL ASCENDING PRCTR ASCENDING. * 利潤中心描述 REFRESH IT_CEPCT. SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_CEPCT FROM CEPCT FOR ALL ENTRIES IN IT_MATNR WHERE PRCTR = IT_MATNR-PRCTR AND SPRAS = SY-LANGU. SORT IT_CEPCT BY PRCTR ASCENDING. DELETE ADJACENT DUPLICATES FROM IT_CEPCT COMPARING PRCTR. * 計算物料財務數量和單位 REFRESH IT_ZMMT001. SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_ZMMT001 FROM ZMMT001 FOR ALL ENTRIES IN IT_MATNR WHERE MATNR = IT_MATNR-MATNR. SORT IT_ZMMT001 BY MATNR ASCENDING. ENDIF. * 取得總帳科目數據 REFRESH IT_FAG1. SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_FAG1 FROM FAGLFLEXT WHERE RYEAR = V_GJAHR AND RACCT = '0014100000' AND RBUKRS = P_BUKRS AND RBUSA IN S_WERKS AND RRCTY = '0' AND RLDNR = '0L'. * 得到發票校驗引起的尾差金額 REFRESH IT_ZFIT016. SELECT * FROM ZFIT016 INTO CORRESPONDING FIELDS OF TABLE IT_ZFIT016 WHERE BUKRS = P_BUKRS AND BUDAT <= P_SDATE AND GSBER IN S_WERKS. ENDFORM. " GET_DATA *&---------------------------------------------------------------------* *& Form EDIT_DATA *&---------------------------------------------------------------------* * 編輯對象數據 *----------------------------------------------------------------------* FORM EDIT_DATA . DATA: L_QTY TYPE MBEW-LBKUM, L_MENGE TYPE MSEG-MENGE, L_SQTY TYPE MBEW-LBKUM, L_NUM TYPE MBEW-LBKUM, L_DMBTR TYPE MBEW-SALK3, L_SALK3 TYPE MBEW-SALK3, L_INDEX TYPE SY-INDEX, LW_MATNR TYPE TP_MATNR, L_SUM TYPE ZFIT015-DMBTR, LW_ALV TYPE TP_ALV. * 設置期間范圍 PERFORM SET_MONTH. * 數據整合 LOOP AT IT_MATNR INTO WK_MATNR. L_INDEX = SY-TABIX + 1. CLEAR: WK_ALV,L_QTY. * 物料啟用批次管理判斷 IF WK_MATNR-XCHPF IS NOT INITIAL. * 按照輸出行循環批次管理表(物料/庫位查找) LOOP AT IT_CHARG INTO WK_CHARG WHERE WERKS = WK_MATNR-WERKS AND MATNR = WK_MATNR-MATNR AND LGORT = WK_MATNR-LGORT. * 計算物料所在庫位的數量 L_QTY = L_QTY + WK_CHARG-MENGE. * 庫齡數量差異調整 IF L_QTY > WK_MATNR-MENGE. WK_CHARG-MENGE = WK_MATNR-MENGE - ( L_QTY - WK_CHARG-MENGE ) . L_QTY = WK_MATNR-MENGE. ENDIF. * 過去3月以內的庫齡數量 IF WK_CHARG-LWEDT IN S_3M OR WK_CHARG-LWEDT >= P_SDATE. WK_ALV-QTY3M = WK_ALV-QTY3M + WK_CHARG-MENGE. CONTINUE. ENDIF. * 過去4月到6月以內的庫齡數量 IF WK_CHARG-LWEDT IN S_6M. WK_ALV-QTY6M = WK_ALV-QTY6M + WK_CHARG-MENGE. CONTINUE. ENDIF. * 過去7月到9月以內的庫齡數量 IF WK_CHARG-LWEDT IN S_9M. WK_ALV-QTY9M = WK_ALV-QTY9M + WK_CHARG-MENGE. CONTINUE. ENDIF. * 過去10月到12月以內的庫齡數量 IF WK_CHARG-LWEDT IN S_12M. WK_ALV-QTY12M = WK_ALV-QTY12M + WK_CHARG-MENGE. CONTINUE. ENDIF. * 過去13月到18月以內的庫齡數量 IF WK_CHARG-LWEDT IN S_18M. WK_ALV-QTY18M = WK_ALV-QTY18M + WK_CHARG-MENGE. CONTINUE. ENDIF. * 過去19月到24月以內的庫齡數量 IF WK_CHARG-LWEDT IN S_24M. WK_ALV-QTY24M = WK_ALV-QTY24M + WK_CHARG-MENGE. CONTINUE. ENDIF. * 過去25月到36月以內的庫齡數量 IF WK_CHARG-LWEDT IN S_36M. WK_ALV-QTY36M = WK_ALV-QTY36M + WK_CHARG-MENGE. CONTINUE. ENDIF. * 過去37月到60月以內的庫齡數量 IF WK_CHARG-LWEDT IN S_60M. WK_ALV-QTY60M = WK_ALV-QTY60M + WK_CHARG-MENGE. CONTINUE. ENDIF. * 過去61月以上的庫齡數量 IF WK_CHARG-LWEDT < S_61M. WK_ALV-QTY61M = WK_ALV-QTY61M + WK_CHARG-MENGE. CONTINUE. ENDIF. * 庫位數量相等判斷 IF L_QTY = WK_MATNR-MENGE. EXIT. ENDIF. ENDLOOP. ELSE. * 按照輸出行循環MSEG(物料/庫位查找) LOOP AT IT_MSEG INTO WK_MSEG WHERE WERKS = WK_MATNR-WERKS AND MATNR = WK_MATNR-MATNR AND LGORT = WK_MATNR-LGORT. * 移動數量類型判斷 CLEAR L_MENGE. L_MENGE = WK_MSEG-MENGE. * 計算物料所在庫位的數量 L_QTY = L_QTY + L_MENGE. * 庫齡數量差異調整 IF L_QTY > WK_MATNR-MENGE. L_MENGE = WK_MATNR-MENGE - ( L_QTY - L_MENGE ). L_QTY = WK_MATNR-MENGE. ENDIF. * 過去3月以內的庫齡數量 IF WK_MSEG-BUDAT IN S_3M. WK_ALV-QTY3M = WK_ALV-QTY3M + L_MENGE. CONTINUE. ENDIF. * 過去4月到6月以內的庫齡數量 IF WK_MSEG-BUDAT IN S_6M. WK_ALV-QTY6M = WK_ALV-QTY6M + L_MENGE. CONTINUE. ENDIF. * 過去7月到9月以內的庫齡數量 IF WK_MSEG-BUDAT IN S_9M. WK_ALV-QTY9M = WK_ALV-QTY9M + L_MENGE. CONTINUE. ENDIF. * 過去10月到12月以內的庫齡數量 IF WK_MSEG-BUDAT IN S_12M. WK_ALV-QTY12M = WK_ALV-QTY12M + L_MENGE. CONTINUE. ENDIF. * 過去13月到18月以內的庫齡數量 IF WK_MSEG-BUDAT IN S_18M. WK_ALV-QTY18M = WK_ALV-QTY18M + L_MENGE. CONTINUE. ENDIF. * 過去19月到24月以內的庫齡數量 IF WK_MSEG-BUDAT IN S_24M. WK_ALV-QTY24M = WK_ALV-QTY24M + L_MENGE. CONTINUE. ENDIF. * 過去25月到36月以內的庫齡數量 IF WK_MSEG-BUDAT IN S_36M. WK_ALV-QTY36M = WK_ALV-QTY36M + L_MENGE. CONTINUE. ENDIF. * 過去37月到60月以內的庫齡數量 IF WK_MSEG-BUDAT IN S_60M. WK_ALV-QTY60M = WK_ALV-QTY60M + L_MENGE. CONTINUE. ENDIF. * 過去61月以上的庫齡數量 IF WK_MSEG-BUDAT < S_61M. WK_ALV-QTY61M = WK_ALV-QTY61M + L_MENGE. CONTINUE. ENDIF. * 庫位數量相等判斷 IF L_QTY = WK_MATNR-MENGE. EXIT. ENDIF. ENDLOOP. ENDIF. IF L_QTY < WK_MATNR-MENGE. WK_ALV-QTY61M = WK_ALV-QTY61M + WK_MATNR-MENGE - L_QTY. ENDIF. * 計算物料總數量 L_SQTY = L_SQTY + WK_MATNR-MENGE. * 庫存數量/數量單位 WK_ALV-LBKUM1 = WK_MATNR-MENGE. WK_ALV-MEINS1 = WK_MATNR-MEINS. WK_ALV-WAERS = WK_MSEG-WAERS. WK_ALV-WERKS = WK_MATNR-WERKS. WK_ALV-LGORT = WK_MATNR-LGORT. WK_ALV-ZYEAR = V_GJAHR. WK_ALV-ZMONTH = V_MONAT. WK_ALV-MATNR = WK_MATNR-MATNR. WK_ALV-MAKTX = WK_MATNR-MAKTX. WK_ALV-MATKL = WK_MATNR-MATKL. WK_ALV-XCHPF = WK_MATNR-XCHPF. WK_ALV-PRCTR = WK_MATNR-PRCTR. * 利潤中心描述 CLEAR WK_CEPCT. READ TABLE IT_CEPCT INTO WK_CEPCT WITH KEY PRCTR = WK_MATNR-PRCTR BINARY SEARCH. IF SY-SUBRC = 0. WK_ALV-PRTXT = WK_CEPCT-MCTXT. ENDIF. * 財務庫存數量/數量單位 CLEAR WK_ZMMT001. READ TABLE IT_ZMMT001 INTO WK_ZMMT001 BINARY SEARCH WITH KEY MATNR = WK_MATNR-MATNR. IF WK_ZMMT001-VALUE1 <> 0. WK_ALV-LBKUM2 = WK_ALV-LBKUM1 * WK_ZMMT001-VALUE2 / WK_ZMMT001-VALUE1. WK_ALV-MEINS2 = WK_ZMMT001-UNIT. ENDIF. * 同組的最后一行數據 CLEAR LW_MATNR. READ TABLE IT_MATNR INTO LW_MATNR INDEX L_INDEX. IF WK_MATNR-MATNR <> LW_MATNR-MATNR. * 計算庫存金額 CLEAR L_SUM. LOOP AT IT_ZFIT015 INTO WK_ZFIT015 WHERE WERKS = WK_MATNR-WERKS AND MATNR = WK_MATNR-MATNR. L_SUM = L_SUM + WK_ZFIT015-DMBTR. ENDLOOP. * 物料總數量/金額保存 CLEAR WK_QTY. WK_QTY-WERKS = WK_MATNR-WERKS. WK_QTY-MATNR = WK_MATNR-MATNR. WK_QTY-MENGE = L_SQTY. WK_QTY-DMBTR = L_SUM. APPEND WK_QTY TO IT_QTY. CLEAR L_SQTY. ENDIF. APPEND WK_ALV TO IT_ALV. ENDLOOP. * 排序 SORT IT_QTY BY WERKS ASCENDING MATNR ASCENDING. * 輸出列表金額設定 CLEAR L_INDEX. LOOP AT IT_ALV ASSIGNING <FS_ALV>. L_INDEX = SY-TABIX + 1. * 庫位數量在物料總數量所占比例 CLEAR WK_QTY. READ TABLE IT_QTY INTO WK_QTY WITH KEY WERKS = <FS_ALV>-WERKS MATNR = <FS_ALV>-MATNR BINARY SEARCH. IF WK_QTY-MENGE <> 0. <FS_ALV>-PRICE = WK_QTY-DMBTR / WK_QTY-MENGE. "價格 * 庫位金額 <FS_ALV>-SALK3 = <FS_ALV>-LBKUM1 * ( WK_QTY-DMBTR / WK_QTY-MENGE ). L_SALK3 = L_SALK3 + <FS_ALV>-SALK3. * 過去歷史期間的庫齡金額 <FS_ALV>-PRC3M = <FS_ALV>-QTY3M * ( WK_QTY-DMBTR / WK_QTY-MENGE ). <FS_ALV>-PRC6M = <FS_ALV>-QTY6M * ( WK_QTY-DMBTR / WK_QTY-MENGE ). <FS_ALV>-PRC9M = <FS_ALV>-QTY9M * ( WK_QTY-DMBTR / WK_QTY-MENGE ). <FS_ALV>-PRC12M = <FS_ALV>-QTY12M * ( WK_QTY-DMBTR / WK_QTY-MENGE ). <FS_ALV>-PRC18M = <FS_ALV>-QTY18M * ( WK_QTY-DMBTR / WK_QTY-MENGE ). <FS_ALV>-PRC24M = <FS_ALV>-QTY24M * ( WK_QTY-DMBTR / WK_QTY-MENGE ). <FS_ALV>-PRC36M = <FS_ALV>-QTY36M * ( WK_QTY-DMBTR / WK_QTY-MENGE ). <FS_ALV>-PRC60M = <FS_ALV>-QTY60M * ( WK_QTY-DMBTR / WK_QTY-MENGE ). <FS_ALV>-PRC61M = <FS_ALV>-QTY61M * ( WK_QTY-DMBTR / WK_QTY-MENGE ). ENDIF. * 差異列累計 CLEAR L_DMBTR. L_DMBTR = <FS_ALV>-PRC3M + <FS_ALV>-PRC6M + <FS_ALV>-PRC9M + <FS_ALV>-PRC12M + <FS_ALV>-PRC18M + <FS_ALV>-PRC24M + <FS_ALV>-PRC36M + <FS_ALV>-PRC60M + <FS_ALV>-PRC61M. IF <FS_ALV>-SALK3 <> L_DMBTR. <FS_ALV>-PRC3M = <FS_ALV>-PRC3M + ( <FS_ALV>-SALK3 - L_DMBTR ). ENDIF. * 跌價金額/跌價維護標志 CLEAR WK_ZFIT017. READ TABLE IT_ZFIT017 INTO WK_ZFIT017 WITH KEY MATKL = <FS_ALV>-MATKL PRCTR = <FS_ALV>-PRCTR BINARY SEARCH. IF SY-SUBRC = 0. <FS_ALV>-PERPRC = <FS_ALV>-PRC3M * WK_ZFIT017-PER3M / 100 + <FS_ALV>-PRC6M * WK_ZFIT017-PER6M / 100 + <FS_ALV>-PRC9M * WK_ZFIT017-PER9M / 100 + <FS_ALV>-PRC12M * WK_ZFIT017-PER12M / 100 + <FS_ALV>-PRC18M * WK_ZFIT017-PER18M / 100 + <FS_ALV>-PRC24M * WK_ZFIT017-PER24M / 100 + <FS_ALV>-PRC36M * WK_ZFIT017-PER36M / 100 + <FS_ALV>-PRC60M * WK_ZFIT017-PER60M / 100 + <FS_ALV>-PRC61M * WK_ZFIT017-PER61M / 100. <FS_ALV>-PERFLG = C_X. ENDIF. * 同組物料的最后一行數據 CLEAR LW_ALV. READ TABLE IT_ALV INTO LW_ALV INDEX L_INDEX. IF <FS_ALV>-MATNR <> LW_ALV-MATNR. * 庫位差異金額 <FS_ALV>-SALK3 = <FS_ALV>-SALK3 + ( WK_QTY-DMBTR - L_SALK3 ). <FS_ALV>-PRC3M = <FS_ALV>-PRC3M + ( WK_QTY-DMBTR - L_SALK3 ). CLEAR L_SALK3. ENDIF. ENDLOOP. * 特殊行:0庫存物料金額 LOOP AT IT_ZFIT015 INTO WK_ZFIT015. READ TABLE IT_ALV TRANSPORTING NO FIELDS WITH KEY MATNR = WK_ZFIT015-MATNR. IF SY-SUBRC <> 0. CLEAR LW_ALV. LW_ALV-ZYEAR = V_GJAHR. LW_ALV-ZMONTH = V_MONAT. LW_ALV-WERKS = WK_ZFIT015-WERKS. LW_ALV-MATNR = WK_ZFIT015-MATNR. LW_ALV-MAKTX = 'Special line: Qty:0/Amount'. LW_ALV-SALK3 = WK_ZFIT015-DMBTR. LW_ALV-PRC3M = WK_ZFIT015-DMBTR. APPEND LW_ALV TO IT_ALV. ENDIF. ENDLOOP. * 特殊行追加: 在制品 CLEAR WK_OBJ. LOOP AT IT_FAG1 INTO WK_FAG1. WK_OBJ-HSLVT = WK_OBJ-HSLVT + WK_FAG1-HSLVT. WK_OBJ-HSL01 = WK_OBJ-HSL01 + WK_FAG1-HSL01. WK_OBJ-HSL02 = WK_OBJ-HSL02 + WK_FAG1-HSL02. WK_OBJ-HSL03 = WK_OBJ-HSL03 + WK_FAG1-HSL03. WK_OBJ-HSL04 = WK_OBJ-HSL04 + WK_FAG1-HSL04. WK_OBJ-HSL05 = WK_OBJ-HSL05 + WK_FAG1-HSL05. WK_OBJ-HSL06 = WK_OBJ-HSL06 + WK_FAG1-HSL06. WK_OBJ-HSL07 = WK_OBJ-HSL07 + WK_FAG1-HSL07. WK_OBJ-HSL08 = WK_OBJ-HSL08 + WK_FAG1-HSL08. WK_OBJ-HSL09 = WK_OBJ-HSL09 + WK_FAG1-HSL09. WK_OBJ-HSL10 = WK_OBJ-HSL10 + WK_FAG1-HSL10. WK_OBJ-HSL11 = WK_OBJ-HSL11 + WK_FAG1-HSL11. WK_OBJ-HSL12 = WK_OBJ-HSL12 + WK_FAG1-HSL12. ENDLOOP. * 指針指向對象行 ASSIGN WK_OBJ TO <FS_HEAD>. * 默認值 V_VALUE = WK_OBJ-HSLVT. "余額結轉 V_COUT = V_MONAT. * 得到指定月的累積金額 CLEAR V_NUM. DO V_COUT TIMES. * 字段 V_NUM = V_NUM + 1. CONCATENATE 'HSL' V_NUM INTO V_FIELD. ASSIGN COMPONENT V_FIELD OF STRUCTURE <FS_HEAD> TO <FS_FIELD>. IF <FS_FIELD> <> 0. V_VALUE = V_VALUE + <FS_FIELD>. ENDIF. ENDDO. CLEAR LW_ALV. LW_ALV-ZYEAR = V_GJAHR. LW_ALV-ZMONTH = V_MONAT. LW_ALV-MAKTX = 'Special line: 14100000'. LW_ALV-SALK3 = V_VALUE. LW_ALV-PRC3M = V_VALUE. APPEND LW_ALV TO IT_ALV. * 特殊行追加: 尾差 CLEAR L_DMBTR. LOOP AT IT_ZFIT016 INTO WK_ZFIT016. IF WK_ZFIT016-SHKZG = 'S'. L_DMBTR = L_DMBTR + WK_ZFIT016-DMBTR. ELSE. L_DMBTR = L_DMBTR - WK_ZFIT016-DMBTR. ENDIF. ENDLOOP. CLEAR LW_ALV. LW_ALV-ZYEAR = V_GJAHR. LW_ALV-ZMONTH = V_MONAT. LW_ALV-MAKTX = 'Special line: Tail Difference'. LW_ALV-SALK3 = L_DMBTR. LW_ALV-PRC3M = L_DMBTR. APPEND LW_ALV TO IT_ALV. ENDFORM. " EDIT_DATA *&---------------------------------------------------------------------* *& Form SET_FIELDCAT *&---------------------------------------------------------------------* * 設定 FIELDCAT *----------------------------------------------------------------------* FORM SET_FIELDCAT . DATA LW_FIEDCAT TYPE SLIS_FIELDCAT_ALV. REFRESH IT_FIELDCAT. * 倉庫 CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'LGORT'. LW_FIEDCAT-SELTEXT_L = TEXT-T01. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 年 CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'ZYEAR'. LW_FIEDCAT-SELTEXT_L = TEXT-T02. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 月 CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'ZMONTH'. LW_FIEDCAT-SELTEXT_L = TEXT-T03. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 產品編號 CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'MATNR'. LW_FIEDCAT-EDIT_MASK = '==MATN1'. LW_FIEDCAT-SELTEXT_L = TEXT-T04. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 產品描述 CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'MAKTX'. LW_FIEDCAT-SELTEXT_L = TEXT-T05. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 物料組 CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'MATKL'. LW_FIEDCAT-SELTEXT_L = TEXT-T40. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 利潤中心 CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'PRCTR'. LW_FIEDCAT-SELTEXT_L = TEXT-T06. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 利潤中心描述 CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'PRTXT'. LW_FIEDCAT-SELTEXT_L = TEXT-T43. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 批次管理 CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'XCHPF'. LW_FIEDCAT-SELTEXT_L = TEXT-T39. APPEND LW_FIEDCAT TO IT_FIELDCAT. ** 最后異動日期 * CLEAR LW_FIEDCAT. * LW_FIEDCAT-FIELDNAME = 'LDATE1'. * LW_FIEDCAT-SELTEXT_L = TEXT-T07. * APPEND LW_FIEDCAT TO IT_FIELDCAT. * ** 最后銷售日期 * CLEAR LW_FIEDCAT. * LW_FIEDCAT-FIELDNAME = 'LDATE2'. * LW_FIEDCAT-SELTEXT_L = TEXT-T08. * APPEND LW_FIEDCAT TO IT_FIELDCAT. * 成本單價 CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'PRICE'. LW_FIEDCAT-SELTEXT_L = TEXT-T09. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 價格單位 CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'WAERS'. LW_FIEDCAT-SELTEXT_L = TEXT-T44. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 實際成本金額 CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'SALK3'. LW_FIEDCAT-SELTEXT_L = TEXT-T10. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 數量(基本計量單位) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'LBKUM1'. LW_FIEDCAT-SELTEXT_L = TEXT-T11. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 基本計量單位 CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'MEINS1'. LW_FIEDCAT-SELTEXT_L = TEXT-T12. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 數量(財務價量統一單位) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'LBKUM2'. LW_FIEDCAT-SELTEXT_L = TEXT-T13. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 財務統一計量單位 CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'MEINS2'. LW_FIEDCAT-SELTEXT_L = TEXT-T14. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 庫齡數量(3月以內) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'QTY3M'. LW_FIEDCAT-SELTEXT_L = TEXT-T15. LW_FIEDCAT-EMPHASIZE = 'C500'. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 庫齡數量(4-6月) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'QTY6M'. LW_FIEDCAT-SELTEXT_L = TEXT-T16. LW_FIEDCAT-EMPHASIZE = 'C500'. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 庫齡數量(7-9月) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'QTY9M'. LW_FIEDCAT-SELTEXT_L = TEXT-T17. LW_FIEDCAT-EMPHASIZE = 'C500'. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 庫齡數量(10-12月) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'QTY12M'. LW_FIEDCAT-SELTEXT_L = TEXT-T18. LW_FIEDCAT-EMPHASIZE = 'C500'. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 庫齡數量(13-18月) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'QTY18M'. LW_FIEDCAT-SELTEXT_L = TEXT-T19. LW_FIEDCAT-EMPHASIZE = 'C500'. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 庫齡數量(19-24月) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'QTY24M'. LW_FIEDCAT-SELTEXT_L = TEXT-T20. LW_FIEDCAT-EMPHASIZE = 'C500'. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 庫齡數量(25-36月) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'QTY36M'. LW_FIEDCAT-SELTEXT_L = TEXT-T21. LW_FIEDCAT-EMPHASIZE = 'C500'. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 庫齡數量(37-60月) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'QTY60M'. LW_FIEDCAT-SELTEXT_L = TEXT-T22. LW_FIEDCAT-EMPHASIZE = 'C500'. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 庫齡數量(60月以上) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'QTY61M'. LW_FIEDCAT-SELTEXT_L = TEXT-T23. LW_FIEDCAT-EMPHASIZE = 'C500'. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 庫齡金額(3月以內) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'PRC3M'. LW_FIEDCAT-SELTEXT_L = TEXT-T24. LW_FIEDCAT-EMPHASIZE = 'C410'. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 庫齡金額(4-6月) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'PRC6M'. LW_FIEDCAT-SELTEXT_L = TEXT-T25. LW_FIEDCAT-EMPHASIZE = 'C410'. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 庫齡金額(7-9月) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'PRC9M'. LW_FIEDCAT-SELTEXT_L = TEXT-T26. LW_FIEDCAT-EMPHASIZE = 'C410'. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 庫齡金額(10-12月) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'PRC12M'. LW_FIEDCAT-SELTEXT_L = TEXT-T27. LW_FIEDCAT-EMPHASIZE = 'C410'. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 庫齡金額(13-18月) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'PRC18M'. LW_FIEDCAT-SELTEXT_L = TEXT-T28. LW_FIEDCAT-EMPHASIZE = 'C410'. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 庫齡金額(19-24月) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'PRC24M'. LW_FIEDCAT-SELTEXT_L = TEXT-T29. LW_FIEDCAT-EMPHASIZE = 'C410'. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 庫齡金額(25-36月) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'PRC36M'. LW_FIEDCAT-SELTEXT_L = TEXT-T30. LW_FIEDCAT-EMPHASIZE = 'C410'. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 庫齡金額(37-60月) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'PRC60M'. LW_FIEDCAT-SELTEXT_L = TEXT-T31. LW_FIEDCAT-EMPHASIZE = 'C410'. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 庫齡金額(60月以上) CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'PRC61M'. LW_FIEDCAT-SELTEXT_L = TEXT-T32. LW_FIEDCAT-EMPHASIZE = 'C410'. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 跌價金額 CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'PERPRC'. LW_FIEDCAT-SELTEXT_L = TEXT-T41. APPEND LW_FIEDCAT TO IT_FIELDCAT. * 跌價維護標志 CLEAR LW_FIEDCAT. LW_FIEDCAT-FIELDNAME = 'PERFLG'. LW_FIEDCAT-SELTEXT_L = TEXT-T42. APPEND LW_FIEDCAT TO IT_FIELDCAT. ENDFORM. " SET_FIELDCAT *&---------------------------------------------------------------------* *& Form SET_LAYOUT *&---------------------------------------------------------------------* * 設定 LAYOUT *----------------------------------------------------------------------* FORM SET_LAYOUT . WK_LAYOUT-ZEBRA = C_X. WK_LAYOUT-COLWIDTH_OPTIMIZE = C_X. WK_LAYOUT-BOX_FIELDNAME = 'CHK'. ENDFORM. " SET_LAYOUT *&---------------------------------------------------------------------* *& Form SET_ALV_EVENT *&---------------------------------------------------------------------* * 設定 Eventa *----------------------------------------------------------------------* FORM SET_ALV_EVENT . DATA: LW_EVENT TYPE SLIS_ALV_EVENT, LW_NAME TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE'. REFRESH IT_EVENT. CALL FUNCTION 'REUSE_ALV_EVENTS_GET' EXPORTING I_LIST_TYPE = 0 IMPORTING ET_EVENTS = IT_EVENT EXCEPTIONS LIST_TYPE_WRONG = 1 OTHERS = 2. IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. CLEAR LW_EVENT. READ TABLE IT_EVENT INTO LW_EVENT WITH KEY NAME = LW_NAME. IF SY-SUBRC = 0. MOVE LW_NAME TO LW_EVENT-FORM. MODIFY IT_EVENT FROM LW_EVENT INDEX SY-TABIX.. ELSE. LW_EVENT-FORM = LW_NAME. LW_EVENT-NAME = LW_NAME. APPEND LW_EVENT TO IT_EVENT. ENDIF. ENDFORM. " SET_ALV_EVENT *&---------------------------------------------------------------------* *& Form SHOW_ALV *&---------------------------------------------------------------------* * 輸出 ALV *----------------------------------------------------------------------* FORM SHOW_ALV . * Call ALV CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = SY-REPID IT_EVENTS = IT_EVENT IS_LAYOUT = WK_LAYOUT IT_FIELDCAT = IT_FIELDCAT I_SAVE = C_X TABLES T_OUTTAB = IT_ALV EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. 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. " SHOW_ALV *&---------------------------------------------------------------------* *& Form TOP_OF_PAGE1 *&---------------------------------------------------------------------* * ALV Header Setting *----------------------------------------------------------------------* FORM TOP_OF_PAGE. DATA: L_MATNR1 TYPE MARA-MATNR, L_MATNR2 TYPE MARA-MATNR, LT_HEAD TYPE SLIS_T_LISTHEADER, LW_HEAD TYPE SLIS_LISTHEADER. REFRESH LT_HEAD. CLEAR LW_HEAD. LW_HEAD-TYP = 'H'. "Header LW_HEAD-INFO = TEXT-T33. "財務庫齡表 APPEND LW_HEAD TO LT_HEAD. CLEAR LW_HEAD. LW_HEAD-TYP = 'S'. "Selection LW_HEAD-KEY = TEXT-T35. "會計期間: CONCATENATE V_GJAHR '/' V_MONAT INTO LW_HEAD-INFO. APPEND LW_HEAD TO LT_HEAD. CLEAR LW_HEAD. LW_HEAD-TYP = 'S'. "Selection LW_HEAD-KEY = TEXT-T34. "Company Name: LW_HEAD-INFO = P_BUKRS. APPEND LW_HEAD TO LT_HEAD. * 工廠 IF S_WERKS IS NOT INITIAL. CLEAR LW_HEAD. LW_HEAD-TYP = 'S'. "Selection LW_HEAD-KEY = TEXT-T36. "工廠: * 多個單值查詢 IF S_WERKS-LOW IS NOT INITIAL AND S_WERKS-HIGH IS INITIAL. LOOP AT S_WERKS. CONCATENATE LW_HEAD-INFO S_WERKS-LOW INTO LW_HEAD-INFO SEPARATED BY '/'. ENDLOOP. LW_HEAD-INFO+0(1) = ''. ENDIF. * 范圍查詢 IF S_WERKS-HIGH IS NOT INITIAL. CONCATENATE S_WERKS-LOW '~' S_WERKS-HIGH INTO LW_HEAD-INFO. ENDIF. APPEND LW_HEAD TO LT_HEAD. ENDIF. * 物料編號 IF S_MATNR IS NOT INITIAL. CLEAR LW_HEAD. LW_HEAD-TYP = 'S'. "Selection LW_HEAD-KEY = TEXT-T37. "物料編號: * 多個單值查詢 IF S_MATNR-LOW IS NOT INITIAL AND S_MATNR-HIGH IS INITIAL. CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT' EXPORTING INPUT = S_MATNR-LOW IMPORTING OUTPUT = LW_HEAD-INFO. ENDIF. * 范圍查詢 IF S_MATNR-HIGH IS NOT INITIAL. CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT' EXPORTING INPUT = S_MATNR-LOW IMPORTING OUTPUT = L_MATNR1. CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT' EXPORTING INPUT = S_MATNR-HIGH IMPORTING OUTPUT = L_MATNR2. CONCATENATE L_MATNR1 '~' L_MATNR2 INTO LW_HEAD-INFO. ENDIF. APPEND LW_HEAD TO LT_HEAD. ENDIF. * 庫存地點 IF S_LGORT IS NOT INITIAL. CLEAR LW_HEAD. LW_HEAD-TYP = 'S'. "Selection LW_HEAD-KEY = TEXT-T38. "庫存地點: * 多個單值查詢 IF S_LGORT-LOW IS NOT INITIAL AND S_LGORT-HIGH IS INITIAL. LW_HEAD-INFO = S_LGORT-LOW. ENDIF. * 范圍查詢 IF S_LGORT-HIGH IS NOT INITIAL. CONCATENATE S_LGORT-LOW '~' S_LGORT-HIGH INTO LW_HEAD-INFO. ENDIF. APPEND LW_HEAD TO LT_HEAD. ENDIF. CLEAR LW_HEAD. LW_HEAD-TYP = 'S'. APPEND LW_HEAD TO LT_HEAD. CLEAR LW_HEAD. LW_HEAD-TYP = 'S'. APPEND LW_HEAD TO LT_HEAD. CLEAR LW_HEAD. LW_HEAD-TYP = 'S'. APPEND LW_HEAD TO LT_HEAD. CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING IT_LIST_COMMENTARY = LT_HEAD. ENDFORM. " TOP_OF_PAGE *&---------------------------------------------------------------------* *& Form GET_DATE *&---------------------------------------------------------------------* * 得到查詢日期范圍 *----------------------------------------------------------------------* * -->I_IDATE 輸入日期 * -->I_MONTH 月份 * <--C_DATE 查詢日期 *----------------------------------------------------------------------* FORM GET_DATE USING I_IDATE TYPE SY-DATUM I_MONTH TYPE T5A4A-DLYMO CHANGING C_DATE. CLEAR C_DATE. CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL' EXPORTING DATE = I_IDATE DAYS = '00' MONTHS = I_MONTH SIGNUM = '-' YEARS = '00' IMPORTING CALC_DATE = C_DATE. ENDFORM. " GET_DATE *&---------------------------------------------------------------------* *& Form SET_MONTH *&---------------------------------------------------------------------* * 設置各期間的范圍 *----------------------------------------------------------------------* FORM SET_MONTH . DATA: L_DATE1 TYPE SY-DATUM, L_DATE2 TYPE SY-DATUM, LW_MONTH LIKE LINE OF S_3M. * 得到查詢日期范圍(3月以內) PERFORM GET_DATE USING P_SDATE '03' CHANGING L_DATE1. CLEAR LW_MONTH. LW_MONTH-SIGN = 'I'. LW_MONTH-OPTION = 'BT'. LW_MONTH-LOW = L_DATE1. LW_MONTH-HIGH = P_SDATE. APPEND LW_MONTH TO S_3M. * 得到查詢日期范圍(4-6月) PERFORM GET_DATE USING L_DATE1 '03' CHANGING L_DATE2. CLEAR LW_MONTH. LW_MONTH-SIGN = 'I'. LW_MONTH-OPTION = 'BT'. LW_MONTH-LOW = L_DATE2. LW_MONTH-HIGH = L_DATE1. APPEND LW_MONTH TO S_6M. * 得到查詢日期范圍(7-9月) PERFORM GET_DATE USING L_DATE2 '03' CHANGING L_DATE1. CLEAR LW_MONTH. LW_MONTH-SIGN = 'I'. LW_MONTH-OPTION = 'BT'. LW_MONTH-LOW = L_DATE1. LW_MONTH-HIGH = L_DATE2. APPEND LW_MONTH TO S_9M. * 得到查詢日期范圍(10-12月) PERFORM GET_DATE USING L_DATE1 '03' CHANGING L_DATE2. CLEAR LW_MONTH. LW_MONTH-SIGN = 'I'. LW_MONTH-OPTION = 'BT'. LW_MONTH-LOW = L_DATE2. LW_MONTH-HIGH = L_DATE1. APPEND LW_MONTH TO S_12M. * 得到查詢日期范圍(13-18月) PERFORM GET_DATE USING L_DATE2 '06' CHANGING L_DATE1. CLEAR LW_MONTH. LW_MONTH-SIGN = 'I'. LW_MONTH-OPTION = 'BT'. LW_MONTH-LOW = L_DATE1. LW_MONTH-HIGH = L_DATE2. APPEND LW_MONTH TO S_18M. * 得到查詢日期范圍(19-24月) PERFORM GET_DATE USING L_DATE1 '06' CHANGING L_DATE2. CLEAR LW_MONTH. LW_MONTH-SIGN = 'I'. LW_MONTH-OPTION = 'BT'. LW_MONTH-LOW = L_DATE2. LW_MONTH-HIGH = L_DATE1. APPEND LW_MONTH TO S_24M. * 得到查詢日期范圍(25-36月) PERFORM GET_DATE USING L_DATE2 '12' CHANGING L_DATE1. CLEAR LW_MONTH. LW_MONTH-SIGN = 'I'. LW_MONTH-OPTION = 'BT'. LW_MONTH-LOW = L_DATE1. LW_MONTH-HIGH = L_DATE2. APPEND LW_MONTH TO S_36M. * 得到查詢日期范圍(37-60月) PERFORM GET_DATE USING L_DATE1 '24' CHANGING L_DATE2. CLEAR LW_MONTH. LW_MONTH-SIGN = 'I'. LW_MONTH-OPTION = 'BT'. LW_MONTH-LOW = L_DATE2. LW_MONTH-HIGH = L_DATE1. APPEND LW_MONTH TO S_60M. * 得到查詢日期范圍(61月) S_61M = L_DATE2. ENDFORM. " SET_MONTH *&---------------------------------------------------------------------* *& Form SET_DATE *&---------------------------------------------------------------------* * 查詢日期設置 *----------------------------------------------------------------------* FORM SET_DATE . CLEAR P_SDATE. CALL FUNCTION 'LAST_DAY_OF_MONTHS' EXPORTING DAY_IN = SY-DATUM IMPORTING LAST_DAY_OF_MONTH = P_SDATE EXCEPTIONS DAY_IN_NO_DATE = 1 OTHERS = 2. 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. " SET_DATE
本文轉載自:https://blog.csdn.net/sinat_28730703/article/details/46357159
