"f_itab" is a table without a header line and therefore has no component called "col1".
교재 소싱 파일 받아서 연습중에 이런 오류가 떠서 여러가지로 해보았으나 되지않아 질문드립니다.
폼에서는 헤더라인이 없더라도 자동으로 헤더라인이 생기는 걸로 알고 있는데 이런 오류가 떠서 혹시 정의해서 그런가 싶어 정의를 하지 않으니 f_itab은 인터널 테이블이 아니라고 나옵니다.
itab이 line 구문의 구조를 가져온 인터널 테이블이 아닙니가?
헤더가 없기 때문에 값을 가져오거나 내보낼 수 없는 건 이해가 가는데 이 헤더가 없다고 할 때 참 난감합니다.
헤더가 있는 인터널 테이블로 만들어줘야 하는데 그렇게 되면 여러 인터널 테이블에서 필요한 필드만 가져와서인터널 테이블 만들어 주게되면 어떻게 해더를 만드는지를 모르겠습니다.
동적인 인터널 테이블과 정적인 인터널 테이블이 있다고 하는데 그 차이를 구분하지를 못하겠습니다.
form 구문에서 참조하는 변수가 인터널 테이블이 아니라고 하더라도 itab의 값만 가져오지 구조는 가져오지 않는 다고 하는데 정의하지 않았을 경우에 시스템이 자동으로 local header line을 생성하게 된다고 하는데 이 경우에는 왜 인터널 테이블이 아니라고 오류가 나오는지 잘 모르겠습니다.
TYPES: BEGIN OF line,
col1(3) TYPE c,
col2 TYPE i,
END OF line.
DATA itab type STANDARD TABLE OF line.
DATA l_idx TYPE i.
PERFORM fill CHANGING itab.
PERFORM out USING itab.
FORM fill CHANGING f_itab LIKE itab.
DATA f_line LIKE LINE OF f_itab.
DO 5 TIMES.
l_idx = sy-index MOD 2.
IF l_idx = 0.
f_itab-col1 = 'KIM'.
f_itab-col2 = sy-index.
APPEND f_itab.
ELSE.
f_itab-col1 = 'LEE'.
f_itab-col2 = sy-index.
APPEND f_itab. ENDIF.
ENDDO.
ENDFORM.
FORM out USING value(f_itab)
LIKE itab.
DATA f_line LIKE LINE OF f_itab.
LOOP AT f_itab INTO f_line.
WRITE: / f_line-col1, f_line-col2.
ENDLOOP.
ENDFORM.
댓글 5
-
아빱초보
2010.11.02 19:59
-
버미!
2010.11.02 20:23
교재에 Internal Table에 대해서 공부를 하셔야 겠습니다.
Form fill 부분을 보니 헤더가 없는 데 Body에다 데이타를 집어 넣을려니 에러가 발생하는 것이고,
방법은 Itab 선언시 헤더가 있게 선언하거나, itab을 참조하여 헤더를 선언해서 헤더->Body로 하셔야 합니다.
-
테라스
2010.11.02 20:28
PERFORM 에서 ITAB을 넘겨줄때 TABLES로 넘겨준다면 FORM 에서 헤더라인이 생길겁니다.
이 프로그램에서는 CHANGING 으로 넘겨줬고 FORM 내부에서
DATA: F_LINE LIKE LINE OF f_itab.으로 헤더를선언하였으니
FORM OUT에서처럼 F_LINE에 값을 넣는게 맞다고 봅니다
-
버미!
2010.11.02 20:32
TYPES: BEGIN OF l_line,
col1(3) TYPE c,
col2 TYPE i,
END OF l_line.
DATA : gs_line TYPE l_line,
gt_line TYPE TABLE OF l_line INITIAL SIZE 0.
Data : begin of l_line2,
col1(3) TYPE c,
col2 TYPE i,
end of l_line2.
DATA : gs_line2 like l_line2,
gt_line2 like TABLE OF l_line2 INITIAL SIZE 0.
Data : begin of gt_line3 occurs 0,
col1(3) TYPE c,
col2 TYPE i,
end of gt_line3. -
꼬마호랑이
2010.11.02 22:16
답변 감사합니다. 아빱초보님 말씀대로 하니 해결되었습니다. 버미님 구문을보니 헤더만드는법을 어느정도 알겠습니다. F_line이 헤더가 되는지 몰랐습니다. 테라스님도 감사합니다. 책을 더 열심히 봐야겠습니다. 아직 구문도 잘 이해안되고 있습니다 ㅜ.ㅜ 또 의문이 생기면
질문드립겠습니다. 그때도 잘 부탁드립니다 ^^
f_line가 헤더가 되는거 같은데요...
f_itab는 바디가 되구요...
즉 f_itab-col1이 아니라 f_line-col1으로 하셔야 하지 않을까욤?
그렇게 해서 append f_line to f_itab. 이렇게 해야 f_itab에 데이터가 append되구욤...