안녕하세요
form get_data.
data: BEGIN OF lc_proccd OCCURS 0,
proccd type proc_cd,
END OF lc_proccd.
perform get_codes tables lc_proccd.
endform.
FORM GET_CODES TABLES t_prcd STRUCTURE lc_proccd #local#
"Insert correct name for <...>.
endform.
위와같은 상황에서 서브루틴 get_codes를 더블클릭해서 서브루틴을 만들면 활성화가 자동으로는 안되는데요.
formal parameter의 타입선언을 어떻게 해야 작동할까요??
물론 인터널 테이블을 전역으로 선언해서 like로 선언하면 되긴하는데 그러면 tables로 주고받는 의미도 없는거 같아서요.
원칙적으로 DATA 로 선언된 인터널 테이블은 해당 루틴(FORM GET_DATA)에서만 존재하는 로컬 데이터 오브젝트이므로
당연히 다른 루틴(FORM GET_CODES)에서는 인식할 수 없습니다.
1. 해당 구조를 TYPES 로 전역으로 선언하시고. 해당 구조를 참조로 하는 Table Type도 만들어주세요.
2. 인터널 테이블 생성시 해당 테이블 타입을 참조해주세요.
3. GET_CODES 루틴에서도 해당 테이블 타입을 파라미터 TABLES 선언시 TYPE 으로 참조해서 사용하시면 됩니다.
* 서브루틴 자동 생성시에는 ABAP DICTIONARY 에 등록되어 있지 않으면 파라미터 타입을 인식하지 못합니다.
* 참고로 TABLES 파라미터는 ABAP 에서 Obsolete 되었으므로 USING 또는 CHANGING 파라미터로 사용하길 권장드립니다.
(기존 구현되어 있는 Standard Form 문 때문에 호환성 유지차원에서 사용은 가능합니다.)
- The use of table parameters in the interface of subroutines is obsolete,
but a large number of subroutines have not yet been switched to appropriately typed USING parameters or CHANGING parameters and must still be filled by the addition TABLES of the statement PERFORM.