ABAP
BAPI_COSTACTPLN_POSTPRIMCOST 비용계획(KP06)
닉넴항상고민
2025. 2. 19. 14:21
반응형
선언부. ▼
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_RETMSG TYPE SY-LISEL,
LV_MESSAGE TYPE BAPI_MSG,
LV_OBJ_INDX TYPE BAPIACISTRU-OBJECT_INDEX,
LV_VAL_INDX TYPE BAPIACISTRU-VALUE_INDEX.
DATA: LV_INDEX TYPE N LENGTH 2,
LV_MINDEX TYPE I,
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.
LOOP AT LT_RETURN ASSIGNING FIELD-SYMBOL(<FS_RETURN>) WHERE TYPE = 'E'.
LV_MINDEX += 1.
CALL FUNCTION 'RPY_MESSAGE_COMPOSE'
EXPORTING
MESSAGE_ID = <FS_RETURN>-ID
MESSAGE_NUMBER = <FS_RETURN>-NUMBER
MESSAGE_VAR1 = <FS_RETURN>-MESSAGE_V1
MESSAGE_VAR2 = <FS_RETURN>-MESSAGE_V2
MESSAGE_VAR3 = <FS_RETURN>-MESSAGE_V3
MESSAGE_VAR4 = <FS_RETURN>-MESSAGE_V4
IMPORTING
MESSAGE_TEXT = LV_RETMSG.
LV_RETMSG = | ({ LV_MINDEX }).{ LV_RETMSG }|.
LV_MESSAGE = LV_MESSAGE && LV_RETMSG.
IF LV_MINDEX = 1.
SHIFT LV_MESSAGE.
ENDIF.
ENDLOOP.
<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 = LV_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 |
참고) 통화변환
*&---------------------------------------------------------------------*
*& Form CONVERSION_CURRENCY
*&---------------------------------------------------------------------*
*& INTERNAL : DB에 저장
*& EXTERNAL : 화면에 표시
*&---------------------------------------------------------------------*
FORM CONVERSION_CURRENCY USING PV_INEX
PV_CURRNECY
PV_INTERNAL
CHANGING PV_EXTERNAL.
CASE PV_INEX.
WHEN 'I'.
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_INTERNAL'
EXPORTING
CURRENCY = PV_CURRNECY
AMOUNT_EXTERNAL = CONV BAPICURR-BAPICURR( PV_INTERNAL )
MAX_NUMBER_OF_DIGITS = 23
IMPORTING
AMOUNT_INTERNAL = PV_EXTERNAL.
WHEN 'E'.
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
CURRENCY = PV_CURRNECY
AMOUNT_INTERNAL = CONV BAPICURR-BAPICURR( PV_INTERNAL )
IMPORTING
AMOUNT_EXTERNAL = PV_EXTERNAL.
ENDCASE.
ENDFORM.
반응형