SAP BOX

'26/10/31 UPDATE

FI / FIELD NOTES

S/4HANA에서 BSIS를 읽는 코드는 그대로인데 쓰는 코드는 왜 고쳐야 할까

유니버설 저널과 함께 BSIS 같은 합계·인덱스 테이블은 같은 이름의 호환 뷰가 되었고, COEP 같은 테이블은 다른 이름의 뷰로 읽기가 돌려집니다. 호환 뷰가 SELECT는 받아 주지만 INSERT·UPDATE·DELETE·MODIFY는 커스텀 코드에서 고쳐야 하는 까닭을 Simplification List 2023 기준으로 봅니다.

가상의 ECC Z 프로그램 두 개를 떠올려 봅시다. 하나는 BSIS를 읽는 보고서이고, 다른 하나는 같은 BSIS의 필드 하나를 고치는(UPDATE) 프로그램입니다. S/4HANA로 전환한 뒤 앞의 보고서는 코드를 고치지 않아도 결과를 돌려주지만, 뒤의 프로그램은 고쳐야 할 목록에 오릅니다. 같은 테이블 이름을 쓰는 두 줄이 왜 다르게 대접받을까요? 이 글을 읽고 나면 유니버설 저널 뒤에서 BSIS 같은 옛 재무 테이블이 무엇으로 바뀌었는지, 읽기와 쓰기가 왜 갈리는지 알고, 자기 코드에서 먼저 찾아야 할 줄을 고를 수 있습니다.

예시의 프로그램 ZDEMO_BSIS_ACCESS와 변수는 지어낸 것이고 코드는 실행하지 않았습니다. 내용은 SAP S/4HANA 2023 Simplification List(문서판 1.35, 2025-02-25)의 8.2절 'S4TWL - Data Model Changes in FIN', ABAP 키워드 문서 7.58의 'DDIC - Replacement Objects', SAP S/4HANA 2023 전환 가이드(문서판 7.0)를 기준으로 정리했습니다. 문서는 영어입니다. 목록이 가리키는 SAP Note 1976487은 로그인이 필요해 읽지 않았고, 이 글은 그 내용을 다루지 않습니다.

유니버설 저널 뒤에서 사라진 테이블들

Simplification List는 유니버설 저널이 재무 보고용 거래 데이터를 저장하는 방식을 크게 바꾼다고 설명합니다. 계정을 축으로 한 하나의 문서 저장소에서 내부 보고와 외부 보고가 함께 읽는다는 것입니다. 그 결과 총계정원장, 관리회계, 자재원장, 자산회계, 매입·매출채권의 기간별 합계 레코드가 없어졌고, 특정 조회를 빠르게 하려고 두었던 인덱스 테이블도 없어졌습니다. 보고가 합계 레코드의 필드 수에 묶이지 않게 된다는 것이 목록이 드는 이점입니다.

바뀐 시점은 두 무리로 나뉩니다. SAP Simple Finance를 설치할 때 합계 테이블과 응용 인덱스 테이블이 먼저 바뀌었고, SAP Simple Finance 2.0과 S/4HANA 1511에서 더 많은 테이블이 유니버설 저널(ACDOCA)로 일부 대체되었습니다. BSIS는 앞의 무리에 들어 있습니다.

BSIS는 같은 이름의 호환 뷰가 되었다

SAP Simple Finance(온프레미스)를 설치하면 합계 테이블과 응용 인덱스 테이블이 지워지고, 그 자리를 같은 이름의 DDL SQL 뷰가 채웁니다. 목록은 이를 호환 뷰(compatibility view)라고 부릅니다. 뷰는 DDL 소스에서 생성되고, 이 교체는 Software Update Manager(SUM)로 애드온을 설치하는 동안 일어나며, 원래 데이터는 백업 테이블로 옮겨 둡니다. BSIS라면 DDIC의 뷰 이름은 그대로 BSIS, DDL 소스는 BSIS_DDL, 백업 테이블은 BSIS_BCK입니다. BSAS, BSID, BSAD, BSIK, BSAK, GLT0, KNC1, LFC1 등도 같은 짜임입니다.

목록은 호환 뷰가 데이터베이스 SELECT를 예전처럼 동작하게 한다고 적습니다. 그래서 Z 프로그램의 SELECT ... FROM bsis는 이름이 같은 대상을 여전히 찾고, 고치지 않아도 결과가 나옵니다. 그 뷰가 안에서 어느 테이블을 어떻게 읽는지는 목록에 적혀 있지 않아 이 글에서도 다루지 않습니다.

SAP 노트

BSIS라는 이름은 남고, 테이블은 뷰가 되었다

