SAP WMS 开发 :BAPI for LT04上下架 - 基于TR创建TO转储单[L_TO_CREATE_TR]

该代码示例展示了如何在SAP环境中使用BAPIL_TO_CREATE_TR基于转出请求TR创建转储单TO,并通过设置i_squit参数自动进行确认。如果需要手动确认,可以使用事务码LT12调用函数L_TO_CONFIRM。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BAPI: L_TO_CREATE_TR

事务码: LT04 - 基于转出请求TR创建创建转储单TO

BAPI: L_TO_CONFIRM

事务码: LT12 - 对未确认的TO转储单进行确认

代码样例(基于TR创建TO并自动确认):

DATA:  lt_trite   TYPE TABLE OF l03b_trite,
        ls_trite   TYPE l03b_trite,
        lv_tanum   TYPE ltak-tanum,
        lv_teilk   TYPE t340d-teilv,
        lt_ltak    TYPE TABLE OF ltak_vb,
        ls_ltak    TYPE ltak_vb,
        lt_ltap    TYPE TABLE OF ltap_vb,
        ls_ltap    TYPE ltap_vb,
        lt_msg     TYPE TABLE OF wmgrp_msg,
        ls_msg     TYPE wmgrp_msg,
        lv_lgnum   TYPE ltbp-lgnum,
        lv_tbnum   TYPE ltbp-tbnum.

CLEAR:  lt_trite,
         ls_trite,
         lv_tanum,
         lv_teilk,
         lt_ltak,
         ls_ltak,
         lt_ltap,
         ls_ltap,
         lt_msg,
         ls_msg,
         lv_lgnum,
         lv_tbnum.

LOOP AT t_zswm257 INTO ls_zswm257.
    ls_tbnum-lgnum = ls_zswm257-lgnum.
    ls_tbnum-tbnum = ls_zswm257-tbnum.
    COLLECT ls_tbnum INTO lt_tbnum.
    CLEAR:ls_tbnum, ls_zswm257.
ENDLOOP.

IF lt_tbnum IS NOT INITIAL.
    SELECT * INTO TABLE lt_ltbk
      FROM ltbk
      FOR ALL ENTRIES IN lt_tbnum
      WHERE lgnum = lt_tbnum-lgnum
        AND tbnum = lt_tbnum-tbnum.
ENDIF.

IF t_zswm257[] IS NOT INITIAL.
    SELECT * INTO TABLE lt_ltbp
      FROM ltbp
      FOR ALL ENTRIES IN t_zswm257[]
    WHERE lgnum = t_zswm257-lgnum
      AND tbnum = t_zswm257-tbnum
      AND tbpos = t_zswm257-tbpos.
ENDIF.

LOOP AT lt_tbnum INTO ls_tbnum.
    CLEAR: lv_lgnum,
           lv_tbnum,
           lt_trite,
           ls_trite,
           lv_tanum,
           lv_teilk,
           lt_ltak,
           ls_ltak,
           lt_ltap,
           ls_ltap,
           lt_msg,
           ls_msg.

lv_lgnum = ls_tbnum-lgnum. "仓库号
lv_tbnum = ls_tbnum-tbnum. "TR号

LOOP AT t_zswm257 INTO ls_zswm257 WHERE lgnum = ls_tbnum-lgnum
                                    AND tbnum = ls_tbnum-tbnum.
 READ TABLE lt_ltbp INTO ls_ltbp WITH KEY lgnum = ls_zswm257-lgnum
                                          tbnum = ls_zswm257-tbnum
                                          tbpos = ls_zswm257-tbpos.
 IF sy-subrc = 0.
  ls_trite-tbpos = ls_ltbp-tbpos. "TR行项目号
  ls_trite-altme = ls_ltbp-altme. "单位
  ls_trite-charg = ls_ltbp-charg."收货批次
  ls_trite-anfme = ls_zswm257-open_qty. "数量
  ls_trite-nltyp = ls_zswm257-vltyp." 目的仓储类型
  ls_trite-nlpla = ls_zswm257-vlpla." 目的仓位
  READ TABLE lt_ltbk INTO ls_ltbk WITH KEY lgnum = ls_zswm257-lgnum
                                           tbnum = ls_zswm257-tbnum.
  IF sy-subrc = 0.
    ls_trite-vltyp = ls_ltbk-vltyp." 源发仓储类型
    ls_trite-vlpla = ls_ltbk-vlpla. " 源发仓位
  ENDIF.
  APPEND ls_trite TO lt_trite.
  CLEAR: ls_trite.
ENDIF.
ENDLOOP.

CALL FUNCTION 'L_TO_CREATE_TR' "根据TR创建TO并确认
        EXPORTING
          i_lgnum                        = lv_lgnum
          i_tbnum                        = lv_tbnum
*         I_REFNR                        = ' '
          i_squit                        = 'X' "自动确认TO
*         I_NIDRU                        = ' '
*         I_DRUKZ                        = ' '
*         I_LDEST                        = ' '
*         I_TBELI                        = ' '
*         I_NOSPL                        = ' '
*         I_UPDATE_TASK                  = ' '
          i_commit_work                  = 'X'
          i_bname                        = sy-uname
