안녕하세요.
송장입력CBO프로그램에서 'BAPI_INCOMINGINVOICE_CREATE' 실행후 INVOICEDOCNUMBER가 INITIAL.일때
'BAPI_TRANSACTION_ROLLBACK'를 call하는데 오류메시지 발생시 해당 구매오더를 함께 출력하고
싶은데 가능한지요..
경험있으신분 답변 부탁드립니다.
LOOP AT IT_02.
AT FIRST.
SUM.
*HEAD_RTN.
CLEAR: SUM_BAS, ~ BT_RETURN.
REFRESH: BT_ITEMS~BT_RETURN.
BS_HEADER-INVOICE_IND = 'X'.
~
BS_HEADER-BLINE_DATE = INVFO-BUDAT.
BT_TAX-TAX_CODE = INVFO-MWSKZ.
~
APPEND BT_TAX.
ENDAT.
*ITEM_RTN.
ADD 10 TO G_ITEM.
BT_ITEMS-INVOICE_DOC_ITEM = G_ITEM.
BT_ITEMS-PO_NUMBER = IT_02-EBELN.
~
APPEND BT_ITEMS.
AT LAST.
FORM IV_CREATE_RTN .
CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE'
EXPORTING
HEADERDATA = BS_HEADER
* addressdata =
IMPORTING
INVOICEDOCNUMBER = BF_IV_NO
FISCALYEAR = BF_YEAR
TABLES
ITEMDATA = BT_ITEMS
* accountingdata =
* glaccountdata =
* materialdata =
TAXDATA = BT_TAX
* withtaxdata =
* vendoritemsplitdata =
RETURN = BT_RETURN.
ENDFORM. " iv_create_rtn
IF BF_IV_NO IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
IMPORTING
RETURN = BT_RETURN2.
MESSAGE S001 WITH '자료 저장중 오류가 발생'.
CALL SCREEN 9000 STARTING AT 25 07.
RETURN.
ELSE.
~
BT_INCINV-PO_NUMBER = IT_02-EBELN.
APPEND BT_INCINV.
ENDIF.
ENDAT.
ENDLOOP.
댓글 5
-
Tester
2010.11.26 01:40
-
prt
2010.11.26 04:28
Tester님 감사합니다~
-
prt
2010.11.26 20:21
여러건의 구매오더를 선택하여 저장하면 'BAPI_INCOMINGINVOICE_CREATE'를
사용해서 송장번호를 생성하는데..
에러창이 뜨면서 해당 에러(예를 들면 g/l계정번호, wbs에 관한 오류)에 대해
구매오더번호를 BT_RETURN-MESSAGE에 concatenate하려고
디버깅 걸면 PO_NUMBER를 가져오나 BT_ITEMS의 마지막 값을 가져오고
BT_RETURN에서 PO_NUMBER를 가져오기 위해 BT_ITEMS에서
연결필드를 찾았으나 없네요..
로그테이블에 넣을 수도 없을것 같구요..
'BAPI_INCOMINGINVOICE_CREATE' 사용하면 구매오더를 오류메시지로
줄수 없을거 같은데요..
-
Tester
2010.11.27 00:04
네 PRT님 말씀하신데로 여러건 돌리시면 찾을 수 있는 방법이 없을 것 같네요..
저도 좀 찾아 보겠습니다. ^^
-
prt
2010.11.27 01:01
'BAPI_INCOMINGINVOICE_CREATE' 처리전 윗단에서 로직을 구현해야 할것 같습니다~ 답변 주셔서 고맙습니다.
BAPI_INCINV_CREATE_ITEM의 BAPI에 TABLE : ITEMDATA의 BAPI_INCINV_CREATE_ITEM Field에 PO_NUMBER를
받을 수 있으니까
Rollback BAPI가 돌때 해당 BT_ITEM의 PO_NUMBER를 찍어 주시면 될 것 같습니다.