SAP 配额维护 ME_UPDATE_QUOTA 解读

93 篇文章 13 订阅
53 篇文章 5 订阅

 竟然直接insert  表

FUNCTION ME_UPDATE_QUOTA.
*"----------------------------------------------------------------------
*"*"Verbuchungsfunktionsbaustein:
*"
*"*"Lokale Schnittstelle:
*"       TABLES
*"              XEQUK STRUCTURE  EQUKU
*"              XEQUP STRUCTURE  UEQUP
*"              YEQUK STRUCTURE  EQUKU
*"              YEQUP STRUCTURE  UEQUP
*"----------------------------------------------------------------------
*  84973  3.1I  14.10.1997  CF

REFRESH: DB_EQUK, DB_EQUK_U, DB_EQUP.

CLEAR:   NEQUK, NEQUP.
REFRESH: NEQUK, NEQUP.
***********************************************************************
*      Aendern oder Hinzufuegen Quotenköpfe     EQUK                  *
***********************************************************************
LOOP AT XEQUK.
  MOVE XEQUK TO NEQUK.
  APPEND NEQUK.
ENDLOOP.

*--- Sortieren für binäres Lesen mit Key -----------------------------*
SORT NEQUK ASCENDING BY MATNR WERKS BDATU.

*--- Loop über alte Daten --------------------------------------------*
LOOP AT YEQUK.
   MOVE-CORRESPONDING YEQUK TO EQUKKEY.
   READ TABLE NEQUK WITH KEY EQUKKEY BINARY SEARCH.
   IF SY-SUBRC NE 0.
*     MOVE YEQUK TO EQUK.
*     PERFORM EQUK_LOESCHEN.
      MOVE YEQUK TO DB_EQUK.
      APPEND DB_EQUK.
   ELSE.
*     MOVE NEQUK TO EQUK.
*     PERFORM EQUK_AENDERN.
      MOVE NEQUK TO DB_EQUK_U.
      APPEND DB_EQUK_U.
   ENDIF.
ENDLOOP.

* Löschen Quotierungsköpfe über Array-Delete
DESCRIBE TABLE DB_EQUK LINES SY-TFILL.
IF SY-TFILL GT 0.
   DELETE EQUK FROM TABLE DB_EQUK.
   IF SY-SUBRC NE 0.
      MESSAGE A809(ME) WITH 'EQUK'.
   ENDIF.
   REFRESH DB_EQUK.
ENDIF.
*
* Update Quotierungsköpfe über Array-Update
DESCRIBE TABLE DB_EQUK_U LINES SY-TFILL.
IF SY-TFILL GT 0.
   UPDATE EQUK FROM TABLE DB_EQUK_U.
   IF SY-SUBRC NE 0.
      MESSAGE A808(ME) WITH 'EQUK'.
   ENDIF.
*  REFRESH DB_EQUK_U.                                            "67116
ENDIF.
*
*
REFRESH: DB_EQUK.

*--- Loop über neue Daten --------------------------------------------*
LOOP AT NEQUK.
  IF NEQUK-KZ EQ 'I'.   "neupos Neue Saetze ---> Insert
*    MOVE NEQUK TO EQUK.
*    PERFORM EQUK_HINZUFUEGEN.
     MOVE-CORRESPONDING NEQUK TO EQUKKEY.                        "67116
     READ TABLE DB_EQUK_U WITH KEY EQUKKEY.                      "67116
     CHECK SY-SUBRC NE 0.                                        "67116
     MOVE NEQUK TO DB_EQUK.
     APPEND DB_EQUK.
  ENDIF.
ENDLOOP.
REFRESH DB_EQUK_U.                                               "67116

* Insert Quotierungsköpfe über Array-Insert
DESCRIBE TABLE DB_EQUK LINES SY-TFILL.
IF SY-TFILL GT 0.
   INSERT EQUK FROM TABLE DB_EQUK.(直接插入数据)
   IF SY-SUBRC NE 0.
      MESSAGE A807(ME) WITH 'EQUK'.
   ENDIF.
   REFRESH DB_EQUK.
ENDIF.
*

***********************************************************************
*      Aendern oder Hinzufuegen Orderbuchsaetze EQUP                  *
***********************************************************************
LOOP AT XEQUP.
  MOVE XEQUP TO NEQUP.
  APPEND NEQUP.
ENDLOOP.

*--- Sortieren für binäres Lesen mit Key -----------------------------*
SORT NEQUP ASCENDING BY QUNUM QUPOS.

*--- Loop über alte Daten --------------------------------------------*
LOOP AT YEQUP.
   MOVE-CORRESPONDING YEQUP TO EQUPKEY.
   READ TABLE NEQUP WITH KEY EQUPKEY BINARY SEARCH.
   IF SY-SUBRC NE 0.
*     MOVE YEQUP TO EQUP.
*     PERFORM EQUP_LOESCHEN.
      MOVE YEQUP TO DB_EQUP.
      APPEND DB_EQUP.
   ELSE.
      NEQUP-KZ = 'U'.                                            "84973
      MODIFY NEQUP INDEX SY-TABIX.                               "84973
      IF NEQUP-QUMNG EQ YEQUP-QUMNG.
*--- Quotenmenge wird nicht auf DB geschrieben ------------------------*
         MOVE NEQUP TO EQUP.
         PERFORM EQUP_AENDERN.
      ELSE.
*--- Quotenmenge wird auf DB geschrieben ------------------------------*
         SELECT SINGLE * FROM EQUP
            WHERE QUNUM = NEQUP-QUNUM
            AND   QUPOS = NEQUP-QUPOS.
         IF SY-SUBRC EQ 0.
*--- neu berechnen der Quotenmenge, da inzwischen evtl. weitere -------*
*--- updates aus den Belegen heraus stattgefunden haben         -------*
            NEQUP-QUMNG = EQUP-QUMNG - YEQUP-QUMNG + NEQUP-QUMNG.
            MOVE NEQUP TO EQUP.
            PERFORM EQUP_AENDERN.
         ENDIF.
      ENDIF.
   ENDIF.
ENDLOOP.

* Löschen Quotierungspos über Array-Delete
DESCRIBE TABLE DB_EQUP LINES SY-TFILL.
IF SY-TFILL GT 0.
   DELETE EQUP FROM TABLE DB_EQUP.
   IF SY-SUBRC NE 0.
      MESSAGE A809(ME) WITH 'EQUP'.
   ENDIF.
   REFRESH DB_EQUP.
ENDIF.
*
*
REFRESH: DB_EQUP.

*--- Loop über neue Daten --------------------------------------------*
LOOP AT NEQUP.
  IF NEQUP-KZ EQ 'I'.   "neupos Neue Saetze ---> Insert
*    MOVE NEQUP TO EQUP.
*    PERFORM EQUP_HINZUFUEGEN.
     MOVE NEQUP TO DB_EQUP.
     APPEND DB_EQUP.
  ENDIF.
ENDLOOP.

* Insert Quotierungspos über Array-Insert
DESCRIBE TABLE DB_EQUP LINES SY-TFILL.
IF SY-TFILL GT 0.
   INSERT EQUP FROM TABLE DB_EQUP. (直接插入数据)
   IF SY-SUBRC NE 0.
      MESSAGE A807(ME) WITH 'EQUP'.
   ENDIF.
   REFRESH DB_EQUP.
ENDIF.
*

ENDFUNCTION.

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gavin_gxh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值