SAP SD VL02N 交货单拣配数量 WS_DELIVERY_UPDATE 交货单过账 BAPI_OUTB_DELIVERY_CONFIRM_DEC

18 篇文章 1 订阅

 本人诚心接ABAP远程开发任务,价格公道,有需要的联系我,欢迎个人,甲方爸爸,乙方私信联系。 

SD VL02N时如果要交货过账,之前需要先拣配数量。操作就是前台输入一个拣配数量,然后保存

代码如下

  DATA: LS_VBKOK        TYPE VBKOK.
  DATA: LT_VBKOK        TYPE STANDARD TABLE OF VBKOK.
  DATA: LT_PROTT        TYPE STANDARD TABLE OF PROTT.
  DATA: LS_PROTT        TYPE PROTT.
  DATA: LT_VBPOK        TYPE STANDARD TABLE OF VBPOK.
  DATA: LS_VBPOK        TYPE VBPOK.
  DATA: LV_MESSAGE      TYPE STRING.
  DATA: LV_ALL_MESSAGE  TYPE STRING.
  DATA: LV_FLAG         TYPE CHAR01.

LOOP AT LT_SEL INTO LS_SEL  .
    LS_VBKOK-VBELN_VL = LS_SEL-VBELN_VL.
    LS_VBKOK-KOMUE    = 'X'.      "交货数量 = 捡配数量
    LS_VBKOK-KZKODAT  = 'X'.      "Picking date 
    LS_VBKOK-KODAT    = SY-DATUM. "Picking date 



    LOOP AT GT_DATA INTO GS_DATA WHERE BOX IS NOT INITIAL AND VBELN_VL = LS_SEL-VBELN_VL .
      CLEAR:LS_VBPOK,LV_FLAG,LV_MESSAGE,LV_ALL_MESSAGE,LT_PROTT.
      LS_VBPOK-VBELN_VL  = GS_DATA-VBELN_VL.
      LS_VBPOK-POSNR_VL  = GS_DATA-POSNR_VL.
      LS_VBPOK-VBELN     = GS_DATA-VBELN_VA.  
      LS_VBPOK-POSNN     = GS_DATA-POSNR_VA.  

      LS_VBPOK-PIKMG     = GS_DATA-PIKMG.
      LS_VBPOK-VRKME     = GS_DATA-MEINS.

      APPEND LS_VBPOK TO LT_VBPOK.

    ENDLOOP.

    CALL FUNCTION 'WS_DELIVERY_UPDATE'
      EXPORTING
          VBKOK_WA       = LS_VBKOK
*      COMMIT         = CON
          DELIVERY       = LS_SEL-VBELN_VL
          UPDATE_PICKING = 'X'
          SYNCHRON       = 'X'
*      if_database_update = 'X'         "L.S Commentd out
          NICHT_SPERREN   = 'X'         "L.S Inserted
        TABLES
          VBPOK_TAB      = LT_VBPOK
          PROT           = LT_PROTT
        EXCEPTIONS
          ERROR_MESSAGE  = 1
          OTHERS         = 2 .
    IF SY-SUBRC   = 0 .
      LOOP AT LT_PROTT INTO LS_PROTT WHERE MSGTY CA 'EAX'.
        CALL FUNCTION 'MESSAGE_TEXT_BUILD'
          EXPORTING
            MSGID               = LS_PROTT-MSGID
            MSGNR               = LS_PROTT-MSGNO
            MSGV1               = LS_PROTT-MSGV1
            MSGV2               = LS_PROTT-MSGV2
            MSGV3               = LS_PROTT-MSGV3
            MSGV4               = LS_PROTT-MSGV4
          IMPORTING
            MESSAGE_TEXT_OUTPUT = LV_MESSAGE.

        CONCATENATE  LV_ALL_MESSAGE LV_MESSAGE  INTO  LV_ALL_MESSAGE .
        LV_MESSAGE = LV_ALL_MESSAGE.
        LV_FLAG = 'X' .
        CLEAR LS_PROTT.
      ENDLOOP.
    ELSE.
      CLEAR LV_MESSAGE.
      CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          MSGID               = SY-MSGID
          MSGNR               = SY-MSGNO
          MSGV1               = SY-MSGV1
          MSGV2               = SY-MSGV2
          MSGV3               = SY-MSGV3
          MSGV4               = SY-MSGV4
        IMPORTING
          MESSAGE_TEXT_OUTPUT = LV_ALL_MESSAGE.
      LV_MESSAGE = LV_ALL_MESSAGE.
      LV_FLAG = 'X' .
    ENDIF .

    IF LV_FLAG IS  INITIAL .
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          WAIT = 'X'.

      LOOP AT GT_DATA INTO GS_DATA WHERE BOX IS NOT INITIAL AND  VBELN_VL = LS_SEL-VBELN_VL .
        GS_DATA-ICONS = ICON_GREEN_LIGHT.

        MODIFY GT_DATA FROM GS_DATA.
      ENDLOOP.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

      LOOP AT GT_DATA INTO GS_DATA WHERE BOX IS NOT INITIAL AND  VBELN_VL = LS_SEL-VBELN_VL .
        GS_DATA-ICONS = ICON_RED_LIGHT.
        GS_DATA-MESSAGE = LV_ALL_MESSAGE.
        MODIFY GT_DATA FROM GS_DATA.
      ENDLOOP.

    ENDIF.
  ENDLOOP.

