REPORT z15_016 .
DATA: g_total TYPE i,
g_cnt TYPE i,
g_index type i.
DATA : gt_sflight TYPE TABLE OF sflight WITH HEADER LINE.
START-OF-SELECTION.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_sflight
FROM sflight.
DESCRIBE TABLE gt_sflight LINES g_total.
LOOP AT gt_sflight.
g_cnt = g_cnt + 1.
PERFORM progress_indicator
USING g_cnt g_total ' Progressing... '.
ENDLOOP.
WRITE 'SUCCESS'.
*&--------------------------------------------------------------------*
*& Form progress_indicator
*&--------------------------------------------------------------------*
FORM progress_indicator USING value(p_cur)
value(p_total)
value(p_text).
DATA : text(50) TYPE c,
idx1(3) TYPE n.
IF p_cur > p_total.
idx1 = 100.
ELSE.
idx1 = ( p_cur / p_total ) * 100.
ENDIF.
CHECK g_index <> idx1 OR g_index IS INITIAL.
g_index = idx1.
CONCATENATE idx1 ' % : ' p_text INTO text.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = idx1
text = text
EXCEPTIONS
OTHERS = 0.
ENDFORM. " progress_indicator
굵은부분만 해주셔도 되지만 시간 여유 있으시면 전부다 설명좀 부탁드리겠습니다
form부분이 이해가 안되네요ㅜㅜ 좋은하루되세여!
댓글 4
-
전컴™
2010.12.22 01:26
-
초보아밥퍼
2010.12.22 01:46
시간이 좀 널널하여....
DATA: g_total TYPE i, " 총 데이터 건수를 위한 정수형 변수선언
g_cnt TYPE i, " 데이터 건수를 위한 정수형 변수선언
g_index type i. " 인덱스를 위한 정수형 변수선언
DATA : gt_sflight TYPE TABLE OF sflight WITH HEADER LINE. " 헤더를 가진 sflight 의 구조체로 인터널 테이블 선언
- sflight 테이블의 데이터를 발취하여 gt_sflight 와 동일한 필드이름에 데이터를 gt_sflight 인터널테이블 body 에 가져옴
START-OF-SELECTION.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_sflight
FROM sflight.
- gt_sflight 에 대한 데이터 총건수를 g_total 변수로 받아옴.
DESCRIBE TABLE gt_sflight LINES g_total.
- gt_sflight 인터널 테이블의 데이터를 순차적으로 loop 를 돌림
LOOP AT gt_sflight.
- g_cnt 에 1씩 증가시킴(차후 sap indicator 의 나타내기위함)
g_cnt = g_cnt + 1.
- Perform 문을 이용하여 progress_indicator 서브루틴을 타도록 하며 USING를 사용하여 서브루틴에서 사용할
변수(g_cnt, g_total, 'Progressing...')를 넘겨줌
PERFORM progress_indicator
USING g_cnt g_total ' Progressing... '.
ENDLOOP.
- 서브루틴에서 해당 변수를 순서대로 받아 g_cnt -> p_cur, g_total -> p_total, Progressing... -> p_text 변수값으로 사용
FORM progress_indicator USING value(p_cur)
value(p_total)
value(p_text).
DATA : text(50) TYPE c, " Char 타입으로 50자리 변수선언
idx1(3) TYPE n. " Numc 타입으로 3자리 변수선언
- 현재 카운터가 총카운터보다 크면 idx 변수에 100을 아닐경우 현재 카운터를 총카운터 나눈후 100을 곱(진행률을 나타내기위함)
IF p_cur > p_total.
idx1 = 100.
ELSE.
idx1 = ( p_cur / p_total ) * 100.
ENDIF.
- g_index 와 진행률이 같지 않거나 g_index 가 빈값인지 CHECK 하고 아닐경우 아래 루틴은 미진행
진행률을 g_index 쪽으로 부여하함
CHECK g_index <> idx1 OR g_index IS INITIAL.
g_index = idex1.
- idex1(진행률) 과 '%:' 와 p_text(Progressing...)을 TEXT 변수로 가공
예) 10% : Progressing...
CONCATENATE idx1 ' % : ' p_text INTO text.
- SAP Indicator 펑션을 이용하여 화면의 아래쪽에 시계와 text를 보여줌
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = idx1 " 시계의 진행률(10일경우 12시와 2시정도 사이에 푸른색으로 표시, 나머진 흰색)
text = text " 시계옆 문구
EXCEPTIONS
OTHERS = 0.
- LOOP가 끝나면 Success 출력.
WRITE 'SUCCESS'.
뭐 이정도 되겠네요. 쉽게 얻은 내용은 쉽게 잊기 마련입니다. 공부 많이 하시길... -
안녕바다
2010.12.22 01:51
다시한번 감사드립니다 ㅜㅜ 열공하겠습니다.
-
휀돌이
2010.12.22 19:00
오.. 초보 아밥퍼님 대단하시네요 ! 답변 종결자@
SAPGUI_PROGRESS_INDICATOR 펑션은 프로그램 실행시,
왼쪽 하단에 시계모양으로 진행상태를 보여주는 기능을 합니다.
gt_sflight 의 건수를 기준으로 %로 1~100%까지 보여주는 것입니다.
LOOP문 안에 들어있어서 1씩 증가하면서 Count / Total * 100 하면 %가 나오져. 이걸 펑션에 넣어준 것입니다.
즐밥하세요~^^