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.