面辅料入库暂收BAPI(MIGO过账的BAPI BAPI_GOODSMVT_CREATE)

*&---------------------------------------------------------------------*
*& Form BAPI_GOODSMVT_CREATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM BAPI_GOODSMVT_CREATE .

***********gmcode-gm_code取值含义*******
********01     MB01
********02     MB31
********03     MB1A
********04     MB1B
********05     MB1C
********06     MB11
********07     MB04
  DATA:LT_GOODSMVT_HEADER        LIKE TABLE OF BAPI2017_GM_HEAD_01,
       LS_GOODSMVT_HEADER       LIKE LINE OF LT_GOODSMVT_HEADER,
       LT_GOODSMVT_CODE          LIKE TABLE OF BAPI2017_GM_CODE,
       LS_GOODSMVT_CODE         LIKE LINE OF LT_GOODSMVT_CODE,
       LT_TESTRUN                LIKE TABLE OF BAPI2017_GM_GEN-TESTRUN,
       LS_TESTRUN               LIKE LINE OF LT_TESTRUN,
       LT_GOODSMVT_ITEM          TYPE TABLE OF BAPI2017_GM_ITEM_CREATE,
       LS_GOODSMVT_ITEM         TYPE BAPI2017_GM_ITEM_CREATE,
       LT_GOODSMVT_SERIALNUMBER  LIKE TABLE OF BAPI2017_GM_SERIALNUMBER,
       LS_GOODSMVT_SERIALNUMBER LIKE LINE OF LT_GOODSMVT_SERIALNUMBER,
       LT_RETURN                TYPE TABLE OF BAPIRET2,
       LS_RETURN                LIKE LINE OF LT_RETURN.
  "输出参数
  DATA:LT_GOODSMVT_HEADRET TYPE BAPI2017_GM_HEAD_RET,
*       LS_GOODSMVT_HEADRET LIKE LINE OF LT_GOODSMVT_HEADRET,
       L_MATERIALDOCUMENT  TYPE BAPI2017_GM_HEAD_RET-MAT_DOC,
       L_MATDOCUMENTYEAR   TYPE BAPI2017_GM_HEAD_RET-DOC_YEAR.


  DATA:LT_OUTPUT_FOR_BAPI TYPE TABLE OF TY_OUTPUT.
  LOOP AT GT_OUTPUT ASSIGNING FIELD-SYMBOL(<FW_ALV>) WHERE SLBOX EQ 'X'..
    APPEND <FW_ALV> TO LT_OUTPUT_FOR_BAPI.
  ENDLOOP.

  SORT LT_OUTPUT_FOR_BAPI BY EBELN.
  "按采购订单来生成BAPI,一条采购订单抬头(包括所有的行项目)生成一张凭证
  LOOP AT LT_OUTPUT_FOR_BAPI  ASSIGNING FIELD-SYMBOL(<FW_BAPI>) WHERE SLBOX EQ 'X'.

    AT NEW EBELN.

      "HEAD
      LS_GOODSMVT_HEADER-PSTNG_DATE   = P_BUDAT.
      LS_GOODSMVT_HEADER-DOC_DATE     = P_BLDAT.
      LS_GOODSMVT_HEADER-PR_UNAME     = SY-UNAME.
*        LS_GOODSMVT_HEADER-HEADER_TXT   = <FW_BAPI>-BKTXT.
      APPEND LS_GOODSMVT_HEADER TO LT_GOODSMVT_HEADER.

      LS_GOODSMVT_CODE-GM_CODE = '01'.
    ENDAT.

    "ITEM

    LS_GOODSMVT_ITEM-MATERIAL_EXTERNAL  = <FW_BAPI>-MATNR.

    LS_GOODSMVT_ITEM-PLANT     = <FW_BAPI>-WERKS.
    LS_GOODSMVT_ITEM-MOVE_TYPE = '103'.
    LS_GOODSMVT_ITEM-MVT_IND = 'B'.
    LS_GOODSMVT_ITEM-ENTRY_QNT = <FW_BAPI>-MENGE_BCZSSL.
    LS_GOODSMVT_ITEM-UNLOAD_PT = <FW_BAPI>-LGORT."ADD BY HANDLH 2018.5.23
    CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
      EXPORTING
        INPUT          = <FW_BAPI>-MEINS
