SAP库存账龄分析报表 您所在的位置:网站首页 sap导出库存库龄 SAP库存账龄分析报表

SAP库存账龄分析报表

2023-10-22 19:24| 来源: 网络整理| 查看: 265

功能概述 1.1. 业务背景 本程序是对物料按工厂、库存地点、物料号、销售订单号进行查询当前的库存及库龄的报表。 1.2. 功能描述 本程序能够查询出每个物料的数量、金额数据及库龄的明细数据。 1.2. 使用范围 所有有库存的事业部都需要查看库存及库龄情况。 1.3. 权限设定 所有有查看库存权限的人员都需要有这个权限。 需要增加权限对象:M_MSEG_LGO、M_MSEG_WMB、M_MSEG_WWA。 1.4. 处理类型 前台手动执行。 1.5. 数据量及使用频率 本程序为库存相关,用户需要查询时可以进行查询。功能详述 2.1. 程序标题及其属性 程序标题:“库存异常表(库龄报表)” 2.2. 屏幕设计 2.2.1. 屏幕流 2.2.2. 输入屏幕  结果如下: 

显示出结果后,可以用Excel导出。报表各字段取值逻辑本程序分为两种情况,一种是普通库存,一种是对应销售订单的库存,需要把两种情况分别处理,然后加在一起显示,普通库存取数逻辑如下: 描述 参考字段 工厂 MARD-WERKS 工厂描述 T001W-NAME1 库存地点 MARD-LGORT 库存地点描述 T001L-LGOBE 物料号 MARD-MATNR 物料描述 MAKT-MAKTL 库存类型 普通库存 销售订单号 MSKA-VBELN   销售订单行项目MSKA-POSNR 当前库存数量 MARD-LABST(MSKA-KALAB) 当前库存金额 当前库存数量 * (MBEW-SALK3 / MBEW-LBKUM),最终结果保留小数点后两位 库存1-30天数量 1、以每个工厂、库存地点、物料号为条件取 MSEG-MENGE MKPF-BUDAT from ( MSEG inner join MKPF by MSEG-MBLNR = MKPF-MBLNR and MSEG-MJAHR = MKPF-MJAHR) where MSEG-WERKS = MARD-WERKS and MSEG-LGORT = MARD-LGORT and MSEG-MATNR = MARD-MATNR and MSEG-SHKZG = ‘S’ and MSEG-SOBKZ NE ‘E’ ,取物料凭证数据时排除移动类型321和322。 2、对上面的结果集以MKPF-BUDAT为基础倒排,当入库数据中存在20131231的数据时,到库龄报表期初数据表(ZMM_MSEG)把历史数据取出,把“当前库存数量”分配到这个结果中,20131231的数据不分配,直接跳到以前的历史数据,直到分配完为止,如果历史数据不足按20131231的数据计算。 3、对以上结果以当前日期为基准,在1-30天内数据累加后放在这个字段中。 库存1-30天数量 1、以每个工厂、库存地点、物料号为条件取 MSEG-MENGE MKPF-BUDAT from ( MSEG inner join MKPF by MSEG-MBLNR = MKPF-MBLNR and MSEG-MJAHR = MKPF-MJAHR) where MSEG-WERKS = MARD-WERKS and MSEG-LGORT = MARD-LGORT and MSEG-MATNR = MARD-MATNR and MSEG-SHKZG = ‘S’ and MSEG-SOBKZ NE ‘E’ ,取物料凭证数据时排除移动类型321和322。 2、对上面的结果集以MKPF-BUDAT为基础倒排,当入库数据中存在20131231的数据时,到库龄报表期初数据表(ZMM_MSEG)把历史数据取出,把“当前库存数量”分配到这个结果中,20131231的数据不分配,直接跳到以前的历史数据,直到分配完为止,如果历史数据不足按20131231的数据计算。 3、对以上结果以当前日期为基准,在1-30天内数据累加后放在这个字段中。 库存91-180天数量 第1、2步操作前面已经做过,只需要第3步操作,把结果在91-180天内的数据累加放在这个字段中。 库存91-180天金额 库存91-180天数量 * (MBEW-SALK3 / MBEW-LBKUM),最终结果保留小数点后两位。 后面天数的数量和金额以此类推

