SAP 采购降本分析报表
实际情况
逻辑简述:基准合同价取 指定日期有效的采购合同价 A017
当月的价格取,当月采购订单的价格
数量 = 收货数量 - 冲销数量 sum101 - sum102
上代码:
*&---------------------------------------------------------------------*
*& Report ZRPT_MMCO_HISCMP
*&
*&---------------------------------------------------------------------*
*&AUTHOR GAVIN
*&DATE:20220219
*&FROM mm 采购 ZYZ
*& TCODE:
*&---------------------------------------------------------------------*REPORT ZRPT_MMCO_HISCMP.TABLES:MBEW,A017,MBEWH,EKKO,EKPO,LFA1,MARC.PARAMETERS:PDATE LIKE SY-DATUM OBLIGATORY DEFAULT sy-datum ."价格参考日期
SELECT-OPTIONS:S_DATE FOR SY-DATUM OBLIGATORY DEFAULT sy-datum to sy-datum."统计期间
SELECT-OPTIONS:S_WERKS FOR MARC-WERKS OBLIGATORY DEFAULT '1000'."工厂
SELECT-OPTIONS:S_MATNR FOR MARC-MATNR ."物料
SELECT-OPTIONS:S_LIFNR FOR LFA1-LIFNR ."供应商DATA: IT_FIELDCAT TYPE LVC_T_FCAT,WA_LAYOUT TYPE LVC_S_LAYO.DATA:LT001W LIKE T001W OCCURS 0 WITH HEADER LINE.DATA:STDATUM LIKE SY-DATUM,STUZEIT LIKE SY-UZEIT.DATA: IT_OUTPUT TYPE REF TO DATA,
WA_OUTPUT TYPE REF TO DATA.
FIELD-SYMBOLS: <IT_OUTPUT> TYPE STANDARD TABLE,
<WA_OUTPUT>.START-OF-SELECTION.STDATUM = SY-DATUM.STUZEIT = SY-UZEIT.* 建立输出表列PERFORM BUILD_FIELDCAT.* 创建输出表PERFORM CREATE_DYNAMIC_TABLE.PERFORM GETDATA.PERFORM WRITERPTRUNRECORD.PERFORM CALL_ALV_DISPLAY.*&---------------------------------------------------------------------*
*& FORM BUILD_FIELDCAT
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT .DATA: L_TITLE TYPE TEXT40.DATA: L_TITLES TYPE TEXT40.DATA: L_COLNAM TYPE TEXT40.DATA: L_CO(2) TYPE C.DATA: PDATESRC TYPE SY-DATUM,PDATEEND TYPE SY-DATUM.PERFORM SET_FIELDCAT TABLES IT_FIELDCAT USING 'WERKS' 'WERKS' 'MARC' '' '工厂' '' 'C100' 'X' '1' 'X'.PERFORM SET_FIELDCAT TABLES IT_FIELDCAT USING 'MATNR' 'MATNR' 'MARA' '' '物料' '' 'C100' 'X' '1' 'X'.PERFORM SET_FIELDCAT TABLES IT_FIELDCAT USING 'MAKTX' '' '' '' '物料描述' '' 'C100' 'X' '1' ''.PERFORM SET_FIELDCAT TABLES IT_FIELDCAT USING 'LIFNR' 'LIFNR' 'LFA1' '' '供应商' '' 'C100' 'X' '1' 'X'.PERFORM SET_FIELDCAT TABLES IT_FIELDCAT USING 'NAME1' '' '' '' '供应商名称' '' 'C100' 'X' '1' ''.PERFORM SET_FIELDCAT TABLES IT_FIELDCAT USING 'KBETR' 'KBETR' 'KONP' '' '参考基准合同价格' '' 'C100' 'X' '1' ''.PERFORM SET_FIELDCAT TABLES IT_FIELDCAT USING 'KPEIN' 'KPEIN' 'KONP' '' '价格单位' '' 'C100' 'X' '1' ''.PDATESRC = S_DATE-LOW. PDATESRC+6(2) = '01'.CALL FUNCTION 'LAST_DAY_OF_MONTHS'EXPORTINGday_in = S_DATE-HIGH "输入日期IMPORTINGlast_day_of_month = PDATEEND "返回最后一天日期:20160131EXCEPTIONSday_in_no_date = 1OTHERS = 2.WHILE PDATESRC <= PDATEEND."系统维护价格L_COLNAM = PDATESRC+0(6) && 'KBETR'.L_TITLE = PDATESRC+0(6) && '系统维护价格'.PERFORM SET_FIELDCAT TABLES IT_FIELDCAT USING L_COLNAM 'KBETR' 'KONP' '' L_TITLE '' 'C100' '' '1' ''."单价浮动L_COLNAM = PDATESRC+0(6) && 'KBETRDLT'.L_TITLE = PDATESRC+0(6) && '单价浮动'.PERFORM SET_FIELDCAT TABLES IT_FIELDCAT USING L_COLNAM 'KBETR' 'KONP' '' L_TITLE '' 'C100' '' '1' ''."采购收货数量L_COLNAM = PDATESRC+0(6) && 'MENGE'.L_TITLE = PDATESRC+0(6) && '采购收货数量'.PERFORM SET_FIELDCAT TABLES IT_FIELDCAT USING L_COLNAM 'MENGE' 'EKPO' '' L_TITLE '' 'C100' '' '1' ''."采购额浮动L_COLNAM = PDATESRC+0(6) && 'KBETRDLTS'.L_TITLE = PDATESRC+0(6) && '采购额浮动'.PERFORM SET_FIELDCAT TABLES IT_FIELDCAT USING L_COLNAM 'BRTWR' 'EKPO' '' L_TITLE '' 'C100' '' '1' ''."* 下个月CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'EXPORTINGDATE = PDATESRC " DAYS = N ”天数加N或者减N 不加也不减 写0DAYS = 0 "天数加N或者减N 不加也不减 写0MONTHS = 1 "月份加N或者减N 不加也不减 写0SIGNUM = '+' "可以是+或者-YEARS = 0"年份加N或者减N 不加也不减 写0IMPORTINGCALC_DATE = PDATESRC."得到加减之后的日期ENDWHILE.PERFORM SET_FIELDCAT TABLES IT_FIELDCAT USING 'MENGESUM' 'MENGE' 'EKPO' '' '累计收货数量' '' 'C100' '' '1' ''.PERFORM SET_FIELDCAT TABLES IT_FIELDCAT USING 'KBETRAVE' 'KBETR' 'KONP' '' '平均浮动价格' '' 'C100' '' '1' ''.PERFORM SET_FIELDCAT TABLES IT_FIELDCAT USING 'KBETRDLTALL' 'BRTWR' 'EKPO' '' '累计采购浮动' '' 'C100' '' '1' ''.ENDFORM. "BUILD_FIELDCAT*&---------------------------------------------------------------------*
*& FORM F_SET_FIELDCAT
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
* -->CT_FIELDCAT TEXT
* -->UV_FIELDNAME TEXT
* -->UV_REF_FIELD TEXT
* -->UV_REF_TABLE TEXT
* -->UV_TEXT TEXT
*----------------------------------------------------------------------*
FORM SET_FIELDCAT TABLES CT_FIELDCAT
USING UV_FIELDNAMEUV_REF_FIELDUV_REF_TABLEUV_EDIT_MASKUV_TEXTUV_TEXTSUV_EMPHASIZEUV_FIX_COLUMNUV_HIER_CPOSUV_NOZERO .DATA: LW_FIELD TYPE LVC_S_FCAT.CLEAR: LW_FIELD.LW_FIELD-NO_ZERO = UV_NOZERO.LW_FIELD-HIER_CPOS = UV_HIER_CPOS.LW_FIELD-FIX_COLUMN = UV_FIX_COLUMN.LW_FIELD-FIELDNAME = UV_FIELDNAME.LW_FIELD-REF_FIELD = UV_REF_FIELD.LW_FIELD-REF_TABLE = UV_REF_TABLE.LW_FIELD-EDIT_MASK = UV_EDIT_MASK.LW_FIELD-EMPHASIZE = UV_EMPHASIZE.LW_FIELD-COLTEXT = UV_TEXT.LW_FIELD-SELTEXT = UV_TEXT.LW_FIELD-SCRTEXT_L = UV_TEXT.LW_FIELD-SCRTEXT_M = UV_TEXT.LW_FIELD-SCRTEXT_S = UV_TEXTS.LW_FIELD-FIX_COLUMN = UV_FIX_COLUMN.APPEND LW_FIELD TO CT_FIELDCAT.
ENDFORM. " F_SET_FIELDCAT*&---------------------------------------------------------------------*
*& FORM CALL_ALV_DISPLAY
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
* --> P1 TEXT
* <-- P2 TEXT
*----------------------------------------------------------------------*
FORM CALL_ALV_DISPLAY .CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGI_CALLBACK_PROGRAM = SY-REPIDIS_LAYOUT_LVC = WA_LAYOUTIT_FIELDCAT_LVC = IT_FIELDCATI_DEFAULT = ''TABLEST_OUTTAB = <IT_OUTPUT>EXCEPTIONSPROGRAM_ERROR = 1OTHERS = 2.IF SY-SUBRC <> 0.ENDIF.
ENDFORM. "CALL_ALV_DISPLAY*&---------------------------------------------------------------------*
*& FORM CREATE_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
* --> P1 TEXT
* <-- P2 TEXT
*----------------------------------------------------------------------*
FORM CREATE_DYNAMIC_TABLE .CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLEEXPORTINGIT_FIELDCATALOG = IT_FIELDCATIMPORTINGEP_TABLE = IT_OUTPUTEXCEPTIONSGENERATE_SUBPOOL_DIR_FULL = 1OTHERS = 2.IF SY-SUBRC <> 0.ENDIF.ASSIGN IT_OUTPUT->* TO <IT_OUTPUT>.CREATE DATA WA_OUTPUT LIKE LINE OF <IT_OUTPUT>.ASSIGN WA_OUTPUT->* TO <WA_OUTPUT>.
ENDFORM. "CREATE_DYNAMIC_TABLE*&---------------------------------------------------------------------*
*& FORM WRITERPTRUNRECORD
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
FORM WRITERPTRUNRECORD.GET TIME.CALL FUNCTION 'ZSYS_RPT_RUNRECORD'EXPORTINGTCODE = SY-TCODEPROGRAMM = SY-CPROGDATUMRST = STDATUMUZEITRST = STUZEITBATCH = SY-BATCHDATUMREND = SY-DATUMUZEITREND = SY-UZEITDATUMC = '20220222'RUNNER = SY-UNAMERPTSRC = 'MM ZYZ'.
ENDFORM. "WRITERPTRUNRECORD*&---------------------------------------------------------------------*
*& FORM GETDATA
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
* --> P1 TEXT
* <-- P2 TEXT
*----------------------------------------------------------------------*
FORM GETDATA .DATA:INDEX TYPE I.data:compindex TYPE i.DATA:LVERPR LIKE MBEW-VERPR.DATA:PDATESRC TYPE SY-DATUM,PDATEEND TYPE SY-DATUM.DATA:MLAST TYPE SY-DATUM.DATA:LMENGE TYPE MSEG-MENGE.DATA:ALLMENGE TYPE MSEG-MENGE,ALLBRTWR TYPE EKPO-BRTWR,KBETRAVE TYPE KONP-KBETR.DATA:BEGIN OF WJZITAB OCCURS 0,WERKS LIKE A017-WERKS,MATNR LIKE A017-MATNR,LIFNR LIKE A017-LIFNR,KNUMH like A017-KNUMH,MAKTX LIKE MAKT-MAKTX,NAME1 LIKE LFA1-NAME1,KBETR LIKE KONP-KBETR,KPEIN like KONP-KPEIN,END OF WJZITAB.FIELD-SYMBOLS <FIELDP>.SELECT A017~WERKS A017~MATNR A017~LIFNR A017~KNUMHINTO TABLE WJZITABFROM A017WHERE A017~WERKS IN S_WERKS AND A017~MATNR IN S_MATNR AND A017~LIFNR IN S_LIFNRAND A017~DATBI >= PDATE AND A017~DATAB <= PDATE.LOOP AT WJZITAB.PDATESRC = S_DATE-LOW. PDATESRC+6(2) = '01'.CALL FUNCTION 'LAST_DAY_OF_MONTHS'EXPORTINGday_in = S_DATE-HIGH "输入日期IMPORTINGlast_day_of_month = PDATEEND "返回最后一天日期:20160131EXCEPTIONSday_in_no_date = 1OTHERS = 2."物料描述SELECT SINGLE MAKTX INTO WJZITAB-MAKTX FROM MAKT WHERE MATNR = WJZITAB-MATNR AND SPRAS = 1."供应商名称SELECT SINGLE NAME1 INTO WJZITAB-NAME1 FROM LFA1 WHERE LIFNR = WJZITAB-LIFNR."基准价格获取SELECT SINGLE KBETR KPEIN INTO (WJZITAB-KBETR,WJZITAB-KPEIN ) FROM KONP WHERE KNUMH = WJZITAB-KNUMH.MOVE-CORRESPONDING WJZITAB to <WA_OUTPUT>.INDEX = 0. CLEAR ALLMENGE.CLEAR ALLBRTWR.WHILE PDATESRC <= PDATEEND."求得月初月末CALL FUNCTION 'LAST_DAY_OF_MONTHS'EXPORTINGDAY_IN = PDATESRC "输入日期IMPORTINGLAST_DAY_OF_MONTH = MLAST "返回最后一天日期:20160131EXCEPTIONSDAY_IN_NO_DATE = 1OTHERS = 2."对应月份价格获取COMPINDEX = 8 + INDEX * 4.ASSIGN COMPONENT COMPINDEX OF STRUCTURE <WA_OUTPUT> TO <FIELDP>."考虑当月可能没有采购订单,但是有跨月收货,则逆序取最后一个 采购订单价格SELECT NETPR INTO LVERPRUP TO 1 ROWSFROM EKKOJOIN EKPO ON EKKO~EBELN = EKPO~EBELNWHERE EKKO~LIFNR = WJZITAB-LIFNR AND EKPO~WERKS = WJZITAB-WERKS AND MATNR = WJZITAB-MATNRAND EKKO~AEDAT >= PDATE AND EKKO~AEDAT <= MLASTORDER BY ekko~AEDAT DESCENDING .<FIELDP> = LVERPR.ENDSELECT."如果还是没有 ,则且是第一个统计期间,则直接为基准价格IF ( <FIELDP> IS INITIAL OR <FIELDP> <= 0 ) AND INDEX = 0.LVERPR = WJZITAB-KBETR.<FIELDP> = LVERPR.ENDIF."浮动价格COMPINDEX = COMPINDEX + 1.ASSIGN COMPONENT COMPINDEX OF STRUCTURE <WA_OUTPUT> TO <FIELDP>.<FIELDP> = LVERPR - WJZITAB-KBETR."对应月份实际收货COMPINDEX = COMPINDEX + 1.ASSIGN COMPONENT COMPINDEX OF STRUCTURE <WA_OUTPUT> TO <FIELDP>.PERFORM COUNTMENGE USING WJZITAB-LIFNR WJZITAB-MATNR WJZITAB-WERKS PDATESRC MLAST CHANGING lmenge.<FIELDP> = lmenge.ALLMENGE = ALLMENGE + lmenge."浮动金额COMPINDEX = COMPINDEX + 1.ASSIGN COMPONENT COMPINDEX OF STRUCTURE <WA_OUTPUT> TO <FIELDP>.<FIELDP> = LMENGE * ( LVERPR - WJZITAB-KBETR ).ALLBRTWR = ALLBRTWR + LMENGE * ( LVERPR - WJZITAB-KBETR )."下个月CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'EXPORTINGDATE = PDATESRC " DAYS = N ”天数加N或者减N 不加也不减 写0DAYS = 0 "天数加N或者减N 不加也不减 写0MONTHS = 1 "月份加N或者减N 不加也不减 写0SIGNUM = '+' "可以是+或者-YEARS = 0"年份加N或者减N 不加也不减 写0IMPORTINGCALC_DATE = PDATESRC."得到加减之后的日期INDEX = INDEX + 1.ENDWHILE.COMPINDEX = 8 + INDEX * 4.ASSIGN COMPONENT COMPINDEX OF STRUCTURE <WA_OUTPUT> TO <FIELDP>.<FIELDP> = ALLMENGE.COMPINDEX = COMPINDEX + 1.ASSIGN COMPONENT COMPINDEX OF STRUCTURE <WA_OUTPUT> TO <FIELDP>.IF ALLMENGE <> 0.KBETRAVE = ALLBRTWR / ALLMENGE.<FIELDP> = KBETRAVE.ENDIF.COMPINDEX = COMPINDEX + 1.ASSIGN COMPONENT COMPINDEX OF STRUCTURE <WA_OUTPUT> TO <FIELDP>.<FIELDP> = ALLBRTWR.APPEND <WA_OUTPUT> TO <IT_OUTPUT>.ENDLOOP.ENDFORM. " GETDATA*&---------------------------------------------------------------------*
*& Form countmenge
*&---------------------------------------------------------------------*
* 计算周期内的收货 - 相应的冲销
*----------------------------------------------------------------------*
* -->PLIFNR text
* -->PMATNR text
* -->PWERKS text
* -->PDATESRC text
* -->PDATEEND text
* -->PCOUNT text
*----------------------------------------------------------------------*
FORM COUNTMENGE USING PLIFNR LIKE lfa1-LIFNR PMATNR LIKE mara-MATNR PWERKS LIKE mseg-WERKSPDATESRC TYPE SY-DATUM PDATEEND TYPE SY-DATUM CHANGING PCOUNT TYPE mseg-menge.data:SUM101 TYPE mseg-menge,sum102 TYPE mseg-menge.DATA:pmjahr TYPE mseg-MJAHR.pmjahr = PDATESRC+0(4)."收货数量select sum( menge ) into sum101from msegwhere matnr = PMATNR AND lifnr = PLIFNR AND bwart = '101' AND werks = pwerks and mjahr = pmjahrand BUDAT_MKPF >= PDATESRC AND BUDAT_MKPF <= PDATEEND ."冲销数量SELECT SUM( menge ) INTO sum102FROM msegWHERE matnr = PMATNR AND lifnr = PLIFNR AND bwart = '102' AND werks = pwerks and mjahr = pmjahrand BUDAT_MKPF >= PDATESRC AND BUDAT_MKPF <= PDATEEND .PCOUNT = sum101 - sum102.ENDFORM. "COUNTMENGE
SAP 采购降本分析报表相关推荐
- SAP库存--历史库存相关数据,以及库存变化对应表的数据变化,可以用于库龄分析报表逻辑设计。
** 库龄分析 # 在后勤模块经常会用到库存相关的数据进行报表展示以及其他数据分析,这个就需要对于SAP库存值变化以及相关表的数据更新有一定的了解. SAP历史库存相关数据,以及库存变化对应表的数据变 ...
- 基于java的采购管理系统的分析与实现(含源文件)
欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 采购管理系统的分析与实现 摘 要 当今社会己进入信息社会时代,信息己经受到社会的广泛关注,被看作 ...
- SAP S/4嵌入式分析——虚拟数据模型(VDM)
在本文中,我会通过CDS视图来介绍虚拟数据模型(Virtual Data Model,以下简称VDM). 在SAP HANA平台出现后,SAP的业务应用开发模式已经产生了变化,新的经验法则是:尽可能在 ...
- SAP MM 进销存报表优化小记
SAP MM 进销存报表优化小记 笔者刚刚加入SY项目,就接到了SY集团上海总部SAP运维部门负责人的工作分配,说是有一只进销存报表,需要做一个优化,可能是需要重新设计重新开发. 笔者研究了他们现行进 ...
- SAP License:SAP采购信息系统
采购管理有个"五适"原则,即适时,适地,适价,适量,适质地把物料采购回来.其中传统意义上的"适地",是指选择在地理位置上合适的供应商.当然,这个方面在SAP系统 ...
- SAP License:获利分析的两种方式比较
1.基于成本核算和基于帐户的获利分析比较 CO-PA模块有两种获利分析,基于帐户和基于成本的获利分析,两者联系与区别.利弊如何? a.costing-base采用value field,可对应到cos ...
- SAP MM 进销存报表与标准报表MB5B
SAP MM 进销存报表与标准报表MB5B 提到进销存报表,SAP提供了一个标准报表MB5B.这个报表能显示指定的日期范围内,期初库存(数量与金额),期末库存(数量与金额),总入库数(数量与金额),总 ...
- 出击BI SAP推全新业务分析应用行业软件
2010年10月13日,SAP公司宣布正式在中国市场推出全新的SAP BusinessObjects业务分析应用软件系列(SAP BusinessObjects analytic applicatio ...
- SAP License:SAP的库龄分析表
问题:SAP系统没有标准的库龄分析报表,这个报表出具如何处理? 解决办法: 1.可以通过批次管理,然后再财务进行FIFO评估,但是这个办法经测试发现实现比较麻烦. 2.通过如下方法可以实现. MC46 ...
最新文章
- 求 1~n 之间素数的个数
- NoSQL数据库_Redis
- 关于CMMI级别阶梯式前进路线图的对话
- 【Qt】Qt工程管理
- loadrunner录制脚本参数化之间的关联设置
- Overloud Gem Modula for Mac - 三合一经典调制插件
- opencv 学习之 亮度检测
- CAN FD 总线协议深度解析-简单易懂协议详解
- es6兼容性问题解决
- 前端工程师的职业规划
- instagram 和不联网
- VMware虚拟机中如何配置ip地址网关和dns
- 访问和操作H2数据库
- javax.net.ssl.SSLException 两种解决方法 链接https接口
- 实现ALOHA协议仿真算法
- html标签:表格、列表、图片、文字、表单、以及h5新增特性
- MTK平台开机初始化时 camera驱动流程|MTK camera调试常见几十种问题处理方法
- 基于51单片机的ADC热敏电阻测温系统proteus仿真
- CSS 中的 text-decoration 属性
- 涉嫌行贿 三星掌门人等韩企大佬将首次集体接受质询