*       LANGUAGE       = SY-LANGU
      IMPORTING
        OUTPUT         = LS_GOODSMVT_ITEM-ENTRY_UOM
      EXCEPTIONS
        UNIT_NOT_FOUND = 1
        OTHERS         = 2.
    IF SY-SUBRC <> 0.
* Implement suitable error handling here
    ENDIF.

*       LS_GOODSMVT_ITEM-STGE_LOC  = <FW_BAPI>-LGORT.
    LS_GOODSMVT_ITEM-PO_NUMBER = <FW_BAPI>-EBELN.
    LS_GOODSMVT_ITEM-PO_ITEM   = <FW_BAPI>-EBELP.
    DATA:
          GV_SGTXT TYPE  BAPI2017_GM_ITEM_CREATE-ITEM_TEXT.
    CLEAR GV_SGTXT.
    GV_SGTXT = <FW_BAPI>-BKTXT.
    LS_GOODSMVT_ITEM-ITEM_TEXT  = GV_SGTXT.
*       LS_GOODSMVT_ITEM-stck_type = 'X'."
    APPEND LS_GOODSMVT_ITEM TO LT_GOODSMVT_ITEM.
    CLEAR:LS_GOODSMVT_ITEM.



    AT END OF EBELN.

      CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
        EXPORTING
          GOODSMVT_HEADER  = LS_GOODSMVT_HEADER
          GOODSMVT_CODE    = LS_GOODSMVT_CODE
*         TESTRUN          = ' '
*         GOODSMVT_REF_EWM =
        IMPORTING
          GOODSMVT_HEADRET = LT_GOODSMVT_HEADRET
          MATERIALDOCUMENT = L_MATERIALDOCUMENT
          MATDOCUMENTYEAR  = L_MATDOCUMENTYEAR
        TABLES
          GOODSMVT_ITEM    = LT_GOODSMVT_ITEM
*         GOODSMVT_SERIALNUMBER         = LT_GOODSMVT_SERIALNUMBER
          RETURN           = LT_RETURN
*         GOODSMVT_SERV_PART_DATA       =
*         EXTENSIONIN      =
        .
      READ TABLE LT_RETURN INTO LS_RETURN WITH KEY TYPE = 'E'.
      IF SY-SUBRC = 0."说明有错误
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

        LOOP AT GT_OUTPUT ASSIGNING <FW_ALV> WHERE EBELN = <FW_BAPI>-EBELN AND SLBOX EQ 'X'.
          MOVE GC_LIGHT_R TO <FW_ALV>-STATUS."红灯
          MOVE LS_RETURN-MESSAGE TO <FW_ALV>-MESSAGE."错误消息
        ENDLOOP.

      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            WAIT = 'X'.

        LOOP AT GT_OUTPUT ASSIGNING <FW_ALV> WHERE EBELN = <FW_BAPI>-EBELN AND SLBOX EQ 'X'.
          MOVE GC_LIGHT_G TO <FW_ALV>-STATUS."绿灯
          MOVE L_MATERIALDOCUMENT TO <FW_ALV>-MBLNR."绿灯
          MOVE '过账成功' TO <FW_ALV>-MESSAGE."错误消息
        ENDLOOP.
      ENDIF.



      CLEAR:LT_GOODSMVT_HEADER,
            LT_GOODSMVT_CODE,
            LT_TESTRUN,
            LT_GOODSMVT_ITEM,
            LT_GOODSMVT_SERIALNUMBER,
            LT_RETURN,
            LT_GOODSMVT_HEADRET,
            L_MATERIALDOCUMENT,
            L_MATDOCUMENTYEAR.
    ENDAT.

  ENDLOOP.

  PERFORM REFRESH_ALV.
ENDFORM.

posted @   linhuang  阅读(11)  评论(0编辑  收藏  举报  
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示