拣配过之后,交货单可以过账,生成物料凭证 

代码如下

  LOOP AT LT_SEL INTO LS_SEL.
    CLEAR:LS_HEADER_DATA,LS_HEADER_CONTROL,LV_DELIVERY_NUMB,LT_HEADER_DEADLINES,LT_ITEM_DATA,LT_ITEM_CONTROL,LT_RETURN_TAB.
*准备抬头信息
    LS_HEADER_DATA-DELIV_NUMB      = LS_SEL-VBELN_VL.
*抬头控制信息。
    LS_HEADER_CONTROL-DELIV_NUMB   = LS_SEL-VBELN_VL.
    LS_HEADER_CONTROL-POST_GI_FLG  = 'X'.
*更改发货过账日期。
    CLEAR  LS_HEADER_DEADLINES .
    LS_HEADER_DEADLINES-DELIV_NUMB   = LS_SEL-VBELN_VL.
    LS_HEADER_DEADLINES-TIMETYPE     = 'WSHDRWADTI' ."发货过账 。

    CONCATENATE SY-DATUM SY-TIMLO INTO LV_TIMESTAMP .
    CONDENSE LV_TIMESTAMP .
    LS_HEADER_DEADLINES-TIMESTAMP_UTC = LV_TIMESTAMP .
*      LS_HEADER_DEADLINES-TIMEZONE = 'UTC+8' .
    APPEND LS_HEADER_DEADLINES TO LT_HEADER_DEADLINES .


    LOOP AT GT_DATA INTO GS_DATA WHERE BOX IS NOT INITIAL AND VBELN_VL = LS_SEL-VBELN_VL AND ICONS = ICON_GREEN_LIGHT.
      LS_ITEM_DATA-DELIV_NUMB       = GS_DATA-VBELN_VL.  "外向交货单号
      LS_ITEM_DATA-DELIV_ITEM       = GS_DATA-POSNR_VL.  "交货单行项目
      LS_ITEM_DATA-DLV_QTY          = GS_DATA-PIKMG .
      LS_ITEM_DATA-MATERIAL         = GS_DATA-MATNR.
      LS_ITEM_DATA-BATCH            = GS_DATA-CHARG."批次
      LS_ITEM_DATA-SALES_UNIT       = GS_DATA-MEINS.
      SELECT  SINGLE
      UMREZ
      UMREN
      INTO (LS_ITEM_DATA-FACT_UNIT_NOM,LS_ITEM_DATA-FACT_UNIT_DENOM)
      FROM
      MARM
      WHERE MATNR EQ  GS_DATA-MATNR
      AND MEINH EQ    GS_DATA-MEINS.
      IF SY-SUBRC = 0 .

      ELSE.
        LS_ITEM_DATA-FACT_UNIT_NOM    = '1'.  "此处应从MARM取转换关系
        LS_ITEM_DATA-FACT_UNIT_DENOM  = '1'."此处应从MARM取转换关系
      ENDIF.


*行项目控制
      LS_ITEM_CONTROL-DELIV_NUMB = GS_DATA-VBELN_VL..
      LS_ITEM_CONTROL-DELIV_ITEM = GS_DATA-POSNR_VL.
      LS_ITEM_CONTROL-CHG_DELQTY = 'X'.
      APPEND LS_ITEM_CONTROL TO LT_ITEM_CONTROL.
      CLEAR LS_ITEM_CONTROL.
    ENDLOOP.


    CALL FUNCTION 'BAPI_OUTB_DELIVERY_CONFIRM_DEC'
    EXPORTING
      HEADER_DATA      = LS_HEADER_DATA
      HEADER_CONTROL   = LS_HEADER_CONTROL
      DELIVERY         = LV_DELIVERY_NUMB
*       TECHN_CONTROL    =
*       HEADER_DATA_SPL  =
*       HEADER_CONTROL_SPL               =
    TABLES
*       HEADER_PARTNER   =
*       HEADER_PARTNER_ADDR              =
      HEADER_DEADLINES = LT_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 LS_RETURN_TAB WHERE TYPE CA 'EAX'.
      LV_FLAG = 'X'.
      CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          MSGID               = LS_RETURN_TAB-ID
          MSGNR               = LS_RETURN_TAB-NUMBER
          MSGV1               = LS_RETURN_TAB-MESSAGE_V1
          MSGV2               = LS_RETURN_TAB-MESSAGE_V2
          MSGV3               = LS_RETURN_TAB-MESSAGE_V3
          MSGV4               = LS_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'.
      LOOP AT GT_DATA INTO GS_DATA WHERE BOX IS NOT INITIAL AND VBELN_VL = LS_SEL-VBELN_VL AND ICONS = ICON_GREEN_LIGHT..
        GS_DATA-MESSAGE = LV_ALL_MESSAGE.
        GS_DATA-ICONS = ICON_RED_LIGHT.
        MODIFY GT_DATA FROM GS_DATA.
      ENDLOOP.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          WAIT = 'X'.
      LOOP AT GT_DATA INTO GS_DATA WHERE BOX IS NOT INITIAL AND VBELN_VL = LS_SEL-VBELN_VL AND ICONS = ICON_GREEN_LIGHT..
        GS_DATA-ICONS = ICON_GREEN_LIGHT.
        MODIFY GT_DATA FROM GS_DATA.
      ENDLOOP.
    ENDIF.
  ENDLOOP.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值