*         I_TEILK                        = ' '
*         I_SOLEX                        = 0
*         I_PERNR                        = 0
*         I_RSNUM                        = ' '
*         I_LDEST_LANG                   = ' '
          it_trite                       = lt_trite
        IMPORTING
          e_tanum                        = lv_tanum
          e_teilk                        = lv_teilk
        TABLES
          t_ltak                         = lt_ltak
          t_ltap_vb                      = lt_ltap
          t_wmgrp_msg                    = lt_msg
        EXCEPTIONS
          foreign_lock                   = 1
          qm_relevant                    = 2
          tr_completed                   = 3
          xfeld_wrong                    = 4
          ldest_wrong                    = 5
          drukz_wrong                    = 6
          tr_wrong                       = 7
          squit_forbidden                = 8
          no_to_created                  = 9
          update_without_commit          = 10
          no_authority                   = 11
          preallocated_stock             = 12
          partial_transfer_req_forbidden = 13
          input_error                    = 14
          OTHERS                         = 15.
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ENDIF.

      IF lv_tanum IS NOT INITIAL.
        e_type = 'S'.

        e_tanum = lv_tanum.
      ELSE.
        e_type = 'E'.
      ENDIF.

ENDLOOP.

参数:1. i_squit = 'X' :自动确认TO

           2. i_squit = '' :不会自动确认TO

备注:如果根据TR创建TO,分两步走的情况,没有自动确认TO的情况,可以使用L_TO_CONFIRM(事务码:LT12)进行对TO做确认

LT12确认TO

代码样例:

*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_LGNUM) TYPE  LGNUM
*"     VALUE(I_TANUM) TYPE  TANUM
*"     VALUE(I_TAPOS) TYPE  TAPOS
*"  EXPORTING
*"     VALUE(E_MSGTYP) TYPE  STRING
*"     VALUE(E_MESSAGE) TYPE  STRING

DATA:lt_ltap_conf LIKE  ltap_conf OCCURS 0 WITH HEADER LINE.
  lt_ltap_conf-tanum = i_tanum.
  lt_ltap_conf-tapos = i_tapos.
  lt_ltap_conf-squit = abap_true.
  APPEND lt_ltap_conf. 
CLEAR lt_ltap_conf.
CALL FUNCTION 'L_TO_CONFIRM'
    EXPORTING
      i_lgnum                        = i_lgnum
      i_tanum                        = i_tanum
      i_commit_work                  = abap_true
    TABLES
      t_ltap_conf                    = lt_ltap_conf
    EXCEPTIONS
      to_confirmed                   = 1
      to_doesnt_exist                = 2
      item_confirmed                 = 3
      item_subsystem                 = 4
      item_doesnt_exist              = 5
      item_without_zero_stock_check  = 6
      item_with_zero_stock_check     = 7
      one_item_with_zero_stock_check = 8
      item_su_bulk_storage           = 9
      item_no_su_bulk_storage        = 10
      one_item_su_bulk_storage       = 11
      foreign_lock                   = 12
      squit_or_quantities            = 13
      vquit_or_quantities            = 14
      bquit_or_quantities            = 15
      quantity_wrong                 = 16
      double_lines                   = 17
      kzdif_wrong                    = 18
      no_difference                  = 19
      no_negative_quantities         = 20
      wrong_zero_stock_check         = 21
      su_not_found                   = 22
      no_stock_on_su                 = 23
      su_wrong                       = 24
      too_many_su                    = 25
      nothing_to_do                  = 26
      no_unit_of_measure             = 27
      xfeld_wrong                    = 28
      update_without_commit          = 29
      no_authority                   = 30
      lqnum_missing                  = 31
      charg_missing                  = 32
      no_sobkz                       = 33
      no_charg                       = 34
      nlpla_wrong                    = 35
      two_step_confirmation_required = 36
      two_step_conf_not_allowed      = 37
      pick_confirmation_missing      = 38
      quknz_wrong                    = 39
      hu_data_wrong                  = 40
      no_hu_data_required            = 41
      hu_data_missing                = 42
      hu_not_found                   = 43
      picking_of_hu_not_possible     = 44
      not_enough_stock_in_hu         = 45
      serial_number_data_wrong       = 46
      serial_numbers_not_required    = 47
      no_differences_allowed         = 48
      serial_number_not_available    = 49
      serial_number_data_missing     = 50
      to_item_split_not_allowed      = 51
      input_wrong                    = 52
      OTHERS                         = 53.

 IF e_msgtyp EQ 'S' AND sy-msgid IS INITIAL.
    e_message = '确认成功'.
  ELSEIF e_msgtyp EQ 'E' AND
         sy-msgid EQ 'L3' AND
         sy-msgno EQ '055'.
    e_msgtyp = 'W'.
    e_message = i_lgnum && '/' && i_tanum &&  '/' && i_tapos && 'SAP已确认过'.
  ELSEIF sy-msgid IS INITIAL AND e_msgtyp IS INITIAL.
    DO 30 TIMES.
      SELECT SINGLE tanum INTO lt_ltap_conf-tanum FROM ltap
          WHERE lgnum EQ i_lgnum AND
                tanum EQ i_tanum AND
                tapos EQ i_tapos AND
                pquit EQ abap_true.
      IF sy-subrc EQ 0.
        e_msgtyp  = 'S'.
        e_message = '确认成功'.
        EXIT.
      ELSE.
        WAIT UP TO 1 SECONDS.
      ENDIF.
    ENDDO.
    IF e_msgtyp IS INITIAL.
      e_msgtyp  = 'E'.
      e_message = '系统延迟,稍后再试'.
    ENDIF.
  ELSE.
    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 = e_message.
  ENDIF.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值