필드심볼 기초편
https://yulbaper.tistory.com/3
[율밥퍼] SAP ABAP - FIELD-SYMBOLS 필드심볼 기초편
오늘은 FIELD-SYNBOLS에 대해 써보려고 한다 이게 알고나면 쉬운데 나중에 또 쓸라고하면 어떻게 썼더라..하고 생각이 안난다 그러니 일기로 남겨야징... 첫번째로.. 아밥 필드심볼의 특징을.. 알려
yulbaper.tistory.com
이번엔 필드심볼 심화 응용 문법에 대해서 설명해 드리겠습니다 :)
1. ASSIGN offset TO <FS>.
ASSIGN을 하면서 그 변수에 offset할 수 있는 걸 아는가?
완전편리.. 내가 1편에 안적어놔서 2편에 이어서 마저 설명한다.. 후후
저 offset 부분엔 당연히 변수가 들어갈거다.
(offset이 뭔지 모르면 구글 검색해보고 오세욤..혹시 요청이 생기면 offset도 블로그에 적어보겠슴)
일단 예시로 보여주겠다. 예시보면 바로 이해 가능
DATA : LV_CHAR(10) TYPE C VALUE ‘규요미용요미‘.
FIELD-SYMBOLS <FS1> TYPE ANY.
FIELD-SYMBOLS <FS2> TYPE ANY.
ASSIGN LV_CHAR+3(*) TO <FS1>.
ASSIGN LV_CHAR(3) TO <FS2>.
이렇게 사용이 가능하다.
이러면
<FS1>은 용요미 값이 할당되어 있고,
<FS2>는 규요미 값이 할당되어있다.
유동적인 offset값이 필요할 때 사용하면 좋을 것 같돵~~
필드심볼 참 유용하쥬?
사실 이 부분에 관해서 함께 일하는 상무님께 여쭤봤다.
필드심볼에서 ASSIGN해서 offset사용하는 경우 거의 없다고 했다.
물론 몰라도 되지만 알면 언젠간 써먹을 일이 있지 않을까?
2. ASSIGN VALUE TO <FS> RANGE LS_STRUC.
이건 나도 공부하다가 알게된 특이한 함수인데.
일단 알게되었으니 적어보기로한다.
이건 Structure와 같은 연속된 메모리 공간을 이어서 사용하는거다.
예시로 알려주겠다.
DATA : BEGIN OF LS_STRUC,
LV_NUM TYPE C LENGTH 10 VALUE ‘1234567890’,
LV_ABC TYPE C LENGTH 10 VALUE ‘ABCDEFGHIJ’,
END OF LS_STRUC.
FIELD-SYMBOLS <FS1> TYPE ANY.
FIELD-SYMBOLS <FS2> TYPE ANY.
(1) ASSIGN LS_STRRUC-LV_NUM TO <FS1>.
이렇게하면 <FS1>에 ‘1234567890’ 값이 들어있을 거다.
여기까진 아주 당연한거니까~
그런데!!!
(2) ASSIGN <FS1>+10(10) TO <FS2> RANGE LS_STRUC.
이라고 하면 어떻게 될까? 오류는 안난다 ^__^
이 뜻은 <FS1>을 <FS2>에 Structure를 전체 크기로 해서 할당한다는 뜻이다.
Structure가 메모리에 할당된 총 공간만큼 할당이 가능 하게 하는 옵션이다.
즉!!!!!!
LS_STRUC의 LV_NUM + LV_ABC의 메모리 크기를 쓴다는 것!
그니깐 LV_NUM의 10자리가 끝이 아니라 그 다음 컴포넌트인 LV_ABC까지
한 몸뚱이고 이어서 offset을 적용 할 수 있다는 말이다.
자 다시 (2)을 보자!!
<FS1>에는 현제 LV_NUM이 ASSIGN돼있다. 그치?
<FS1>의 열번째 자리 뒤부터 10자리를 <FS2>에 할당한다고 했으니,
값을 살펴보자면,
LV_NUM의 10번째자리는 0이다.
그 다음 숫자는 없지만,
내가 위에서 스트럭쳐의 전체크기로 할당한다했다. 그렇게 해주는게 ASSIGN TO RANGE다.
그러니깐 10번째자리의 다음은 LV_ABC의 A가 되는거다.
10번째자리 뒤부터 10자리이니
<FS2>에는 ‘ABCDEFGHIJ’가 담겨있을거다.
이제 좀 이해가 되는가??
ASSIGN의 RANGE옵션은 옆사람도 옆옆사람도 다~ 한몸이 되게 만들어준다고 보면 된당.
3. ASSIGN VALUE TO <FS> CASTING TYPE C.
요거는 현업에서도 종종 쓰인다구 했당.
Select 할때도 종종 쓰는 casting..
필드심볼에서도 사용할 수 있었던 걸 알고 있는가?
(나는 몰랐었다.. 심오한 ABAP세계.. 나는 ABAP밖에 몰른다 사실..후후)
1) 기본적인 구문으로는 아래와 같이 쓰인당.
대충 보면 오~ 요렇게 쓰는구나 할거다
ASSIGN LV_VALUE TO <FS> CASTING TYPE C.
ASSIGN LV_VALUE TO <FS> CASTING TYPE MATART.
ASSIGN LV_VALUE TO <FS> CASTING TYPE MARA-MATART.
2) 요 CASTING 구문에서 위에서 알려줬던 RANGE 함수처럼
메모리를 할당해서도 형변환이 가능하다.
알아두면 유용할 것 같아서 예시를 보여주겠뚬.

