• 交货单寄售发货接口


    FUNCTION ZCRM0190_RFC.

    *"----------------------------------------------------------------------

    *"*"本地接口:

    *"  IMPORTING

    *"     VALUE(IM_VBLEN) TYPE  VBELN_VL OPTIONAL

    *"  EXPORTING

    *"     VALUE(MSG) TYPE  MSG

    *"     VALUE(STATUS) TYPE  CHAR1

    *"----------------------------------------------------------------------

      DATA:LS_VBELN TYPE LIPS-VBELN.

      DATA:IT_LIPS TYPE STANDARD TABLE OF LIPS,

           WA_LIPS TYPE LIPS.

      DATA:IT_MSKU TYPE STANDARD TABLE OF MSKU,

           WA_MSKU TYPE MSKU.

      DATA:LFIMG_SY    TYPE LFIMG, "剩余数量

           LS_KULAB_SY TYPE MSKU-KULAB, "非限制库存剩余

           LS_KUNNR    TYPE LIKP-KUNAG. "售达方

      "拣配

      DATA:IT_VBPOK TYPE STANDARD TABLE OF VBPOK,

           WA_VBPOK TYPE VBPOK,

           IT_PROTT TYPE STANDARD TABLE OF PROTT,

           WA_PROTT TYPE PROTT,

           WA_VBKOK TYPE VBKOK.

    *BAPI 使用定义

      "发货过账

      DATA: HEADER_DATA         TYPE BAPIOBDLVHDRCON,

            HEADER_CONTROL      TYPE BAPIOBDLVHDRCTRLCON,

            DELIVERY            TYPE BAPIOBDLVHDRCON-DELIV_NUMB,

            ITEM                TYPE STANDARD TABLE OF BAPIOBDLVITEMCON,

            WA_ITEM             TYPE BAPIOBDLVITEMCON,

            HEADER_DEADLINES    TYPE STANDARD TABLE OF BAPIDLVDEADLN,

            WA_HEADER_DEADLINES TYPE BAPIDLVDEADLN,

            RETURN              LIKE BAPIRET2  OCCURS  0  WITH  HEADER  LINE.

      "批次拆分

      DATA :LT_HEADER_DATA  LIKE BAPIOBDLVHDRCHG .

      DATA :LT_HEADER_CONTROL  LIKE BAPIOBDLVHDRCTRLCHG .

      DATA :I_DELIVERY_NO  LIKE BAPIOBDLVHDRCHG-DELIV_NUMB .

      DATA :DELIV_ITEM  LIKE BAPIOBDLVITEMCHG-DELIV_ITEM .

      DATA :TECHN_CONTROL  LIKE BAPIDLVCONTROL .

      DATA :ITEM_DATA  LIKE BAPIOBDLVITEMCHG  OCCURS  0  WITH  HEADER  LINE .

      DATA :ITEM_CONTROL  LIKE BAPIOBDLVITEMCTRLCHG  OCCURS  0  WITH  HEADER  LINE .

      DATA :ITEM_SERIAL_NO  LIKE BAPIDLVITMSERNO  OCCURS  0  WITH  HEADER  LINE .

      DATA: BATCH_FLAG TYPE C. "拆分批次成功标识

      DATA :STR  TYPE STRING .

      DATA:IM_KOSTK TYPE VBUK-KOSTK.   "拣配状态

      DATA:LFSTK_FLAG TYPE C.     "是否发货

    *交货单批次拆分

    *交货单拣配

    *交货单过账

      "初始交货单拆分行项目

      CLEAR DELIV_ITEM .

      DELIV_ITEM  =  '900000' .

      DATA IT_TIMES TYPE STRING.

      "参数补充前导0

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

        EXPORTING

          INPUT  = IM_VBLEN

        IMPORTING

          OUTPUT = LS_VBELN.

    *拣配状态

      SELECT SINGLE KOSTK INTO IM_KOSTK FROM VBUK WHERE VBELN = LS_VBELN.

      IF LFSTK_FLAG = 'C'.

        LFSTK_FLAG = 'S'.

      ELSE.

        "售达方

        SELECT SINGLE KUNAG INTO LS_KUNNR FROM LIKP WHERE VBELN = LS_VBELN.

    *客户寄售库存

        SELECT SINGLE WERKS INTO CORRESPONDING FIELDS OF WA_LIPS

           FROM LIPS WHERE VBELN = LS_VBELN.

        SELECT  A~MATNR A~WERKS A~CHARG A~KULAB A~KUNNR A~SOBKZ A~KUEIN

            INTO CORRESPONDING FIELDS OF TABLE IT_MSKU FROM MSKU AS A

            INNER JOIN MARA AS B ON A~MATNR = B~MATNR

            INNER JOIN MCHA AS C ON  A~MATNR = C~MATNR AND A~WERKS = C~WERKS AND

            A~CHARG = C~CHARG

            WHERE A~WERKS =  WA_LIPS-WERKS

            AND A~KUNNR = LS_KUNNR.

        CLEAR: WA_LIPS.

        SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_LIPS FROM LIPS

          WHERE LIPS~VBELN = LS_VBELN.

        LOOP AT IT_LIPS INTO WA_LIPS.

          LFIMG_SY = WA_LIPS-LFIMG.  "实际交货数量

          "批次拆分原行项目 数量修改

          ITEM_DATA-DELIV_NUMB = LS_VBELN.      "交货单

          ITEM_DATA-DELIV_ITEM = WA_LIPS-POSNR. "批次拆分前数量   '0010'

          ITEM_DATA-HIERARITEM = WA_LIPS-VGPOS. "销售订单行项目

          ITEM_DATA-USEHIERITM = '1'."使用层次项目

          ITEM_DATA-MATERIAL = WA_LIPS-MATNR.   "物料号

          ITEM_DATA-DLV_QTY = 0.                  "修改原交货单行项目 数量  ,过账清0

          ITEM_DATA-FACT_UNIT_NOM = 1.           "销售数量转换成SKU的分子(因子)

          ITEM_DATA-FACT_UNIT_DENOM = 1.         "销售数量转换为 SKU 的值(除数)

          APPEND ITEM_DATA.

          CLEAR ITEM_DATA.

          "交货单原行项目修改标识

          ITEM_CONTROL-DELIV_NUMB = LS_VBELN.

          ITEM_CONTROL-DELIV_ITEM =  WA_LIPS-POSNR.

          ITEM_CONTROL-CHG_DELQTY =  'X'."修改标识

          APPEND ITEM_CONTROL.

          CLEAR ITEM_CONTROL.

          "

          "拣配行项目

          WA_VBPOK-VBELN_VL  = LS_VBELN."交货单

          WA_VBPOK-POSNR_VL  = WA_LIPS-POSNR."交货单行项目

          WA_VBPOK-VBELN     = WA_LIPS-VGBEL."销售订单

          WA_VBPOK-POSNN     = WA_LIPS-VGPOS."销售订单行项目

          WA_VBPOK-MATNR     = WA_LIPS-MATNR.

          WA_VBPOK-CHARG     = WA_LIPS-CHARG. "批次

          WA_VBPOK-WERKS     = WA_LIPS-WERKS. "工厂

          WA_VBPOK-LFIMG     = WA_LIPS-LFIMG. "实际已交货量(按销售单位)

          WA_VBPOK-LGMNG     = WA_LIPS-LGMNG. "仓库保管交货量

          APPEND WA_VBPOK TO IT_VBPOK.

          CLEAR:WA_VBPOK .

    *

          LOOP AT IT_MSKU INTO WA_MSKU WHERE WERKS =  WA_LIPS-WERKS

            AND MATNR = WA_LIPS-MATNR AND KULAB <> 0.

            IF LFIMG_SY <> 0.

              "批次拆分行项目

              DELIV_ITEM  = DELIV_ITEM +  1 .

              ITEM_DATA-DELIV_NUMB  = LS_VBELN.

              ITEM_DATA-DELIV_ITEM  = DELIV_ITEM . "拆分批次后行项目 900001

              ITEM_DATA-HIERARITEM  = WA_LIPS-VGPOS. "'销售订单行项目

              ITEM_DATA-USEHIERITM  =  '1' .

              ITEM_DATA-MATERIAL    = WA_LIPS-MATNR. "物料

              ITEM_DATA-BATCH =     WA_MSKU-CHARG.  "批次

              ITEM_DATA-FACT_UNIT_NOM    =  1 .

              ITEM_DATA-FACT_UNIT_DENOM  =  1 .

              IF LFIMG_SY > WA_MSKU-KULAB.

                ITEM_DATA-DLV_QTY     = WA_MSKU-KULAB.

                LFIMG_SY = LFIMG_SY - WA_MSKU-KULAB. "剩余数量

            WA_MSKU-KULAB = 0.

              ELSEIF LFIMG_SY < WA_MSKU-KULAB.

                ITEM_DATA-DLV_QTY     = LFIMG_SY.

          WA_MSKU-KULAB = WA_MSKU-KULAB - LFIMG_SY.

       LFIMG_SY = 0 . "剩余数量

              ELSE.

                ITEM_DATA-DLV_QTY     = WA_MSKU-KULAB.

                LFIMG_SY = 0.

                WA_MSKU-KULAB = 0.

              ENDIF.

              MODIFY IT_MSKU FROM    WA_MSKU. "更新客户库存 去除已使用的库存

              ITEM_CONTROL-DELIV_NUMB  = LS_VBELN.

              ITEM_CONTROL-DELIV_ITEM  =  DELIV_ITEM.

              ITEM_CONTROL-CHG_DELQTY  =  'X' . "交货单数量修改标识

              APPEND ITEM_CONTROL .

              CLEAR ITEM_CONTROL.

              "拣配行项目

              WA_VBPOK-VBELN_VL  = LS_VBELN.

              WA_VBPOK-POSNR_VL  = DELIV_ITEM.

              WA_VBPOK-VBELN     = WA_LIPS-VGBEL.

              WA_VBPOK-POSNN     = WA_LIPS-VGPOS.

              WA_VBPOK-MATNR     = WA_LIPS-MATNR.

              WA_VBPOK-CHARG     = WA_LIPS-CHARG.

              WA_VBPOK-WERKS     = WA_LIPS-WERKS.

              WA_VBPOK-LFIMG     = ITEM_DATA-DLV_QTY .

              WA_VBPOK-LGMNG     = ITEM_DATA-DLV_QTY .

              APPEND WA_VBPOK TO IT_VBPOK.

              APPEND ITEM_DATA .

              CLEAR:ITEM_DATA .

              CLEAR:WA_MSKU,WA_ITEM,WA_VBPOK.

            ELSE.

              EXIT.

            ENDIF.

          ENDLOOP.

          IF LFIMG_SY <> 0 .

            STATUS = 'E'.

            MSG = '非限制库存不满足实际交货数量!'.

            RETURN.

          ENDIF.

          CLEAR:WA_LIPS.

        ENDLOOP.

        IF STATUS NE 'E'.

    *拆分批次

          I_DELIVERY_NO = LS_VBELN.

          LT_HEADER_DATA-DELIV_NUMB     =  LS_VBELN.

          TECHN_CONTROL-UPD_IND      =  'U' .

          LT_HEADER_CONTROL-DELIV_NUMB  =  LS_VBELN.

          CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'

            EXPORTING

              HEADER_DATA    = LT_HEADER_DATA

              HEADER_CONTROL = LT_HEADER_CONTROL

              DELIVERY       = I_DELIVERY_NO

              TECHN_CONTROL  = TECHN_CONTROL

            TABLES

              ITEM_DATA      = ITEM_DATA

              ITEM_CONTROL   = ITEM_CONTROL

              RETURN         = RETURN.

          READ  TABLE  RETURN  WITH  KEY  TYPE  =  'E' .

          IF SY-SUBRC  NE  0 .

            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

              EXPORTING

                WAIT = 'X'.

            MSG = '批次拆分成功'.

    *拣配

            CLEAR:WA_VBKOK.

            WA_VBKOK-VBELN_VL =  LS_VBELN.

            CALL FUNCTION 'SD_DELIVERY_UPDATE_PICKING'

              EXPORTING

                VBKOK_WA               = WA_VBKOK

                SYNCHRON               = 'X'

                IF_ERROR_MESSAGES_SEND = ''

              TABLES

                VBPOK_TAB              = IT_VBPOK

                PROT                   = IT_PROTT.

            READ  TABLE IT_PROTT  INTO WA_PROTT  WITH  KEY MSGTY  =  'E' .

            IF SY-SUBRC     NE  0 .

              STR = '拣配成功'.

              CONCATENATE MSG '/' STR INTO MSG.

              CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

                EXPORTING

                  WAIT = 'X'.

              LFSTK_FLAG = 'S'.

            ELSE.

              LOOP  AT IT_PROTT   INTO WA_PROTT   WHERE MSGTY  CA   'AE'  .

                CALL FUNCTION 'MESSAGE_TEXT_BUILD'

                  EXPORTING

                    MSGID               = WA_PROTT-MSGID

                    MSGNR               = WA_PROTT-MSGNO

                    MSGV1               = WA_PROTT-MSGV1

                    MSGV2               = WA_PROTT-MSGV2

                    MSGV3               = WA_PROTT-MSGV3

                    MSGV4               = WA_PROTT-MSGV4

                  IMPORTING

                    MESSAGE_TEXT_OUTPUT = STR.

                IF MSG  IS  INITIAL  .

                  MOVE STR  TO MSG .

                ELSE.

                  CONCATENATE MSG  '/' STR  INTO MSG  .

                ENDIF  .

              ENDLOOP  .

              STATUS = 'E'.

            ENDIF.

          ELSE.

            STATUS = 'E'.

            MSG = '交货单拆分批次失败'.

          ENDIF.

        ENDIF.

      ENDIF.

      "过账发货

      IF LFSTK_FLAG = 'S'..

        "抬头

        HEADER_DATA-DELIV_NUMB = LS_VBELN.       "交货单号

        HEADER_CONTROL-DELIV_NUMB = LS_VBELN.    "交货单号

        HEADER_CONTROL-POST_GI_FLG = 'X'.   "过账状态

        "DELIVERY = LS_VBELN.                     "交货单号

        CLEAR: RETURN[].

        CALL FUNCTION 'BAPI_OUTB_DELIVERY_CONFIRM_DEC'

          EXPORTING

            HEADER_DATA    = HEADER_DATA

            HEADER_CONTROL = HEADER_CONTROL

            DELIVERY       = LS_VBELN

          TABLES

            RETURN         = RETURN.

        READ  TABLE  RETURN  WITH  KEY  TYPE  =  'E' .

        IF SY-SUBRC     NE  0 .

          STATUS =  'S'.

          STR = '发货成功'.

          CONCATENATE MSG '/' STR INTO MSG.

          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

            EXPORTING

              WAIT = 'X'.

        ELSE.

          STATUS = RETURN-TYPE .

          CALL FUNCTION 'MESSAGE_TEXT_BUILD'

            EXPORTING

              MSGID               = RETURN-ID

              MSGNR               = RETURN-NUMBER

              MSGV1               = RETURN-MESSAGE_V1

              MSGV2               = RETURN-MESSAGE_V2

              MSGV3               = RETURN-MESSAGE_V3

              MSGV4               = RETURN-MESSAGE_V4

            IMPORTING

              MESSAGE_TEXT_OUTPUT = STR.

          CONCATENATE MSG '/' STR INTO MSG.

        ENDIF.

      ENDIF.

    ENDFUNCTION.

  • 相关阅读:
    第11组(73) 需求分析报告
    第11组(73)团队展示
    结对编程作业
    第02组 Alpha冲刺 总结
    第02组 Alpha冲刺 (6/6)
    第02组 Alpha冲刺 (5/6)
    第02组 Alpha冲刺 (4/6)
    第02组 Alpha冲刺 (3/6)
    第02组 Alpha冲刺 (2/6)
    第02组 Alpha冲刺 (1/6)
  • 原文地址:https://www.cnblogs.com/liu1838998131/p/13801951.html
Copyright © 2020-2023  润新知