I_CHECK-SELECT_MARK = SELECT_MARK.
I_CHECK-ZZSEQUENCE = ZFEMSCASHFW-ZZSEQUENCE.
APPEND : I_CHECK.
PERFORM CHECK_DEAL.
FORM CHECK_DEAL.
LOOP AT I_CHECK.
IF I_CHECK-SELECT_MARK = SELECT_MARK AND I_CHECK-ZZSEQUENCE =
ZFEMSCASHFW-ZZSEQUENCE.
MESSAGE I998 WITH 'please check the #' ZFEMSCASHFW-ZZSEQUENCE
'deal'.
ENDIF.
EXIT.
ENDLOOP.
ENDFUNCTION.
안녕하십니까. 제가 잘 몰라서 한번더 질문 드립니다.
I_CHECK 인터널 테이블에 SELECT_MARK와 SEQUENCE를 넣고 만들었습니다.
그렇게 해서 스크린8200번이라는 곳에서
LOOP.
CHAIN .
FIELDS : XX, XX, XX, XX, XX,
MODULE XXX해서 만들고
ENDCHAIN.
ENDLOOP.
이렇게 되어있습니다.
파랑색으로 되어있는 부분이 MODULE부분에 있는 로직입니다.
스크린에서는 LOOP를 돌면서 필드값이 다 들어가있는지 체크하면서 MODULE에 들어가서 수행을 하구요
근데 제가 파랑색으로 되어있는 부분이 전표를 받는곳인데요
SELECT_MARK는 체크가 되어있는지 확인하는거구요
ZFEMSCASHFW-ZZSEQUENCE는 DEAL NO를 받는거에요
그걸 스크린에서 LOOP를 타면서 확인을 하지요,
그리고 퍼폼문을 만들어서
로직으로 체크여부 확인하면서 같은 DEAL NO같은것이 체크안되면
오류 메세지창을 띄우는걸 하는데요
이 부분은 빨강색 부분입니다.
근데 빨강색 부분에서 제대로 수행이 안되던데요..
그 이유가 뭔지...
어떻게 해야 할지.. 고민중입니다..
고수님들 부탁드립니다.
댓글 8
-
恵
2009.01.15 18:54
-
gwangchul
2009.01.15 19:02
LOOP AT I_CHECK.
IF I_CHECK-SELECT_MARK = SELECT_MARK AND I_CHECK-ZZSEQUENCE =
ZFEMSCASHFW-ZZSEQUENCE.
MESSAGE I998 WITH 'please check the #' ZFEMSCASHFW-ZZSEQUENCE
'deal'.
EXIT.
ENDIF.
ENDLOOP.
EXIT를 IF 안에 써야합니다. 오류메세지가를 띄워주고 EXIT를 하는거 겠죠. 근데 EXIT를 IF밖에 쓰면 IF 만족하지 않아도 만족해도 EXIT하는것입니다.
-
쭈니
2009.01.15 19:06
LOOP AT I_CHECK.
IF I_CHECK-SELECT_MARK = SELECT_MARK AND I_CHECK-ZZSEQUENCE =
ZFEMSCASHFW-ZZSEQUENCE.
EXIT.
ELSE.
IF I_CHECK-SELECT_MARK = ' ' AND I_CHECK-ZZSEQUENCE =
ZFEMSCASHFW-ZZSEQUENCE.
MESSAGE I998 WITH 'please check the #' ZFEMSCASHFW-ZZSEQUENCE
'deal'.
ENDIF.
ENDIF.
ENDLOOP.
이렇게 하면요. 공란이 아닌경우에 즉 SELECT_MARK가 되어있을때 EXIT를 넣으면 되는건가요??
지금처럼 로직을 해놓으면 SELECT_MARK에값이 들어가면 EXIT하고 아니면 오류 메세지를 띄우는거 맞는건가요??
-
恵
2009.01.15 19:15
에러가 났을때 exit.를 해야지 그렇지 않은 SELECT_MARK가 되어있을때(정상 결과치일때) exit를 하시면 다음 루프를 돌지않고
루프가 끝나게 되는데요..
참고로 쭈니님이 답글에 쓰신 로직이라면
첫번째 루프가 도는 시점에
루프를 바로 종료시키고 루프 자체가 끝나거나
아니면 메세지가 뿌려지고 다음루프로 가게 됩니다.
-
쭈니
2009.01.15 19:43
IF I_CHECK-SELECT_MARK = ' ' AND I_CHECK-ZZSEQUENCE =
ZFEMSCASHFW-ZZSEQUENCE.
MESSAGE I998 WITH 'please check the #' ZFEMSCASHFW-ZZSEQUENCE
'deal'.
EXIT.
ENDIF.
바꿔 주긴 했는데요. 첨에 만나는 IF문에서 조건이 안맞아야 ELSE를 만나고 밑에 IF문을 만나게 되는건가요??
-
恵
2009.01.15 19:51
1. if 조건1.
endif.
if 조건2.
endif.
--> 위와 같은 경우엔 조건1과 조건2를 각각 판별하게 됩니다.
조건1를 판별해 보고 참인지 거짓인지 관계없이 조건2를 판별후 처리합니다.
2. if 조건1.
else 조건2.
endif.
--> 위와 같은 경우엔 조건1을 참인지 거짓인지 판별후 참이면 조건1의 처리를 하고
거짓이면 조건2의 경우에 속하게 되므로 조건2의 처리를 하고 if문이 끝나게 됩니다.
고로 쭈니님의 밑의답변은 맞습니다.
>>첨에 만나는 IF문에서 조건이 안맞아야 ELSE를 만나고 밑에 IF문을 만나게 되는건가요??
-
쭈니
2009.01.15 20:15
이상한점을 찾아냈습니다. 디버깅을 해본결과인데요.
제가 지금 2번의 경우로 로직을 짠 상태잖아요.
제 생각이 맞는거라면 전표를 찍을때
1. 체크(SELECT_MARK)안한상태 00042(ZZSEQUENCE) 이 데이터가 I_CHECK테이블에 들어가있습니다.
2. 체크(SELECT_MARK)한상태 00042(ZZSEQUENCE) 이 데이터가 I_CHECK테이블에 들어가있습니다.
이렇게 되어있는데 첨에 들어간 데이터를 가지고 비교를 하면서 2번째가 체크 안되어 있으면 오류 메세지를 띄우려고 하는데요.
지금 제 로직으로는 첨에 IF조건문이 맞지 않는데. ELSE는 가는데 IF문을 안들어가네요?
뭐가 문제일까요??
스크린에서 LOOP를 돌려서 CHAIN FIEDLS 넣고(여기에는 전표에 값을 다 받은경우에 모듈을 들어감)
MODULE부분에 들어와서 I_CHECK테이블에서 APPEND로 데이터는 저장을 하고 나서 퍼폼문을 만나서 수행을 하거든요.
그럼 전표2개에 값을 다 넣은 상태라서 모듈에 들어가서 I_CHECK테이블에 값이 다 저장이 되구요.
그럼 첨에 들어간 데이터를 가지고 비교할수있는 문장이 어떻게 되나요?
퍼폼문에 들어가서는 첨에 받은 데이터를 가지고 IF문 돌려야 조건문이 성립이 될듯 한데..
그게 잘 모르겠네요..
조언좀 부탁합니다.
-
恵
2009.01.15 20:26
3116번 질문에도 답을 드렸지만
if 문의 조건중 두번째 조건 [I_CHECK-ZZSEQUENCE = ZFEMSCASHFW-ZZSEQUENCE] 에서 아마 맞지 않기 때문에 안걸릴것 같은데요..
(체크가 되어있지 않은 전표번호 42번에 대해서 메세지를 뿌리고 싶다고 하셨는데 체크가 안되어 있다는 전제하에 ZFEMSCASHFW-ZZSEQUENCE값이 42 일 경우엔 if문에 들어갈 것이고 42가 아닐경우엔 if문에 안들어가겠죠..ZFEMSCASHFW-ZZSEQUENCE값이 어떻게 들어오는지는 디버깅을 통해..)
조건문을 아래와 같이 바꿔서 한번 디버깅 해보세요..
IF I_CHECK-SELECT_MARK = ' ' AND I_CHECK-ZZSEQUENCE = '42'.
저도 잘은 모르지만 exit 를 if문 안에다 넣어야 하는거 아닌가요?
안그럼 루프 돌다가 첫번째 루프에서 끝나지 않나요..?