FORM DATA_SELECT .
DATA : I_BUDAT LIKE MKPF-BUDAT.
REFRESH R_MATNR.
CONCATENATE P_BUDAT '01' INTO R_MATNR-LOW.
CLEAR I_BUDAT.
MOVE R_BUDAT-LOW TO I_BUDAT.
CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
EXPORTING
DAY_IN = I_BUDAT
IMPORTING
LAST_DAY_OF_MONTH = R_BUDAT-HIGH
EXCEPTIONS
DAY_IN_NO_DATE = 1
OTHERS = 2.
R_BUDAT-SIGN = 'I'.
R_BUDAT-OPTION = 'BT'.
APPEND R_BUDAT. CLEAR R_BUDAT.
REFRESH : GT_LIST1, GT_LIST2, GT_TEMP.
SELECT A~MATNR
A~LIFNR
A~SJAHR
A~SMBLN
A~SMBLP
A~DMBTR AS DMBTR1
A~WAERS
B~BUDAT
INTO CORRESPONDING FIELDS OF TABLE GT_LIST1
FROM MSEG AS A
INNER JOIN MKPF AS B
ON A~MBLNR = B~MBLNR AND A~MJAHR = B~MJAHR
WHERE A~BWART = '101'
AND B~BUDAT IN R_BUDAT
AND A~MATNR IN S_MATNR.
*--< 취소문서 찾기
DATA : L_MATNR LIKE MSEG-MATNR.
LOOP AT GT_LIST1.
SELECT SINGLE MATNR INTO L_MATNR
FROM MSEG
WHERE MBLNR = GT_LIST1-SMBLN
AND MJAHR = GT_LIST1-SJAHR
AND ZEILE = GT_LIST1-SMBLP.
IF SY-SUBRC = 0.
MOVE 'X' TO GT_LIST1-MARK.
ENDIF.
MODIFY GT_LIST1. CLEAR GT_LIST1.
ENDLOOP.
DELETE GT_LIST1 WHERE MARK = 'X'.
ENDFORM. " DATA_SELECT
여기서 덤프가 떨어지는데 왜그런지 모르겠습니다...
고수님들 도와주십쇼.....!!
댓글 2
-
김지성
2009.01.12 19:52
-
아밥퍼
2009.01.12 23:03
김지성님 loop 문 내에서 modify 시 인덱스 없어도 됩니다.
아래 구문은 맞구요.
LOOP AT GT_LIST1.
~
MODIFY GT_LIST1.
ENDLOOP.
위의 소스 코딩 오류
1. CONCATENATE P_BUDAT '01' INTO R_MATNR-LOW.
달의 첫번째 날을 R_MATNR-LOW 에 넣으셨는데
Material number 가 들어가야할 자리에 날짜를 넣으셨네요.
- P_BUDAT 가 년월일이 아닌지 년월일이면
CONCATENATE P_BUDAT '01' ~ 이 부분 수정해야겠죠
- CONCATENATE P_BUDAT '01' INTO R_MATNR-LOW. 이게 아니고
==> CONCATENATE P_BUDAT '01' INTO R_BUDAT-LOW.
2. 첫번째 SELECT 문 WHERE 조건에 AND A~MATNR IN S_MATNR.
-> S_MATNR 이 아니고 R_MATNR 이 아닌지?
SELECT-OPTIONS 와 RANGES 변수 둘다 잡혀 있다면
어느 변수가 조건에 걸리는지 다시 한번 확인을...
중간중간 BREAK-POINT 설정을 해서 정확히 어디서 덤프가 나는지
한번 확인을 해보심이...
제가 소스 그대로 카피해서 위에서 지적한 부분을 수정하고 실행해 보면
덤프는 안나네요.
당연히 덤프구요..
data : l_tabix type sy-tabix.
LOOP AT GT_LIST1.
clear : l_tabix.
l_tabix = sy-tabix.
SELECT SINGLE MATNR INTO L_MATNR
FROM MSEG
WHERE MBLNR = GT_LIST1-SMBLN
AND MJAHR = GT_LIST1-SJAHR
AND ZEILE = GT_LIST1-SMBLP.
IF SY-SUBRC = 0.
MOVE 'X' TO GT_LIST1-MARK.
ENDIF.
* MODIFY GT_LIST1. CLEAR GT_LIST1.
modify gt_list1 index l_tabix transporting mark.
clear : gt_list1.
ENDLOOP.
여기서 Modify 하는 데 몇 번째 라인을 modify 하는 지 알수 없어 덤프가 떨어질것입니다.
따라서 modify 할 index 값을 지정하면 해결됩니다.