sap批量創建盤點憑證以及盤點憑證過賬

業務場景:wms傳入單號到sapsap通過bapi生成盤點憑證並過賬(實際業務是由財務過賬,這裏只說明技術)

前臺一步輸入物料號和盤點數量生成盤點憑證,在進行過賬,(2步),sap是先生成盤點憑證,再輸入數據最後差異過賬(3步)

注意:bapi創建盤點憑證 :BAPI_MATPHYSINV_CREATE_MULT

                             盤點數量:BAPI_MATPHYSINV_COUNT(一定要記得傳入item行號)

                             差異過賬:BAPI_MATPHYSINV_POSTDIFF(傳入行號item

*&---------------------------------------------------------------------*

*&      Form  CREATE_WSCODE

*&---------------------------------------------------------------------*

*        在這裏創鍵盤點憑證。

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM FRM_CREATE_WSCODE  TABLES  GT_ALL STRUCTURE GS_ALL

                            T_RETURN STRUCTURE ZSMM0005

                             CHANGING E_RTYPE E_RTMSG.

  LOOP AT GT_ALL INTO GS_ALL.

    GS_DATA2 = GS_ALL.

    APPEND GS_DATA2 TO GT_DATA2.

  ENDLOOP.

  DELETE ADJACENT DUPLICATES FROM GT_DATA2 COMPARING WMSORD."刪除重複項

*IF SY-SUBRC = 0.

  LOOP AT GT_DATA2 INTO GS_DATA2.

    CLEAR: GS_HEAD_MUTT,

           GS_ITEMS_MUTT,

           GS_ITEMS_COUNT,

           GS_ITEMS_POSTDIFF,

           GS_RETURN.

    CLEAR: GT_ITEMS_MUTT[],

           GT_ITEMS_COUNT[],

           GT_ITEMS_POSTDIFF[].

    GV_INDEX2 = 0.

    LOOP AT GT_ALL INTO GS_ALL WHERE WMSORD = GS_DATA2-WMSORD .

      GV_INDEX2 = GV_INDEX2 + 1.

*          -----------------------------

* 把同樣的訂單號對應的數據傳入到一個表中,然後統一處理一個倉庫中的所有物料號生成一個盤點憑證

* 處理wms傳進來的盤點單號

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

        EXPORTING

          INPUT  = GS_ALL-WMSORD

        IMPORTING

          OUTPUT = GS_ALL-WMSORD.

      GV_INDOC = GS_ALL-WMSORD."wms盤點單號

*根據物料號獲取對應單位

      READ TABLE GT_ALL INTO GS_ALL WITH  KEY MATNR = GS_ALL-MATNR.

      SELECT MEINS

        INTO TABLE GT_DETAIL

        FROM MARA

        WHERE MATNR = GS_ALL-MATNR.

      CLEAR GS_DETAIL.

      LOOP AT GT_DETAIL INTO GS_DETAIL.

“內外碼轉換”

        CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'

          EXPORTING

            INPUT          = GS_DETAIL-MEINS

          IMPORTING

            OUTPUT         = GS_DETAIL-MEINS

          EXCEPTIONS

            UNIT_NOT_FOUND = 1

            OTHERS         = 2.

 

      ENDLOOP.

 

*      獲取年度

      GV_YEAR    = GS_ALL-BLDAT+0(4).

*      head

      GS_HEAD_MUTT-PLANT            = GS_ALL-WERKS. "工廠

      GS_HEAD_MUTT-STGE_LOC         = GS_ALL-LGORT. "庫存地點

      GS_HEAD_MUTT-SPEC_STOCK       = GS_ALL-SOBKZ. "特殊庫存標識

      GS_HEAD_MUTT-DOC_DATE         = GS_ALL-BLDAT.    "系統時間"T_DATA-BLDAT. "憑證中的憑證日期

      GS_HEAD_MUTT-PLAN_DATE        = GS_ALL-ZLDAT. "存貨盤點的計劃日期

      GS_HEAD_MUTT-PHYS_INV_REF     = GS_ALL-WMSORD.     "wms盤點單號

 

*       items

      CLEAR GS_ITEMS_MUTT.

      GS_ITEMS_MUTT-MATERIAL_LONG   = GS_ALL-MATNR. "物料編號(18)

      GS_ITEMS_MUTT-BATCH           = GS_ALL-CHARG. "批號

      APPEND  GS_ITEMS_MUTT TO GT_ITEMS_MUTT.

**      count

      CLEAR GS_ITEMS_COUNT.

      GS_ITEMS_COUNT-ENTRY_QNT       = GS_ALL-ERFMG. "以錄入項單位表示的數量

      GS_ITEMS_COUNT-ENTRY_UOM       = GS_DETAIL-MEINS. "單位

      GS_ITEMS_COUNT-MATERIAL_LONG   = GS_ALL-MATNR. "物料編號(18)

      GS_ITEMS_COUNT-BATCH           = GS_ALL-CHARG. "批號

      GS_ITEMS_COUNT-ITEM            = GV_INDEX2.

      APPEND  GS_ITEMS_COUNT TO GT_ITEMS_COUNT.

*      差異過賬

      CLEAR GS_ITEMS_POSTDIFF.

      GS_ITEMS_POSTDIFF-MATERIAL_LONG   = GS_ALL-MATNR. "物料編號(18)

      GS_ITEMS_POSTDIFF-BATCH           = GS_ALL-CHARG. "批號

      GS_ITEMS_POSTDIFF-ITEM            = GV_INDEX2.

      APPEND   GS_ITEMS_POSTDIFF TO GT_ITEMS_POSTDIFF.

**---------------------更新序列號--------------------------------------------------*

      MODIFY GT_ALL  INDEX GV_INDEX2.

      CLEAR:GS_ALL.

    ENDLOOP.

**----------------------------------創建盤點憑證------------------------*

    CALL FUNCTION 'BAPI_MATPHYSINV_CREATE_MULT'

      EXPORTING

        HEAD   = GS_HEAD_MUTT

      TABLES

        ITEMS  = GT_ITEMS_MUTT

        RETURN = GT_RETURN.

    CLEAR GS_RETURN.

    IF GT_RETURN IS  NOT INITIAL.

      READ TABLE GT_RETURN INTO GS_RETURN WITH KEY TYPE = 'S' ID = 'M7' NUMBER = '710'.

      IF SY-SUBRC <> 0.

 

        READ TABLE GT_RETURN INTO GS_RETURN WITH KEY TYPE = 'E' .

        T_RETURN-MTYPE = 'E'.

        T_RETURN-MBLNR = GS_RETURN-MESSAGE_V3 .

        T_RETURN-MTMSG = '該盤點憑證還未過賬,請先過賬或者刪除,刪除時需傳入LSTATX,同時輸入新的數據可創建新的盤點憑證'.

        APPEND T_RETURN.

      ELSE.

        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

          EXPORTING

            WAIT = ABAP_TRUE.

        GV_OUTDOC      = GS_RETURN-MESSAGE_V1."獲取bapi產生的盤點憑證

"內外碼轉換

        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

          EXPORTING

            INPUT  = GV_OUTDOC

          IMPORTING

            OUTPUT = GV_OUTDOC.

        T_RETURN-MTYPE  = 'S'.

        T_RETURN-WMSORD = GS_RETURN-MESSAGE_V1.

        T_RETURN-MBLNR  = GV_YEAR.

        T_RETURN-MTMSG  = GS_RETURN-MESSAGE.

        E_RTYPE = 'S'.

        E_RTMSG = GS_RETURN-MESSAGE.

        APPEND T_RETURN.

        CLEAR GS_RETURN.

      ENDIF.

    ELSE.

      E_RTYPE = 'E'.

      E_RTMSG = TEXT-002.

      RETURN.

    ENDIF.

****count-------

    IF SY-SUBRC = 0.

      CALL FUNCTION 'BAPI_MATPHYSINV_COUNT'

        EXPORTING

          PHYSINVENTORY = GV_OUTDOC

          FISCALYEAR    = GV_YEAR

        TABLES

          ITEMS         = GT_ITEMS_COUNT

          RETURN        = GT_RETURN.

      CLEAR GS_RETURN.

      IF GT_RETURN IS  NOT INITIAL.

        READ TABLE GT_RETURN INTO GS_RETURN WITH KEY TYPE = 'S' ID = 'M7' NUMBER = '713'.

        IF SY-SUBRC = 0.

 

          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

            EXPORTING

              WAIT = ABAP_TRUE.

          T_RETURN-MTYPE  = 'S'.

          T_RETURN-WMSORD = GS_RETURN-MESSAGE_V1.

          T_RETURN-MBLNR  = GV_YEAR.

          T_RETURN-MTMSG  = GS_RETURN-MESSAGE.

          APPEND T_RETURN.

          CLEAR GS_RETURN.

        ENDIF.

      ENDIF.

    ENDIF.

****----------------------差異過賬-------------------------------------*

*    IF SY-SUBRC = 0.

*      CALL FUNCTION 'BAPI_MATPHYSINV_POSTDIFF'

*        EXPORTING

*          PHYSINVENTORY = GV_OUTDOC

*          FISCALYEAR    = GV_YEAR

*        TABLES

*          ITEMS         = GT_ITEMS_POSTDIFF

*          RETURN        = GT_RETURN.

*      IF GT_RETURN IS  NOT INITIAL.

*        LOOP AT GT_RETURN INTO GS_RETURN WHERE TYPE = 'S' AND ID ='M7' AND NUMBER = '716' OR NUMBER = '715'.

*          IF SY-SUBRC <> 0.

*            T_RETURN-MTYPE = 'E'.

*            T_RETURN-MTMSG = GS_RETURN-MESSAGE.

*            E_RTYPE = 'E'.

*            E_RTMSG = GS_RETURN-MESSAGE.

*          ELSE.

*            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

*              EXPORTING

*                WAIT = ABAP_TRUE.

*            T_RETURN-MTYPE  = 'S'.

*            T_RETURN-WMSORD = GS_RETURN-MESSAGE_V1.

*            T_RETURN-MBLNR  = GS_RETURN-MESSAGE_V2.

*            T_RETURN-MTMSG  = GS_RETURN-MESSAGE.

*            E_RTYPE = 'S'.

*            E_RTMSG = GS_RETURN-MESSAGE.

*            APPEND T_RETURN.

*          ENDIF.

*        ENDLOOP.

**        READ TABLE GT_RETURN INTO GS_RETURN WITH KEY TYPE = 'S' ID = 'M7' NUMBER = '716'.

**        IF SY-SUBRC <> 0.

**          T_RETURN-MTYPE = 'E'.

**          T_RETURN-MTMSG = GS_RETURN-MESSAGE.

**          E_RTYPE = 'E'.

**          E_RTMSG = GS_RETURN-MESSAGE.

**        ELSE.

**          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

**            EXPORTING

**              WAIT = ABAP_TRUE.

**          T_RETURN-MTYPE  = 'S'.

**          T_RETURN-WMSORD = GS_RETURN-MESSAGE_V1.

**          T_RETURN-MBLNR  = GS_RETURN-MESSAGE_V2.

**          T_RETURN-MTMSG  = GS_RETURN-MESSAGE.

**          E_RTYPE = 'S'.

**          E_RTMSG = GS_RETURN-MESSAGE.

**          APPEND T_RETURN.

**        ENDIF.

*      ENDIF.

*    ENDIF.

    CLEAR:GS_ALL,GS_DATA2.

  ENDLOOP.

  CLEAR:GT_ALL,GS_ALL,GT_DATA2,GS_DATA2.

ENDFORM.

                    <li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#csdnc-thumbsup"></use>
                    </svg><span class="name">點贊</span>
                    <span class="count"></span>
                    </a></li>
                    <li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;popu_824&quot;}"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-csdnc-Collection-G"></use>
                    </svg><span class="name">收藏</span></a></li>
                    <li class="tool-item tool-active is-share"><a href="javascript:;"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-csdnc-fenxiang"></use>
                    </svg>分享</a></li>
                    <!--打賞開始-->
                                            <!--打賞結束-->
                                            <li class="tool-item tool-more">
                        <a>
                        <svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
                        </a>
                        <ul class="more-box">
                            <li class="item"><a class="article-report">文章舉報</a></li>
                        </ul>
                    </li>
                                        </ul>
            </div>
                        </div>
        <div class="person-messagebox">
            <div class="left-message"><a href="https://blog.csdn.net/xiaoxiaoanhong" target="_blank">
                <img src="https://profile.csdnimg.cn/2/C/B/3_xiaoxiaoanhong" class="avatar_pic" username="xiaoxiaoanhong">
                                        <img src="https://g.csdnimg.cn/static/user-reg-year/2x/5.png" class="user-years">
                                </a></div>
            <div class="middle-message">
                                    <div class="title"><span class="tit"><a href="https://blog.csdn.net/xiaoxiaoanhong" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}" target="_blank">TLucky</a></span>
                                        </div>
                <div class="text"><span>發佈了15 篇原創文章</span> · <span>獲贊 3</span> · <span>訪問量 1萬+</span></div>
            </div>
                            <div class="right-message">
                                        <a href="https://im.csdn.net/im/main.html?userName=xiaoxiaoanhong" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信
                    </a>
                                                        <a class="btn btn-sm  bt-button personal-watch" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}">關注</a>
                                </div>
                        </div>
                </div>
發佈了32 篇原創文章 · 獲贊 35 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章