안녕하세요..
제가 아직 잘 몰라서 이렇게 질문을 드립니다.
근데 제가 로직은 만들어 놓고도
이것이 맞는지 해메고있네요
FORM CHECK_DEAL.
LOOP AT I_CHECK.
if i_check-select_mark = 'X' AND I_CHECK-ZZSEQUENCE =
ZFEMSCASHFW-ZZSEQUENCE.
MESSAGE I998 WITH 'please check the #' ZFEMSCASHFW-ZZSEQUENCE
'deal'.
ENDIF.
ENDLOOP.
ENDFORM. " check_deal
지금 위에 로직처럼 하면요
I_CHECK라는 인터널 테이블에 값이 SELECT_MARK와 ZFEMSCASHFW-ZZSEQUENCE값이 들어있는데요
루프는 돌면서값을 체크 하잖아요?
맞는지 모르겠네요..
그럼 루프 안에있는 IF문은 조건문이니까 저 I_CHECK인터널 테이블에 들어있는 값을 돌면서 조건문을 실행하겠죠??
I_CHECK 테이블에는 42 001 'X', 42 002 ' ', 43 001 ' ', 43 002 ' '.
이렇게 4개가 들어가있으니 저 4개를 돌면서 조건문을 실행하는거겠죠?
제 생각으로 짜 놓은 로직입니다만, 결과는 이렇게 나오게 하고 싶은거죠.
결과 : 루프를 돌면서 X표시가 안되어있는 42번 넘버가 나오게 되면 메세지를 뿌려주게 하고싶은건데요.
예로 42 001 'X'가 I_CHECK에 값이 있을테니 들어가서 조건문 실행하니 문제가 없어야 하구요
42 002 ' ' 값이 조건문을 만나게 되면 위에값이 X되어있는데 이전표는 안되어있으니 메세지를 뿌려주고 싶은거죠
조언좀 부탁드립니다.
댓글 14
-
gwangchul
2009.01.15 18:57
디버그를 띠워보면 맞는지 맞지 않은지 인차 알수가 있겠는데요. -
恵
2009.01.15 19:10
i_check-select_mark = 'X' 체크와 I_CHECK-ZZSEQUENCE = ZFEMSCASHFW-ZZSEQUENCE 를
동시에 만족할 시에 메세지를 뿌리게 되어있네요.
근데 메세지를 뿌리고 나서 exit를 하셔야 다음 루프를 안돌고 끝나게 될것 같아요..
if문 안에다 exit. 써서 한번 디버깅 해보세요~
-
CoMAN
2009.01.15 19:12
루프를 돌면서 X표시가 안되어있는 42번 넘버가 나오게 되면
=> if i_check-select_mark = ''. "이렇게 해야 X표시가 안되어 있으면 들어오겠죠.
=> ZFEMSCASHFW-ZZSEQUENCE은 무엇인지 모르겠네요...여기에 42가 들어가 있는지 디버깅 해보시길...
* i_check_no i_check-zzsequence i_check-select_mark
42 001 'X'
42 002 ''
43 001 ''
43 002 ''
이렇게 되어 있는건가요?..
loop at i_check.
if i_check-select_mark eq 'X'.
else.
message i998 with '체크'. "X가 아닐때 메세지 보여줌
*위의 경우라면 메세지가 3번 뿌려지겠네요.
endif.
endloop.
I_CHECK-ZZSEQUENCE = ZFEMSCASHFW-ZZSEQUENCE
-> 이건 비교값이 어떻게 들어오는 지 몰라 Pass... 경우에 맞게 추가하시면 되겠죠.
-
쭈니
2009.01.15 19:35
I_CHECK_ZZSEQUENCE값은 I_CHECK 인터널 테이블에 저장되어있는 값을 가지고 있습니다.
00042값이 I_CHECK-ZZSEQUENCE 필드에서 가지고있는 값입니다.
-
恵
2009.01.15 20:01
>>루프를 돌면서 X표시가 안되어있는 42번 넘버가 나오게 되면 메세지를 뿌려주게 하고싶은건데요.
정말 간단히 쭈니님이 하고 싶은 체크조건은 요거 아닌가요?
if i_check-select_mark = ' ' AND I_CHECK-ZZSEQUENCE = '42'
MESSAGE I998 WITH 'please check the #' ZFEMSCASHFW-ZZSEQUENCE 'deal'.
EXIT.
ENDIF.
-
쭈니
2009.01.15 20:17
그럼 전표가 42도 있고 43도 있을경우엔 어떻게 해야 하나요?? -
恵
2009.01.15 20:31
체크되어있지 않는 42번에 대해서만 메세지를 뿌리고 싶다는것 아닌가요?
if문에 42라는 조건을 넣어주면 43일경우엔 메세지를 뿌리지 않고 다음 루프로 넘어가게 되겠죠..
-
쭈니
2009.01.15 21:19
loop를 돌면요 첨에 가지고 있던 값이 돌때마다 변경이 되잖아요??
전표가 1개가 아닌이상 돌면서 그 테이블에 있는 값을 계속 가지고 오겠죠??
첨엔 42번 전표에 x마크가 되어있는것 그 다음에 돌때는 42번전표에 x마크가 없는것
이런식으로요
그럼 첨에 가지고 있던 값을 가지고 비교하면서 루프를 돌고 조건문을 붙일수있는 방법은 없을까요??
첨에 42번 전표에 x마크 되어있는걸 가지고 테이블에 있는 전표들을 다 비교하는거죠
그렇게 해서 42번 전표에 x마크가 없다면 메세지를 띄우구요.
-
恵
2009.01.15 22:43
loop돌기전에
read table i_check index 1 into ★workArea★ <-- 내부에서 지정해준 workArea
를 이용해 i_check테이블의 첫행의 정보를 ★workArea★에 저장시킬수 있습니다.
그럼 ★workArea★ 의 저장된 정보를 갖고 if문의 체크조건에 활용하면 되는거죠..한번테스트해보세요
-
쭈니
2009.01.15 23:06
DATA : BEGIN OF L_CHECK OCCURS 0.
INCLUDE STRUCTURE I_CHECK.
DATA : END OF L_CHECK.
READ TABLE I_CHECK INDEX 1 INTO L_CHECK.
APPEND L_CHECK.
LOOP AT I_CHECK.
IF L_CHECK EQ I_CHECK.
EXIT.
ELSE.
MESSAGE I998 WITH 'please check the #' ZFEMSCASHFW-ZZSEQUENCE
'deal'.
ENDIF.
말씀 하신대로 해보았더니 l_check의 인터널 테이블은 첨에 값을 계속 가지고 있구요.
i_check 테이블의값은 계속 돌더군요.
근데 loop문에서 2번째 돌았을때 L_CHECK값은 ''42고 I_CHECK값은 'X'42인데 메세지를 안띄우는데
제가 뭘 잘못 해놓은건가요???
-
恵
2009.01.15 23:21
조건문 IF L_CHECK EQ I_CHECK 가 아니라
IF L_CHECK-select_mark EQ I_CHECK-select_mark
AND L_CHECK-ZZSEQUENCE EQ I_CHECK-ZZSEQUENCE.
ELSE.
메세지 출력
ENDIF.
로 한번 테스트 해보세요..
-
쭈니
2009.01.15 23:27
와... 한자가 어떤건지 몰라서 뭐라고 말은 못드리지만 너무 감사드립니다..
근데 문제가 생겼어요.. ㅠ.ㅠ
2개를 체크하면 오류 메세지가 나오면 안되는데....
2개의 전표를 다 체크하는데도 오류 메세지가 나오는데 뭐가 잘못된점인지.....
좀 알려주세요
-
恵
2009.01.15 23:35
질문이 애매해서 무슨말인지 잘 이해가 안가요..
제가 사양을 알고 있는게 아닌만큼 로직적인 질문이 아니면 무슨말인지 한참을 생각해야해요~
-
쭈니
2009.01.16 00:03
아 죄송합니다..
DATA : BEGIN OF L_CHECK OCCURS 0.
INCLUDE STRUCTURE I_CHECK.
DATA : END OF L_CHECK.
READ TABLE I_CHECK INDEX 1 INTO L_CHECK.
* APPEND L_CHECK.
LOOP AT I_CHECK.
IF L_CHECK-SELECT_MARK EQ I_CHECK-SELECT_MARK
AND L_CHECK-ZZSEQUENCE EQ I_CHECK-ZZSEQUENCE.
* IF L_CHECK EQ I_CHECK.
* EXIT.
ELSE.
MESSAGE I998 WITH 'please check the #' ZFEMSCASHFW-ZZSEQUENCE
'deal'.
ENDIF.
제가 빨강색부분을 활성화 시켜 놨더니.. 체크를 다 해놓고 실행을 해도 결국엔 오류메세지가 뜨더군요
덕분에 잘 해결을 할수 있었습니다..
바쁜 시간을 쪼개셔서 이렇게 많은 도움을 주셔서 감사합니다~