반응형

보통 우리나라 사람들은 날짜 형식을 4번으로 많이 사용하는 것 같다.
YYYY.MM.DD 즉, 2026.01.16 이런식으로 날짜가 표시된다.
SAP에서 Data Type은 기본적으로 YYYYMMDD로, Time Type은 HHMMSS처럼 시분초로 저장이 된다.

나같은 경우도 미국법인에서 엑셀로 데이터를 일괄 업로드 해서 전표를 전기하는 CBO 프로그램을 사용하는데,
엑셀에서 MM/DD/YYYY형태로 01/31/2026이라고 업로드 했더니 SAP에서 인터널 테이블에 저장할 때,
자동으로 20260131로 치환이 되어 저장이 됐는데
전표 생성시 사용하는 FM에서 BDC를 탈때는 다시 사용자의 날짜형식에 맞춰서 01312026으로 변경해주는것이 아니라
그대로 20260131로 날짜를 입력하니 SAP 입장에서는 20월 26일 131년으로 인식이 되어 오류가 났다.
그래서 로그인한 사용자의 날짜형식을 사용자 아이디 정보에서 받아와서 인터널 테이블에 20260131로 저장되는것이 아니라,
01312026 그 형식대로 저장하도록 변경해서 오류가 해결 되었다.
PERFORM change_date_format USING gt_excel-bldat
CHANGING gt_bkpf-bldat.
FORM CHANGE_DATE_FORMAT USING pv_date1
CHANGING pv_date2.
DATA: lv_year TYPE c LENGTH 4,
lv_month TYPE c LENGTH 2,
lv_day TYPE c LENGTH 2.
lv_year = pv_date1(4).
lv_month = pv_date1+4(2).
lv_day = pv_date1+6(2).
SELECT SINGLE datfm INTO @DATA(lv_datfm)
FROM usr01
WHERE bname = @sy-uname.
CASE lv_datfm.
WHEN '1'. " DD.MM.YYYY
CONCATENATE lv_day lv_month lv_year INTO pv_date2.
WHEN '2' OR '3'. " MM/DD/YYYY or MM-DD-YYYY
CONCATENATE lv_month lv_day lv_year INTO pv_date2.
WHEN '4' OR '5' OR '6'. " YYYY.MM.DD or YYYY/MM/DD...
CONCATENATE lv_year lv_month lv_day INTO pv_date2.
WHEN OTHERS.
pv_date2 = pv_date1.
ENDCASE.
CONDENSE pv_date2 NO-GAPS.
ENDFORM.반응형
'IT WORK > SAP FI and ABAP' 카테고리의 다른 글
| [ABAP] 기간 구해서 한글로 표시하는 펑션 (0) | 2025.12.11 |
|---|---|
| [SAP FI] Hana Upgrade 이후 BP 화면에서 회사코드 전환 화면이 안나올 때 (2) | 2025.12.02 |
| [SAP ABAP] 엑셀 매크로 허용해도 안될 때 (0) | 2025.12.01 |
| [ABAP] ALV 필드카탈로그 수정사항 반영 안될 (0) | 2025.10.31 |
| [SAP FI] 유효성 확인 / 대체 exit 레포트 매핑 (0) | 2025.10.29 |