우선 FIELD-SYMBOL 의 여러가지 변형을 살펴보면
1. ASSIGN f TO <fs>.
단순히 field f의 값을 <fs>가 가리키도록 한다.
2. ASSIGN (f) TO <fs>.
동적 field를 이용한것인데 field f안의 값을 또 field명으로 보고 그 field의 값
을 <fs>가 가리키도록 한다.
3. ASSIGN TABLE FIELD (f) TO <fs>.
2와 같은 경우이나 f 의 값이 table의 field명 일때 그 table field의 값을
<fs>가 가리키도록 한다.
4. ASSIGN LOCAL COPY OF MAIN TABLE FIELD (f) TO <fs>.
3와 같은 경우이나 tables로 선언된 main program의 table field값을
<fs>가 가리키는 것이 아니라 값만 복사 하여 사용하기 때문에 변경할 수 없다.
5. ASSIGN COMPONENT idx OF STRUCTURE rec TO <fs>.
structure의 구성요소 순서를 idx에서 읽어 그 순서에 위치한 구성요소의 값을
<fs>에 할당한다.
6. ASSIGN COMPONENT name OF STRUCTURE rec TO <fs>.
structure의 구성요소명(field명)을 name에서 읽어 그 구성요소의 값을
<fs>에 할당한다.
5번을 제외한 모든 경우는 field명을 사용하는 것이라서 field명에 규칙이 없으면
coding line 줄이는데 효과를 보지 못한다.
따라서 여기서는 field명에 규칙이 없더라도 coding line을 획기 적으로 줄일 수 있는
5번경우를 사용한 예제만 소개하겠다.
예제)
FIELD-SYMBOLS : <FS1>, <FS2>.
DATA:IDX1 LIKE SY-INDEX.
DATA: BEGIN OF ITAB1 OCCURS 0,
CCYYMM(8),
WERKS LIKE MARD-WERKS,
MATNR LIKE MARD-MATNR,
LABST LIKE MARD-LABST,
UMLME LIKE MARD-UMLME,
INSME LIKE MARD-INSME,
EINME LIKE MARD-EINME,
SPEME LIKE MARD-SPEME,
RETME LIKE MARD-RETME,
VMLAB LIKE MARD-VMLAB,
VMUML LIKE MARD-VMUML,
VMINS LIKE MARD-VMINS,
VMEIN LIKE MARD-VMEIN,
VMSPE LIKE MARD-VMSPE,
VMRET LIKE MARD-VMRET,
END OF ITAB1.
DATA: ITAB2 LIKE ITAB1 OCCURS 0 WITH HEADER LINE.
경우1) FIELD-SYMBOL 사용하지 않았을 경우
LOOP AT ITAB1.
READ TABLE ITAB2 WITH KEY CCYYMM = ITAB1-PERIOD
WERKS = ITAB1-WERKS
MATNR = ITAB1-MATNR
BINARY SEARCH.
IF SY-SUBRC <> 0.
WRITE : / 'Not found in ITAB2 : ',
ITAB1-CCYYMM,
ITAB1-WERKS,
ITAB1-MATNR.
ELSE.
IF ITAB1-LABST <> ITAB2-LABST.
WRITE : / SY-INDEX,
ITAB2-CCYYMM,
ITAB2-WERKS,
ITAB2-MATNR,
ITAB1-LABST,
ITAB2-LABST.
ENDIF.
IF ITAB1-UMLME <> ITAB2-UMLME.
WRITE : / SY-INDEX,
ITAB2-CCYYMM,
ITAB2-WERKS,
ITAB2-MATNR,
ITAB1-UMLME,
ITAB2-UMLME.
ENDIF.
.............. 12번 반복 ........
ENDIF.
ENDLOOP.
경우2) FIELD-SYMBOL 사용했을 경우
LOOP AT ITAB1.
READ TABLE ITAB2 WITH KEY CCYYMM = ITAB1-PERIOD
WERKS = ITAB1-WERKS
MATNR = ITAB1-MATNR
BINARY SEARCH.
IF SY-SUBRC <> 0.
WRITE : / 'Not found in ITAB2 : ',
ITAB1-CCYYMM,
ITAB1-WERKS,
ITAB1-MATNR.
ELSE.
IDX1 = 3.
DO 12 TIMES.
IDX1 = IDX1 + 1.
ASSIGN COMPONENT IDX1 OF STRUCTURE ITAB1 TO <FS1>.
ASSIGN COMPONENT IDX1 OF STRUCTURE ITAB2 TO <FS2>.
IF <FS1> <> <FS2>.
WRITE : / SY-INDEX,
ITAB2-CCYYMM,
ITAB2-WERKS,
ITAB2-MATNR,
<FS1>,
<FS2>.
ENDIF.
ENDDO.
ENDIF.
ENDLOOP.
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
984 |
BI 관련 자료입니다.
[8] ![]() | 현서아빠 | 2009.10.23 | 5822 |
983 |
LSMW 메뉴얼(한글)
[10] ![]() | avtiveman | 2008.01.08 | 5815 |
982 | 문자열에서 특정문자(열) 변경 및 삭제 [1] | 김씨 | 2007.05.29 | 5812 |
981 |
날짜관련 함수
[13] ![]() | vava76 | 2008.06.10 | 5804 |
980 | [re] erp & abap 초보자 개념 [6] | bill | 2009.12.16 | 5793 |
979 |
Long Text
[6] ![]() | BLISS | 2007.05.30 | 5764 |
978 |
open sql
[1] ![]() | 김경재 | 2008.01.08 | 5752 |
977 |
bdc레코딩및예제
[31] ![]() | BC고 | 2009.05.14 | 5741 |
976 |
ABAP Debugging Tips and Tricks
[4] ![]() | 아밥뽀 | 2016.04.01 | 5736 |
» | FIELD-SYMBOL 정리 [1] | 하얀천군 | 2007.11.02 | 5724 |
974 |
유용한 함수 모음 입니다...^^;
[11] ![]() | 이원욱 | 2007.03.15 | 5706 |
973 |
ABAP INTERPACE에 관한 개념정리 문서
[5] ![]() | 초보보초보 | 2007.02.28 | 5704 |
972 |
ALV개념 정리
[20] ![]() | 팡다루 | 2007.03.23 | 5671 |
971 |
Essential_ABAP_Objects
![]() | 우하하 | 2007.06.28 | 5666 |
970 | selection screen program [1] | 철죽1 | 2012.09.02 | 5660 |
969 |
Sap User-Exit
[13] ![]() | 곰돌이 | 2007.07.27 | 5645 |
968 |
APO&BW
[1] ![]() | sonata | 2009.09.23 | 5637 |
967 |
SAP Script에 대한 자료입니다.
[11] ![]() | 김을민 | 2007.08.22 | 5630 |
966 |
스마트폼 Page Format 만드는 방법
[5] ![]() | 민버미꺼! | 2009.03.26 | 5630 |
965 |
ABAP 개발 가이드 입니다.
[6] ![]() | pimpjin | 2008.03.04 | 5629 |