SAP ABAP VL02N批次拆分BAPI BAPI_OUTB_DELIVERY_CHANGE BAPI_OUTB_DELIVERY_CONFIRM_DEC

BAPI:

BAPI_OUTB_DELIVERY_CHANGE

BAPI_OUTB_DELIVERY_CONFIRM_DEC

上述两个BAPI都能实现批次的拆分。

后者可以实现批次拆分并且过账。如只批次拆分后者直接扣减非限制库存,并且批次交货计划数量未增加,可能是系统版本限制。

如只做批次拆分,建议用前者 。

如若使用后者,需要更改 UPDATE LIKP SET VLSTK = SPACE*NOTES 1459993。否则不能删除批次和冲销 。

批次拆分:

FORM FRM_CHANGE_DELIVERY_NEW   TABLES   LT_ITEM_TAB STRUCTURE ZTMM0140B
                          USING    LS_HEAD_TAB TYPE ZTMM0140A .
  FIELD-SYMBOLS:
                <FS_ITEM> TYPE  ZTMM0140B .
  DATA:
    LS_HEADER_DATA    LIKE  BAPIOBDLVHDRCHG,
    LS_HEADER_CONTROL LIKE  BAPIOBDLVHDRCTRLCHG,
    LV_DELIVERY_NUMB  LIKE  BAPIOBDLVHDRCHG-DELIV_NUMB.
  DATA:LT_RETURN_TAB TYPE TABLE OF BAPIRET2,
       LW_RETURN_TAB TYPE  BAPIRET2.
  DATA:BEGIN OF TYP_RELATION ,
         TASKNO TYPE ZTMM0140B-TASKNO,
         TASKLN TYPE ZTMM0140B-TASKLN,
         ZINDEX TYPE ZTMM0140B-ZINDEX,
         ZDJBH  TYPE ZTMM0140B-ZDJBH,
         ZPOSN  TYPE ZTMM0140B-ZPOSN,
       END OF  TYP_RELATION.
  DATA:LT_RELATION LIKE TABLE OF TYP_RELATION,
       LS_RELATION LIKE TYP_RELATION.
  DATA:
    L_VBKOK  LIKE VBKOK,
    LT_PROTT LIKE PROTT OCCURS 0 WITH HEADER LINE,
    LV_WBSTK TYPE VBUK-WBSTK,
    LV_BOLNR TYPE VBKOK-BOLNR.
  DATA:
    LT_ITEM_DATA      LIKE TABLE OF   BAPIOBDLVITEMCHG,
    LW_ITEM_DATA      LIKE    BAPIOBDLVITEMCHG,
    LT_ITEM_SERIAL_NO LIKE TABLE OF BAPIDLVITMSERNO,
    LW_ITEM_SERIAL_NO LIKE  BAPIDLVITMSERNO,
    LT_ITEM_CONTROL   LIKE TABLE OF BAPIOBDLVITEMCTRLCHG,
    LW_ITEM_CONTROL   LIKE BAPIOBDLVITEMCTRLCHG.
  DATA:LV_CHARGE_POSNR TYPE LIPS-POSNR.
  DATA:LV_FLAG TYPE CHAR01.
  DATA:LV_MENGE TYPE LFIMG.
  DATA:LV_TOTAL_MENGE TYPE LFIMG.
  DATA:LT_LIPS_TAB TYPE TABLE OF LIPS,
       LS_LIPS_TAB TYPE LIPS.
  DATA:LV_MESSAGE     TYPE STRING,
       LV_ALL_MESSAGE TYPE STRING.

  DATA:LV_VBELN TYPE LIKP-VBELN .
  DATA:LT_VBPOK TYPE TABLE OF VBPOK,
       LS_VBPOK TYPE VBPOK.
  DATA:LT_NEW_LIPS TYPE TABLE OF  LIPS,
       LS_NEW_LIPS TYPE LIPS.

  DATA:LT_TEMP_TAB LIKE TABLE OF ZTMM0140B .
  DATA: LS_TEMP_TAB TYPE ZTMM0140B .
  DATA:LV_TABIX TYPE SY-TABIX .
  DATA:LT_DJBH TYPE TABLE OF ZTMM0140B,
       LS_DJBH TYPE ZTMM0140B.
  DATA:LS_TECH TYPE BAPIDLVCONTROL .
