300x250
728x90

FIELD-SYMBOLS이란


: 자신의 메모리 공간을 갖지 않고 해당하는 변수에 Assign 해주고 동적인 접근을 가능하게 해주는 것.

 

 

여기서 중요한 건 

 

FIELD-SYMBOLS타입을 선언했을 때 

그냥 선언했을 때와 

TYPE ANY을 썼을 때 

 

차이점을 알아 볼 것이다.

 

말로 이해가 안 갈 수 있기 때문에 다음 로직에 디버깅을 통해서 알아보자.

- <FS1>, <FS3>는 TYPE을 지정을 안 해주었기 때문에 자동적으로 TYPE C(1)이 된다.

- <FS2>TYPE ANY을 지정해주었기 때문에 ASSIGN 구문을 타지 않는 이상 데이터를 확인할 수 없다.

 

 <FS1> , <FS2>를 비교해보면  

  <FS1>는 ASSIGN을 통해서 타입이 MATNR 필드로 바뀌게 되었으며

  <FS2>는 ASSIGN을 만나지 않았기 때문에 값이 없는 상태이다.

 

여기서 중요한 것은 이 상태로 PERFORM을 타게 된다면 덤프가 발생이 된다. 

 

# 그 이유는 <FS2>는 데이터가 없는 상태이기 때문에 없는 값을 PERFORM을 통해서 넘길려고 하니깐 덤프발생 하는 것이다.

 

그래서 필드심볼을 선언 할 때는 잘 알고 선언하는 것이 중요하다

 

결국 차이점

<FS1>, <FS3>은 ASSIGN이 자동적으로 되어있다. 타입은 C(1) 
<FS2>은 ASSIGN을 만나기 전 까지는 값이 없다.

로 결론이 났다. 

 

 

 

도움이 되셨으면 클릭 한번 부탁드립니다!!

 

 

 

 

전체적인 로직


DATA:
  GS_MARA TYPE MARA.


FIELD-SYMBOLS:
  <FS1>,
  <FS2> TYPE ANY,
  <FS3>.


IF <FS1> IS ASSIGNED.
  BREAK-POINT.
ENDIF.


SELECT SINGLE *
  FROM MARA
  INTO GS_MARA.


ASSIGN COMPONENT 'MATNR' OF STRUCTURE GS_MARA
  TO <FS1>.


PERFORM XXXX
  USING
    GS_MARA
    <FS1>
  CHANGING
    <FS2>.


BREAK-POINT.



FORM XXXX
  USING
    VALUE(PS_MARA) TYPE MARA
    VALUE(P_1)
  CHANGING
    P_2.

  IF PS_MARA-MATNR IS NOT INITIAL.
    BREAK-POINT.
  ENDIF.

  IF P_1 IS INITIAL.
    BREAK-POINT.
  ENDIF.


ENDFORM.
728x90
LIST

'.SAP > ..ABAP' 카테고리의 다른 글

SAP Memory 조회  (0) 2022.11.11
SAP SET/GET Parameter ID  (0) 2022.11.11
SAP ABAP 연산자  (0) 2022.09.20
SAP ALV Buffer 초기화  (2) 2022.09.16
SAP TabStrip(Report Program) 정리  (6) 2022.08.11