반응형
선언부. ▼
DATA: LS_HEADERINFO TYPE BAPIPLNHDR,
LS_INDEXSTRUCTURE TYPE BAPIACPSTRU,
LT_INDEXSTRUCTURE TYPE TABLE OF BAPIACPSTRU,
LS_COOBJECT TYPE BAPIPCPOBJ,
LT_COOBJECT TYPE TABLE OF BAPIPCPOBJ,
LS_PERVALUE TYPE BAPIPCPVAL,
LT_PERVALUE TYPE TABLE OF BAPIPCPVAL,
LT_RETURN TYPE TABLE OF BAPIRET2,
LV_OBJ_INDX TYPE BAPIACISTRU-OBJECT_INDEX,
LV_VAL_INDX TYPE BAPIACISTRU-VALUE_INDEX.
DATA: LV_INDEX TYPE N LENGTH 2,
LV_FNAME1 TYPE FIELDNAME,
LV_FNAME2 TYPE FIELDNAME,
LV_FIX_VAL TYPE BAPIPCPVAL-FIX_VAL_PER01.
FIELD-SYMBOLS: <FS1>, <FS2>.
CURRENCY TYPE은 3가지 종류가 있다.
PLAN_CURRTYPE = 'C' : 관리회계 영역 통화
PLAN_CURRTYPE = 'O' : 오브젝트 통화
PLAN_CURRTYPE = 'T' : 거래 통화
헤더. ▼
"HEADER
LS_HEADERINFO-CO_AREA = P_KOKRS. "관리회계영역
LS_HEADERINFO-VERSION = P_VERSN. "버전
LS_HEADERINFO-FISC_YEAR = P_GJAHR. "연도
LS_HEADERINFO-PERIOD_FROM = S_PERBL-LOW. "기간 FROM
LS_HEADERINFO-PERIOD_TO = S_PERBL-HIGH. "기간 TO
LS_HEADERINFO-PLAN_CURRTYPE = 'O'. "통화
CO OBJECT. ▼
"COOBJECT
LV_OBJ_INDX += 1.
LS_COOBJECT-OBJECT_INDEX = LV_OBJ_INDX.
LS_COOBJECT-COSTCENTER = <FS_LIST>-KOSTL. "코스트센터
APPEND LS_COOBJECT TO LT_COOBJECT.
INDEX STRUCTURE. ▼
"INDEXSTRUCTURE
LV_VAL_INDX += 1.
LS_INDEXSTRUCTURE-OBJECT_INDEX = LV_OBJ_INDX.
LS_INDEXSTRUCTURE-VALUE_INDEX = LV_VAL_INDX.
APPEND LS_INDEXSTRUCTURE TO LT_INDEXSTRUCTURE.
PERVALUE. CURRNECY 변환은 생략 가능. ▼
"PERVALUE
LV_INDEX = 01.
DO 12 TIMES.
LV_FNAME1 = |LS_PERVALUE-FIX_VAL_PER{ LV_INDEX }|.
ASSIGN (LV_FNAME1) TO <FS1>.
LV_FNAME2 = |<FS_LIST>-WOG0{ LV_INDEX }|.
ASSIGN (LV_FNAME2) TO <FS2>.
PERFORM CONVERSION_CURRENCY USING 'E' <FS_LIST>-WAERS <FS2> CHANGING LV_FIX_VAL.
<FS1> = LV_FIX_VAL.
LV_INDEX += 1.
ENDDO.
LS_PERVALUE-COST_ELEM = <FS_LIST>-KSTAR. "원가요소
LS_PERVALUE-VALUE_INDEX = LV_VAL_INDX.
LS_PERVALUE-TRANS_CURR = <FS_LIST>-WAERS.
APPEND LS_PERVALUE TO LT_PERVALUE.
이미 있는 계획 값에 값을 더해주는 방식으로 BAPI를 수행하려면 DELTA 지시자에 'X'로 변경해준다.
SPACE라면 LT_PERVALUE의 값으로 대체한다.
BAPI 실행. ▼
CALL FUNCTION 'BAPI_COSTACTPLN_POSTPRIMCOST'
EXPORTING
HEADERINFO = LS_HEADERINFO
DELTA = SPACE
TABLES
INDEXSTRUCTURE = LT_INDEXSTRUCTURE
COOBJECT = LT_COOBJECT
PERVALUE = LT_PERVALUE
RETURN = LT_RETURN.
IF LT_RETURN IS INITIAL.
<FS_LIST>-ICON = ICON_GREEN_LIGHT.
<FS_LIST>-MESSAGE = '전기 되었습니다.'.
MESSAGE S109.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ELSE.
SORT LT_RETURN BY TYPE.
<FS_LIST>-ICON = ICON_RED_LIGHT.
READ TABLE LT_RETURN ASSIGNING FIELD-SYMBOL(<FS_RETURN>) WITH KEY TYPE = 'E' BINARY SEARCH.
IF SY-SUBRC = 0.
<FS_LIST>-MESSAGE = <FS_RETURN>-MESSAGE.
ENDIF.
MESSAGE S102 DISPLAY LIKE 'E'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
CLEAR: LS_HEADERINFO, LS_COOBJECT, LS_INDEXSTRUCTURE, LS_PERVALUE,
LT_COOBJECT, LT_INDEXSTRUCTURE, LT_PERVALUE,
LV_OBJ_INDX, LV_VAL_INDX.
OBJECT_INDEX, VALUE_INDEX 예시
코스트센터 | 원가요소 | 1월 | 2월 | 3월 | OBJECT_INDEX | VALUE_INDEX |
A00001 | 5000001 | 10,000 | 20,000 | 30,000 | 000001 | 000001 |
A00001 | 5000002 | 10,000 | 20,000 | 30,000 | 000001 | 000002 |
A00001 | 5000003 | 10,000 | 20,000 | 30,000 | 000001 | 000003 |
A00002 | 5000001 | 10,000 | 20,000 | 30,000 | 000002 | 000001 |
A00002 | 5000002 | 10,000 | 20,000 | 30,000 | 000002 | 000002 |
반응형
'ABAP' 카테고리의 다른 글
POPUP_TO_CONFIRM 팝업 확인 창 띄우기 (0) | 2025.02.19 |
---|---|
ALV GRID 새로고침(REFRESH_TABLE_DISPLAY) (0) | 2025.02.19 |
Template 다운로드 기능 추가 (0) | 2025.02.17 |
ALV GRID 전체해제 (2) | 2025.02.17 |
ALV GRID 전체선택 (0) | 2025.02.17 |