본문 바로가기
ERP-SAP/SAP기초사용법

<ABAP> 쉽고 간단하게 배우는 기초 ABAP 05편 (LOOP, IF 처리)

by 행복한워니의 기록 2024. 9. 5.
728x90
반응형

이전편 salv가 너무 쉬워서 다들 이게 뭐야 했을거라 생각한다..


그래서 이제 데이터를 뿌릴 줄도 아니까
LOOP 를 돌며 뭔가를 해보자.

 


이전편 사진에서 필드명 : 점유좌석 필드가 있었다.
아래다시보면 숫자들이 있는데 저기서
380석 이상인것만 보고 싶다.


다시한번 아래처럼 db구경하고....

(DB명 SFLIGHT... 4편에서 SELECT 해왔지? 해당 DB가  구성된 필드를 보러 온것이다.)


필드명이 seatsocc (점유좌석)라는걸 확인했다. 

자 그럼 우린 예비개발자로써 여러가지 방안이 있을거다라는걸 알아야 한다.


개발은...

1가지 정답이 있지 않다....
그게 개발의 매력인데 퍼포먼스가 조금 더 낫고
유지보수시 보기편한 것들이있다.


자 잡설치우고 코딩을 보자

1. 새로운 itab (GT_GET) 을 선언해서 거기다 좌석수 380개 이상인 라인을 다시 담는 방법

2. GT_SFLI3 에서 좌석수(SEATSOCC)가 380개가 안되는(미만인) 라인을 지우는 방법

위와같이 로직 2개을 이미 코딩해놨다.

1번을 활성화 시키고

이전편에서 배운 salv에서 t_table = gt_get(새롭게 담은 ITAB명) 으로 넣어보자.


로직설명??
Loop at gt_sfli3 into gs_sfli3. <- 돌아라. 순차적
if gs_sfli3-seatsocc >= 380. <-좌석 380개 이상이면
  append gs_sfli3 to gt_get. <-여기다 쌓아라.
   clear gs_sfli3. 클리어해라
endif.
endloop.


끗...
너무쉬운 abap이지???

APPEND 가 뭐냐고???

GS_SFLI3 은 어떤 모양의 스트럭쳐(아주 얕은 1개짜리 바구니)인가?

DB : SFLIGHT 모양을 본따서 만들었지??

그럼 GT_GET은 사진에서 어떻게 DATA 선언했지?

DATA :  GT_GET LIKE TABLE OF GS_SFLI3.  <- GS_SFLI3과 똑같은 모양의 깊은바구니로 선언. 

고로  GT_GET 은 GS_SFLI3 과 똑같이 생겼는데 GT_GET은 여러건을 담을 수 있는 인터널 테이블이되었으니

그냥 APPEND 만 하면 된다. 

 

그럼 출력을 보자...

모야 왜이리 쉬워.....
그냥 다른 바구니에 담아서 출력했는데 이렇게 잘보여??


그렇다...
이 로직의 장점은 원본 ITAB인 GT_SFLI3 을 가공하지 않아 보존되고,
쿨하게 새 Itab을 만들어 거기다 담고 출력했다.


그러니 새itab(GT_GET)을 지지고 볶고 지우고 넣고 해도 원본인 GT_SFLI3에 문제가 없다는거다..

이런 컨트롤을 써야할 때가 있다.


가령 기준테이블에서 이것저것 가공해서
여러 테이블로 나눠 비교하고 그런 로직들도 생길 수 있으니...



그럼 두번째..
원본ITAB인 GT_SFLI3에서 380 좌석 미만은 지우자.

if 조건을 <380 으로 바꾸고.

delete itab index sy-tabix.

라는 구문을 썼다.
(아래참조)


저 sy-tabix는 뭐냐고?

sap내부에서 쓰는 시스템필드라 해야하나...
즉 loop에 몇번째 라인을 돌고있는지
sy-tabix 필드는 알고 있다.

그렇기에 "delete 하는데 IF문 조건에 만족한(380좌석 미만) 해당 라인을 지워줘!!!"

라고 말한 것이다...

그리고 출력을 하면???
똑같지 뭐....ㅎㅎㅎㅎ

이렇게 쉽다.....

내가 항상 예전부터 궁금해 하던게 그럼 이걸 배워 어따쓰냐? 실전에 쓸게 있나? 왜 이짓을 해??
이 의문이 드는데...
기초중의 기초고 무조건 쓴다..

예를 들어보자.

(요건사항)
SAP FI 모듈


회계전표중에서 전표 생성일이
1달전인것부터 오늘까지 생성된거 전부 보여주세요.

그런데 전표유형이 KG 인것만 나오면 되요.

아, 작성자는 이 기획부서 사람들만요...


이 요건만 봐도 다양한 로직이 나올 수 있는데
배운대로 스팩을 써보면.

1. DB: BKPF에서 SELECT 하는데 조건은
   BUKRS = 우리회사 GJAHR = 이번년
  CPUDT IN LR_CPUDT(날짜범위 만들어)
  BLART = 'KG'
  USNAM IN LR_USNAM(기획부서사람)

이렇게 한방에 가져올 수 있....지만..우린 배운대로 먼저 날짜범위만 해서 가져온 후에
LOOP를 돌며 IF BLART <> 'KG'.
인 경우 지워버리거나,
KG인 경우 다른 ITAB에 담음 된다.

또 IF하나 더 줘서 기획부서사람들 ID에 들어오면 넘어가고 아니면 담지말면 된다.


즉, 실전이 분명 쓰이는 기술들이니 한번 잘 해보자.


그럼 6편은 댓글반응을보고..... ㅎㅎ

이게 어렵게 느껴진다면 당신이 모르는 부분은 분명 선언부터라 생각한다.....

1편부터 여기까지 다시 정독해와야 한다........

예전 내 사수인 창ㅇ 형님이 이런말을 했었다.

(5개월되었을 때) 넌 아직 인터널테이블 개념하고 DB 테이블하고 

이해도가 떨어지고 있어서 더 많이 공부해야해...

 

난 분명 안다고 생각했었는데........ 정말 아니었었다.

그러니... 많이 짜보자..

 

728x90
반응형