본문 바로가기

ABAP

BAPI_COSTACTPLN_POSTPRIMCOST 비용계획(KP06)

반응형

 선언부.  

 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.

    CLEARLS_HEADERINFOLS_COOBJECTLS_INDEXSTRUCTURELS_PERVALUE,
           LT_COOBJECTLT_INDEXSTRUCTURELT_PERVALUE,
           LV_OBJ_INDXLV_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