FILIEF , WERKS, LFDAT 필드에서
FILIEF값이 다를 때 마다,
FILIEF가 같으면, WERKS 가 다를 때 마다,
WERKS 가 같으면, LFDAT가 다를때마다, 특정구문을 수행하려고 합니다.
AT NEW : FLIEF, WERKS, LFDAT.
[구문]
ENDAT.
ENDAT.
ENDAT.
Q1. 이런식으로 AT NEW....ENDAT. 구문을 3번 중복해서 쓰는데, 성능상에 문제는 없나요?
Q2. 꾸밈프린트(소스정렬) 버튼을 누르면 '오류가 있을 것으로 추측되는 포맷팅.' 이라는 문구가 뜨는데,
구문상에 에러가 있는건가요? 아님 무시해도 되는 건가요?
---------------------------------------------------------------------------------------------
질문에 대한 추가 질문요 -0-;;
위의 조건에 따라서,아래 로직을 가지고 PO를 생성하려 합니다.
LOOP AT ITAB.
SORT BY FLIEF, WERKS, LFDAT.
AT NEW : FLIEF, WERKS, LFDAT.
[헤더데이터]
ENDAT.
ENDAT.
ENDAT.
항목데이터(10, 20, 30, ....)
AT END OF : FLIEF, WERKS, LFDAT.
CALL FUNCTION 'BAPI_PO_CREATE1'.
EXPORTING * 참고 : 설명에 불필요한 것 생략
EXPORTING
POHEADER = 헤더 데이터
......
IMPORTING
EXPHEADER = GS_EXPHEADER
TABLES
RETURN = GT_RETURN[]
POITEM = 항목데이터(10, 20, 30......)
......
ENDAT.
ENDAT.
ENDAT.
ENDLOOP.
이렇게 하니 밑에 답변주신 분 말대로 FLIEF 기준으로 밖에 PO가 생성되질 않네요...
다른 방법있으면 알려주세요~~!!
아니면 다른 로직이라도....
댓글 4
-
MadMax
2008.08.28 19:41
-
seph
2008.08.28 21:01
답변 감사합니다 ^^
해보니까 그렇게 실행되네요 -0-;;;
PO 생성 BAPI에서 위에 말한 조건대로 묶어서, PO를 생성하려고 하는데,
AT NEW ....ENDAT 구문에는 조건에 넘겨줄 HEADER 값을 넘겨주거든요..
AT NEW.... ENDAT 이나 AT END OF ...ENDAT 구문을 따로 수행하면, 여러항목을 한PO에 넣는 로직이 안될거 같은데
다른 좋은 방법이 없을까요???
-
보나
2008.08.28 22:20
clear: c_flag, h_flag.
sort itab by flief, werks, lfdat.
loop at itab.
at new flief.
[헤더구문]
h_flag = 'X'.
endat.
at new wekrs.
[헤더구문]
h_flag = 'X'.
endat.
at new lfdat.
[헤더구문]
h_flag = 'X'.
endat.
....
항목데이터(10,20,30,...)
....
at end of flief.
if h_flag = 'X'.
c_flag = 'X'.
clear h_flag.
endif.
endat.
at end of werks.
if h_flag = 'X'.
c_flag = 'X'.
clear h_flag.
endif.
endat.
at end of lfdat.
if h_flag = 'X'.
c_flag = 'X'.
clear h_flag.
endif.
endat.
if c_flag = 'X'.
CALL FUNCTION 'BAPI_PO_CREATE1'.
....
clear : c_flag.
endif.
endloop.
-
seph
2008.08.28 23:26
하~~~ 어제 하루 종일 고민했었는데.....! 해결되니 기분 좋네요 ^^
MadMax 님, 보나님... 감사합니다!!!! (_ _) 꾸벅!
성능상 문제는 없을것 같음.
at new 구문이 flief 에만 걸릴것 같음. 즉 flief 가 변경될때만 at 내 구문을 수행함
-> at new flief.
구문
endat
at new werks.
구문
endat
의 형태가 맞을것 같음.....