逻辑描述本程序如果普通库存选中则抽取MARD表的数据为基础取出MARD-LABST不为零的数据然后进行后续处理,如果对应销售订单的库存选中则抽取MSKA表的数据为基础取出MSKA-KALAB不为零的数据然后进行后续处理,如果两个都选中则两个表各自抽取出数据后加到一起显示,默认是全部选中。取到基础数据后再以此为基础取MSEG、MKPF表中的所有入库信息然后按时间倒序排列,当入库数据中存在20131231的数据时,到库龄报表期初数据表(ZMM_MSEG)把历史数据取出,把“当前库存数量”分配到这个结果中,20131231的数据不分配,直接跳到以前的历史数据,直到分配完为止,如果历史数据不足按20131231的数据计算,然后以这个序列的数量以当前日期为基准,分配到各自的库存时间范围内。具体的逻辑请参考以上取值逻辑。 考虑冲销的情况: 1、对于初始化入库(20131231)采用从物料凭证表取入出库双向数据,经过累计后计算出一条数据,然后去找历史数据。

2、对于其他数据采用从物料凭证表取单向入库数据,然后到物料凭证表查询是否存在入库数据的冲销凭证数据,如果存在冲销凭证数据,则把这条入库数据删除。

表名:ZMM_MSEG 描述:库龄报表期初数据 字段:字段描述 客户端 物料编号 工厂 库存地点 销售凭证 销售凭证项目 凭证中的过帐日期 数量 基本计量单位 字段名称 MANDT MATNR WERKS LGORT VBELN POSNR BUDAT MENGE MEINS 示例代码如下

