RANGES: R_STGRD FOR ZFEMSMAINCURR-STGRD.
R_STGRD-SIGN = 'I'.
R_STGRD-OPTION = 'EQ'.
CASE BUKRS.
WHEN 'C4B5'.
R_STGRD-LOW = '01'.
APPEND R_STGRD. CLEAR R_STGRD-LOW.
R_STGRD-LOW = '02'.
APPEND R_STGRD. CLEAR R_STGRD-LOW.
WHEN 'C430'.
R_STGRD-LOW = '01'.
APPEND R_STGRD. CLEAR R_STGRD-LOW.
R_STGRD-LOW = '02'.
APPEND R_STGRD. CLEAR R_STGRD-LOW.
R_STGRD-LOW = '1'.
APPEND R_STGRD. CLEAR R_STGRD-LOW.
WHEN 'C4M0'.
R_STGRD-LOW = '1'.
APPEND R_STGRD. CLEAR R_STGRD-LOW.
R_STGRD-LOW = '2'.
APPEND R_STGRD. CLEAR R_STGRD-LOW.
R_STGRD-LOW = '3'.
APPEND R_STGRD. CLEAR R_STGRD-LOW.
R_STGRD-LOW = '4'.
APPEND R_STGRD. CLEAR R_STGRD-LOW.
ENDCASE.
SELECT SINGLE STGRD
FROM ZFEMSMAINCURR
INTO CORRESPONDING FIELDS OF GT_MAINCURR
WHERE STGRD IN R_STGRD
AND BUKRS = BUKRS.
IF SY-SUBRC NE 0.
MESSAGE A001 WITH 'it is not companycode'.
ELSE.
MESSAGE S002 WITH 'IT IS SUCCESS'.
ENDIF.
CASE문으로 사용을 해서법인에 REASON CODE를 강제로 받아왔는데요
문제가 법인에서 REASON CODE를 바꾸게 되면 수정해줘야 하는 문제가 생겨서
번거로움이 생길듯 합니다.
어떻게 해결 방법이 없을까 해서 고수님들의 조언좀 부탁하고자 글 올렸습니다.
급해서요. 꼭좀 부탁드립니다.
1. CASE문으로 법인을 받아서 reason code를 강제로 넣어주지 않고
법인 코드를 입력했을때 그 법인의 reason code를 rfc타고 가져올수있게 하는것이 제 질문입니다.
댓글 3
-
kkamui
2008.12.18 18:06
-
페리
2008.12.18 18:09
위와 같은 로직이 다른 펑션에서도 존재한다는 가정하에, BUKRS의 매핑이 바뀌면 일일이 다 수정하게 끔 되겠지요. 골치입니다.;;
저 같은 경우에는 차라리 회사코드를 입력받아서 뿌려주는 공통펑션하나를 만들어서 그걸 호출하게 끔 해서 사용한답니다.
예를 들면, ( 임의로 만든 펑션입니다. )
CALL FUNCTION 'ZF_GET_BUKRS_MAAPING'
EXPORTING
I_BUKRS = BUKRS
TABLES
T_STGRD = R_STGRD.
코딩은 대체로..
** ZF_GET_BUKRS_MAAPING **
T_STGRD-SIGN = 'I'.
T_STGRD-OPTION = 'EQ'.
CASE I_BUKRS.
WHEN 'C4B5'.
T_STGRD-LOW = '01'. APPEND T_STGRD. CLEAR T_STGRD-LOW.
T_STGRD-LOW = '02'. APPEND T_STGRD. CLEAR T_STGRD-LOW.
WHEN 'C430'.
T_STGRD-LOW = '01'. APPEND T_STGRD. CLEAR T_STGRD-LOW.
T_STGRD-LOW = '02'. APPEND T_STGRD. CLEAR T_STGRD-LOW.
T_STGRD-LOW = '1'. APPEND T_STGRD. CLEAR T_STGRD-LOW.
WHEN 'C4M0'.
T_STGRD-LOW = '1'. APPEND T_STGRD. CLEAR T_STGRD-LOW.
T_STGRD-LOW = '2'. APPEND T_STGRD. CLEAR T_STGRD-LOW.
T_STGRD-LOW = '3'. APPEND T_STGRD. CLEAR T_STGRD-LOW.
T_STGRD-LOW = '4'. APPEND T_STGRD. CLEAR T_STGRD-LOW.
ENDCASE.
이렇게 ZF_GET_BUKRS_MAAPING 펑션을 만들고
RANGES: R_STGRD FOR ZFEMSMAINCURR-STGRD.
CALL FUNCTION 'ZF_GET_BUKRS_MAAPING'
EXPORTING
I_BUKRS = BUKRS
TABLES
T_STGRD = R_STGRD.
SELECT SINGLE STGRD
FROM ZFEMSMAINCURR
INTO CORRESPONDING FIELDS OF GT_MAINCURR
WHERE STGRD IN R_STGRD
AND BUKRS = BUKRS.
IF SY-SUBRC NE 0.
MESSAGE A001 WITH 'it is not companycode'.
ELSE.
MESSAGE S002 WITH 'IT IS SUCCESS'.
ENDIF.
이렇게 수정합니다.
BUKRS의 매핑이 바뀌게 된다면 ZF_GET_BUKRS_MAAPING안에서만 바꿔주면 되니깐요..
P.S RFC를 타고 REASON CODE를 가져온다고 해도 RFC안에서 어차피 하드코딩으로 매핑 시켜줘야 합니다.
아니시면, 매핑용 테이블을 만드셔서 BUKRS에 대한 REASON CODE를 넣어주시고 쿼리로 찾는 방법도 있긴 합니다.
-
COMAN
2008.12.18 18:10
그렇게 하려면 법인코드와 reason code와 연결되는 고리(테이블)가 있어야 될거 같은데요.
IMG로 설정되었는지는 모르겠으나,
CBO 테이블이라도 만들어서 써야할거 같습니다.
bukrs stgrd
c4b5 01
c4b5 02
c430 01
... ..
이 테이블을 유지보수 해주면 프로그램은 건드리지 않아도 되겟지요..
마스터 코드 유지보수 테이블을 하나 만드세요 .
bukrs 를 키로 하는 테이블을 만드셔서 해당 bukrs 건들을 셀렉트하셔서 레인지 변수에 적용 하면 될거 같네요 .