修改交貨單中的序號

來源:互聯網
上載者:User

  *&---------------------------------------------------------------------*
*& Report  ZTEST_DN_UPDATE_SERIAL_NO
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZTEST_DN_UPDATE_SERIAL_NO.
DATA: dn_header_data      LIKE bapiobdlvhdrchg,
      dn_header_control   LIKE bapiobdlvhdrctrlchg,
      dn_delivery         LIKE likp-vbeln,
      dn_return           LIKE bapiret2 OCCURS 0 WITH HEADER LINE,
      dn_item_data        LIKE TABLE OF bapiobdlvitemchg WITH HEADER LINE,
      dn_item_control     LIKE bapiobdlvitemctrlchg OCCURS 0 WITH HEADER LINE,
      dn_item_serial_no   LIKE TABLE OF bapidlvitmserno WITH HEADER LINE,
      dn_techn_control    LIKE BAPIDLVCONTROL."add by changgf 20110219
DATA: g_transaction_id LIKE arfctid,
      g_status_of_transaction(15).

START-OF-SELECTION.

*  CALL FUNCTION 'TRANSACTION_BEGIN'
*    IMPORTING
*      transaction_id = g_transaction_id.

  dn_header_data-deliv_numb = '0500029959'.
  dn_header_control-deliv_numb = '0500029959'.

  dn_item_serial_no-deliv_numb = '0500029959'.
  dn_item_serial_no-itm_number = '000010'.
  dn_item_serial_no-serialno = 'ZSD-MJM10'.
  append dn_item_serial_no.

  dn_item_serial_no-itm_number = '000010'.
  dn_item_serial_no-serialno = 'ZSD-MJM11'.
  append dn_item_serial_no.

  dn_item_serial_no-itm_number = '000010'.
  dn_item_serial_no-serialno = 'ZSD-MJM12'.
  append dn_item_serial_no.

  dn_item_serial_no-itm_number = '000010'.
  dn_item_serial_no-serialno = 'ZSD-MJM13'.
  append dn_item_serial_no.

  dn_item_serial_no-itm_number = '000010'.
  dn_item_serial_no-serialno = 'ZSD-MJM14'.
  append dn_item_serial_no.

  dn_item_serial_no-itm_number = '000010'.
  dn_item_serial_no-serialno = 'ZSD-MJM15'.
  append dn_item_serial_no.

  dn_item_serial_no-itm_number = '000010'.
  dn_item_serial_no-serialno = 'ZSD-MJM17'.
  append dn_item_serial_no.

  dn_item_serial_no-itm_number = '000010'.
  dn_item_serial_no-serialno = 'ZSD-MJM18'.
  append dn_item_serial_no.

  dn_item_serial_no-itm_number = '000010'.
  dn_item_serial_no-serialno = 'ZSD-SAFHOAGH15B'.
  append dn_item_serial_no.

  dn_item_serial_no-itm_number = '000010'.
  dn_item_serial_no-serialno = 'ZSD-MJM16'.
  append dn_item_serial_no.

  CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
    EXPORTING
      header_data    = dn_header_data
      header_control = dn_header_control
      delivery       = dn_delivery
    TABLES
      return         = dn_return
      item_serial_no = dn_item_serial_no.
  READ TABLE dn_return WITH KEY type = 'E'.
  IF sy-subrc <> 0.
*    CALL FUNCTION 'TRANSACTION_STATUS'
*      IMPORTING
*        status = g_status_of_transaction.

    IF g_status_of_transaction = 'COMMIT_WORK'.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    ENDIF.

*    CALL FUNCTION 'TRANSACTION_END'
*      EXPORTING
*        transaction_id = g_transaction_id
*      EXCEPTIONS
*        OTHERS         = 1.

  ENDIF.

  REFRESH dn_return.

  DELETE dn_item_serial_no WHERE serialno = 'ZSD-MJM10'.
  dn_item_serial_no-itm_number = '000010'.
  dn_item_serial_no-serialno = 'ZSD-SAFHOAGH16'.
  append dn_item_serial_no.

