인터널테이블 ITAB1 ITAB2 ITAB3 세개가 존재하는데
동일한 로직의 LOOP문을 돌려야할 경우에
LOOP AT ITAB1.
...
ENDLOOP.
이렇게 일일히 세개를 쓰면 코드가 길어지자나요~
그래서 FORM문을 하나 만들고
PERFORM GET USING 'ITAB1'.
PERFORM GET USING 'ITAB2'.
PERFORM GET USING 'ITAB3'.
이런 식으로 텍스트를 파라미터로 넘겨서 호출을 하고자 합니다.
여기서 필드심볼을 사용하려는데 생각보다 쉽지가 않네요
1)필드심볼 선언 방법
2)ASSIGN 방법
3)동적으로 할당된 경우에는 <FS>
이 세가지 답변좀 부탁드립니다.
예제로 올려주시면 더 감사하구요~
* e-abap님에 의해서 게시물 복사되었습니다 (2010-01-09 13:44)
* e-abap님에 의해서 게시물 이동되었습니다 (2010-01-09 13:55)
댓글 4
-
요요
2009.12.31 01:45
-
숟가락맨
2009.12.31 01:45
itab1 , itab2 , itab3 이 구조가 서로 틀린가요? 같으면...perform 문에 테이블을 걍 넘기면 될테고...틀리더라도..필드 심볼 이용하면 가능할진 몰겠지만..소스가 오히려 더 지저분해질듯한데요....;;; 걍 워크 에어리어 하나 만들어서 itab1,itab2,itab3을 돌릴때 워크에어리어로 move시켜놓고 공통 perform문에 워크에어리어를 태워서 해당 로직의 값을 구한뒤 각각의 인터널 테이블로 옮기는게 나을듯 한데요...
그리고 필드 심볼 선언 방법이나 assign 방법은 검색하면 많이 나올겁니다..예제..^^
-
whdrms11
2009.12.31 02:43
itab1 , itab2 , itab3 의 구조가 모두 동일하고 같고 같은 로직을 탄다면 PERFORM GET TABLES ITAB1.
하시고
*&---------------------------------------------------------------------*
*& Form GET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM GET TABLES PT_TAB STRUCTURE ITAB1.
ENDFORM. " GET
요렇게 쓰시면 될꺼 같은데요 ;;; ㅎ
-
Joon
2009.12.31 19:43
요요님 감사합니다. ITAB의 구조가 다르다는 조건을 제가 안적었네요...
답변해주신 모든분들 감사합니다~
TYPES : BEGIN OF ty_data,
field1 TYPE c LENGTH 2,
field2 TYPE c LENGTH 3,
END OF ty_data.
DATA : itab TYPE TABLE OF ty_data.
DATA : tabname TYPE tabname.
DATA : fieldname TYPE fieldname.
FIELD-SYMBOLS : <fs_table> TYPE table,
<fs_struc> TYPE ANY,
<fs_field> TYPE ANY.
DEFINE get_field.
unassign &3.
assign component &2 of structure &1 to &3.
END-OF-DEFINITION.
* make data
APPEND 'ABCDE' TO itab.
APPEND 'FGHIJ' TO itab.
APPEND 'KLMNO' TO itab.
* INIT
UNASSIGN : <fs_table>, <fs_struc>.
* ASSIGN ITAB
ASSIGN ('ITAB') TO <fs_table>.
* 또는 tabname = 'ITAB'.
* ASSIGN (tabname) TO <fs_table>.
CHECK <fs_table> IS ASSIGNED.
WRITE 'Loop 사용예' COLOR COL_KEY.
LOOP AT <fs_table> ASSIGNING <fs_struc>.
fieldname = 'FIELD1'.
get_field <fs_struc> fieldname <fs_field>.
CHECK <fs_field> IS ASSIGNED.
WRITE :/ sy-tabix, <fs_field>.
ENDLOOP.
SKIP.
WRITE 'Read table 예' COLOR COL_KEY.
fieldname = 'FIELD1'.
READ TABLE <fs_table> ASSIGNING <fs_struc>
WITH KEY (fieldname) = 'AB'.
CHECK sy-subrc IS INITIAL.
fieldname = 'FIELD2'.
get_field <fs_struc> fieldname <fs_field>.
WRITE :/ 'FIELD1 = AB', '/', (10) fieldname, '=', <fs_field>.
대충 이정도면 되실지요. 시간이 부족하여 자세히 못해드려 죄송요. ^^;
데이터 처리하시는데는 문제 없으실 거예요.
dynamic 처리는 오류발생시 오류잡기가 난해해지기 때문에
로직을 신중하게 만드시는 것이 좋을 거예요.