*-----------------------------------------------------------------------* * 程序名称:ZMMEXEC0140 * 程序标题:库存异常表(库龄报表) * 程序类型:功能报表 * 创建日期:2014-01-16 * 模块 : * 请求号 : * 功能描述: * 相关文档: *----------------------------------------------------------------------* * 修改记录: * 作者 日期 请求号 修改原因描述 *----------- -------- -----------------------------------------------* * *----------------------------------------------------------------------* REPORT zmmexec0140 NO STANDARD PAGE HEADING MESSAGE-ID zcomm. *----------------------------------------------------------------------* * INCLUDE * *----------------------------------------------------------------------* INCLUDE zslis. *----------------------------------------------------------------------* * 声明数据表; *----------------------------------------------------------------------* TABLES: mkpf, mseg, mard, mska,t001w. *----------------------------------------------------------------------* * 定义结构; *----------------------------------------------------------------------* TYPES: gtf_price TYPE p LENGTH 15 DECIMALS 9, gtf_dmbtr TYPE vtcur12, gtf_menge TYPE p LENGTH 15 DECIMALS 3. TYPES: BEGIN OF gts_alv_data, matnr TYPE mard-matnr, werks TYPE mard-werks, lgort TYPE mard-lgort, maktx TYPE makt-maktx, " 物料描述 name1 TYPE t001w-name1, " 工厂描述 lgobe TYPE t001l-lgobe, " 库存地点描述 ztype TYPE char10, vbeln TYPE mska-vbeln, posnr TYPE mska-posnr, meins TYPE mara-meins, msehl TYPE msehl, waers TYPE t001-waers, price TYPE gtf_price, menge TYPE gtf_menge, dmbtr TYPE gtf_dmbtr, meng1 TYPE gtf_menge, dmbt1 TYPE gtf_dmbtr, meng2 TYPE gtf_menge, dmbt2 TYPE gtf_dmbtr, meng3 TYPE gtf_menge, dmbt3 TYPE gtf_dmbtr, meng4 TYPE gtf_menge, dmbt4 TYPE gtf_dmbtr, meng5 TYPE gtf_menge, dmbt5 TYPE gtf_dmbtr, meng6 TYPE gtf_menge, dmbt6 TYPE gtf_dmbtr, meng7 TYPE gtf_menge, dmbt7 TYPE gtf_dmbtr, meng8 TYPE gtf_menge, dmbt8 TYPE gtf_dmbtr, meng9 TYPE gtf_menge, dmbt9 TYPE gtf_dmbtr, * meng10 TYPE gtf_menge, "20160615 add * dmbt10 TYPE gtf_dmbtr, "20160615 add meng99 TYPE gtf_menge, dmbt99 TYPE gtf_dmbtr, kunnr TYPE kna1-kunnr, kunnrt TYPE kna1-name1, aufnr TYPE aufk-aufnr, aufnrt TYPE aufk-ktext, bstkd TYPE vbkd-bstkd, END OF gts_alv_data. TYPES: BEGIN OF gts_alv_base, grp TYPE i, " 用于分组 id TYPE i, tag TYPE i, sel TYPE char1, light TYPE c, rowcolor TYPE char4, msg TYPE text255, END OF gts_alv_base. TYPES: BEGIN OF gts_alv. INCLUDE TYPE gts_alv_data. INCLUDE TYPE gts_alv_base. TYPES: END OF gts_alv. TYPES: BEGIN OF gts_t001, bwkey TYPE t001k-bwkey, bukrs TYPE t001-bukrs, waers TYPE t001-waers, END OF gts_t001. *----------------------------------------------------------------------* * 定义内表; *----------------------------------------------------------------------* DATA: gds_alv TYPE gts_alv, gdt_alv TYPE TABLE OF gts_alv. DATA: gdt_t001l TYPE zfit_lgort2 WITH HEADER LINE, gdt_t001 TYPE TABLE OF gts_t001 WITH HEADER LINE. *----------------------------------------------------------------------* * 定义范围变量; *----------------------------------------------------------------------* RANGES: gdr_werks FOR ekpo-werks. *----------------------------------------------------------------------* * 定义变量; *----------------------------------------------------------------------* DATA: gdf_mandt TYPE mandt, gdf_budat TYPE sydatum, gdf_datum TYPE sydatum, gdf_lfgja TYPE mard-lfgja, gdf_lfmon TYPE mard-lfmon. DATA d1 TYPE p. DATA d2 TYPE p. DATA d3 TYPE p. DATA d4 TYPE p. DATA d5 TYPE p. DATA d6 TYPE p. DATA d7 TYPE p. DATA d8 TYPE p. *----------------------------------------------------------------------* * 定义常量. *----------------------------------------------------------------------* *CONSTANTS: gdc_idate TYPE sydatum VALUE '20131231'. " 初始库存倒入日期 *DATA: gdc_idate TYPE sydatum VALUE '20131231'. " 初始库存倒入日期 "add by lumingdao 20160101 DATA: gdc_idate TYPE sydatum VALUE '20151231'. " 初始库存倒入日期 *----------------------------------------------------------------------* * SELECTION-SCREEN 检索条件 * *----------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK choi1 WITH FRAME TITLE text-003. PARAMETERS: p_r1 TYPE char1 RADIOBUTTON GROUP grp1 DEFAULT 'X' USER-COMMAND zks. PARAMETERS: p_r2 TYPE char1 RADIOBUTTON GROUP grp1. PARAMETERS: p_budat TYPE sydatum MODIF ID his. SELECTION-SCREEN END OF BLOCK choi1. SELECTION-SCREEN BEGIN OF BLOCK selt WITH FRAME TITLE text-001. PARAMETERS: p_bukrs TYPE t001-bukrs OBLIGATORY DEFAULT '8200'. SELECT-OPTIONS: so_werks FOR t001w-werks. SELECT-OPTIONS: so_lgort FOR mard-lgort. SELECT-OPTIONS: so_matnr FOR mard-matnr. SELECT-OPTIONS: so_vbeln FOR mska-vbeln. SELECT-OPTIONS: so_posnr FOR mska-posnr. ************************20160616 add*********************************** SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT (31) text-004 FOR FIELD p_d1. PARAMETERS p_d1(4) TYPE n DEFAULT '30'. PARAMETERS p_d2(4) TYPE n DEFAULT '90'. PARAMETERS p_d3(4) TYPE n DEFAULT '180'. PARAMETERS p_d4(4) TYPE n DEFAULT '365'. PARAMETERS p_d5(4) TYPE n DEFAULT '730'. PARAMETERS p_d6(4) TYPE n DEFAULT '1095'. PARAMETERS p_d7(4) TYPE n DEFAULT '1460'. PARAMETERS p_d8(4) TYPE n DEFAULT '1825'. SELECTION-SCREEN END OF LINE. ********************************************************************** SELECTION-SCREEN END OF BLOCK selt. SELECTION-SCREEN BEGIN OF BLOCK choi WITH FRAME TITLE text-002. PARAMETERS: p_c1 TYPE char1 AS CHECKBOX DEFAULT 'X'. PARAMETERS: p_c2 TYPE char1 AS CHECKBOX DEFAULT 'X'. SELECTION-SCREEN END OF BLOCK choi. *$*$----------------------------------------------------------------$*$* *$*$ Main Program $*$* *$*$----------------------------------------------------------------$*$* *--------- 初始化 ---------- INITIALIZATION. p_budat = sy-datum - 1. *&------------------------------------------------------------ *& At selection-screen. *&------------------------------------------------------------ AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. CASE 'X'. WHEN p_r1. IF screen-group1 = 'HIS'. screen-active = 0. MODIFY SCREEN. ENDIF. WHEN p_r2. IF screen-group1 = 'HIS'. screen-active = 1. MODIFY SCREEN. ENDIF. WHEN OTHERS. ENDCASE. ENDLOOP. *&------------------------------------------------------------ *& At selection-screen. *&------------------------------------------------------------ AT SELECTION-SCREEN. * 修改上线日期 “added 20140710 * PERFORM get_init_date USING sy-mandt '' CHANGING gdc_idate. * 检查参数输入的合法性 / 检查输入权限 PERFORM frm_check_parameter. AT SELECTION-SCREEN ON BLOCK selt. PERFORM check_date. "20160616 add *&------------------------------------------------------------ *& LOAD-OF-PROGRAM. *&------------------------------------------------------------ LOAD-OF-PROGRAM. *--------- START-OF-SELECTION ---------- START-OF-SELECTION. "根据公司代码==》获取期初导入日期 PERFORM frm_get_init_data CHANGING gdc_idate. * 从数据表去数据并整理 PERFORM get_data. END-OF-SELECTION. IF gdt_alv[] IS INITIAL. * 没有找到相关的数据! MESSAGE s001 DISPLAY LIKE 'E'. ELSE. * 显示alv界面 PERFORM frm_display_lvc. ENDIF. CLEAR: gdt_alv, gdt_t001l, gdr_werks, gdt_t001. REFRESH: gdt_alv, gdt_t001l, gdr_werks, gdt_t001. INCLUDE zinitial_data. "added 20140710 ************************************************************************ * END OF MAIN PROGRAM ************************************************************************ *&---------------------------------------------------------------------* *& Form FRM_CHECK_PARAMETER *&---------------------------------------------------------------------* * 检查参数输入的合法性 / 检查输入的条件 *----------------------------------------------------------------------* FORM frm_check_parameter. "add by luming dao 20151231 DATA: lt_itab LIKE TABLE OF zmm_bukrs WITH HEADER LINE. REFRESH lt_itab. IF p_bukrs '8100' AND p_bukrs '8200' . STOP. ENDIF. SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_itab FROM zmm_bukrs WHERE bukrs EQ p_bukrs AND lgort IN so_lgort AND werks IN so_werks . IF lt_itab[] IS INITIAL. SET CURSOR FIELD 'P_BUKRS'. MESSAGE e000 WITH '没有你要查询的数据!'. RETURN. ENDIF. IF sy-ucomm = 'ZKS'. RETURN. ENDIF. IF p_c1 'X' AND p_c2 'X'. SET CURSOR FIELD 'P_C1'. MESSAGE e000 WITH '请至少选择一种库存类型'. RETURN. ENDIF. "added by XXX 20160722 begin IF p_bukrs = '8100'. gdc_idate = '20131231'. ENDIF. "added by yangk 20160722 end IF p_r2 = 'X'. IF p_budat = sy-datum. SET CURSOR FIELD 'P_BUDAT'. MESSAGE e000 WITH '历史库龄日期不能大于等于当天'. ENDIF. CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS' EXPORTING day_in = p_budat IMPORTING last_day_of_month = gdf_budat EXCEPTIONS day_in_no_date = 1 OTHERS = 2. IF sy-subrc 0. SET CURSOR FIELD 'P_BUDAT'. MESSAGE e000 WITH '历史库龄日期格式不正确'. ENDIF. gdf_lfgja = gdf_budat+0(4). gdf_lfmon = gdf_budat+4(2). gdf_datum = p_budat. ELSE. gdf_datum = sy-datum. ENDIF. ** 工厂的权限检查 AUTHORITY-CHECK OBJECT 'M_BEST_WRK' * CALL FUNCTION 'ZFI_GET_WERKS' * EXPORTING * ir_werks = so_werks[] * IMPORTING * er_werks = gdr_werks[] * EXCEPTIONS * not_found = 1 * not_enough = 2 * OTHERS = 3. * IF sy-subrc 0. * SET CURSOR FIELD 'SO_WERKS-LOW'. * MESSAGE e004 WITH '操作工厂的权限不足!'. * ENDIF. * 工厂的权限检查 AUTHORITY-CHECK OBJECT 'M_MSEG_WMB' CALL FUNCTION 'ZFI_GET_WERK2' EXPORTING ir_werks = so_werks[] * ir_werks = gdr_werks[] IMPORTING er_werks = gdr_werks[] EXCEPTIONS not_found = 1 not_enough = 2 OTHERS = 3. IF sy-subrc 0. SET CURSOR FIELD 'SO_WERKS-LOW'. MESSAGE e004 WITH '操作工厂的权限不足!'. ENDIF. * 工厂的权限检查 AUTHORITY-CHECK OBJECT 'M_MSEG_WMA' CALL FUNCTION 'ZFI_GET_WERK3' EXPORTING ir_werks = gdr_werks[] IMPORTING er_werks = gdr_werks[] EXCEPTIONS not_found = 1 not_enough = 2 OTHERS = 3. IF sy-subrc 0. SET CURSOR FIELD 'SO_WERKS-LOW'. MESSAGE e004 WITH '操作工厂的权限不足!'. ENDIF. * 库存地点的权限检查 AUTHORITY-CHECK OBJECT 'M_MSEG_LGO' CALL FUNCTION 'ZFI_GET_LGORT' EXPORTING ir_werks = gdr_werks[] ir_lgort = so_lgort[] TABLES et_lgort = gdt_t001l[] EXCEPTIONS not_found = 1 not_enough = 2 OTHERS = 3. IF sy-subrc 0. SET CURSOR FIELD 'SO_LGORT-LOW'. MESSAGE e004 WITH '操作库存地点的权限不足!'. ENDIF. * 公司币种信息 CLEAR: gdt_t001, gdt_t001[]. SELECT t001k~bwkey t001~bukrs t001~waers INTO TABLE gdt_t001 FROM t001k INNER JOIN t001 ON t001~bukrs = t001k~bukrs. SORT gdt_t001 BY bwkey bukrs. ENDFORM. " FRM_CHECK_PARAMETER *&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* * 逻辑处理 *----------------------------------------------------------------------* FORM get_data. CLEAR: gdt_alv. REFRESH: gdt_alv. IF p_c1 = 'X'. " 普通库存 PERFORM frm_get_data. ENDIF. IF p_c2 = 'X'. " 销售订单库存 PERFORM frm_get_data2. ENDIF. SORT gdt_alv BY werks lgort matnr ztype vbeln posnr. ENDFORM. " GET_DATA *&---------------------------------------------------------------------* *& Form FRM_GET_DATA *&---------------------------------------------------------------------* * 主逻辑 *----------------------------------------------------------------------* FORM frm_get_data . DATA: BEGIN OF ldt_mard OCCURS 10, matnr TYPE mard-matnr, werks TYPE mard-werks, lgort TYPE mard-lgort, lfgja TYPE mard-lfgja, lfmon TYPE mard-lfmon, labst TYPE mard-labst, insme TYPE mard-insme, " 质检库存 speme TYPE mard-speme, " 冻结库存 maktx TYPE makt-maktx, " 物料描述 name1 TYPE t001w-name1, " 工厂描述 lgobe TYPE t001l-lgobe, " 库存地点描述 meins TYPE mara-meins, END OF ldt_mard, BEGIN OF ldt_mbew OCCURS 10, matnr TYPE mbew-matnr, " 物料编号 bwkey TYPE mbew-bwkey, " 评估范围 bwtar TYPE mbew-bwtar, " 评估类型 lfgja TYPE mbew-lfgja, lfmon TYPE mbew-lfmon, lbkum TYPE mbew-lbkum, " 总计已估计库存 salk3 TYPE mbew-salk3, " 估价的总库存价值 vprsv TYPE mbew-vprsv, " 价格控制指示符 verpr TYPE mbew-verpr, " 移动平均价格/周期单价 stprs TYPE mbew-stprs, " 标准价格 peinh TYPE mbew-peinh, " 价格单位 END OF ldt_mbew, BEGIN OF ldt_mseg OCCURS 10, mblnr TYPE mkpf-mblnr, mjahr TYPE mkpf-mjahr, budat TYPE mkpf-budat, zeile TYPE mseg-zeile, matnr TYPE mseg-matnr, werks TYPE mseg-werks, lgort TYPE mseg-lgort, shkzg TYPE mseg-shkzg, menge TYPE mseg-menge, meins TYPE mseg-meins, END OF ldt_mseg, ldt_msegi LIKE TABLE OF ldt_mseg WITH HEADER LINE, BEGIN OF ldt_mseg2 OCCURS 10, matnr TYPE mseg-matnr, werks TYPE mseg-werks, lgort TYPE mseg-lgort, meng1 TYPE gtf_menge, meng2 TYPE gtf_menge, meng3 TYPE gtf_menge, meng4 TYPE gtf_menge, meng5 TYPE gtf_menge, meng6 TYPE gtf_menge, meng7 TYPE gtf_menge, meng8 TYPE gtf_menge, meng9 TYPE gtf_menge, * meng10 TYPE gtf_menge, "20160615 add * meins type mseg-meins, END OF ldt_mseg2, BEGIN OF ldt_mbst OCCURS 10, mblnr TYPE mseg-mblnr, mjahr TYPE mseg-mjahr, zeile TYPE mseg-zeile, sjahr TYPE mseg-sjahr, " 物料凭证年度 smbln TYPE mseg-smbln, " 物料凭证编号 smblp TYPE mseg-smblp, " 物料凭证中的项目 END OF ldt_mbst, * ldt_zmseg TYPE TABLE OF zmm_mseg WITH HEADER LINE, "add by lumingdao 20160108 ldt_zmseg TYPE TABLE OF zmm_mseg_new WITH HEADER LINE. DATA: ldf_price TYPE gtf_price, ldf_index TYPE i, ldf_count TYPE i, ldf_vprsv TYPE mbew-vprsv, ldf_menge TYPE gtf_menge, ldf_dmbtr TYPE gtf_dmbtr, ldf_days TYPE i, ldf_meng1 TYPE mseg-menge, ldf_meng2 TYPE mseg-menge. CLEAR: ldt_mard, ldt_mbew, ldt_mseg, ldt_mseg2, ldt_zmseg, ldt_mbst, ldt_msegi. REFRESH: ldt_mard, ldt_mbew, ldt_mseg, ldt_mseg2, ldt_zmseg, ldt_mbst, ldt_msegi. SELECT mard~matnr mard~werks mard~lgort mard~lfgja mard~lfmon mard~labst " 非限制库存 mard~insme " 质检库存 mard~speme " 冻结库存 makt~maktx " 物料描述 t001w~name1 " 工厂描述 t001l~lgobe " 库存地点描述 mara~meins INTO TABLE ldt_mard FROM mard LEFT OUTER JOIN makt ON makt~matnr = mard~matnr AND makt~spras = '1' LEFT OUTER JOIN t001w ON t001w~werks = mard~werks LEFT OUTER JOIN t001l ON t001l~werks = mard~werks AND t001l~lgort = mard~lgort LEFT OUTER JOIN mara ON mara~matnr = mard~matnr WHERE mard~matnr IN so_matnr AND mard~werks IN gdr_werks. * AND mard~lgort IN so_lgort. IF p_r2 = 'X'. SELECT mardh~matnr mardh~werks mardh~lgort mardh~lfgja mardh~lfmon mardh~labst " 非限制库存 mardh~insme " 质检库存 mardh~speme " 冻结库存 makt~maktx " 物料描述 t001w~name1 " 工厂描述 t001l~lgobe " 库存地点描述 mara~meins APPENDING TABLE ldt_mard FROM mardh LEFT OUTER JOIN makt ON makt~matnr = mardh~matnr AND makt~spras = '1' LEFT OUTER JOIN t001w ON t001w~werks = mardh~werks LEFT OUTER JOIN t001l ON t001l~werks = mardh~werks AND t001l~lgort = mardh~lgort LEFT OUTER JOIN mara ON mara~matnr = mardh~matnr * WHERE mardh~matnr IN so_matnr * AND mardh~werks IN gdr_werks. ** AND mardh~lgort IN so_lgort. * DELETE ldt_mard WHERE lfgja > gdf_lfgja. * DELETE ldt_mard WHERE lfgja = gdf_lfgja AND lfmon > gdf_lfmon. * SORT ldt_mard BY matnr werks lgort lfgja DESCENDING lfmon DESCENDING. * LOOP AT ldt_mard. * ldf_index = sy-tabix. * AT NEW lgort. * ldf_count = 0. * ENDAT. * ADD 1 TO ldf_count. * IF ldf_count > 1. * ldt_mard-lfgja = '1900'. * ldt_mard-lfmon = '01'. * MODIFY ldt_mard INDEX ldf_index. * ENDIF. * ENDLOOP. * DELETE ldt_mard WHERE lfgja = '1900' AND lfmon = '01'. WHERE mardh~matnr IN so_matnr AND mardh~werks IN gdr_werks AND ( lfgja > gdf_lfgja OR lfgja = gdf_lfgja AND lfmon >= gdf_lfmon ). SORT ldt_mard BY matnr werks lgort lfgja ASCENDING lfmon ASCENDING. LOOP AT ldt_mard. ldf_index = sy-tabix. AT NEW lgort. ldf_count = 0. ENDAT. ADD 1 TO ldf_count. IF ldf_count > 1. ldt_mard-lfgja = '9999'. ldt_mard-lfmon = '12'. MODIFY ldt_mard INDEX ldf_index. ENDIF. ENDLOOP. DELETE ldt_mard WHERE lfgja = '9999' AND lfmon = '12'. * 查询日期不是月底的时候,需要倒推数量 IF p_budat p_budat AND mkpf~budat gdf_lfgja OR lfgja = gdf_lfgja AND lfmon >= gdf_lfmon ). SORT ldt_mbew BY matnr bwkey bwtar lfgja ASCENDING lfmon ASCENDING. LOOP AT ldt_mbew. ldf_index = sy-tabix. AT NEW bwtar. ldf_count = 0. ENDAT. ADD 1 TO ldf_count. IF ldf_count > 1. ldt_mbew-lfgja = '9999'. ldt_mbew-lfmon = '12'. MODIFY ldt_mbew INDEX ldf_index. ENDIF. ENDLOOP. DELETE ldt_mbew WHERE lfgja = '9999' AND lfmon = '12'. ENDIF. SORT ldt_mbew BY matnr bwkey bwtar. * 整理数据 LOOP AT ldt_mard. AT NEW werks. CLEAR: ldf_menge, ldf_dmbtr. * 读取单位价格 READ TABLE ldt_mbew WITH KEY matnr = ldt_mard-matnr bwkey = ldt_mard-werks BINARY SEARCH. IF sy-subrc = 0. IF ldt_mbew-vprsv = 'S'. ldf_vprsv = 'S'. IF ldt_mbew-peinh = 0 OR ldt_mbew-peinh = 1. ldf_price = ldt_mbew-stprs. ELSE. ldf_price = ldt_mbew-stprs / ldt_mbew-peinh. ENDIF. ELSE. ldf_vprsv = 'V'. ldf_menge = ldt_mbew-lbkum. ldf_dmbtr = ldt_mbew-salk3. IF ldt_mbew-peinh = 0 OR ldt_mbew-peinh = 1. IF ldt_mbew-lbkum = 0. ldf_price = ldt_mbew-verpr. ELSE. ldf_price = ldt_mbew-salk3 / ldt_mbew-lbkum. ENDIF. ELSE. IF ldt_mbew-lbkum = 0. ldf_price = ldt_mbew-verpr / ldt_mbew-peinh. ELSE. ldf_price = ldt_mbew-salk3 / ldt_mbew-lbkum / ldt_mbew-peinh. ENDIF. ENDIF. ENDIF. ELSE. ldf_vprsv = 'S'. ldf_price = 0. * IF ldt_mbew-lbkum = 0. * ldf_price = 0. * ELSE. * ldf_price = ldt_mbew-salk3 / ldt_mbew-lbkum. * ENDIF. ENDIF. ENDAT. ** 按照库存地点权限进行过滤 * READ TABLE gdt_t001l WITH KEY werks = ldt_mard-werks * lgort = ldt_mard-lgort BINARY SEARCH. * IF sy-subrc 0. * CONTINUE. * ENDIF. * 整理常规数据 CLEAR gds_alv. gds_alv-matnr = ldt_mard-matnr. gds_alv-maktx = ldt_mard-maktx. gds_alv-werks = ldt_mard-werks. gds_alv-name1 = ldt_mard-name1. gds_alv-lgort = ldt_mard-lgort. gds_alv-lgobe = ldt_mard-lgobe. gds_alv-ztype = '普通库存'. gds_alv-meins = ldt_mard-meins. CALL FUNCTION 'ZTOOL_GET_MSEHL' EXPORTING meins = gds_alv-meins IMPORTING msehl = gds_alv-msehl. READ TABLE gdt_t001 WITH KEY bwkey = gds_alv-werks BINARY SEARCH. IF sy-subrc = 0. gds_alv-waers = gdt_t001-waers. ENDIF. * gds_alv-price = ldf_price. gds_alv-menge = ldt_mard-labst + ldt_mard-insme + ldt_mard-speme. gds_alv-dmbtr = gds_alv-menge * ldf_price. ldf_menge = ldf_menge - gds_alv-menge. ldf_dmbtr = ldf_dmbtr - gds_alv-dmbtr. APPEND gds_alv TO gdt_alv. AT END OF werks. IF ldf_vprsv = 'V'. IF ldf_menge = 0 AND ldf_dmbtr 0. * 存在尾差的情况下,将尾差写到最后一行 DESCRIBE TABLE gdt_alv LINES ldf_count. READ TABLE gdt_alv INTO gds_alv INDEX ldf_count. gds_alv-dmbtr = gds_alv-dmbtr + ldf_dmbtr. MODIFY gdt_alv FROM gds_alv INDEX ldf_count TRANSPORTING dmbtr. ENDIF. ENDIF. ENDAT. ENDLOOP. * 去掉库存为零的项目 DELETE gdt_alv WHERE menge = 0. IF so_lgort[] IS NOT INITIAL. DELETE gdt_alv WHERE lgort NOT IN so_lgort[]. ENDIF. * 按照库存地点权限进行过滤 IF gdt_t001l[] IS NOT INITIAL. LOOP AT gdt_alv INTO gds_alv. ldf_index = sy-tabix. "added by yangk 20150831 原因:ldf_index参数未指定,导致数据有问题,权限小的用户会down READ TABLE gdt_t001l WITH KEY werks = gds_alv-werks lgort = gds_alv-lgort BINARY SEARCH. IF sy-subrc 0. gds_alv-menge = 0. MODIFY gdt_alv FROM gds_alv INDEX ldf_index TRANSPORTING menge. ENDIF. ENDLOOP. CLEAR ldf_index."added by yangk 20150831 ENDIF. DELETE gdt_alv WHERE menge = 0. CLEAR: ldt_mard, ldt_mbew. REFRESH: ldt_mard, ldt_mbew. * 获取库龄 * 期初库龄 SELECT * INTO TABLE ldt_zmseg * FROM zmm_mseg "add by XXX 20160108 FROM zmm_mseg_new "add by XXX 20160108 FOR ALL ENTRIES IN gdt_alv WHERE matnr = gdt_alv-matnr AND werks = gdt_alv-werks AND lgort = gdt_alv-lgort AND ( vbeln = '' OR vbeln = '0000000000' ) AND budat gdf_budat. ENDIF. * 获取所有的冲销凭证 - 2013-12-31是期初导入,特殊逻辑处理,冲销从2014年开始判断 IF p_r2 = 'X'. SELECT mseg~mblnr mseg~mjahr mseg~zeile mseg~sjahr " 物料凭证年度 mseg~smbln " 物料凭证编号 mseg~smblp " 物料凭证中的项目 INTO TABLE ldt_mbst FROM mseg INNER JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr WHERE mseg~smbln '' AND mseg~mjahr >= '2014' AND mseg~bwart '321' AND mseg~bwart '322' AND mkpf~budat 0. ldf_index = sy-tabix. ldf_days = gdf_datum - ldt_zmseg-budat. IF ldt_zmseg-menge >= ldf_meng1. ldf_meng2 = ldf_meng1. ELSE. ldf_meng2 = ldt_zmseg-menge. ENDIF. * IF ldf_days gdf_budat. ENDIF. * 获取所有的冲销凭证 - 2013-12-31是期初导入,特殊逻辑处理,冲销从2014年开始判断 IF p_r2 = 'X'. SELECT mseg~mblnr mseg~mjahr mseg~zeile mseg~sjahr " 物料凭证年度 mseg~smbln " 物料凭证编号 mseg~smblp " 物料凭证中的项目 INTO TABLE ldt_mbst FROM mseg INNER JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr WHERE mseg~smbln '' AND mseg~mjahr >= '2014' AND mseg~bwart '321' AND mseg~bwart '322' AND mkpf~budat 0. gds_alv-meng99 = ldf_menge. ldf_days = gdf_datum - gdc_idate. * IF ldf_days include E -> exclude (包含、排除) lw_range-option = u_option." EQ, BT, NE,CP.... lw_range-low = u_low. lw_range-high = u_high. APPEND lw_range TO r_range. ENDFORM. " FRM_ADD_LGORT_DATA *&---------------------------------------------------------------------* *& Form CHECK_DATE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text *


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有