반응형
PARAMETERS: P_SDATE TYPE DATUM,
P_EDATE TYPE DATUM.
DATA: DATE1 LIKE SCAL-DATE,
DATE2 LIKE SCAL-DATE,
FACTORYDATE1 LIKE SCAL-FACDATE,
FACTORYDATE2 LIKE SCAL-FACDATE,
WORKINGDAY_INDICATOR LIKE SCAL-INDICATOR.
CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
EXPORTING
CORRECT_OPTION = '+'
DATE = P_SDATE
FACTORY_CALENDAR_ID = 'KR'
IMPORTING
DATE = DATE1
FACTORYDATE = FACTORYDATE1
WORKINGDAY_INDICATOR = WORKINGDAY_INDICATOR
EXCEPTIONS
CALENDAR_BUFFER_NOT_LOADABLE = 1
CORRECT_OPTION_INVALID = 2
DATE_AFTER_RANGE = 3
DATE_BEFORE_RANGE = 4
DATE_INVALID = 5
FACTORY_CALENDAR_NOT_FOUND = 6
OTHERS = 7.
CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
EXPORTING
CORRECT_OPTION = '-'
DATE = P_EDATE
FACTORY_CALENDAR_ID = 'KR'
IMPORTING
DATE = DATE2
FACTORYDATE = FACTORYDATE2
WORKINGDAY_INDICATOR = WORKINGDAY_INDICATOR
EXCEPTIONS
CALENDAR_BUFFER_NOT_LOADABLE = 1
CORRECT_OPTION_INVALID = 2
DATE_AFTER_RANGE = 3
DATE_BEFORE_RANGE = 4
DATE_INVALID = 5
FACTORY_CALENDAR_NOT_FOUND = 6
OTHERS = 7.
DATA(LV_TEMP) = FACTORYDATE2 - FACTORYDATE1.
WRITE: / P_SDATE , ' : ' , DATE1 , ' AND FACTORY DATE: ' , FACTORYDATE1,
/ P_EDATE , ' : ' , DATE2 , ' AND FACTORY DATE: ' , FACTORYDATE2,
/ 'FACTORYDATE2 - FACTORYDATE1 = ', LV_TEMP.
LV_TEMP = LV_TEMP + 1.
WRITE: / 'FACTORYDATE2 - FACTORYDATE1 + 1 = ', LV_TEMP.
원래 DO나 LOOP을 돌면서 근무일 여부 체크해서 더해줬는데
단순히 시작일과 끝날의 factorydate를 구해서 빼주고 + 1을 해주면 실제 근무일을 구해줄 수 있다.
factorydate는 지정된 달력의 근무일수 index 번호이다.
그리고 CORRECT_OPTION은 시작일은 +, 종료일은 -로 해주어야 근무일 수를 정확하게 구할 수 있다.
예를 들면 시작일이 2025.06.01일 경우 일요일인데 그렇다면 다음 근무일인 2025.06.02가 나와야 하니 +이고,
종료일이 2025.05.31일 경우 토요일이기 때문에 그 전날 근무일인 2025.05.30까지 계산되어야 하므로 -를 해주어야 한다.

반응형
'IT WORK > SAP FI and ABAP' 카테고리의 다른 글
| [FI-ABAP] F-54 선급금 Downpayment 리스트 나올 때 순서 (0) | 2025.10.24 |
|---|---|
| ALV에서 한글 입력이 밀릴때 (0) | 2025.10.16 |
| [SAP FI] 기본 티코드별 전표 유형과 전기키 (0) | 2025.09.08 |
| [FI] F110 자동지급 오류 - FZ347 대변메모 Credit memo 지급 오류 (0) | 2025.07.31 |
| ZTOAD - ST04를 대체할 수 있는 QUERY 실행기 (3) | 2025.07.31 |