标准成本估算物料取价策略增强

COPCP005      用户退出物料估价(级别U)
PPCO0007      保存生产订单时退出

PPCO0018      检查生产订单表头的更改


*&---------------------------------------------------------------------*
*&  包括                ZXCKAU08
*&---------------------------------------------------------------------*


DATA:TYPE I.
DATA LVORM TYPE LVORM.

TABLES:A017,EINE,EINA.

DATA:BEGIN OF IT_DATA OCCURS 0,
  EBELN LIKE EKPO-EBELN,
  EBELP LIKE EKPO-EBELP,
  NETPR LIKE EKPO-NETPR,
  PEINH LIKE EKPO-PEINH,
  WAERS LIKE EKKO-WAERS,
  BPUMZ LIKE EKPO-BPUMZ,
  BPUMN LIKE EKPO-BPUMN,
  END OF IT_DATA.


DATA:BEGIN OF IT_EINE OCCURS 0,
  INFNR LIKE EINE-INFNR,
  NETPR LIKE EINE-NETPR,
  PEINH LIKE EINE-PEINH,
  WAERS LIKE EINE-WAERS,
  END OF IT_EINE.

DATA:IT_A017 LIKE A017 OCCURS WITH HEADER LINE.

DATA:BEGIN OF IT_KONP OCCURS 0,
  KBETR LIKE KONP-KBETR,
  KONWA LIKE KONP-KONWA,
  KPEIN LIKE KONP-KPEIN,
  DATBI LIKE A017-DATBI,
  DATAB LIKE A017-DATAB,
  KSTBM LIKE KONP-KSTBM,
KNUMH LIKE KONP-KNUMH,
  END OF IT_KONP.

DATA:BEGIN OF IT_MBEW OCCURS 0,
  MATNR LIKE MBEW-MATNR,
  STPRS LIKE MBEW-STPRS,
  PEINH LIKE MBEW-PEINH,
  WAERS LIKE EINE-WAERS,
  END OF IT_MBEW.

DATA:TOTAL_NET LIKE EKPO-NETPR,
       L_COUNT TYPE I.
CLEAR LVORM.

*BREAK-POINT.

SELECT SINGLE LVORM INTO LVORM FROM MARC WHERE MATNR F_MATBW-MATNR AND WERKS F_MATBW-WERKS.
IF LVORM IS INITIAL.
****************  读计划协议,开始 ***************
  CLEAR:IT_DATA.
  REFRESH IT_DATA.
  SELECT EKPO~EBELN EKPO~EBELP EKPO~NETPR EKPO~PEINH EKKO~WAERS EKPO~BPUMZ EKPO~BPUMN
    INTO CORRESPONDING FIELDS OF TABLE IT_DATA
    FROM EKKO JOIN EKPO
      ON EKKO~EBELN EKPO~EBELN    AND EKPO~LOEKZ <> 'L'
    WHERE EKKO~KDATB <= F_MATBW-BWDAT
      AND EKKO~KDATE >= F_MATBW-BWDAT
      AND EKPO~WERKS F_MATBW-WERKS
      AND EKPO~MATNR F_MATBW-MATNR
      AND EKKO~BSTYP 'L'   .
  N LINESIT_DATA ).
  IF N >= 1.
    CLEAR:TOTAL_NET,L_COUNT.
    LOOP AT IT_DATA.
      IF IT_DATA-PEINH LT 100.
        IT_DATA-NETPR IT_DATA-NETPR * 100.
      ENDIF.

      CALL FUNCTION 'ZUNIT_EXCHANGE'
        EXPORTING
          BPUMZ   IT_DATA-BPUMZ
          BPUMN   IT_DATA-BPUMN
          I_NETPR IT_DATA-NETPR
        IMPORTING
          E_NETPR IT_DATA-NETPR.


      IF IT_DATA-WAERS NE 'CNY'.
        CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
          EXPORTING
            CLIENT           SY-MANDT
            DATE             SY-DATUM
            FOREIGN_AMOUNT   IT_DATA-NETPR
            FOREIGN_CURRENCY IT_DATA-WAERS
            LOCAL_CURRENCY   'CNY'
          IMPORTING
            LOCAL_AMOUNT     IT_DATA-NETPR.
        IT_DATA-NETPR IT_DATA-NETPR * '1.15' .
      ENDIF.
      IF IT_DATA-PEINH GE 100.
        IT_DATA-PEINH IT_DATA-PEINH / 100.
      ENDIF.

      TOTAL_NET TOTAL_NET + IT_DATA-NETPR / IT_DATA-PEINH.
      L_COUNT L_COUNT + 1.
    ENDLOOP.
    EXP_PREIS TOTAL_NET / L_COUNT.
    EXP_WAERS 'CNY'.
    EXP_PEINH 100.
    EXIT.
  ENDIF.