*销售出库业务 。
  CHECK LS_HEAD_TAB-TASKCS EQ 'XSCK' .
  LT_TEMP_TAB[] = LT_ITEM_TAB[] .
  LOOP AT LT_TEMP_TAB INTO LS_TEMP_TAB .
    LV_TABIX = SY-TABIX .
    READ TABLE GT_HEAD_TAB INTO GS_HEAD_TAB WITH KEY ZDJBH = LS_TEMP_TAB-ZDJBH ZDJTY = LS_TEMP_TAB-ZDJTY ZPOSN = LS_TEMP_TAB-ZPOSN .
    IF SY-SUBRC = 0 AND GS_HEAD_TAB-SPLIT = 'X'.
    ELSE .
      DELETE LT_TEMP_TAB INDEX LV_TABIX .
    ENDIF .
  ENDLOOP .
  CHECK LT_TEMP_TAB[] IS NOT INITIAL .
  IF LT_TEMP_TAB[] IS NOT INITIAL .
    SELECT
      *
      INTO CORRESPONDING FIELDS OF TABLE LT_LIPS_TAB
      FROM LIPS
      FOR ALL ENTRIES IN LT_TEMP_TAB
      WHERE VBELN EQ LT_TEMP_TAB-ZDJBH
      AND POSNR EQ LT_TEMP_TAB-ZPOSN .
    ENDIF .
*根据单据,单据行拆封外向交货单。
    LT_DJBH[] = LT_TEMP_TAB[] .
    SORT LT_DJBH BY ZDJBH .
    DELETE ADJACENT DUPLICATES FROM LT_DJBH COMPARING ZDJBH .
    LOOP AT LT_DJBH INTO LS_DJBH .
*进行批次拆分和回写动作。
      CLEAR:LT_RETURN_TAB[] ,LS_HEADER_DATA,LS_HEADER_CONTROL,LT_ITEM_DATA,
       LT_ITEM_CONTROL,LT_ITEM_SERIAL_NO ,LT_PROTT , LV_TOTAL_MENGE, LV_FLAG,LS_TECH .
*      LS_TECH-UPD_IND = 'U' .

      .
      LOOP AT LT_LIPS_TAB INTO LS_LIPS_TAB WHERE VBELN = LS_DJBH-ZDJBH  .
        SELECT
     MAX( DISTINCT POSNR )
     INTO LV_CHARGE_POSNR
     FROM LIPS
     WHERE VBELN EQ LS_DJBH-ZDJBH .
          IF  LV_CHARGE_POSNR LT 900001 .
            LV_CHARGE_POSNR = 900001  .
          ENDIF .
          CLEAR  LV_TOTAL_MENGE .
          LOOP AT LT_TEMP_TAB INTO LS_TEMP_TAB WHERE ZDJBH = LS_LIPS_TAB-VBELN AND ZPOSN EQ LS_LIPS_TAB-POSNR .
*批次拆分行项目信息
            LW_ITEM_DATA-DELIV_NUMB      = LS_TEMP_TAB-ZDJBH.  "外向交货单号
            LW_ITEM_DATA-DELIV_ITEM       = LV_CHARGE_POSNR.  "交货单行项目
            LW_ITEM_DATA-DLV_QTY            =  LS_TEMP_TAB-MENGE .
            LW_ITEM_DATA-MATERIAL           = LS_TEMP_TAB-MATNR.
            LW_ITEM_DATA-BATCH                 = LS_TEMP_TAB-CHARG."批次
            LW_ITEM_DATA-HIERARITEM       = LS_TEMP_TAB-ZPOSN.
            LW_ITEM_DATA-USEHIERITM       = '1'.  " 子项目批次拆分
            LW_ITEM_DATA-SALES_UNIT       = LS_TEMP_TAB-MEINS.
            SELECT
              SINGLE
              UMREZ
              UMREN
              INTO (LW_ITEM_DATA-FACT_UNIT_NOM,LW_ITEM_DATA-FACT_UNIT_DENOM)
              FROM
              MARM
              WHERE MATNR EQ  LS_TEMP_TAB-MATNR
              AND MEINH EQ    LS_TEMP_TAB-MEINS.
              IF SY-SUBRC = 0 .

              ELSE.
                LW_ITEM_DATA-FACT_UNIT_NOM    = '1'.  "此处应从MARM取转换关系
                LW_ITEM_DATA-FACT_UNIT_DENOM  = '1'."此处应从MARM取转换关系
              ENDIF.
              APPEND LW_ITEM_DATA TO LT_ITEM_DATA.
              CLEAR LW_ITEM_DATA.