같은 이름 호환 뷰 방식 (SAP Simple Finance 설치 때)

  1. 원래 테이블 BSIS

    BSIS (table)

    • 합계·인덱스 테이블 가운데 하나
    • 유니버설 저널 도입으로 없어졌다
    • BSAS·BSID·BSAD·BSIK·BSAK·GLT0도 같은 줄
  2. 같은 이름의 호환 뷰

    BSIS <- BSIS_DDL

    • DDL 소스에서 생성한 DDL SQL 뷰
    • DDIC에 BSIS라는 이름으로 있다
    • SELECT가 예전처럼 동작하게 한다
  3. 백업 테이블

    BSIS_BCK

    • 원래 테이블의 내용을 옮겨 받는다
    • SUM으로 애드온을 설치하는 동안 옮긴다

Simplification List for SAP S/4HANA 2023(문서판 1.35) 8.2절 기준입니다. 뷰가 어느 테이블을 읽는지는 다루지 않습니다.

BSIS는 같은 이름의 호환 뷰가 되었고, 원래 내용은 BSIS_BCK로 옮겨졌습니다. 그래서 FROM bsis라고 쓴 SELECT는 고치지 않아도 가리킬 대상이 있습니다.

이름이 다른 뷰로 읽기가 돌려지는 테이블도 있다

SAP Simple Finance 2.0과 S/4HANA 1511에서 바뀐 테이블은 방식이 다릅니다. 호환 뷰의 이름이 원래 테이블과 다르고, 대신 데이터베이스 인터페이스(DBI)가 그 테이블에 대한 SELECT를 모두 호환 뷰로 돌립니다. 호환 뷰는 ACDOCA 같은 새 데이터 모델에서 같은 데이터를 가져옵니다. 예를 들어 COEP는 V_COEP로, FAGLFLEXA는 FGLV_FAGLFLEXA로, ANEP는 FAAV_ANEP로 돌려집니다. 돌려지지 않은 원래 테이블의 내용을 읽으려면 V_COEP_ORI 같은 별도 뷰를 씁니다.

모든 테이블이 이렇게 남은 것은 아닙니다. 자재원장 테이블(CKMI1, MLCD, MLCR, MLHD, MLIT, MLPP)은 S/4HANA 1809까지만 이런 접근을 지원했고, 1909부터는 이 테이블과 뷰가 폐기되어 읽기도 쓰기도 허용되지 않습니다. 목록은 MLHD·MLIT·MLPP·MLCR이 특정 프로세스가 만드는 자재원장 문서에는 아직 쓰이지만 그 뷰는 삭제되었다고 덧붙입니다. 옛 DDIC 데이터베이스 뷰(BKPF_BSAD, VF_BSID 등)도 같은 이름의 DDL 뷰나 리다이렉트, 또는 코드로 대체되었고, 코드로 대체된 뷰를 쓰던 커스텀 코드는 고쳐야 합니다.

SAP 노트

옛 재무 테이블이 받은 세 가지 처리

Simplification List 2023 8.2절의 표에서 고른 예

  • 같은 이름 호환 뷰

    BSIS -> view BSIS

    • 테이블 자리에 같은 이름의 뷰
    • BSIS, BSAS, BSID, BSIK, GLT0, FAGLFLEXT
    • 원래 내용은 _BCK 백업 테이블
  • 다른 이름 뷰로 리다이렉트

    COEP -> V_COEP

    • DB 인터페이스가 SELECT를 뷰로 돌린다
    • 뷰는 ACDOCA 등 새 모델에서 같은 데이터를 읽는다
    • 원래 테이블 내용은 _ORI 뷰로 읽는다
  • 더는 쓰지 않음

    MLCD -> obsolete

    • 자재원장(ML) 테이블 CKMI1·MLCD 등
    • S/4HANA 1809까지만 지원
    • 1909부터 읽기도 쓰기도 허용 안 됨

표의 일부만 옮겼습니다. 전체 목록과 예외(MLHD 등의 남은 쓰임)는 원문 표를 봐야 합니다.

BSIS처럼 같은 이름의 뷰가 된 테이블, COEP처럼 이름이 다른 뷰로 읽기가 돌려지는 테이블, 자재원장 테이블처럼 1909부터 아예 쓸 수 없는 테이블이 있습니다.

읽기는 그대로, 쓰기는 고쳐야 한다

두 방식 모두 결론은 같습니다. 읽기는 호환 뷰가 받아 주지만, 쓰기(INSERT, UPDATE, DELETE, MODIFY)는 SAP 표준에서 빠지거나 바뀌었고 커스텀 코드에서도 빼거나 고쳐야 합니다. 목록은 이 작업의 안내로 SAP Note 1976487을 가리키고, 필요한 조치로 고객 프로그램의 접근을 새 재무 데이터 모델에 맞추라고 적습니다. 이 테이블이나 뷰를 참조하는 고객 소유 DDIC 뷰도 같은 일을 하는 코드로 바꿔야 합니다.