****************  读计划协议,结束 ***************
** 逻辑1
  CLEAR:IT_DATA.
  REFRESH IT_DATA.
  SELECT EKPO~EBELN EKPO~EBELP EKPO~NETPR EKPO~PEINH EKKO~WAERS EKPO~BPUMZ EKPO~BPUMN
    INTO CORRESPONDING FIELDS OF TABLE IT_DATA
    FROM EKKO JOIN EKPO
      ON EKKO~EBELN EKPO~EBELN    AND EKPO~LOEKZ <> 'L'
    WHERE EKKO~KDATB <= F_MATBW-BWDAT
      AND EKKO~KDATE >= F_MATBW-BWDAT
      AND EKPO~WERKS F_MATBW-WERKS
      AND EKPO~MATNR F_MATBW-MATNR
      AND EKKO~BSTYP 'K'
   .

  N LINESIT_DATA ).
  IF 0.

    DATA LT_EINA TYPE TABLE OF  EINA .
** 历史
    CLEAR LT_EINA.
    SELECT *  INTO CORRESPONDING FIELDS OF TABLE LT_EINA
      FROM EINA INNER JOIN EINE ON EINE~INFNR EINA~INFNR AND EINE~LOEKZ ''
       WHERE EINA~MATNR F_MATBW-MATNR AND  EINE~WERKS F_MATBW-WERKS  AND EINA~LOEKZ NE 'X' AND EINE~ESOKZ NE '3'.

    IF LT_EINA IS NOT INITIAL.
      REFRESH IT_A017.
      SELECT KNUMH
        INTO CORRESPONDING FIELDS OF TABLE IT_A017
        FROM A017
        FOR ALL ENTRIES IN LT_EINA

         WHERE LIFNR LT_EINA-LIFNR
         AND MATNR F_MATBW-MATNR
            AND WERKS F_MATBW-WERKS
           AND DATAB <= F_MATBW-BWDAT
           AND DATBI >= F_MATBW-BWDAT.

      REFRESH IT_KONP.
      IF IT_A017[] IS NOT INITIAL.
        SELECT  KBETR KONWA KPEIN KSTBM KNUMH
          INTO CORRESPONDING FIELDS OF TABLE IT_KONP
          FROM KONP
          FOR ALL ENTRIES IN IT_A017
         WHERE KNUMH IT_A017-KNUMH
              AND KSCHL 'PB00'.
      ENDIF.
      N LINESIT_KONP ).

      IF 0.  "A017 & KONP
