안녕하세요 BAPI를 이용해 데이터들을 업로드 할려고 하는데...
생각보다 쉽지가 않네요...
코스트센터와 원가요소 1월부터 12월까지 비용계획 금액이 포함된 엑셀 파일로
BAPI_COSTACTPLAN_POSTPRIMCOST 사용하여 업로드 할려고 합니다.
펑션의 각 파라메터의 정확한 사용법을 몰라서 혹시 사용해보신 분의 조언을 얻고자
이렇게 문의드립니다.
제가 나름대로 파라메터 테이블에 데이터를 넣어보고 돌려봤지만 BAPI RETURN 테이블
에 아무값도 리턴을 해오질않네요....
좋은하루 되시고 감사합니다~~
* Header Details
GT_PLNHDR-CO_AREA = '3000'.
GT_PLNHDR-FISC_YEAR = P_GJAHR.
GT_PLNHDR-PERIOD_FROM = '001'.
GT_PLNHDR-PERIOD_TO = '012'.
GT_PLNHDR-VERSION = P_VERSN.
GT_PLNHDR-PLAN_CURRTYPE = 'O'.
APPEND GT_PLNHDR.
LOOP AT GT_ITAB.
L_INDEX = SY-TABIX.
GT_IDXSTR-OBJECT_INDEX = L_INDEX.
GT_IDXSTR-VALUE_INDEX = L_INDEX.
APPEND GT_IDXSTR.
GT_COOBJT-OBJECT_INDEX = L_INDEX.
GT_COOBJT-COSTCENTER = GT_ITAB-KOSTL. <--코스트센터
APPEND GT_COOBJT.
GT_PERVAL-VALUE_INDEX = L_INDEX.
GT_PERVAL-COST_ELEM = GT_ITAB-KSTAR. <--원가요소
GT_PERVAL-TRANS_CURR = 'KRW'.
GT_PERVAL-FIX_VAL_PER01 = GT_ITAB-V01.
GT_PERVAL-FIX_VAL_PER02 = GT_ITAB-V02.
GT_PERVAL-FIX_VAL_PER03 = GT_ITAB-V03.
GT_PERVAL-FIX_VAL_PER04 = GT_ITAB-V04.
GT_PERVAL-FIX_VAL_PER05 = GT_ITAB-V05.
GT_PERVAL-FIX_VAL_PER06 = GT_ITAB-V06.
GT_PERVAL-FIX_VAL_PER07 = GT_ITAB-V07.
GT_PERVAL-FIX_VAL_PER08 = GT_ITAB-V08.
GT_PERVAL-FIX_VAL_PER09 = GT_ITAB-V09.
GT_PERVAL-FIX_VAL_PER10 = GT_ITAB-V10.
GT_PERVAL-FIX_VAL_PER11 = GT_ITAB-V11.
GT_PERVAL-FIX_VAL_PER12 = GT_ITAB-V12.
APPEND GT_PERVAL.
CALL FUNCTION 'BAPI_COSTACTPLN_POSTPRIMCOST'
EXPORTING
HEADERINFO = GT_PLNHDR
* DELTA = 'X'
TABLES
INDEXSTRUCTURE = GT_IDXSTR
COOBJECT = GT_COOBJT
PERVALUE = GT_PERVAL
* TOTVALUE = GT_TOTVAL
* CONTRL =
RETURN = GT_RETURN.
으... 엄청 길게 예제까지 써가면서 썼는데 중간에 로그아웃이 되버렸는지 쓴내용이 저장이 안되고 다 날라갔네요..ㅠ
이제 일해야 되서 아까처럼 자세하게 설명은 못드리고 간단하게 말씀드리면..
위 펑션은 정상적으로 수행이 되었을때 결과가 Return되지 않습니다.
펑션 실행후 Error의 Return이 없으면 정상으로 보고
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' 하시면 될 것 같네요.
하지만 소스를 봤을 때, 펑션 이후에 loop가 어디서 끝나는지 중간에 잘려서 정확히 모르겠지만
loop 안에서 한건씩 펑션을 호출하게 되어있는 구조인 것 같네요..
물론 그렇게 해도 posting이 안되는건 아니지만 현재 indexstructure라는 구조를 전혀 활용을 안하고 있습니다.
위처럼 인터널테이블의 sy-tabix를 세개의 테이블에 동일하게 넣을거라면 굳이 sy-tabix도
필요없이 무조건 세개 테이블의 index를 1로 하드코딩하는 것과 다를게 없습니다.
cost center가 들어가는 coobject 테이블과
cost element, currency, 금액이 들어가는 pervalues 테이블에는 at new와 같은 구문을 사용하여 unique한 값을 넣어주고
indexstructure에서는 위 두개의 테이블의 index를 상호 연결해주서 사용하시기 바랍니다.
100 건이 인터널 테이블 건수가 있는데 라인별로 100번 펑션을 호출하는 것은 바람직하지 않죠..
Headerinfo에 선언하는 version, year 별로 posting 단위를 잡으시면 될 것 같습니다.
만약 100 건의 인터널 테이블의 version, year가 모두 동일하다면 한번만 posting 하셔도 됩니다.
참고로 delta라는 parameter는 'X'라는 값을 체크하게 되면 이미 존재하는 금액에 Add하는 개념이고
default option인 ''를 체크하게 되면 기존 값을 엎어쓰는 개념입니다.
실제 프로그램을 수행하시고, 넣고자하는 금액이 코스트센터, 계정, 월별로 cosp에서 일치하는지 확인해보세요..
본인이 테스트 해보는게 최고죠.. 뭐..
그럼 수고하세요.. 전 이만 일하러~~