IF A-a NE B-a OR
A-b NE B-b OR
A-c NE B-c.
MESSAGE E01 틀린 칼럼...
EXIT.
ENDIF.
이렇게 if문을 태우는데... 값이 틀린 칼럼을 찾아서 message와 함께 보여줄려고 합니다...
예를 들어 A-a = 1 B-a = 1
A-b = 2 B-b = 2
A-c = 3 B-c = 4 라면
MESSAGE E01 A-c B-c 라고 보여줄려고 합니다.. 또는 다 틀리면
MESSAGE E01 A-a B-a A-b B-b A-c B-c
그런데 틀린 칼럼을 어떻게 찾아야 하나요..?
선배님들 부탁드립니다.. ㅜ.ㅜ
댓글 6
-
숟가락맨
2008.08.07 21:02
-
soriel
2008.08.08 01:19
답변감사합니다.. 숟가락님.. (--)(__)
그런데 제가 예로 들어서 IF절에 2개밖에 안넣었었는데.. 실제 비교할 것은 25개가량이네요..
IF...
ELSEIF... INTO l_text1.
ELSEIF... INTO l_text2.
....
ELSEIF... INTO l_text25.
ENDIF.
MESSAGE E01 WITH l_text_tot 로 해서 텍스트 필드를 26개 만들어 25개는 각각 담고
MESSAGE에선 25개를 취합해서 보여줄려니 소스가 길어지고.. 웬지 이상해 보여서요...
이 방법밖엔 없을까요..?
-
숟가락맨
2008.08.08 18:42
data : a1,
a2,
a3,
a4,
a5.
field-symbols <l_field>.
data l_txt(20).
data l_num.
a1 = 'a'.
a2 = 'b'.
a3 = 'c'.
a4 = 'd'.
a5 = 'e'.
l_num = 0.
do 5 times.
l_num = l_num + 1.
concatenate 'A' l_num into l_txt.
assign (l_txt) to <l_field>.
write / <l_field>.
enddo.
이거 함 참조해보세요...필드심볼 사용한거요....ㅎ
-
보나
2008.08.08 18:45
25 개 필드를 비교하시려면 우선 if ~ endif 로 25번을 비교하셔야 ^^;;
(if elseif elseif.... 로 25번을 비교하시게 되면, 예를들어 3개의 값이 틀리다 하더라도 if 문을 빠져나가겠죠..)
필드의 비교가 25개 (혹은 n 개) 로 정해져 있다고 하면
DO n times
if 비교 <fs1> ne <fs2>.
concatenate
endif
ENDDO.
문을 이용하시면 될 것 같습니다.
필드심볼을 이용한 A, B 테이블의 값의 비교는 어떠한가요?
-
보나
2008.08.08 18:46
경우1) FIELD-SYMBOL 사용하지 않았을 경우
LOOP AT ITAB1.
READ TABLE ITAB2 WITH KEY CCYYMM = ITAB1-PERIOD
WERKS = ITAB1-WERKS
MATNR = ITAB1-MATNR
BINARY SEARCH.
IF SY-SUBRC <> 0.
WRITE : / 'Not found in ITAB2 : ',
ITAB1-CCYYMM,
ITAB1-WERKS,
ITAB1-MATNR.
ELSE.
IF ITAB1-LABST <> ITAB2-LABST.
WRITE : / SY-INDEX,
ITAB2-CCYYMM,
ITAB2-WERKS,
ITAB2-MATNR,
ITAB1-LABST,
ITAB2-LABST.
ENDIF.
IF ITAB1-UMLME <> ITAB2-UMLME.
WRITE : / SY-INDEX,
ITAB2-CCYYMM,
ITAB2-WERKS,
ITAB2-MATNR,
ITAB1-UMLME,
ITAB2-UMLME.
ENDIF.
.............. 12번 반복 ........
ENDIF.
ENDLOOP.
경우2) FIELD-SYMBOL 사용했을 경우
LOOP AT ITAB1.
READ TABLE ITAB2 WITH KEY CCYYMM = ITAB1-PERIOD
WERKS = ITAB1-WERKS
MATNR = ITAB1-MATNR
BINARY SEARCH.
IF SY-SUBRC <> 0.
WRITE : / 'Not found in ITAB2 : ',
ITAB1-CCYYMM,
ITAB1-WERKS,
ITAB1-MATNR.
ELSE.
IDX1 = 3.
DO 12 TIMES.
IDX1 = IDX1 + 1.
ASSIGN COMPONENT IDX1 OF STRUCTURE ITAB1 TO <FS1>.
ASSIGN COMPONENT IDX1 OF STRUCTURE ITAB2 TO <FS2>.
IF <FS1> <> <FS2>.
WRITE : / SY-INDEX,
ITAB2-CCYYMM,
ITAB2-WERKS,
ITAB2-MATNR,
<FS1>,
<FS2>.
ENDIF.
ENDDO.
ENDIF.
ENDLOOP. -
보나
2008.08.08 18:47
위의 IF <FS1> <> <FS2>. 다음에 WRITE 부분만 concatenate 로 해서 l_txt 등의 값으로 넣어주시면 되지 않을까요.
답을 다쓰신거같은데...ㅎ 택스트 필드 하나 만드시고
data l_txt(50).
if a-a ne b-a.
concatenate l_txt 'a-a b-a' into l_txt.
endif.
if a-b ne b-b.
concatenate l_txt 'a-b b-b' into l_txt.
endif.......요러고 마지막에 message e01 with l_txt. 요런식으로?