(아주 드문 사례가 될거 같으니 그냥 재미로 보면 된다.)
SAP는 날짜필드로 지정하면 해당 필드가 비어있을 시 0000.00.00 이 DB에 기본적으로 들어가있다.
(Se16n 참조)
이건 데이터만 보면 알 수 있다.
그래서 종종 쿼리에
if lv_date = '0000.00.00'
어쩌고저쩌고
endif.
같이 쓰는 분도 있고...
이 값이 기본인걸 아는 사람은
if lv_date is initial.
어쩌고저쩌고..
endif.
같은 것도 작동한다.
그러나 이슈발생된 부분은 다음과 같다.
BAPI는 자동으로 Exit에서 ADDON한 필드를 참조한다.
즉,스텐다드db에 유저가 추가로 만든 zz필드들을 넣어놨을 때. bapi 로 데이터 생성시 그 필드에 값을 채워 넣을 수 있는 것이다.
그런데 아래와 같은 경우...
if lv_date is initial.
ls_bapixxx+0(8) = lv_date.
endif.
이런식으로 넣을 경우.
즉 왼쪽에 bapi addon한 스트럭쳐의 날짜필드가
0에서부터 8자리를 날짜필드인 lv_date를 넣어줬는데 lv_date가 날짜필드선언인데도 불구하고. bapi에는 space가 들어간다.
(lv_date 날짜필드가 비어있을때!!)
즉 se16n에서 데이터를 보면
' . . ' 이런식으로 텅 비어져서 들어가있다.
이런 상태 일 때 날짜필드 빈값체크가 불가해진다.
위 필드명이 zdatec 라 이름지으면
저 필드값을 select 해서 변수에 담고 아래와 같이 체크하면.
(1) if zdatec is not initial. => 작동안한다.
위 db에 데이터는 space가 들어가있다.
(2) if zdatec = space. =>작동안한다. 뭔가 들어가있다.
(3) if zdatec = '0000.00.00'. => 기본값 없는상태니 작동 안한다.
즉, 체크가 안된다...
db자체에 initial 체크를 하면 된다 하나.. 해당 체크가 안되어있는 상태였고..
날짜필드 원래 자동으로도 db에 initial체크안해도 0000.00.00이 기본값인데.......
hexadiciaml 값을 디버깅해서 보면
날짜필드는 정상적인 initial 상태일 때 300030003000.....(3000이 8번)
위 오류 날짜필드의 db 상태는 200020002000...(2000이 8번)
30은 0이고(0000.00.00)
20은 space다.. (공백공백공백공백.공백공백.공백공백)
그차이로 체크가 안먹는것이다.
결국 bapi에서 해당변수 필드가 비어있을 때
db에 들어갈 zdatec = '00000000' 강제로 넣어주니 db데이터가 제대로 들어갔고
체크구문도 할 수 있게 되었다.
사실 다양한 해결방법이 존재하나...
위와같은 사례를 그냥 작성한 것이니 참고만 하면 된다...
'ERP-SAP > ABAP' 카테고리의 다른 글
| <ABAP> Dynpro_value_update 해도 화면에 값이 바뀌지 않을때 CL_GUI_CFW=>SET_NEW_OK_CODE사용 (3) | 2025.08.18 |
|---|---|
| <ABAP> New Window Functions in ABAP SQL, 새로운 창함수?! LEAD LAG over partition by 등 (0) | 2025.07.16 |
| <기초 ABAP> NEW ABAP ITAB Control 다양한 예시(feat. 구아밥 써도 괜찮아...문제없어...) (2) | 2025.05.02 |
| <ABAP기초> Text elemt를 dynamic 하게 가져다 쓰기 + 코딩 관점 고민 (0) | 2025.04.10 |
| <ABAP> ALV F4 등록 방법 정리 (0) | 2025.03.06 |