*行项目控制
              LW_ITEM_CONTROL-DELIV_NUMB = LS_TEMP_TAB-ZDJBH.
              LW_ITEM_CONTROL-DELIV_ITEM = LV_CHARGE_POSNR.
              LW_ITEM_CONTROL-CHG_DELQTY = 'X'.
              APPEND LW_ITEM_CONTROL TO LT_ITEM_CONTROL.
              CLEAR LW_ITEM_CONTROL.

              LV_TOTAL_MENGE = LV_TOTAL_MENGE + LS_TEMP_TAB-MENGE .
*封装数据。
              LS_RELATION-TASKNO = LS_TEMP_TAB-TASKNO .
              LS_RELATION-TASKLN = LS_TEMP_TAB-TASKLN .
              LS_RELATION-ZINDEX = LS_TEMP_TAB-ZINDEX .
              LS_RELATION-ZDJBH = LS_TEMP_TAB-ZDJBH   .
              LS_RELATION-ZPOSN = LV_CHARGE_POSNR .
              APPEND LS_RELATION TO LT_RELATION .
              CLEAR LS_RELATION .
              LV_CHARGE_POSNR               = LV_CHARGE_POSNR + 1.        "批次拆分行项目
            ENDLOOP.
*原始行项目信息。
            LW_ITEM_DATA-DELIV_NUMB       = LS_LIPS_TAB-VBELN.  "外向交货单号
            LW_ITEM_DATA-DELIV_ITEM       = LS_LIPS_TAB-POSNR.  "交货单行项目
            LW_ITEM_DATA-DLV_QTY          = LS_LIPS_TAB-LFIMG - LV_TOTAL_MENGE ."  行项目数量 - 批次拆分数量
            LW_ITEM_DATA-MATERIAL         = LS_LIPS_TAB-MATNR.
            LW_ITEM_DATA-SALES_UNIT       = LS_LIPS_TAB-MEINS.
            LW_ITEM_DATA-FACT_UNIT_NOM    = '1'.  "此处应从MARM取转换关系
            LW_ITEM_DATA-FACT_UNIT_DENOM  = '1'."此处应从MARM取转换关系
            APPEND LW_ITEM_DATA TO LT_ITEM_DATA.
            CLEAR LW_ITEM_DATA.
*行项目控制
            LW_ITEM_CONTROL-DELIV_NUMB = LS_LIPS_TAB-VBELN.
            LW_ITEM_CONTROL-DELIV_ITEM = LS_LIPS_TAB-POSNR.
            LW_ITEM_CONTROL-CHG_DELQTY = 'X'.
            APPEND LW_ITEM_CONTROL TO LT_ITEM_CONTROL.
            CLEAR LW_ITEM_CONTROL.
          ENDLOOP.
*抬头信息
          LV_DELIVERY_NUMB = LS_DJBH-ZDJBH ..
*调用BAPI vl02n进行发货确认操作。
*准备抬头信息
          LV_DELIVERY_NUMB = LS_DJBH-ZDJBH .
          LS_HEADER_DATA-DELIV_NUMB = LS_DJBH-ZDJBH .
*抬头控制信息。
          LS_HEADER_CONTROL-DELIV_NUMB = LS_DJBH-ZDJBH .
