공급업체가 동일하면 하나의 PO만생성하도록 하는 프로그램을 짜고 있습니다.
AT NEW ~ ENDAT.
AT END OF ~ENDAT. 구분을 사용하였는데,
그림과 같이 공급업체가 동일함에도 불구하고 AT END OF 구문에 처음부터 실행되고, 통하질 않네요...
전혀 이유를 모르겠네요 -0-;; 고수님들! 잘못된 부분있으면 지적좀 해주세요!!
SORT GT_EBAN BY FLIEF.
LOOP AT GT_EBAN.
*-- Input P/O Header
MOVE-CORRESPONDING GT_EBAN TO LT_RESULT.
AT NEW FLIEF.
GS_POHEADER-COMP_CODE = LV_BUKRS.
GS_POHEADER-DOC_TYPE = LT_RESULT-BSART.
GS_POHEADER-CREAT_DATE = LV_AEDAT.
GS_POHEADER-ITEM_INTVL = LV_PINCR.
GS_POHEADER-VENDOR = LT_RESULT-FLIEF.
GS_POHEADER-PURCH_ORG = LV_EKORG.
GS_POHEADERX-COMP_CODE = 'X'.
GS_POHEADERX-DOC_TYPE = 'X'.
GS_POHEADERX-CREAT_DATE = 'X'.
GS_POHEADERX-ITEM_INTVL = 'X'.
GS_POHEADERX-VENDOR = 'X'.
GS_POHEADERX-PURCH_ORG = 'X'.
ENDAT.
*-- Input P/O Item
ADD LV_PINCR TO LV_EBELP.
GT_POITEM-PO_ITEM = LV_EBELP.
GT_POITEM-PREQ_NO = GT_EBAN-BANFN.
GT_POITEM-PREQ_ITEM = GT_EBAN-BNFPO.
GT_POITEMX-PO_ITEM = LV_EBELP.
GT_POITEMX-PO_ITEMX = 'X'.
GT_POITEMX-PREQ_NO = 'X'.
GT_POITEMX-PREQ_ITEM = 'X'.
APPEND: GT_POITEM, GT_POITEMX.
AT END OF FLIEF.
CLEAR: GS_EXPHEADER, GT_RETURN[].
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
POHEADER = GS_POHEADER
POHEADERX = GS_POHEADERX
IMPORTING
EXPHEADER = GS_EXPHEADER
TABLES
RETURN = GT_RETURN[]
POITEM = GT_POITEM[]
POITEMX = GT_POITEMX[].
IF NOT GS_EXPHEADER-PO_NUMBER IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
LT_RESULT-ZBSART = GS_EXPHEADER-DOC_TYPE.
LT_RESULT-ZEBELN = GS_EXPHEADER-PO_NUMBER.
LT_RESULT-ZEKGRP = GS_EXPHEADER-PUR_GROUP.
LT_RESULT-ZLIFNR = GS_EXPHEADER-VENDOR.
LT_RESULT-ZWAERS = GS_EXPHEADER-CURRENCY.
READ TABLE GT_RETURN INDEX 1.
LT_RESULT-MESSAGE = GT_RETURN-MESSAGE(100).
*-- Exception 신호등 처리
IF GS_EXPHEADER-PO_NUMBER IS INITIAL.
LT_RESULT-ICON = '1'.
ELSE.
LT_RESULT-ICON = '3'.
ENDIF.
MOVE-CORRESPONDING LT_RESULT TO GT_EBAN.
MODIFY GT_EBAN.
CLEAR : GS_POHEADER, GS_POHEADERX, GS_EXPHEADER, LT_RESULT,
GT_POITEM[], GT_POITEMX[], GT_RETURN[].
CLEAR : LV_EBELP, LV_AEDAT.
ENDAT.
ENDLOOP.
Internal Table를 보면 알겠지만...음...제가 알기로
AT end 필드명. 이렇게 쓰면 그 하나 필드만 가지고 판단하는게 아니고
앞에 있는거 까지 붙여서 판단합니다. .
f1, f2
a b
c b
f1 & f2 = ab
f1 & f2 = cb
f2는 계속 b지만 앞에 필드와 붙이면 처음오는 필드
AT END f2.
처음부터 바로적용
ENDAT.
해당 조건을 앞쪽으로 빼주시면 될거 같네요