503 페이지에 나오는 동적 필드 할당의 예제를 아래와 같이 작성해봤습니다.
FIELD-SYMBOLS <FS>.
DATA: FNAME(10) TYPE C.
DATA: SUM LIKE COSP-WTG001.
DATA: NIDX TYPE N VALUE 1 LENGTH 2.
DO 12 TIMES.
CONCATENATE 'COSP-WGT' NIDX INTO FNAME.
WRITE: / FNAME.
ASSIGN (FNAME) TO <FS>.
SUM = SUM + <FS>.
CLEAR : FNAME. ", <FS>.
CLEAR: <FS>.
NIDX = NIDX + 1.
ENDDO.
그런데 CLEAR: <FS>에서 DUMP ERROR가 발생합니다.
문제가 뭔지 알 수 있을까요?
<FS>에 아무것도 assign 되지 않았기 때문에 오류가 납니다.
assign 구문에 디버그 찍고 실행 해보면 sy-subrc가 4로 나옵니다.
아래 소스에 수정한 부분 주석으로 표시하였습니다.
*------------------------------------------------------
REPORT ZFS2.
TABLES COSP. " tables를 추가 해주셔야 합니다. assign 에서 사용할 때 structure 처럼 사용하기 위함입니다.
FIELD-SYMBOLS <FS>.
DATA: FNAME(11) TYPE C.
DATA: SUM LIKE COSP-WTG001.
DATA: NIDX TYPE N VALUE 1 LENGTH 3. " 뒤쪽 숫자는 3자리.
DO 12 TIMES.
CONCATENATE 'COSP-WTG' NIDX INTO FNAME. " 필드명을 WTG로 수정하였습니다
WRITE: / FNAME.
ASSIGN (FNAME) TO <FS>.
IF SY-SUBRC EQ 0. " 정상 assign 되었는지 확인. tables 구문을 빼면 모두 오류가 나면서 실행이 안됩니다.
SUM = SUM + <FS>.
CLEAR : FNAME. ", <FS>.
CLEAR: <FS>.
ENDIF.
NIDX = NIDX + 1.
ENDDO.