用BAPI_PO_CHANGE修改(ME23N)PO出貨日期的方法

qiujun發表於2007-08-08

* Call BAPI function

DATA: lt_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE,
lt_poschedule LIKE bapimeposchedule OCCURS 0 WITH HEADER LINE,
lt_poschedulex LIKE bapimeposchedulx OCCURS 0 WITH HEADER LINE,
l_line TYPE i,
l_flag(1),
l_ebeln LIKE ekko-ebeln,
l_werks LIKE ekpo-werks.

LOOP AT it_itab.
CLEAR: l_line, l_flag.
lt_poschedule-po_item = it_itab-ebelp.
lt_poschedule-sched_line = '0001'.
lt_poschedule-del_datcat_ext = 'D'.
lt_poschedule-delivery_date = it_itab-eindt.
APPEND lt_poschedule.
CLEAR lt_poschedule.
*上面要轉的引數,在下面都要給'X'值.如po_itemx = 'X'.
lt_poschedulex-po_item = it_itab-ebelp.
lt_poschedulex-po_itemx = 'X'.
lt_poschedulex-sched_line = '0001'.
lt_poschedulex-sched_linex = 'X'.
lt_poschedulex-del_datcat_ext = 'X'.
lt_poschedulex-delivery_date = 'X'.
APPEND lt_poschedulex.
CLEAR lt_poschedulex.
DESCRIBE TABLE lt_poschedule LINES l_line.
AT END OF ebeln.
CLEAR l_ebeln.
l_werks = it_itab-werks.
l_ebeln = it_itab-ebeln.
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
*PO NO.
purchaseorder = it_itab-ebeln
*TEST RUN
testrun = p_test
TABLES
return = lt_return
poschedule = lt_poschedule
poschedulex = lt_poschedulex.
LOOP AT lt_return.
IF lt_return-type = 'E' OR lt_return-type = 'A'
OR ( lt_return-type = 'I' AND lt_return-id = 'VD' ).
g_text = lt_return-message.
PERFORM add_error_log USING g_text 'X'.
l_flag = 'X'.
ENDIF.
ENDLOOP.
IF l_flag = 'X'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
DELETE it_itab WHERE werks = l_werks AND ebeln = l_ebeln.
ENDIF.
IF l_flag = space AND p_test IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
CLEAR: lt_poschedule, lt_poschedule[], lt_return, lt_return[],
lt_poschedulex, lt_poschedulex[].
ENDAT.
ENDLOOP.

SORT it_error BY ebeln ebelp.
DELETE ADJACENT DUPLICATES FROM it_error.
DELETE it_itab WHERE flag = 'X'.
DESCRIBE TABLE it_itab LINES g_success.

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90072/viewspace-934484/,如需轉載,請註明出處,否則將追究法律責任。

相關文章