CALL FUNCTION 'SERIAL_INTTAB_REFRESH'
      EXPORTING
        objects_status_refresh = 'E'.

  CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
    EXPORTING
      header_data    = dn_header_data
      header_control = dn_header_control
      delivery       = dn_delivery
    TABLES
      return         = dn_return
      item_serial_no = dn_item_serial_no.
  READ TABLE dn_return WITH KEY type = 'E'.
  IF sy-subrc <> 0.
*    CALL FUNCTION 'TRANSACTION_STATUS'
*      IMPORTING
*        status = g_status_of_transaction.

    IF g_status_of_transaction = 'COMMIT_WORK'.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    ENDIF.

*    CALL FUNCTION 'TRANSACTION_END'
*      EXPORTING
*        transaction_id = g_transaction_id
*      EXCEPTIONS
*        OTHERS         = 1.

  ENDIF.

END-OF-SELECTION.

 

 

上面的測試程式主要是為瞭解決RF掃描序號到交貨單中時,如果中途發現掃描錯誤,再次掃描更正資料後執行BAPI時會報錯,報序號被其它的ITEM佔用。後來是以下的函數解決了問題。

 

CALL FUNCTION 'SERIAL_INTTAB_REFRESH'
      EXPORTING
        objects_status_refresh = 'E'.

 

 

 GOOGLE 搜尋:WS_DELIVERY_UPDATE_2 SERIAL

 

https://forums.sdn.sap.com/thread.jspa?threadID=1397725

 

To update serial nos to delivery in RF use the following FM L_SER_WS_DELIVERY_UPDATE.

Use as follows:-

    CALL FUNCTION 'SERIAL_INTTAB_REFRESH'      EXPORTING        objects_status_refresh = 'E'.     CALL FUNCTION 'L_SER_WS_DELIVERY_UPDATE'      EXPORTING        vbkok_wa                 = y_wa_vbkok        synchron                 = 'X'        commit                   = ' '        delivery                 = y_p_vbel        nicht_sperren            = 'X'        if_get_delivery_buffered = ' '        if_error_messages_send_0 = 'X'        it_sernr_update          = y_li_sernr      EXCEPTIONS        error_message            = 1        OTHERS                   = 2.     CASE sy-subrc.      WHEN 0.        COMMIT WORK.      WHEN OTHERS.         MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

 

Internally it is just making a call to 'WS_DELIVERY_UPDATE_2'
So try using the FM WS_DELIVERY_UPDATE_2

 

https://forums.sme.sap.com/message.jspa?messageID=8847913

BAPI_OUTB_DELIVERY_CHANGE / WS_DELIVERY_UPDATE

BAPI_OUTB_DELIVERY_CHANGE & L_SER_WS_DELIVERY_UPDATE

這兩個FUNCTION,一個會做序號的檢查,後面一個不會做檢查,直接儲存進去

 

CALL FUNCTION 'WS_DELIVERY_UPDATE'
                EXPORTING
                 vbkok_wa                           = w_vbkok_wa
*                COMMIT                             = 'X'
                 delivery                           = v_delivery
                 if_database_update                 = '1'
                 if_error_messages_send_0           = 'X'
                 it_sernr_update                    = t_sernr_update

 

 

 http://sap.ittoolbox.com/groups/technical-functional/sap-dev/serial-number-in-handling-unit-308912

I am trying to add serial numbers to items in a handling unit in an outbound delivery (Sales Order) calling 1. SERIAL_INTTAB_REFRESH, 2. SERNR_ADD_TO_HU and 3. SERIAL_LISTE_POST_HU. I don't get errors but the serial number does not get added to the HU.

 

http://forums.sdn.sap.com/thread.jspa?threadID=576174

https://forums.sme.sap.com/thread.jspa?threadID=1779645&tstart=0

 

WS_DELIVERY_UPDATE_2

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.