메뉴 건너뛰기

SAP 한국 커뮤니티

FIELD-SYMBOL설명 및 예제 프로그램

Delight 2008.04.30 10:47 조회 수 : 9424 추천:8

FIELD만 바뀌고 규칙적인 작업을 할때 각각을 프로그램 LOGIC으로 구성하려면 
 단순 CODING으로 쓸 데없이 LINE만 길어 질 수 있다. 
 이때 FIELD-SYMBOL을 사용하면 간단히 해결되면서 프로그램을 분석하기도  한결 수월해
 진다. 


 우선 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.
 
 위 예제는 field수가 많을 수록 더욱 확실한 효과를 볼수 있다.

번호 제목 글쓴이 날짜 조회 수
487 ALV 동적 필드 구성 [4] 꿀홍삼 2015.02.06 9540
486 SUBQUERY 사용예 입니다. [1] 노름마치 2007.11.20 9534
485 간단한 계산공식은 Macro를 사용하자 [5] 양키 2011.04.14 9530
484 Open SQL에서 SUM 사용시 유의사항. [11] 나침반친구 2007.06.07 9530
483 Field Catalog 가져오지 못하는문제(REUSE_ALV_FIELDCATALOG_MERGE) [3] 양키 2013.08.16 9473
482 sap 메뉴에서 표준 매뉴 전환 [1] selection장 2013.09.13 9444
» FIELD-SYMBOL설명 및 예제 프로그램 [17] Delight 2008.04.30 9424
480 <img src=d.gif>Source Activation 시 [READ_REPORT_LINE_TOO_LONG] dump 발생하면?[추천:e-abap] [5] JYG 2011.02.11 9416
479 테이블컨트롤에서 F4 값 변경시 다른 필드 값도 변경하기 F4IF_INT_TABLE_VALUE_REQUEST [1] 한해동안 2008.07.24 9402
478 표준편차구하는 로직 윤사모 2011.03.23 9369
477 BAPI_MATERIAL_SAVEDATA 자재마스터 생성시에 사용하세요. [1] 노름마치 2007.12.10 9238
476 SAP 단순하지만, 모르면 정말 불편 한 기능들 [22] SARA 2007.03.27 9212
475 TYPE-1 프로그램에서 실행버튼 없애기 [1] 아밥뽀 2013.09.23 9108
474 엑셀에서 '-' 부호 앞으로 옮기기 [18] file MasFI 2013.02.08 8983
473 SELECT-OPTIONS 문법 [5] sapjoy 2006.12.28 8971
472 ALV 내용 변경 방법. [8] 초보보초보 2007.02.07 8926
471 SAP GUI 730 ALV Grid 느림 현상(해결방법) [3] Dave 2013.09.27 8882
470 효과적인 ABAP/4 프로그램 작성기법 [24] 열공아밥 2009.12.20 8878
469 유용한 t-code 모음들 [26] 아이디빵 2008.04.24 8794
468 where 조건을 상황에따라 바꿔볼까? [8] 양키 2011.04.14 8738