CCM 할 경우 , 템플릿에 주석을 넣어두고 주석처리하면 편함 ( ex) sss-> *- --------------Start of S4hana Conv. by ____
1. 오라클 HINT 문 삭제
- 오라클 HINT문은 SAP HANA에 맞지 않습니다.
- 필요 시 HANA에서 사용가능한 Hints 구문을 추가합니다.
%HINTS HDB ...
- SELECT .. FOR ALL ENTRIES 검색 시 Hints를 사용하여 FDA(Fast Data Access) 기능의 사용 유무를 판단합니다 (Note 2399993 참고)
SELECT B~BUKRS, B~BLART,
B~LIFNR, B~ZUONR, B~AUGBL,
B~BELNR, B~BUZEI, B~BUDAT, " , 추가 "
B~WAERS, B~SHKZG, B~HKONT,
B~DMBTR, B~WRBTR, B~EBELN,
B~EBELP, B~XREF1, B~XREF3,
B~REBZG, B~REBZZ, B~SGTXT
INTO CORRESPONDING FIELDS OF TABLE IT_TAB
FROM BSIK AS B INNER JOIN BKPF AS A
ON A~BELNR = B~BELNR
AND A~BUKRS = B~BUKRS
AND A~GJAHR = B~GJAHR
WHERE B~HKONT IN @R_HKONT
AND B~BUKRS IN @R_BUKRS "@의 newabap "
AND B~BUDAT <= @P_DATUM
AND A~STBLG = ''
AND B~ZUONR IN P_KOSTL.
*%_HINTS ORACLE 'ORDERED'.
2. ORDER BY 없는 SELECT
Check Message : LOOP AT itab. AT FIRST/LAST... ENDAT. for result of statement at ... line ...
MODIFY ... INDEX for result of SELECT statement at ... line ...
- 기존 ECC에서의 ORDER BY 가 생략된 SELECT 문은 잘못된 데이터를 가져올 가능성이 있기 때문에
SELECT 문에 ORDER BY를 넣거나 SORT 를 처리해주어 보완했습니다.
* SELECT SINGLE 은 ORDER BY 안됨. ( select ... up to 1 row ... order by primary key. endselect. 해야함 )
3. 전표 금액 , 자재번호 등의 달라진 길이로 인한 write문 오류
Check Message : WRITE issue
- ECC에서 CURR (13,2) 였던 금액 필드들이 S/4 HANA에서 CURR (23,2)로 변경 되면서 Write 문에서 글자가 잘리는 현상 발생
- 기존 변수와 동일한 타입의 지역변수를 생성하여 write문에서 적용하여 해결한다.
-------------------------------------------------------------------------------------------------------------------------------------------
[ 추가로 알게된 ABAP 지식 ]
1. Internal Table을 read할 때 발생하는 event
- AT NEW f : Field가 새롭게 시작할 때, internal table 을 읽을 때 특정 필드의 값이 새롭게 바뀔 때 발생
SUM => 이후의 다른 필드가 나오기 전까지의 값을 모두 SUM
- AT END OF f : Field가 끝날 때,internal table 을 읽을 때 특정 필드의 값을 마지막으로 읽을 때 발생
SUM => 이전의 모든 동일 필드의 값을 모두 SUM, 즉 SUM함수의 결과값은 AT NEW f 이벤트에서 사용한 sum과 동일하다.
다만 이벤트의 발생시점만 다르다.
Sum의 결과값은internal table 의 header에들어가며 이때 명시된f‘ 이외의 문자필드에는*******’ 로 채워진다.
- AT FIRST : loop의 첫 행을 읽을 때 발생함. 숫자필드를 제외한 필드의 값이 새롭게바뀔때 발생
SUM => 문자필드를 제외한 모든숫자필드의 값을 SUM. Internal table 의 헤더에는숫자필드의합계만이들어가고 나머지 ‘ 필드는 모두*********’ 로 채워짐.
- AT LAST : 마지막행을 읽을 때 발생함.
SUM => AT FIRST 이벤트의 결과와 동일함
->위의 이벤트가 발생할 때 sum 함수에 의해 채워진internal table header의 값은 모두ENDAT. 구문을 만나면 현재reading하고 있는 행의 값으로 돌아가게 된다.
- ON CHANGE OFf1 OR f2 OR…. OR fn
: internal 전용의 이벤트는 아님
:기술된 f1…fn 을 키값으로 새로운 값이들어왔을 때 발생하는 이벤트
: SUM 함수를 이용한 부분합을낼 수 없슴.
2. DESCRIBE TABLE itab [KIND knd] [LINES lin] [OCCURS n].
1. DESCRIBE TABLE itab LINES tc-lines. ==> itab의 총라인수를 tc-lines에 넣는다.
2. DESCRIBE TABLE itab LINES tc-current_lines. ==> itab의 총라인수를 tc-current_lines에 넣는다.
두가지 소스의 차이점은 인터널테이블의 총라인수를 1번은 테이블컨트롤의 총라인수를 의미하는 tc-lines에 넣는것이고
2번은 현재라인(커서가 위치하는 라인)에 넣어 주는 것입니다.
1번으로 pbo에 설정을 해주시면 테이블컨트롤(tc)에서 자동 계산해서 스크롤바가 자동으로 생성이 됩니다.
참조
'Ⅰ. ERP > 1. ABAP' 카테고리의 다른 글
[SAP ABAP] SAP Memory Parameter (0) | 2022.11.04 |
---|---|
[SAP ABAP] PAI 에서 AT EXIT-COMMAND (0) | 2022.11.04 |
[SAP ABAP] 시스템 변수 정리 (0) | 2022.10.31 |
[sap abap] 변수의 특수문자 제거 / translate using 구문 (0) | 2022.10.28 |
[SAP ABAP] 세션 허용갯수 확인 Function (0) | 2022.10.12 |