** 逻辑3
***    CLEAR it_mbew.
***    REFRESH it_mbew.
***    SELECT SINGLE matnr stprs peinh
***      INTO CORRESPONDING FIELDS OF it_mbew
***      FROM mbew
***     WHERE bwkey = f_matbw-werks
***       AND matnr = f_matbw-matnr.
***    IF sy-subrc = 0 .
***      SELECT SINGLE t001~waers
***        INTO it_mbew-waers
***        FROM t001 JOIN t001k
***          ON t001~bukrs = t001k~bukrs
***       WHERE t001k~bwkey = f_matbw-werks.
***
***      exp_preis = it_mbew-stprs.
***      exp_waers = it_mbew-waers.
***      exp_peinh = it_mbew-peinh.
***    ENDIF.

      ELSE. "A017 & KONP
        CLEAR:TOTAL_NET,L_COUNT.
        LOOP AT IT_KONP.
          IF IT_KONP-KPEIN LT 100.
            IT_KONP-KBETR IT_KONP-KBETR * 100.
          ENDIF.
          CLEAR:A017 ,EINA,EINE.
          SELECT SINGLE FROM A017 WHERE KNUMH IT_KONP-KNUMH.
          SELECT SINGLE *  FROM EINA WHERE LIFNR A017-LIFNR AND MATNR A017-MATNR.
          SELECT SINGLE FROM EINE WHERE INFNR EINA-INFNR.

          CALL FUNCTION 'ZUNIT_EXCHANGE'
            EXPORTING
              BPUMZ   EINE-BPUMZ
              BPUMN   EINE-BPUMN
              I_NETPR IT_KONP-KBETR
            IMPORTING
              E_NETPR IT_KONP-KBETR.


          IF IT_KONP-KONWA NE 'CNY'.
            CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
              EXPORTING
                CLIENT           SY-MANDT
                DATE             SY-DATUM
                FOREIGN_AMOUNT   IT_KONP-KBETR
                FOREIGN_CURRENCY IT_KONP-KONWA
                LOCAL_CURRENCY   'CNY'
              IMPORTING
                LOCAL_AMOUNT     IT_KONP-KBETR.
            IT_KONP-KBETR IT_KONP-KBETR * '1.15'.
          ENDIF.
          IF IT_KONP-KPEIN GE 100.
            IT_KONP-KPEIN IT_KONP-KPEIN / 100.
          ENDIF.
          TOTAL_NET TOTAL_NET + IT_KONP-KBETR / IT_KONP-KPEIN.
          L_COUNT L_COUNT + 1.
        ENDLOOP.



        EXP_PREIS TOTAL_NET / L_COUNT.
        EXP_WAERS 'CNY'.

        EXP_PEINH 100.
      ENDIF.  "A017 & KONP
    ENDIF.
  ELSE. "EKKO & EKPO
    CLEAR:TOTAL_NET,L_COUNT.
    LOOP AT IT_DATA.
      IF IT_DATA-PEINH LT 100.
        IT_DATA-NETPR IT_DATA-NETPR * 100.
      ENDIF.

      CALL FUNCTION 'ZUNIT_EXCHANGE'
        EXPORTING
          BPUMZ   IT_DATA-BPUMZ
          BPUMN   IT_DATA-BPUMN
          I_NETPR IT_DATA-NETPR
        IMPORTING
          E_NETPR IT_DATA-NETPR.

      IF IT_DATA-WAERS NE 'CNY'.
        CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
          EXPORTING
            CLIENT           SY-MANDT
            DATE             SY-DATUM
            FOREIGN_AMOUNT   IT_DATA-NETPR
            FOREIGN_CURRENCY IT_DATA-WAERS
            LOCAL_CURRENCY   'CNY'
          IMPORTING
            LOCAL_AMOUNT     IT_DATA-NETPR.
        IT_DATA-NETPR IT_DATA-NETPR * '1.15' .
      ENDIF.
      IF IT_DATA-PEINH GE 100.
        IT_DATA-PEINH IT_DATA-PEINH / 100.
      ENDIF.

      TOTAL_NET TOTAL_NET + IT_DATA-NETPR / IT_DATA-PEINH.
      L_COUNT L_COUNT + 1.
    ENDLOOP.
    EXP_PREIS TOTAL_NET / L_COUNT.
    EXP_WAERS 'CNY'.
    EXP_PEINH 100.
  ENDIF.

ENDIF.

*LEAVE SCREEN.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值