IT WORK/SAP FI and ABAP
[SAP FI] BAPI_ACC_DOCUMENT_POST 펑션을 이용한 비용 전표 전기
Bathildis
2025. 4. 21. 16:19
반응형
REPORT YTEST.
* 1. 데이터 선언
DATA:
LS_HEAD TYPE BAPIACHE09,
LT_GL TYPE STANDARD TABLE OF BAPIACGL09 WITH EMPTY KEY,
LT_AP TYPE STANDARD TABLE OF BAPIACAP09 WITH EMPTY KEY,
LT_CURR TYPE STANDARD TABLE OF BAPIACCR09 WITH EMPTY KEY,
LT_RETURN TYPE STANDARD TABLE OF BAPIRET2 WITH EMPTY KEY.
* 2. 문서 헤더 데이터 초기화
LS_HEAD = VALUE #(
HEADER_TXT = '테스트 전표 생성'
COMP_CODE = '1000'
DOC_DATE = SY-DATUM
PSTNG_DATE = SY-DATUM
DOC_TYPE = 'SA'
USERNAME = SY-UNAME
).
* 3. GL 계정 라인 데이터 (차변)
LT_GL = VALUE #(
( ITEMNO_ACC = '1'
GL_ACCOUNT = '0052050101'
ITEM_TEXT = '비용라인'
COSTCENTER = '0000100000'
COMP_CODE = '1000' )
).
* 4. AP 계정 라인 데이터 (대변)
LT_AP = VALUE #(
( ITEMNO_ACC = '2'
VENDOR_NO = '0010100001'
PMNTTRMS = 'N000'
BLINE_DATE = SY-DATUM )
).
* 5. 금액 데이터
LT_CURR = VALUE #(
( ITEMNO_ACC = '1' CURRENCY = 'KRW' AMT_DOCCUR = '10000' )
( ITEMNO_ACC = '2' CURRENCY = 'KRW' AMT_DOCCUR = '-10000' )
).
* 6. 체크 로직 추가
CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
EXPORTING
DOCUMENTHEADER = LS_HEAD
TABLES
ACCOUNTGL = LT_GL
ACCOUNTPAYABLE = LT_AP
CURRENCYAMOUNT = LT_CURR
RETURN = LT_RETURN.
* 7. 체크 결과 처리
IF LINE_EXISTS( LT_RETURN[ TYPE = 'E' ] ).
LOOP AT LT_RETURN ASSIGNING FIELD-SYMBOL(<FS_ERR>) WHERE TYPE = 'E'.
WRITE: / '체크 오류:', <FS_ERR>-MESSAGE.
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
* 8. 실제 전표 생성
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
DOCUMENTHEADER = LS_HEAD
TABLES
ACCOUNTGL = LT_GL
ACCOUNTPAYABLE = LT_AP
CURRENCYAMOUNT = LT_CURR
RETURN = LT_RETURN.
* 9. 실행 결과 처리
IF LINE_EXISTS( LT_RETURN[ TYPE = 'E' ] ).
LOOP AT LT_RETURN ASSIGNING <FS_ERR> WHERE TYPE = 'E'.
WRITE: / '실행 오류:', <FS_ERR>-MESSAGE.
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = ABAP_TRUE.
DATA(LV_DOC_NUM) = VALUE STRING( ).
LOOP AT LT_RETURN ASSIGNING FIELD-SYMBOL(<FS_MSG>) WHERE TYPE = 'S'.
LV_DOC_NUM = <FS_MSG>-MESSAGE_V2+0(10). " 앞 10자리 자르기
CONDENSE LV_DOC_NUM NO-GAPS. " 공백 제거
EXIT.
ENDLOOP.
WRITE: / '전표 생성 성공:', LV_DOC_NUM.
ENDIF.
ENDIF.
AR은 테이블에서 ACCOUNTRECEIVABLE를 사용하면 됨.
반응형