TABLES : vbak. " Sales Document: Header Data
SELECT-OPTIONS :
* Sold-to party
s_kunnr FOR vbak-kunnr,
* Sales Organization
s_vkorg FOR vbak-vkorg DEFAULT '0100' TO '0200'.
PARAMETERS :
p_datum TYPE datum DEFAULT sy-datum.
*---------------------------------------------------------------------*
INITIALIZATION.
* Fill S_KUNNR
CLEAR s_kunnr.
s_kunnr-sign = 'I'.
s_kunnr-option = 'EQ'.
s_kunnr-low = '1000'.
APPEND s_kunnr.
s_kunnr-low = '1010'.
APPEND s_kunnr.
s_kunnr-low = '1020'.
APPEND s_kunnr.
s_kunnr-sign = 'I'.
s_kunnr-option = 'BT'.
s_kunnr-low = '2000'.
s_kunnr-high = '3000'.
APPEND s_kunnr.
s_kunnr-sign = 'E'.
s_kunnr-option = 'BT'.
s_kunnr-low = '2800'.
s_kunnr-high = '2900'.
APPEND s_kunnr.
CLEAR s_kunnr.
s_kunnr-sign = 'E'.
s_kunnr-option = 'EQ'.
s_kunnr-low = '2700'.
APPEND s_kunnr.
*---------------------------------------------------------------------*
START-OF-SELECTION.
* Print Selection Parameters
PERFORM f_print_selections.
*---------------------------------------------------------------------*
* Form f_print_selections
*---------------------------------------------------------------------*
FORM f_print_selections .
DATA:
l_even TYPE p,
l_offset TYPE i VALUE 0,
BEGIN OF lt_info OCCURS 20,
flag,
olength TYPE x,
line LIKE raldb-infoline, "변형정보
END OF lt_info.
CALL FUNCTION 'PRINT_SELECTIONS'
EXPORTING
mode = 'TABLE'
rname = sy-cprog
rvariante = sy-slset
TABLES
infotab = lt_info.
WRITE :/ '--- SELECTION PARAMETERS ---'(001).
SKIP.
LOOP AT lt_info FROM 6.
IF lt_info-line+1(1) <> '-'.
l_even = ( sy-tabix + l_offset ) MOD 2.
IF l_even = 0 AND
lt_info-line+5(4) <> 'or '(002) AND
lt_info-line+5(4) <> 'and '(003).
WRITE : / lt_info-line+2(30).
ELSEIF lt_info-line+5(4) = 'or '(002) OR
lt_info-line+5(4) = 'and '(003).
l_offset = 1 - l_offset.
WRITE : /21 lt_info-line+5(60).
ELSE.
WRITE : lt_info-line+16(49).
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " f_print_selections
1.
INITIALIZATION. 아래 내용에 대한 질문입니다.
조회창에는
s_kunnr-sign = 'I'.
s_kunnr-option = 'EQ'.
s_kunnr-low = '1000'.
APPEND s_kunnr.
만 보이는 것 같은데...
나머지는 어떻게 되는건가요?
나머지는 확인이 않되니 어떤 흐름으로 되는 이해가 않가네요.
2.
LOOP AT lt_info FROM 6.
IF lt_info-line+1(1) <> '-'.
l_even = ( sy-tabix + l_offset ) MOD 2.
IF l_even = 0 AND
lt_info-line+5(4) <> 'or '(002) AND
lt_info-line+5(4) <> 'and '(003).
WRITE : / lt_info-line+2(30).
ELSEIF lt_info-line+5(4) = 'or '(002) OR
lt_info-line+5(4) = 'and '(003).
l_offset = 1 - l_offset.
WRITE : /21 lt_info-line+5(60).
ELSE.
WRITE : lt_info-line+16(49).
ENDIF.
ENDIF.
ENDLOOP.
위 소스에 대한 질문입니다.
분석해볼려고 하는데 프로그램적으로 이해는 가는데 디버깅을 걸어보니
숫자만 나오고 어떻게 결과처럼 나오는지 이해가 안가네요.
lt_info 테이블내용에 어떻게 저런 결과가 들어가는지 이해가 않가네요.
call function문에 연관이 있는것 같은데..
도저히 분석이 않되네요. 어떻게 이해가 될까요? 설명부탁합니다.
그리고 LOOP AT lt_info FROM 6에서 from 6 뭔가요?
댓글 4
-
activeman
2008.11.10 06:47
-
로미오
2008.11.10 07:57
activeman님 말씀처럼 확인해보니
s_kunnr-sign
s_kunnr-option
s_kunnr-low
s_kunnr-high
데이타값은 확인이 되는데
문제는 어떻게 결과가 저렇게 나오는지 디버깅으로도 확인 어렵네요.
숫자만 나오니 결과는 단일값같은 문자로 나오고 해서
이해가 정말 어렵네요 ㅜ..ㅜ
-
지의
2008.11.10 17:15
1. 랭쥐 변수는 인터널 테이블이니 디버깅에서 보면 인터널 테이블 구조로 데이타가 들어가 있을거고
확인 방법은 초기화면 뛰워놓고 입력 칸 맨 끝에 네모 버튼이 있어요 거기 눌르면 데이타 들어가 있는게 보임
2. loop 할 때 6번째 줄부터 읽는다는거고 뭘 더하고 다시 2로 나눠서 나머지 값이 0 이면 line 필드의 자릿수가 뭐 일 때
뭐 출력 뭐 일 때 뭐 출력 이것도 저것도 아닐 때 뭐 출력 하는 형식입니다.
-
아밥퍼
2008.11.10 17:20
s_kunnr 는 select-options 로 선언되었습니다.
select-options로 선언한 것은 SIGN, OPTION, LOW, HIGH 라는 구조를 가지는
헤더라인을 있는 인터널 테이블 형태라는 것을 먼저 기억을 해 두시는 게 좋구요.
인터널 테이블에 자료를 추가하는 것과 똑같은 방법으로 자료를 추가하시면 됩니다.
SIGN = 'I' OR 'E' " I - 포함 , E - 제외
OPTION = 'BT' OR 'EQ' OR 'NE', 'LT' ..... 이건 설명을 안해도 아시겠죠.
I EQ 1010 은 s_kunnr 가 1010 하고 같은값을 포함...
I BT 2000 3000 s_kunnr 가 2000 ~ 3000 사이의 값을 포함...
E EQ 2700 s_kunnr 가 2700 은 제외한다는 의미 입니다.
s_kunnr 의 조건을 멀티하게 준것이죠
LOOP AT lt_info FROM 6에서 from 6 의 의미는
lt_info 에 레코드가 10건 있다고 하면
1번째 레코드 부터 읽는 게 아니고 6번째 레코드 부터 읽겠다는 것입니다.
해서 6, 7, 8, 9, 10 번째 레코드만 읽어 들이고 1~5번째 레코드는 읽어 들이지 않습니다.
1에 대한 답은 s_kunnr 테이블을 조회해 보세요 그럼 그안에 자료가 저장되어 있습니다.
디버깅 걸어서 s_kunnr 헤더 말고 body를 보시면 자료가 있습니다...(s_kunnr[]을 조회하셔도 됩니다.)
즐밥하세요..