*    LS_HEADER_CONTROL-POST_GI_FLG  = 'X'. "只做批次拆分。

          CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
            EXPORTING
              HEADER_DATA    = LS_HEADER_DATA
              HEADER_CONTROL = LS_HEADER_CONTROL
              DELIVERY       = LV_DELIVERY_NUMB
              TECHN_CONTROL  = LS_TECH
*             HEADER_DATA_SPL                  =
*             HEADER_CONTROL_SPL               =
            TABLES
*             HEADER_PARTNER =
*             HEADER_PARTNER_ADDR              =
*             HEADER_DEADLINES                 =
              ITEM_DATA      = LT_ITEM_DATA "行项目数据
              ITEM_CONTROL   = LT_ITEM_CONTROL
*             ITEM_CODING_BLOCK                =
              ITEM_SERIAL_NO = LT_ITEM_SERIAL_NO   "行项目序列号
*             SUPPLIER_CONS_DATA               =
*             HANDLING_UNIT_HEADER             =
*             HANDLING_UNIT_ITEM               =
*             HANDLING_UNIT_HEADER_EPC         =
*             HANDLING_UNIT_ITEMS_EPC          =
*             HANDLING_UNIT_SERNO              =
*             EXTENSION1     =
*             EXTENSION2     =
              RETURN         = LT_RETURN_TAB
*             TOKENREFERENCE =
*             HANDLING_UNIT_HEADER_CROSS       =
*             ITEM_DATA_SPL  =
*             HANDLING_UNIT_IDENTIFIERS        =
*             HANDLING_UNIT_ITEM_SPL           =
*             ITEM_DATA_DOCU_BATCH             =
*             NEW_ITEM_DATA  =
*             NEW_ITEM_DATA_SPL                =
*             NEW_ITEM_ORG   =
*             TEXT_HEADER    =
*             TEXT_LINES     =
*             NEW_ITEM_DATA_SKU                =
            .
          LOOP AT LT_RETURN_TAB INTO LW_RETURN_TAB WHERE TYPE CA 'EAX'.
            LV_FLAG = 'X'.
            CALL FUNCTION 'MESSAGE_TEXT_BUILD'
              EXPORTING
                MSGID               = LW_RETURN_TAB-ID
                MSGNR               = LW_RETURN_TAB-NUMBER
                MSGV1               = LW_RETURN_TAB-MESSAGE_V1
                MSGV2               = LW_RETURN_TAB-MESSAGE_V2
                MSGV3               = LW_RETURN_TAB-MESSAGE_V3
                MSGV4               = LW_RETURN_TAB-MESSAGE_V4
              IMPORTING
                MESSAGE_TEXT_OUTPUT = LV_MESSAGE.
            CONCATENATE LV_ALL_MESSAGE LV_MESSAGE INTO LV_ALL_MESSAGE.
          ENDLOOP.
          IF LV_FLAG EQ 'X'.
            CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
*      IMPORTING
*        RETURN        =
              .
            MESSAGE  LV_ALL_MESSAGE TYPE 'E' .
          ELSE.

COMMIT WORK AND WAIT .
*NOTES 1459993
*            UPDATE LIKP SET VLSTK = SPACE
*            WHERE VBELN =  LV_DELIVERY_NUMB .
          ENDIF .
        ENDLOOP .
        IF LV_FLAG IS INITIAL .
*
          LOOP AT LT_RELATION INTO LS_RELATION .
            READ TABLE LT_ITEM_TAB ASSIGNING <FS_ITEM>  WITH KEY TASKNO = LS_RELATION-TASKNO
                                                                TASKLN = LS_RELATION-TASKLN
                                                                ZINDEX = LS_RELATION-ZINDEX .
            IF SY-SUBRC = 0 .
              <FS_ITEM>-ZDJBH =  LS_RELATION-ZDJBH .
              <FS_ITEM>-ZPOSN = LS_RELATION-ZPOSN .
            ENDIF .
          ENDLOOP .
        ENDIF .
ENDFORM.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值