읽기와 쓰기를 가르는 이 선은 ABAP 키워드 문서 7.58의 대체 객체(replacement object) 규칙에서도 볼 수 있습니다. DDIC 데이터베이스 테이블에 CDS 뷰를 대체 객체로 지정하면, ABAP SQL에서 SELECT의 데이터 원천으로 쓸 때(하위 쿼리, OPEN CURSOR·FETCH 포함)와 dynpro·Web Dynpro에서 외래 키를 검사할 때 접근이 대체 객체로 돌려집니다. ABAP SQL의 쓰기(SELECT의 SINGLE FOR UPDATE 포함)는 원래 테이블에서 실행되며 문법 검사 경고가 납니다. Native SQL(EXEC SQL, ADBC), AMDP, 데이터베이스에 정의된 뷰, IMPORT·EXPORT TO DATABASE도 돌려지지 않습니다. 문서는 대체된 테이블의 내용이 보통 더는 갱신되지 않는다고도 적습니다. 다만 S/4HANA의 호환 뷰와 리다이렉트가 이 규칙과 똑같이 움직이는지는 이 글의 근거 문서로 확인하지 못했습니다. Native SQL이나 AMDP로 이 테이블들을 읽는 코드는 결과를 따로 시험해 보는 편이 안전합니다.

SAP 노트

읽기는 그대로, 쓰기는 고친다

두 방식 모두 같은 규칙

  • SELECT

    SELECT ... FROM bsis

    • 호환 뷰가 예전처럼 결과를 돌려준다
    • 고치지 않아도 결과는 나온다, 시험은 한다
    • 새 보고서는 유니버설 저널용 Fiori 앱 검토
  • INSERT·UPDATE·DELETE·MODIFY

    UPDATE bsis ...

    • SAP 표준에서는 빠지거나 바뀌었다
    • 커스텀 코드도 빼거나 고쳐야 한다
    • 목록이 SAP Note 1976487을 가리킨다
  • 고객 DDIC 뷰

    Z view on BSIS

    • 이 테이블·뷰를 참조하는 고객 뷰
    • 같은 일을 하는 코드로 바꿔야 한다

Simplification List 2023 8.2절 기준입니다. SAP Note 1976487은 로그인이 필요해 읽지 않았습니다.

호환 뷰는 읽기를 위한 장치입니다. 쓰기와 이 테이블을 참조하는 고객 뷰는 커스텀 코드에서 직접 고쳐야 할 대상입니다.

아래 편집기 예시는 세 경우를 한 화면에 모은 것입니다. ①은 같은 이름의 호환 뷰를 읽는 SELECT, ②는 빼거나 고쳐야 할 쓰기, ③은 V_COEP로 돌려지는 COEP 읽기입니다.

SAP GUI ABAP 편집기 화면에 번호 세 개가 있다. 1은 SELECT bukrs, hkont, belnr FROM bsis 줄로 같은 이름의 호환 뷰를 읽는다, 2는 UPDATE bsis SET zuonr 줄로 빼거나 고쳐야 할 쓰기다, 3은 SELECT kokrs, belnr FROM coep 줄로 V_COEP로 돌려지는 읽기다.
BSIS를 읽는 줄, BSIS에 쓰는 줄, COEP를 읽는 줄을 한 화면에 놓은 예시. ZDEMO_BSIS_ACCESS와 변수는 가상이고 코드는 실행하지 않았으며, 각 줄이 어떻게 처리되는지는 Simplification List 2023의 설명에서 따진 것이다.

내 코드에서 먼저 찾을 것

순서를 정한다면 호환 뷰가 받아 주지 않는 쪽부터 보는 것이 자연스럽습니다. BSIS, BSAS, BSID, BSAD, BSIK, BSAK, GLT0, COEP, FAGLFLEXA 같은 이름을 대상으로 한 INSERT·UPDATE·DELETE·MODIFY, 그리고 이 테이블을 참조하는 Z DDIC 뷰입니다. 결과가 나오는 SELECT도 전환 가이드가 말하듯 S/4HANA에서 시험은 해야 합니다. 보고서라면 목록은 옛 합계 필드에 맞춰 그때그때 합계를 내는 고전 보고서 대신, 유니버설 저널의 많은 필드를 다루도록 만든 Fiori 보고서로 옮기는 것도 검토하라고 권합니다.

오늘 할 일은 하나입니다. 커스텀 코드에서 이 테이블 이름에 쓰기 문장이 붙은 줄을 찾아 목록으로 만들어 두세요. 그 목록이 SAP Note 1976487을 읽을 때 대조할 출발점이 됩니다.

끝 · END OF NOTE
RSS 구독목록으로
COMMENTS BOX

이 기록에 대화를 더해 주세요.

궁금한 점, 다른 접근, 직접 해 본 결과를 나눠 주세요.

최신순

로그인 상태 확인 중…

댓글을 불러오는 중…