짠~~ 오늘 날짜를 스트럭쳐 타입으로 나누고자 한당
위에 써놓은거 열심히 읽었으면 대강 오.. 어떻게 들어가겠구나 하고 알거당
(머리 속으로 생각해 보시길ㅎㅎ)

정답@@@@@@@@@@@@
아주 간단하게 날짜를 나눌 수 있겠쥬?
물론 다른 방법들도 많지만 이렇게 필드심볼을 활용하여 나눌 수 있다는 사실을
알고 있다면..
당신은 고수너낌 뿜뿜하실 수 있음..후후...
3) ASSIGN LV_VALUE TO <FS> CASTING DESIMAL 1.
CASTING 구문에서 소수점 위치를 변경할 수 있당.
ABAP에서 소수점 위치를 변경할 일이란..
금액을 표시한다던가?등등.. 수량이라던가..
내 경험의 일화로는..(귀찮으면 걍 내리고 구문만 봐도 OK)
엑셀에서 금액을 입력한 후 나의 REPORT프로그램에 업로드하여
ALV로 뿌려주는 프로그램을 만든적이 있당.. 근데..
아놔~~~~~ 나는 100원 입력했는데 자동 FIELDCATALOG MERGE때매
자꾸 ALV에는 10,000원 이라고 뿌리는거야 ㅡㅡ
100원이 만원이 되는 매직..
BDC 이용해서 스탠다드 프로그램에 금액 넣어주는 어쩌구저쩌구 야악간 복잡한 프로그램인데
이거 이렇게 되면 난리 난다굽쇼..
근데 사실 그냥 나누기 100ㅎㅐ줘도 되는데
그럼 혼나용.. (멋도 없음)
물론 고수들은 다알겠지만.. 초보 아밥퍼들을 위해 멋있는 펑션 번외로 하나 알려드림.
바로@@@@@@@@@
BAPI_CURRENCY_CONV_TO_INTERNAL
이 펑션은 통화키에 맞게 금액 을 sap로 넣을때 금액표시를 변경해주는거당.
사용 법은

요렇겡.. 반대로 하는것도 있으니 궁금하면 찾아보세용..
(나중에 기회되면 이거 관련해서도 블로그에 적겠슴니당)
암튼.. 사설이 길었다..
소수점 변경하는 법 알려드릴께

와 이렇게만봐도 예상되쥬?

요렇게도 소수점 값 변경할 수 있다.
대강 내가 아는 필드심볼들의 아~~~~~~~~~~~~주 유용한 기능들을 써봤당..

4. 꾸울 팁 HONEY HONEY
필드심볼을 잘 활용하면 퍼포먼스를 높일 수 있다!
여러분들 그것 알고 있는가? LOOP에서 MODIFY를 하는 것은 퍼포먼스를 굉장히 떨어트린다.
울회사 상무님은 퍼포먼스를 굉장히 중요시 여기신다.
나에게도 MODIFY 말고 필드심볼로 바로 ASSIGN 시키라는 말씀을 많이 하셨다.
어떤식으로 사용할 수 있는지 예시 보여드리겠숩니당 ~~

요걸 보면 10개의 라인에 금액이 다 100으로 들어가있는데
LOOP 돌려서 모두 123원으로 바꿔쭸다.
MODIFY 없이 테이블 값들 모두 바꿔버리는 mAgic

한가지 더 팁@@@@@@@@@@@@@
READ TABLE에서도 MODIFY없이 데이터 변경 가능하다.
진ㅉ ㅏ 꿀팁.

값을 999를 입력해줬당.
디버깅을 돌려보믄@@@

짜잔!
진짜 필드심볼 편리하쥬?
프로그램도 짱짱 빨라집니당 굿쟙
다음에 필드심볼 관련해서 또 쓸내용이 있으니..
필드심볼 3탄으로 돌아오겠숨니댱당당당
숭구리당당
'밥린이의 아밥TIP' 카테고리의 다른 글
[율밥퍼] SAP ABAP - ALV HANDLE_TOOLBAR (0) | 2023.09.06 |
---|---|
[율밥퍼] SAP ABAP - Search Help F4 (1) | 2023.09.05 |
[율밥퍼] ABAP 필드심볼 - FIELDSYMBOL 3 (Feat. 역참조) (0) | 2023.09.03 |
[율밥퍼] SAP ABAP - FIELD-SYMBOLS 필드심볼 기초편 (0) | 2023.09.01 |
[율밥퍼] SAP ABAP - SIMPLE TREE만들기 (0) | 2023.09.01 |