재무회계

IFRS 18 사업결합 손익 범주 귀속 점검 — 염가매수차익부터 인수금융 이자까지, 기록한 범주가 정책표와 맞는지 다시 따져 보는 화면

정책표로 다시 정하는 영업·투자·재무 범주 · 건별 장부 대 재계산 비교 · 범주 이동 필요 금액 · 재계산 근거와 합계 대사 — 소개 영상과 실제 화면 6종, 그리고 CDS 코드까지

소개 영상1분 30초8개 장면음성 안내·자막장면 흐름 요약

도입 포인트 — 이 앱을 사용해야 하는 이유

사업결합이 있는 해의 결산에서 손익계산서 담당자가 가장 자주 받는 질문은 금액이 아니라 자리입니다. 염가매수차익은 어느 줄에 놓였나, 조건부대가의 공정가치 변동은 영업 쪽인가 재무 쪽인가, 인수 때 든 수수료는 비용으로 나갔나 영업권에 얹혔나. 금액은 전표에 있으니 합계는 맞는데, 그 금액이 손익계산서의 어느 범주에 앉았느냐는 전표 한 장 한 장을 열어 봐야 알 수 있습니다.

IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호)는 손익을 영업·투자·재무 등의 범주로 나누어 보이도록 요구하고, 그 범주별 소계를 표시하도록 합니다. 이 기준서는 2027-01-01 이후 개시하는 회계연도부터 적용하며 조기 적용이 허용되고, 비교기간도 다시 작성해야 합니다. 사업결합에서 생긴 손익은 IFRS 3 사업결합(K-IFRS 제1103호)에서 인식·측정하는 항목이라, 한 건의 인수가 여러 종류의 손익을 한꺼번에 만들고 그 종류마다 놓일 자리가 다릅니다. 기준을 도입하기 전에 지금 장부가 정책표와 얼마나 어긋나 있는지를 미리 재 보는 일이 이 앱의 자리입니다.

이 앱은 사업결합 손익 건을 가져와 구성요소(염가매수차익·조건부대가 변동·취득 관련 원가·기존 보유 지분 재측정·인수금융 이자)마다 회사의 정책표로 범주를 다시 정하고, 장부에 기록된 범주와 건별로 맞댑니다. 다르면 ‘점검 필요’, 판단 재료가 비어 있으면 ‘확인 필요’로 표시하고, 범주가 옮겨질 때 소계에 미치는 금액을 따로 모아 보여 줍니다. 점검 도구이며 범주 판단과 최종 결정은 회사와 감사인이 합니다.

한 줄 요약 — 손익 금액이 아니라 손익이 앉은 자리를 점검합니다. 정책표로 다시 정한 범주와 장부의 범주를 건별로 맞대고, 어긋난 건의 금액을 모아 소계에 미치는 영향을 보이며, 재계산 손익과 합계 대사로 그 숫자의 근거까지 스스로 검산합니다.

손익은 맞는데 범주가 틀리면 소계가 흔들린다

총계정원장 잔액과 전표 합계는 맞는데 영업이익 소계가 다르게 나오는 이유는 대개 금액이 아니라 범주 지정에 있습니다. 같은 1,300백만 원이라도 영업범주에 있으면 영업이익에, 투자범주에 있으면 영업이익 아래 소계에 들어갑니다. 합계 대사로는 잡히지 않고, 소계를 만들어 본 다음에야 드러납니다. 이 앱은 소계를 만들기 전에 건별로 범주를 맞대어 이동이 필요한 금액을 먼저 보여 줍니다.

사업결합 손익은 다섯 갈래라 범주 판단이 갈린다

한 건의 인수에서 나오는 손익은 한 종류가 아닙니다. 아래 정책표는 이 사례에서 회사가 정했다고 가정한 것이며, 실제 정책은 회사가 정하고 감사인과 협의합니다. 같은 인수 건 안에서도 구성요소에 따라 기본 범주가 다르고, 기존 보유 지분 재측정은 그 지분의 성격에 따라 범주가 갈립니다.

손익 구성요소정책표의 기본 범주재계산 범주를 정하는 방법점검 포인트
염가매수차익영업범주구성요소만으로 정함투자·재무 쪽에 기록돼 있지 않은지
조건부대가 공정가치 변동영업범주구성요소만으로 정함재측정 손익이 재무 쪽에 놓이지 않았는지
취득 관련 원가영업범주(발생 시점 비용 처리)자산 원가(영업권 등)로 기록된 건은 점검 필요손익에서 빠져 자산에 얹히지 않았는지
기존 보유 지분 재측정관계기업·공동기업 지분이었다면 투자범주, 그 밖의 지분은 영업범주지분 성격이 비어 있으면 판단 보류(확인 필요)지분의 성격이 확정돼 있는지
인수금융 이자재무범주구성요소만으로 정함영업 쪽에 섞여 있지 않은지

장부와 정책표를 건별로 맞대는 자리가 비어 있다

손익 계정 라인을 조회하는 표준 화면은 있지만, 그 라인이 어느 인수 건의 어느 구성요소인지, 정책표로 다시 정하면 어느 범주인지는 화면 바깥에서 엑셀로 맞춥니다. 건수가 적을 때는 되지만, 인수 건이 여러 개이고 회사가 둘 이상이면 매번 다시 만들게 됩니다. 이 앱은 구성요소·기록 범주·재계산 범주·이동 필요 금액을 한 행에 놓아, 어긋난 건만 걸러 보는 일을 조회조건 하나로 줄입니다.

재계산한 손익까지 보아야 입력이 맞는지 안다

범주가 맞아도 금액이 틀릴 수 있습니다. 취득 관련 원가 일부가 자산 원가로 기록되면 손익에 들어와야 할 비용이 빠지고, 조건부대가 변동은 기말 공정가치가 갱신되지 않으면 어긋납니다. 이 앱은 취득가배분 결과의 인수일 공정가치와 지급 수수료 같은 입력값으로 손익을 다시 구해 장부 손익과 맞댑니다. 차이가 나면 입력값과 전기 누락 여부부터 확인하도록 안내합니다.

그래서 이 점검으로 무엇을 확인하는가

첫째, 건별로 기록 범주가 정책표와 같은지. 둘째, 다르다면 범주를 옮길 때 소계에 미치는 금액이 얼마인지. 셋째, 재계산 손익이 장부와 같은지. 넷째, 건 합계·딜 합계·범주 합계가 서로 맞는지. 이 네 가지가 한 화면에서 확인되면, 기준서 도입 전에 정책표와 매핑을 어디까지 손봐야 하는지가 숫자로 나옵니다. 아래 표는 이 앱이 해 주는 일과, 그것이 없을 때 생기는 일입니다.

기능하는 일이것이 없으면
딜별 점검인수 건마다 손익 합계와 범주별 장부 금액·범주 이동 필요 금액을 한 줄에 보입니다.어느 인수 건부터 열어 봐야 하는지 알 수 없습니다.
손익 건별 점검구성요소마다 기록 범주와 재계산 범주를 나란히 놓고 다르면 점검 필요로 표시합니다.전표를 하나씩 열어 엑셀에 옮겨 적게 됩니다.
범주별 합계회사·범주마다 장부 금액과 재계산 금액, 그 차이를 보입니다.범주를 옮겼을 때 소계가 얼마나 달라지는지 가늠하지 못합니다.
재계산 근거인수일 공정가치 같은 입력값으로 손익을 다시 구해 장부와 맞댑니다.범주는 맞는데 금액이 틀린 건을 놓칩니다.
대사 결과건 합계·딜 합계·범주 합계가 서로 맞는지 검사 건수와 차이로 보입니다.이 화면의 숫자를 믿어도 되는지 스스로 확인할 길이 없습니다.
CSV 내려받기지금 보고 있는 탭의 조회 결과를 UTF-8 파일로 저장합니다.감사인과 주고받을 근거를 따로 만들게 됩니다.

사용 방법

  1. 조회조건 입력 — 회계연도(필수)를 넣고, 회사·손익 구성요소·기록 범주·전기일·딜 이름·점검 코드·점검 결과는 필요한 것만 고릅니다. 화면을 열면 2026 으로 자동 조회됩니다.
  2. 조회 버튼 또는 Enter — 조회 버튼은 조회조건 줄의 가장 오른쪽에 있고, 입력 칸에서 Enter 를 눌러도 조회됩니다. 초기화 버튼은 그 옆에 있습니다.
  3. 요약 확인 — 점검한 손익 건수 · 점검 필요 · 확인 필요 · 범주 이동 필요 금액 · 영업범주 손익 · 정합성 대사 차이 건수가 위쪽에 한 줄로 나옵니다.
  4. 탭 이동 — 딜별 점검 → 손익 건별 점검 → 범주별 합계 → 재계산 근거 → 대사 결과 순서로 봅니다.
  5. 행 클릭 상세 — 손익 건별 점검의 행을 누르면 같은 딜의 기록 범주와 재계산 범주를 비교하는 상세 창이 열립니다.
  6. CSV 내려받기 — 오른쪽 위 버튼으로 지금 탭의 조회 결과를 저장합니다.

숫자를 믿을 수 있는가 — 검증 결과

점검 도구의 값은 “이 숫자 맞아?”에 먼저 답해야 합니다. 만드는 쪽에서 대사식을 세워 전수로 돌렸고, 화면 위쪽 요약의 ‘정합성 대사 차이 건수’가 같은 검사를 열 때마다 다시 합니다.

대사식검사 건수차이최대 차이
건별 손익 합계 = 딜별 손익 합계 (R01)600원
딜별 영업 + 투자 + 재무 + 그 밖의 범주(장부) = 딜별 손익 합계 (R02)600원
범주별 장부 금액 합계 = 손익 건 합계, 회사별 (R03)200원
범주별 재계산 금액 합계 = 손익 건 합계, 회사별 — 재계산은 범주만 옮긴다 (R04)200원
재계산 근거의 장부 손익 = 해당 구성요소 건 합계, 자산 원가 기록 건 제외 (R05)1400원
정합성 대사 5식 합계3000원
참고 — 범주 이동 필요 금액: 딜별 합계 = 건별 합계 (R06)600원

대사 차이와는 별개로, 점검 기능이 제대로 걸러 내는지 보려고 의도적으로 넣은 예외가 있습니다. 손익 건 6건(B01~B06 각 1건), 재계산 근거 2건(B07), 판단 재료가 빠진 1건(B09)입니다. 요약의 점검 필요 6건·확인 필요 1건이 이 예외와 정확히 일치하고, 범주 이동 필요 금액 합계는 1,815.0백만 원입니다. 이 자료의 회사·딜·금액은 모두 가상입니다.

코드넣어 둔 예외결과 상태
B01염가매수차익 +950백만 원이 투자범주에 기록점검 필요
B02조건부대가 공정가치 변동 -90백만 원이 재무범주에 기록점검 필요
B03취득 관련 원가 -240백만 원이 자산 원가로 기록돼 손익에서 빠짐점검 필요
B04기존 보유 지분 재측정 +1,300백만 원이 영업범주에 기록 — 정책표는 투자범주점검 필요
B05손익 범주가 비어 있는 취득 관련 원가 -70백만 원점검 필요
B06인수금융 이자 -35백만 원이 영업범주에 기록점검 필요
B07재계산 손익과 장부 손익이 다른 재계산 근거 2건점검 필요
B09기존 보유 지분의 성격이 확정되지 않은 재측정 +210백만 원확인 필요

무엇으로 만들었나

자리무엇왜 그렇게 두었나
화면OpenUI5 표준 컨트롤(조회조건 · 요약 · 탭 · 표 · 상세 창)과 Horizon 테마표준 컨트롤만 쓰면 외부 라이브러리 반입 심사가 필요 없고, 사내 포털과 같은 모양으로 열립니다.
데이터 연결OData V2 모델 하나 — 이름 없는 기본 모델이며 탭마다 서비스의 엔티티 집합 하나에 바인딩화면이 데이터 위치를 알지 못하게 하고, 운영 전환에서는 서비스 주소만 바꿉니다.
조회조건Filter 객체로 서비스에 조건을 보내고, 전체를 고르면 그 조건을 만들지 않음‘전체’라는 값을 서비스가 해석하지 않도록 조건 자체를 빼는 쪽이 안전합니다.
판정·집계 로직서비스 쪽 한 파일에 모음 — 정책표 판정, 이동 필요 금액, 재계산, 대사판정을 화면이 아니라 서비스에 둬야 다른 화면·배치가 같은 결과를 씁니다.
요약 지표건 조회 · 점검 건수 함수 · 대사 조회를 한 함수에 모아 계산요약과 탭이 서로 다른 시점의 숫자를 보지 않게 합니다.
오류 안내메타데이터 로드 실패 · 요청 실패 · 빈 응답을 구분해 안내‘데이터가 없다’와 ‘못 읽었다’를 같은 화면으로 보이지 않게 합니다.
테마sap_horizonSAP 표준 화면과 같은 결을 유지합니다.

앱 정보는 아래와 같습니다.

항목내용
업무 영역재무회계 — IFRS 18 손익 범주
관련 기준서·대상 영역IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호) · 사업결합 손익은 IFRS 3 사업결합(K-IFRS 제1103호)에서 생긴 항목
SAP 표준 T-codeFAGLL03 · FBL3N · FS10N · F.01 · FB03
Namespacezui5.bcmcat
화면 성격조회·점검(조회 결과 CSV 내려받기)
데이터 연동OData V2 서비스
테마sap_horizon
SAP 표준 기능을 그대로 이어받은 부분 — 손익 계정 건은 표준 총계정원장 데이터(유니버설 저널)를 그대로 읽고, 건별 조회와 전표 추적은 표준 T-code 가 담당합니다. 이 화면은 표준 데이터 구조를 이어받은 채 범주 재계산과 대사라는 조회·검증 관점을 더해 확장합니다.

실행 화면

실제로 돌아가는 화면 6종을 사용 순서대로 싣습니다. 그림을 누르면 크게 볼 수 있고, 화면마다 무엇을 보는 자리이고 숫자를 어떻게 읽는지를 아래에 적었습니다. 모든 숫자는 같은 가상 자료에서 나온 것이라 화면끼리 맞춰 보셔도 됩니다.

처음 열었을 때

조회조건 · 요약 지표 · 탭이 한 화면에 세로로 쌓입니다. 화면을 열면 회계연도 2026 으로 자동 조회되어, 처음 보는 사람도 빈 화면 대신 결과부터 만납니다.

처음 연 화면 — 조회조건 · 요약 · 딜별 점검
처음 연 화면 — 조회조건 · 요약 · 딜별 점검 — 맨 위 안내줄에 이 화면의 성격을, 그 아래에 조회조건 · 요약 지표 · 다섯 개 탭을 두었습니다.

조회조건은 회계연도(필수) · 회사 · 손익 구성요소 · 기록 범주 · 전기일 시작·종료 · 딜 이름 · 점검 코드 · 점검 결과입니다. 요약에는 점검한 손익 27건, 점검 필요 6건, 확인 필요 1건, 범주 이동 필요 금액 1,815.0백만 원, 영업범주로 기록된 손익 1,255.0백만 원, 정합성 대사 차이 0건이 나옵니다. 처음 열리는 딜별 점검 탭에는 인수 건 여섯 개가 한 줄씩 놓이고, 손익 합계 옆에 영업·투자·재무·그 밖의 범주별 장부 금액이 붙습니다. 이 표는 장부 기준이라 정책표로 다시 정한 금액은 오른쪽으로 이어집니다.

손익 건별 점검 — 기록 범주와 재계산 범주를 나란히

이 앱의 중심 탭입니다. 인수 건 안의 손익을 구성요소별로 한 줄씩 펼치고, 장부에 기록된 범주와 정책표로 다시 정한 범주를 나란히 둡니다.

손익 건별 점검 — 기록 범주와 재계산 범주
손익 건별 점검 — 기록 범주와 재계산 범주 — 27건의 손익을 구성요소별로 펼치고 두 범주가 다르면 점검 필요로 표시합니다.

두 범주가 같으면 ‘정상’이고 이동 필요 금액은 0입니다. 다르면 ‘점검 필요’가 붙고, 그 건의 손익 금액이 그대로 이동 필요 금액이 됩니다. 점검 코드 열의 B01~B06 이 어긋난 이유를 알려 주므로, 조회조건의 점검 코드·점검 결과로 어긋난 건만 걸러 볼 수 있습니다. 기존 보유 지분 재측정은 지분 성격이 확정되지 않으면 범주를 정할 수 없어 ‘확인 필요’로 따로 표시됩니다.

행 클릭 상세 — 같은 딜의 건별 비교
행 클릭 상세 — 같은 딜의 건별 비교 — 행을 누르면 그 건의 판정 사유와 같은 딜의 다른 건이 한 창에 모입니다.

여기서는 물류사 지분 추가 취득의 기존 보유 지분 재측정 손익 1,300,000,000원이 영업범주에 기록돼 있는데, 보유 지분이 관계기업·공동기업 지분이었으므로 정책표의 재계산 범주는 투자범주여서 점검 필요가 됩니다. 아래 표에는 같은 딜의 취득 관련 원가 · 조건부대가 변동 · 인수금융 이자가 함께 놓여, 이 딜에서 어긋난 것은 이 한 건뿐임을 바로 알 수 있습니다. 창 아래쪽 모서리를 끌어 크기를 바꿀 수 있습니다.

범주별 합계 · 재계산 근거 · 대사 결과

나머지 세 탭은 건별 점검의 결과가 믿을 만한지를 받쳐 주는 자리입니다. 합계가 서로 맞는지, 손익을 입력값에서 다시 구하면 장부와 같은지, 그리고 이 화면 스스로 낸 숫자의 대사가 맞는지를 차례로 봅니다.

범주별 합계 — 회사·범주마다 장부와 재계산
범주별 합계 — 회사·범주마다 장부와 재계산 — 회사 두 곳과 범주 여섯 종(영업·투자·재무·자산 원가·미지정·판단 보류)을 12행으로 보입니다.

범주마다 장부 금액과 재계산 금액, 그 차이가 나옵니다. 재계산은 건을 다른 범주로 옮기기만 하고 금액은 바꾸지 않으므로 회사별로 두 합계는 같아야 합니다. 범주 이동이 소계에 어떤 영향을 주는지는 이 표에서 영업범주 쪽이 얼마 줄고 투자범주 쪽이 얼마 느는지로 읽습니다.

재계산 근거 — 입력값으로 다시 구한 손익
재계산 근거 — 입력값으로 다시 구한 손익 — 취득 관련 원가 · 조건부대가 변동 · 염가매수차익 · 기존 지분 재측정을 입력값에서 다시 구합니다.

입력값 ①~④의 뜻은 구성요소마다 다릅니다. 취득 관련 원가는 비용 처리 대상 수수료, 조건부대가 변동은 취득일 공정가치와 기말 공정가치, 염가매수차익은 식별가능 순자산 공정가치와 이전대가·비지배지분·기존 지분 공정가치입니다. 오른쪽으로 이어지는 재계산 금액과 장부 금액의 차이가 0이 아니면 점검 필요(B07)로 표시되고, 이 경우 범주가 아니라 입력값과 전기 누락부터 확인합니다.

대사 결과 — 건 합계와 딜 합계, 범주 합계
대사 결과 — 건 합계와 딜 합계, 범주 합계 — 정합성 대사 5식과 참고 대사 1식을 검사 건수와 차이로 보입니다.

정합성 대사는 검사 30건에서 차이가 0건이고 최대 차이도 0원입니다. 참고 대사는 범주 이동 필요 금액의 딜별 합계와 건별 합계를 비교하며, 의도적으로 넣은 예외 건을 포함해도 같습니다. 이 탭이 비어 있거나 차이가 0이 아니면 앞 탭의 숫자를 쓰기 전에 원천부터 점검합니다.

화면 뒤에서 일어나는 일

화면은 조회조건을 서비스에 보낼 뿐이고, 범주 판정과 집계는 서비스가 합니다. 판정 규칙은 아래 표가 전부입니다. 코드가 같은 건은 같은 이유로 어긋났다는 뜻이므로, 점검 코드로 걸러 보면 매핑을 한 번 고쳐 한꺼번에 풀리는 묶음이 보입니다.

코드판정 조건결과 상태사용자 조치
B01염가매수차익이 영업범주가 아닌 곳에 기록점검 필요정책표상 영업범주 대상인지 확인하고 필요하면 범주를 옮긴다
B02조건부대가 공정가치 변동이 영업범주가 아닌 곳에 기록점검 필요재측정 손익의 범주 사유를 확인한다
B03취득 관련 원가가 자산 원가로 기록돼 손익에서 빠짐점검 필요발생 시점 비용 처리 대상인지 회사 판단으로 확인한다
B04기존 보유 지분 재측정 손익의 기록 범주가 정책표와 다름점검 필요보유 지분의 성격(관계기업·공동기업 여부)을 확인한다
B05손익 범주가 비어 있음점검 필요범주 지정 누락을 확인한다
B06인수금융 이자가 재무범주가 아닌 곳에 기록점검 필요차입 목적과 범주 사유를 확인한다
B07재계산 손익과 장부 손익이 다름(재계산 근거 탭)점검 필요입력값과 전기 누락 여부를 확인한다
B09기존 보유 지분의 성격이 확정되지 않음확인 필요회사가 지분 성격을 먼저 확정한다
B00기록 범주 = 재계산 범주(재계산 손익 = 장부 손익)정상조치 없음

서비스가 숫자를 만드는 순서는 다음과 같습니다. 이 순서가 곧 대사의 순서이기도 해서, 어느 단계에서 틀어졌는지 위에서부터 짚어 내려갈 수 있습니다.

순서산출·대사식쓰는 곳
1재계산 범주 = 정책표(손익 구성요소, 기존 지분 성격)손익 건별 점검
2이동 필요 금액 = 기록 범주 ≠ 재계산 범주인 건의 손익 금액손익 건별 · 딜별 점검
3염가매수차익 = max(0, 식별가능 순자산 공정가치 − (이전대가 + 비지배지분 + 기존 보유 지분 공정가치))재계산 근거
4조건부대가 변동 = 취득일 공정가치 − 기말 공정가치 · 기존 지분 재측정 = 취득일 공정가치 − 장부금액 · 취득 관련 원가 = −비용 처리 대상 수수료재계산 근거
5Σ 건별 손익 = 딜별 손익 합계 · 영업 + 투자 + 재무 + 그 밖의 범주 = 딜별 합계대사 R01 · R02
6Σ 범주별 장부 금액 = Σ 범주별 재계산 금액 = Σ 건별 손익(회사별)대사 R03 · R04
7재계산 근거의 장부 손익 = 해당 구성요소 건 합계(자산 원가 기록 건 제외)대사 R05

조회조건

조회조건필수기본값$filter 로 보내는 식
회계연도필수2026Gjahr eq '2026'
회사선택전체Bukrs eq '1000' (전체면 조건 없음)
손익 구성요소선택전체CompType eq 'S'
기록 범주선택전체BookedCat eq 'OPR'
전기일 시작·종료선택비움PostDate ge datetime'…' and PostDate le datetime'…'
딜 이름선택비움substringof('유통',DealName)
점검 코드선택전체CheckCode eq 'B03'
점검 결과선택전체CheckStatus eq 'CHECK'

조건 사이는 모두 and 로만 잇습니다. 구현마다 해석이 갈리는 or 를 쓰지 않고, 날짜 범위는 ge · le 두 개로 풉니다.

결과 컬럼

결과 컬럼의미 · 산출식
손익 합계딜의 손익 건 금액 합계(이익 +, 비용 −)
영업·투자·재무범주(장부)장부에 기록된 범주별 손익 합
영업·투자·재무범주(재계산)정책표로 다시 정한 범주별 손익 합
범주 이동 필요 금액기록 범주 ≠ 재계산 범주인 건의 손익 합
손익 건수 · 점검 필요 · 확인 필요건수 집계
점검 코드 · 점검 결과B00~B09 와 정상·점검 필요·확인 필요

좁은 화면에서 달라지는 것

화면은 sap.m 표준 컨트롤이라 좁은 창에서는 조회조건이 줄을 바꿔 쌓이고, 표는 가로로 밀어 보는 방식으로 열립니다. 건별 비교는 상세 창이 한 화면에 모아 주므로, 좁은 화면에서는 표를 넓게 펴 보는 대신 행을 눌러 상세 창으로 보는 쪽이 읽기 편합니다.

파일 구성

(앱 폴더)/
  index.html · Component.js · manifest.json
  controller/  BaseController.js · Main.controller.js
  view/        Main.view.xml · DetailDialog.fragment.xml
  model/       formatter.js · ErrorHandler.js
  css/         style.css
  i18n/        i18n_ko.properties
  odata/       서비스 로직 · 검증용 샘플 데이터
  media/       소개 영상 · 포스터

SAP 표준 기능 확장 포인트

이 앱은 SAP 표준을 대체하지 않습니다. 표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회·검증 관점을 더해 확장합니다. 어디까지가 표준이고 어디서부터 이 앱인지를 먼저 적습니다.

표준으로 되는 것과 안 되는 것

하고 싶은 일SAP 표준표준 화면이 담당하는 일이 앱이 더하는 관점
손익 계정 라인 조회FAGLL03 · FBL3N계정 단위로 라인아이템을 조회합니다라인을 인수 건·구성요소 기준으로 묶어 범주까지 한 행에 놓습니다
계정 잔액 확인FS10N계정별 기간 잔액을 보여 줍니다잔액이 아니라 범주별 합계로 견주어 범주 이동의 영향을 봅니다
재무제표 소계 확인F.01재무제표 구조대로 소계를 보여 줍니다범주를 옮기기 전에 소계에 미치는 금액을 미리 보입니다
원 전표 확인FB03전표 한 장을 상세히 보여 줍니다이동 필요 건을 골라 낸 뒤 그 전표로 내려가게 합니다
범주 재판정-재무제표 구조에 따라 계정이 한 범주에 놓입니다구성요소와 지분 성격으로 건마다 범주를 다시 정해 장부와 맞댑니다
재계산 손익 대사-취득가배분 결과를 별도 자료로 관리합니다입력값에서 손익을 다시 구해 장부 손익과 맞댑니다

T-code 별 연계 지점

이 앱이 표준 화면의 어느 자리와 맞닿는지를 적었습니다. 운영에 올릴 때 “기존 화면을 없애야 하느냐”는 질문이 꼭 나오는데, 없애지 않고 둡니다. 법정 보고와 감사 대응은 표준 거래에 두는 편이 책임 소재가 분명합니다.

T-code이름연계
FAGLL03G/L 계정 라인아이템 조회이 앱의 손익 건은 같은 원장 라인(유니버설 저널)에서 옵니다. 손익 계정 건을 같은 조건으로 조회해 건수와 합계를 맞춰 보는 것이 첫 번째 대사입니다. 이 앱 결과의 이동 필요 건 → 이 화면에서 같은 계정·기간으로 원천 확인, 표준 화면의 값 → 이 앱의 손익 건별 점검에서 구성요소와 범주를 다시 봅니다.
FBL3NG/L 계정 라인아이템계정별 건을 원천 전표까지 따라갈 때 씁니다. 계정 한 개를 깊이 보는 일은 이 화면이, 인수 건 전체를 가로질러 범주를 보는 일은 이 앱이 맡습니다.
FS10NG/L 계정 잔액 조회계정 잔액과 이 앱의 범주별 합계를 견줍니다. 범주를 옮길 때 어느 계정 잔액이 어디로 이동하는지 짚는 데 씁니다.
F.01재무제표 조회범주 이동 전후 소계의 영향을 확인하는 자리입니다. 이 앱의 범주별 합계 → 이 화면의 소계로 이어 보고, 소계 확정은 표준에 남겨 둡니다.
FB03전표 조회이동 필요 건의 원 전표를 확인합니다. 범주를 실제로 옮기는 수정은 표준 전표 처리와 회사의 승인 절차를 따릅니다.

기존 화면 대비 남겨 둘 일을 정리하면 이렇습니다. 소계 확정, 법정·공시 보고, 감사 대응은 표준에 그대로 두고, 이 앱은 기준서 도입 준비와 결산 전 점검에 씁니다.

S/4HANA 분석 스택과의 자리

이 앱의 숫자는 CDS 뷰 위에서 만들어질 수 있습니다. 아래 CDS 구성처럼 큐브와 분석 쿼리를 세워 두면, Fiori 분석 앱이나 Analysis for Office 에서도 같은 판정 결과를 열어 볼 수 있습니다. 다만 범주 재판정은 구성요소와 지분 성격이라는 회사 정책표를 입력으로 받으므로 표준 분석 쿼리에 그대로 있는 기능이 아닙니다. 이 앱은 그 판정을 한 곳에 모아 두고, 표준 분석 도구는 그 결과를 읽는 쪽으로 이어 붙이는 구성을 권합니다.

확장 포인트 — 운영에서 실제로 손대는 자리

자리무엇을 손대나비고
범주 정책표구성요소 · 지분 성격 → 기본 범주 매핑회사가 정하고 감사인과 협의합니다. 유효기간을 두어 정책이 바뀌어도 과거 판정을 보존합니다.
계정 → 기록 범주 매핑손익 계정이 장부에서 어느 범주로 기록되는지재무제표 구조의 범주 지정과 같은 값을 읽는지 확인합니다.
구성요소 식별손익 계정 → 사업결합 구성요소 구분계정 체계에 따라 계정 계열 또는 계정 속성으로 식별합니다.
인수 건 식별전표 → 인수 건 연결내부 오더·프로젝트·참조 키 중 무엇으로 묶을지 정해야 합니다.
재계산 입력값취득가배분 결과의 공정가치 · 지급 수수료입력 자료의 출처와 갱신 주기를 합의합니다.
권한회사코드 단위 권한집계를 읽는 뷰에 걸어야 합계로 새지 않습니다.

요구사항 매핑표

기준서의 요구사항과 이 앱의 대응 기능을 맞춰 보았습니다. 기준서 해석과 범주 판단은 회사와 감사인의 몫이며, 이 표는 화면이 어느 요구사항 관점에서 어떤 자료를 보여 주는지를 정리한 것입니다.

기준서요구사항대응 기능원천 데이터비고
IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호)손익을 영업·투자·재무·법인세·중단영업 범주로 분류손익 건별 점검 — 기록 범주와 재계산 범주 비교손익 계정 라인아이템범주 정책은 회사가 정한다
IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호)영업이익·재무 및 법인세 전 이익 소계 표시딜별·범주별 합계 — 범주 이동 시 소계에 미치는 금액범주별 손익 합계소계 금액은 이 화면이 확정하지 않는다
IFRS 3 사업결합(K-IFRS 제1103호)염가매수차익·조건부대가·취득 관련 원가·단계적 취득 손익의 인식재계산 근거 — 인수일 공정가치 입력값으로 손익 재계산취득가배분 입력값, 지급 수수료인식·측정 판단은 회사가 한다

CDS 구성

이 사례의 화면은 가상 자료 27건을 서비스가 그 자리에서 판정합니다. 데모라서 되는 일이고, 운영 데이터에서는 판정과 집계를 CDS 로 내립니다. 아래는 그때 만드는 객체를 읽는 순서대로 적은 것입니다. 정책표와 계정 매핑을 가장 먼저 합의해야 하고, 그 위에 건 뷰 · 딜 큐브 · 범주 큐브 · 조회 쿼리 · 권한 · 서비스가 차례로 올라갑니다.

코드는 스케치입니다. 필드 이름과 표준 뷰 이름은 릴리스와 환경에 따라 다르므로, 그대로 붙여 넣기 전에 View Browser(F2170)로 실제 이름을 확인해야 합니다. 확인이 필요한 자리는 주석에 적어 두었습니다.

뷰 레이어 구성

레이어뷰하는 일왜 나누나
기준zbcm_polmap구성요소 · 지분 성격 → 기본 범주 정책표범주 판단을 코드에 박으면 정책이 바뀔 때마다 개발자를 불러야 합니다.
기준zbcm_catmap손익 계정 → 장부 기록 범주 · 구성요소 매핑장부의 범주를 읽는 자리를 한 곳으로 모읍니다.
기본(건)ZI_BcmLineACDOCA 손익 건 + 기록 범주 + 재계산 범주 + 이동 필요 금액 + 점검 코드판정을 한 번만 정의하고 위 뷰가 모두 이 뷰를 읽습니다.
큐브(딜)ZI_BcmDeal인수 건별 손익 합계와 범주별 장부·재계산 금액화면이 하던 집계를 DB 로 내립니다.
큐브(범주)ZI_BcmCat회사·범주별 장부 금액과 재계산 금액대사식 R03·R04 가 같은 뷰에서 나오게 합니다.
쿼리ZC_BcmLineCheck조회조건과 점검 결과 컬럼표준 Fiori 와 Analysis for Office 가 같은 결과를 읽습니다.
권한ZI_BcmLine (DCL)회사코드 권한집계를 읽는 자리에 걸어야 합계로 새지 않습니다.
서비스ZUI_BcmCheckService Definition · Binding화면은 이 서비스만 바라봅니다.

① 범주 정책표 — 구성요소와 지분 성격에서 기본 범주를 정한다

리포트의 모든 판정이 이 표에서 갈립니다. 취득 관련 원가는 영업범주, 인수금융 이자는 재무범주, 기존 보유 지분 재측정은 지분 성격에 따라 투자범주 또는 영업범주로 정하는 식입니다. 운영 전환에서 가장 먼저 합의해야 하는 항목이며, 유효기간을 둔 이유는 정책이 바뀌어도 과거 기간의 판정을 그대로 보존하기 위해서입니다.

" ────────────────────────────────────────────────────────────────
"  zbcm_polmap — 구성요소 · 지분 성격 → 기본 범주 (투명 테이블)
"  코드에 박지 않는 이유 : 범주 정책은 회사가 정하고 감사인과 협의해
"  바뀔 수 있다. 바뀔 때마다 개발자를 부르면 점검이 금방 낡는다.
" ────────────────────────────────────────────────────────────────
@EndUserText.label : '사업결합 손익 범주 정책표'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C          " 고객 유지 - 전송(TR)으로 옮긴다
@AbapCatalog.dataMaintenance : #ALLOWED  " SM30 뷰를 함께 만들어 둔다
define table zbcm_polmap {
  key mandt      : mandt not null;
  key comp_type  : abap.char(1) not null;   " G 염가매수차익 · C 조건부대가 · A 취득 관련 원가
                                            " S 기존 지분 재측정 · F 인수금융 이자
  key held_nat   : abap.char(1) not null;   " A 관계기업·공동기업 지분 · B 그 밖의 지분 · - 해당 없음
  key valid_from : abap.dats not null;      " 유효 시작일
  valid_to       : abap.dats;               " 유효 종료일 - 비우면 계속
  exp_cat        : abap.char(3);            " OPR 영업 · INV 투자 · FIN 재무 · CNF 판단 보류
  note           : abap.char(100);          " 정책 사유(감사인과 협의한 근거 메모)
}

② 계정 매핑 — 손익 계정이 장부에서 어느 범주에 놓이는가

재계산 범주와 맞댈 상대는 장부에 실제로 기록된 범주입니다. 손익 계정마다 어느 범주 계열인지를 이 표가 가지고 있습니다. 계정 체계가 바뀌면 이 표만 고치면 되므로, 뷰는 그대로 둔 채 점검 결과가 따라 바뀝니다. 같은 계정이 사업결합 구성요소 구분도 함께 가지므로 건이 어느 구성요소인지도 여기서 정해집니다.

" ────────────────────────────────────────────────────────────────
"  zbcm_catmap — 손익 계정 → 장부 기록 범주 · 사업결합 구성요소
"  운영에서는 재무제표 구조(FSV)에 지정한 범주를 그대로 옮겨 담는다.
"  [확인 필요] 범주 지정이 계정 속성인지 구조 노드인지는 환경마다 다르다.
" ────────────────────────────────────────────────────────────────
@EndUserText.label : '손익 계정 범주 매핑'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zbcm_catmap {
  key mandt     : mandt not null;
  key ktopl     : ktopl not null;           " 계정과목표
  key saknr     : saknr not null;           " 손익 계정
  key valid_from: abap.dats not null;
  valid_to      : abap.dats;
  book_cat      : abap.char(3);             " OPR · INV · FIN · AST(자산 원가) · NON(미지정)
  comp_type     : abap.char(1);             " 사업결합 구성요소(G · C · A · S · F)
}

③ 건 뷰 — 기록 범주와 재계산 범주를 한 행에 놓는다

이 뷰가 점검의 본체입니다. ACDOCA 의 손익 건에 기록 범주를 붙이고, 정책표를 association 으로 걸어 재계산 범주를 구한 뒤, 두 범주가 다른 건의 금액만 이동 필요 금액으로 남깁니다. 판정을 이 뷰에서 한 번만 정의하고, 딜 큐브·범주 큐브·쿼리가 모두 이 뷰를 읽게 해야 화면마다 숫자가 갈라지지 않습니다.

" ────────────────────────────────────────────────────────────────
"  ZI_BcmLine — 사업결합 손익 건 (기본 뷰)
"  결정하는 것 : 건마다 ① 기록 범주 ② 재계산 범주 ③ 이동 필요 금액 ④ 점검 코드
"  이렇게 나눈 이유 : 판정 조건을 이 뷰 한 곳에 두면 딜·범주 집계와
"  화면·배치가 같은 결과를 쓴다.
" ────────────────────────────────────────────────────────────────
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '사업결합 손익 건'
@ObjectModel.usageType: { serviceQuality: #C, sizeCategory: #XL, dataClass: #TRANSACTIONAL }
define view entity ZI_BcmLine
  as select from acdoca as j
    inner join   zbcm_catmap as m on  m.saknr = j.racct          // [확인 필요] 계정과목표(ktopl)도 함께 건다
    left outer join zbcm_polmap as p on p.comp_type = m.comp_type
                                     and p.held_nat  = j.zz_held_nat    // [확인 필요] 지분 성격을 담는 필드
                                     and p.valid_from <= j.budat
                                     and ( p.valid_to is null or p.valid_to >= j.budat )
{
  key j.rldnr                      as Ledger,
  key j.rbukrs                     as Bukrs,
  key j.gjahr                      as Gjahr,
  key j.belnr                      as DocNo,
  key j.docln                      as DocLine,
      j.racct                      as GlAcct,
      j.budat                      as PostDate,
      j.zz_deal_no                 as DealNo,        // [확인 필요] 인수 건 식별 키(오더·프로젝트·참조)
      m.comp_type                  as CompType,
      m.book_cat                   as BookedCat,
      p.exp_cat                    as ExpectCat,
      @Semantics.amount.currencyCode: 'Currency'
      j.hsl                        as Amount,
      @Semantics.currencyCode: true
      j.rhcur                      as Currency,

      /* 이동 필요 금액 : 기록 범주와 재계산 범주가 다른 건의 손익 금액 */
      @Semantics.amount.currencyCode: 'Currency'
      case when p.exp_cat <> 'CNF' and m.book_cat <> p.exp_cat
           then j.hsl else cast( 0 as abap.curr( 23, 2 ) ) end  as MoveAmt,

      /* 점검 코드 : 구성요소와 상태로 정한다 */
      case
        when p.exp_cat = 'CNF'                                   then 'B09'
        when m.book_cat = p.exp_cat                              then 'B00'
        when m.book_cat = 'NON'                                  then 'B05'
        when m.comp_type = 'G'                                   then 'B01'
        when m.comp_type = 'C'                                   then 'B02'
        when m.comp_type = 'A'                                   then 'B03'
        when m.comp_type = 'S'                                   then 'B04'
        else                                                          'B06'
      end                                                       as CheckCode
}
where j.rldnr = '0L'

④ 딜 큐브 — 인수 건별 손익과 범주별 장부 금액

딜별 점검 탭이 이 큐브를 읽습니다. 장부 범주별 합계와 재계산 범주별 합계를 같은 키로 모으고, 대사식 R01·R02 가 이 뷰의 합계로 계산됩니다. 집계를 읽는 자리에 권한을 걸어야 하므로 DCL 은 이 뷰와 건 뷰 양쪽에 붙입니다.

" ────────────────────────────────────────────────────────────────
"  ZI_BcmDeal — 인수 건별 큐브
"  결정하는 것 : 딜 단위 손익 합계 · 범주별 장부/재계산 금액 · 이동 필요 금액
" ────────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck: #CHECK
@Analytics.dataCategory: #CUBE
@EndUserText.label: '사업결합 딜별 점검 큐브'
define view entity ZI_BcmDeal
  as select from ZI_BcmLine as l
{
  key l.Bukrs,
  key l.Gjahr,
  key l.DealNo,
      l.Currency,

      @Aggregation.default: #SUM
      @Semantics.amount.currencyCode: 'Currency'
      l.Amount                                                  as TotAmt,

      @Aggregation.default: #SUM
      @Semantics.amount.currencyCode: 'Currency'
      case when l.BookedCat = 'OPR' then l.Amount else 0 end    as OprBook,
      @Aggregation.default: #SUM
      @Semantics.amount.currencyCode: 'Currency'
      case when l.BookedCat = 'INV' then l.Amount else 0 end    as InvBook,
      @Aggregation.default: #SUM
      @Semantics.amount.currencyCode: 'Currency'
      case when l.BookedCat = 'FIN' then l.Amount else 0 end    as FinBook,
      @Aggregation.default: #SUM
      @Semantics.amount.currencyCode: 'Currency'
      case when l.ExpectCat = 'OPR' then l.Amount else 0 end   as OprExp,

      @Aggregation.default: #SUM
      @Semantics.amount.currencyCode: 'Currency'
      l.MoveAmt                                                 as MoveAmt,
      @Aggregation.default: #SUM
      case when l.CheckCode between 'B01' and 'B06' then 1 else 0 end  as FlagCnt
}

⑤ 범주 큐브 — 회사·범주별 장부 금액과 재계산 금액

재계산은 건을 다른 범주로 옮기기만 하므로 회사별로 장부 합계와 재계산 합계는 같아야 합니다. 이 큐브가 그 등식의 양쪽을 한 뷰에서 내놓습니다. 두 합계가 어긋나면 금액이 아니라 판정 로직이 틀린 것이라 원인을 가르는 데 쓰입니다.

" ────────────────────────────────────────────────────────────────
"  ZI_BcmCat — 회사 · 범주별 큐브
"  결정하는 것 : 범주별 장부 금액(BookAmt) · 재계산 금액(ExpAmt) · 차이(DiffAmt)
" ────────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck: #CHECK
@Analytics.dataCategory: #CUBE
@EndUserText.label: '사업결합 범주별 합계 큐브'
define view entity ZI_BcmCat
  as select from ZI_BcmLine as l
{
  key l.Bukrs,
  key l.Gjahr,
  key l.BookedCat                                         as Cat,
      l.Currency,

      @Aggregation.default: #SUM
      @Semantics.amount.currencyCode: 'Currency'
      l.Amount                                            as BookAmt,

      /* 같은 범주에 재계산으로 들어오는 금액은 쿼리에서 ExpectCat 으로 다시 모은다 */
      @Aggregation.default: #SUM
      @Semantics.amount.currencyCode: 'Currency'
      case when l.ExpectCat = l.BookedCat then l.Amount
           else cast( 0 as abap.curr( 23, 2 ) ) end      as StayAmt,

      @Aggregation.default: #SUM
      case when l.MoveAmt <> 0 then 1 else 0 end          as FlagCnt
}

⑥ 조회 쿼리 — 조회조건과 결과 컬럼

화면의 조회조건이 이 쿼리의 필터가 됩니다. 필수 조건(회계연도)은 @Consumption.filter.mandatory 로 강제해, 조건 없이 전체 건을 읽는 일이 생기지 않게 합니다. 같은 쿼리를 표준 분석 도구가 열어도 같은 조건과 같은 컬럼이 나옵니다.

" ────────────────────────────────────────────────────────────────
"  ZC_BcmLineCheck — 손익 건별 점검 조회 쿼리
"  결정하는 것 : 조회조건(필수/선택) · 결과 컬럼 · 기본 정렬
" ────────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '사업결합 손익 건별 점검'
@Metadata.allowExtensions: true
@Search.searchable: true
define view entity ZC_BcmLineCheck
  as projection on ZI_BcmLine
{
      @Consumption.filter: { mandatory: true, selectionType: #SINGLE }
  key Gjahr,
      @Consumption.filter: { selectionType: #SINGLE, multipleSelections: false }
  key Bukrs,
  key DocNo,
  key DocLine,
      @Consumption.filter.selectionType: #RANGE
      PostDate,
      DealNo,
      @Consumption.filter.selectionType: #SINGLE
      CompType,
      @Consumption.filter.selectionType: #SINGLE
      BookedCat,
      ExpectCat,
      Amount,
      MoveAmt,
      @Consumption.filter.selectionType: #SINGLE
      CheckCode,
      Currency
}

⑦ 권한 — 회사코드 단위 DCL

집계를 읽는 뷰에 권한을 걸지 않으면 합계에서 남의 회사 숫자가 새어 나옵니다. 아래 DCL 은 회사코드 표준 권한 객체를 그대로 따르게 해, 별도의 권한 설계 없이 기존 역할을 씁니다. 딜 큐브와 범주 큐브도 같은 방식으로 건 뷰의 권한을 상속합니다.

" ────────────────────────────────────────────────────────────────
"  ZI_BcmLine — DCL (Access Control)
"  결정하는 것 : 어느 회사코드의 손익 건을 누가 읽는가
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '사업결합 손익 건 권한'
@MappingRole: true
define role ZI_BcmLine {
  grant select on ZI_BcmLine
    where ( Bukrs ) = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' );
}

⑧ 서비스 — 화면이 바라보는 문

화면은 CDS 가 아니라 서비스를 부릅니다. Service Definition 으로 내보낼 뷰를 고르고 Service Binding 으로 OData V2 를 게시합니다. 게시한 뒤 화면 쪽에서는 manifest.json 의 서비스 주소만 바꾸면 되도록 서비스 이름을 고정해 둡니다.

" ────────────────────────────────────────────────────────────────
"  ZUI_BcmCheck — Service Definition
"  Service Binding(OData V2 - UI) 은 ADT 에서 만들어 게시한다.
"  게시 확인 : /IWFND/MAINT_SERVICE 에서 서비스 활성화 상태를 본다.
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '사업결합 손익 범주 점검 서비스'
define service ZUI_BcmCheck {
  expose ZI_BcmDeal       as DealCheck;
  expose ZC_BcmLineCheck  as LineCheck;
  expose ZI_BcmCat        as CatTotal;
}

운영 시점에 해야 할 일

개발보다 정하는 일이 많습니다. 아래 일곱 가지는 코딩이 아니라 합의이고, 합의가 끝나면 기술 작업은 위 객체를 만들고 화면을 올리는 일로 줄어듭니다.

해야 할 일무엇을 정하나정하지 않으면누가
범주 정책표 확정구성요소와 지분 성격별 기본 범주건마다 판정이 흔들려 첫 점검에서 막힙니다회계팀 · 감사인 협의
계정 → 범주 매핑손익 계정이 장부에서 놓이는 범주장부 범주를 읽지 못해 비교 자체가 안 됩니다회계팀
부호 규칙이익을 +, 비용을 − 로 쓰는 기준과 원장 부호의 관계이동 필요 금액의 방향이 반대로 읽힙니다회계팀
인수 건 식별 키전표를 인수 건에 묶는 기준(오더·프로젝트·참조)딜별 집계가 만들어지지 않습니다회계팀 · 인수 담당
재계산 입력값 출처취득가배분 공정가치와 수수료의 원천·갱신 주기재계산 근거가 오래된 값으로 남습니다회계팀 · 인수 담당
권한 설계회사코드 권한과 조회·내려받기 범위합계로 남의 회사 숫자가 드러납니다보안 · 권한
대사 체계표준 T-code 와 맞춰 볼 항목·주기(FAGLL03 · FS10N · F.01)숫자가 다를 때 어디서 맞출지 모릅니다회계팀
전송(TR) 순서테이블 → 건 뷰 → 큐브 → 쿼리 → DCL → 서비스의존하는 객체가 없어 활성화가 실패합니다개발 · Basis
서비스 활성화와 주소 교체/IWFND/MAINT_SERVICE 또는 Binding 게시, manifest.json 서비스 주소화면이 샘플 데이터를 계속 읽습니다개발 · Basis

운영 데이터로 갈 때

사업결합 손익은 건수가 많지 않아 건 뷰 자체는 가볍습니다. 문제는 ACDOCA 전체에서 손익 계정 건을 골라 내는 비용입니다. 전표가 수천만 건이면 회계연도와 회사코드를 필수 파라미터로 받아 인덱스를 타게 하고, 구성요소 계정 계열을 먼저 걸러 읽는 순서로 뷰를 짜야 합니다. 응답 시간 기준은 조회 한 번에 수 초 안쪽으로 잡고, 그보다 느려지면 건 뷰를 구체화한 테이블(일 배치)로 내리는 선택지가 있습니다. 이 경우 화면은 같은 서비스를 보므로 바뀌는 것이 없습니다.

자주 묻는 질문

도입 상담과 데모에서 자주 받는 질문을 네 묶음으로 나누어 적었습니다.

숫자와 판정

이 화면은 어떤 요구사항을 점검합니까?

IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호)가 손익을 영업·투자·재무 범주 등으로 나누어 보이도록 하는 요구사항 관점에서, 사업결합 손익이 놓인 범주를 회사의 정책표로 다시 정해 장부와 견줍니다.

IFRS 18 은 2027-01-01 이후 개시하는 회계연도부터 적용하며 조기 적용을 허용하고 비교기간을 다시 작성합니다. 그래서 적용 전 해에 미리 돌려 보는 용도로 쓰기 좋습니다.

범주를 이 화면이 확정해 줍니까?

아닙니다. 이 화면은 분류·집계·대사를 돕는 점검 도구이며, 정책표의 범주와 최종 판단은 회사와 감사인이 합니다.

결과도 ‘점검 필요’ · ‘확인 필요’로 표시할 뿐 위반이나 오류로 단정하지 않습니다. 정책표가 바뀌면 같은 장부에서도 점검 결과가 달라질 수 있습니다.

점검 필요와 확인 필요는 무엇이 다릅니까?

점검 필요는 정책표로 다시 정한 범주와 장부의 범주가 다르다는 뜻입니다. 확인 필요는 범주를 정할 재료가 비어 있다는 뜻입니다.

예를 들어 기존 보유 지분 재측정은 그 지분이 관계기업·공동기업 지분인지에 따라 범주가 갈리는데, 이 성격이 확정되지 않았으면 화면은 범주를 추정하지 않고 ‘확인 필요’로 둡니다.

범주 이동 필요 금액은 어떻게 계산됩니까?

기록 범주와 재계산 범주가 다른 건의 손익 금액을 그대로 더한 값입니다. 이익은 +, 비용은 − 로 더하므로 부호가 섞이면 서로 상쇄될 수 있습니다.

그래서 합계 하나로 끝내지 말고 딜별·건별로 어느 건이 얼마를 만들었는지 함께 보시기 바랍니다. 이 사례의 합계는 1,815.0백만 원입니다.

재계산한 손익이 장부와 다르면 무엇부터 봅니까?

범주가 아니라 입력값부터 봅니다. 취득가배분 결과의 인수일 공정가치, 지급 수수료, 기말 공정가치가 갱신됐는지, 전기에 반영이 누락된 건이 없는지를 순서대로 확인합니다.

이 사례에서는 취득 관련 원가 540백만 원 중 240백만 원이 자산 원가로 기록돼, 재계산 손익(-540백만 원)과 장부 손익(-300백만 원)이 240백만 원 어긋납니다. 이런 건이 재계산 근거 탭에서 점검 필요(B07)로 올라옵니다.

대사 차이가 0이면 범주 판정도 맞습니까?

아닙니다. 대사는 이 화면의 집계가 서로 맞는지를 보는 것이지 범주 판정이 옳은지를 보는 것이 아닙니다. 건 합계와 딜 합계, 범주 합계가 맞는 것은 재계산이 금액을 바꾸지 않고 범주만 옮기기 때문입니다.

판정이 옳은지는 정책표가 회사의 의도를 담고 있는지에 달려 있고, 그것은 회사와 감사인이 확인할 일입니다.

표준 화면과 숫자를 어떻게 맞춰 봅니까?

손익 건은 FAGLL03 · FBL3N 의 같은 계정 건과, 범주 이동 전후 소계는 F.01 과 견줍니다. 계정 잔액은 FS10N 으로 맞춰 봅니다.

표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회·검증 관점을 더해 확장합니다. 운영 검수에서는 건수와 합계를 이 두 화면에서 맞추는 것을 첫 번째 대사로 둡니다.

화면과 조작

조회조건에서 ‘전체’를 고르면 어떻게 됩니까?

그 조건을 서비스에 보내지 않습니다. 전체라는 값을 서비스가 해석하게 하지 않고, 조건 자체를 만들지 않는 방식입니다.

회계연도만 필수이고 나머지는 모두 선택입니다. 조건 사이는 and 로만 이으며 or 는 쓰지 않습니다.

행을 누르면 열리는 상세 창에는 무엇이 있습니까?

그 건의 판정 사유와 같은 딜의 다른 손익 건이 한 창에 모입니다. 기록 범주와 재계산 범주, 이동 필요 금액, 점검 결과를 건별로 나란히 볼 수 있습니다.

어긋난 건이 그 딜에서 한 건뿐인지, 여러 건인지를 바로 알 수 있어 정책표를 고칠지 개별 건을 고칠지 판단하는 데 쓰입니다. 창 아래쪽 모서리를 끌어 크기를 바꿀 수 있습니다.

CSV 내려받기는 무엇을 저장합니까?

지금 보고 있는 탭의 조회 결과를 UTF-8 파일로 저장합니다. 조회조건이 걸려 있으면 그 범위만 저장됩니다.

감사인에게 어긋난 건 목록을 전달하거나, 정책표를 고친 뒤 전후를 비교하는 근거로 쓸 수 있습니다.

날짜 조건은 어떻게 처리합니까?

전기일 시작과 종료를 각각 이상·이하 조건으로 보내고, 서비스가 날짜를 직접 비교합니다. 시작만 넣거나 종료만 넣어도 동작합니다.

OData 구현마다 날짜 비교 방식이 달라 결과가 갈리는 일을 막기 위해, 서비스 쪽에서 날짜 필터를 따로 처리합니다.

화면 숫자가 요약과 탭에서 서로 다를 수 있습니까?

다르지 않도록 만들었습니다. 요약 지표는 건 조회, 점검 건수 함수, 대사 조회를 한 함수에서 함께 계산하므로 같은 시점의 값입니다.

만약 다르게 보인다면 조회조건이 탭마다 다르게 걸린 경우가 대부분이므로 조회조건부터 확인하시기 바랍니다.

휴대폰에서도 열립니까?

열립니다. 화면이 표준 반응형 컨트롤로 되어 있어 좁은 창에서는 조회조건이 줄을 바꿔 쌓입니다. 다만 열이 많은 표는 가로로 밀어 봐야 하므로, 좁은 화면에서는 행을 눌러 상세 창에서 건별 비교를 보시는 편이 읽기 쉽습니다.

데이터와 원천

데이터는 어디서 옵니까?

손익 계정 건은 표준 총계정원장 데이터인 ACDOCA(유니버설 저널)에서 읽는 것을 전제로 합니다. 정책표와 계정 매핑은 회사가 유지하는 고객 테이블이고, 재계산 입력값은 취득가배분 결과에서 옵니다.

이 사례 화면의 회사·딜·금액은 모두 가상이며 검증용 샘플 데이터로 돌아갑니다.

S/4HANA 가 아니라 ECC 인데 쓸 수 있습니까?

구조가 달라집니다. ECC 에는 ACDOCA 가 없어서 BKPF · BSEG 와 손익 계정을 묶어야 하고, 한 행에 모든 정보가 들어 있지 않아 건 뷰가 길어집니다.

정책표·범주 판정·재계산·대사의 논리는 그대로이고 원천을 읽는 뷰만 달라지므로, 화면은 바뀌지 않습니다.

정책표는 누가 유지합니까?

회계팀입니다. 정책표는 구성요소와 지분 성격에서 기본 범주를 정하는 표 한 장이고, 감사인과 협의한 근거를 메모로 남기게 했습니다.

운영 설계에서는 유효기간을 두므로 정책을 바꿔도 지난 기간의 판정이 그대로 남습니다. 이 표가 이 앱에서 정기적으로 손이 가는 사실상 유일한 자리입니다.

계정 체계가 바뀌면 어떻게 합니까?

계정 매핑 테이블만 고칩니다. 뷰와 화면은 그대로이고, 새 계정이 어느 범주 계열이며 어느 사업결합 구성요소인지만 적어 주면 점검 결과가 따라 바뀝니다.

매핑에 없는 계정은 ‘범주 미지정’으로 올라오므로 빠뜨려도 조용히 지나가지 않습니다.

인수 건은 어떻게 식별합니까?

전표를 인수 건에 묶는 키가 필요합니다. 내부 오더, 프로젝트, 참조 키 중 어느 것을 쓸지는 회사마다 다르고, 이 키가 없으면 딜별 집계가 만들어지지 않습니다.

도입 준비에서 가장 먼저 확인할 항목 중 하나입니다.

도입과 운영

도입하려면 무엇부터 해야 합니까?

순서로 적으면 이렇습니다.

① 범주 정책표를 정합니다(회계팀·감사인 협의).
② 손익 계정을 장부 범주와 구성요소에 매핑합니다.
③ 전표를 인수 건에 묶는 키를 정합니다.
④ 재계산 입력값의 출처를 정합니다.
⑤ CDS 뷰와 서비스를 만들고 권한을 겁니다.

①~④가 합의이고 ⑤가 개발입니다. 합의가 늦어지는 것이 일정의 대부분입니다.

기존 화면은 없애야 합니까?

없애지 않습니다. 소계 확정, 법정·공시 보고, 감사 대응은 표준 거래에 두는 편이 책임 소재가 분명합니다.

이 앱은 기준서 도입 준비와 결산 전 점검에 쓰는 보조 화면입니다. 표준 화면을 대체하거나 재구현하지 않습니다.

권한은 어떻게 걸립니까?

CDS 에 DCL 을 붙여 회사코드 표준 권한 객체(F_BKPF_BUK)를 그대로 따릅니다. 별도의 권한 체계를 만들지 않으므로 기존 역할을 씁니다.

합계를 읽는 큐브에도 같은 권한이 걸려야 하므로 건 뷰의 권한을 큐브가 상속하게 합니다.

전표가 수천만 건이면 느려지지 않습니까?

느려질 수 있습니다. 문제는 사업결합 손익 건의 수가 아니라 ACDOCA 전체에서 손익 계정 건을 골라 내는 비용입니다.

회계연도와 회사코드를 필수로 받아 인덱스를 타게 하고, 구성요소 계정 계열을 먼저 걸러 읽도록 뷰를 짭니다. 그래도 느리면 건 뷰를 구체화한 테이블로 일 배치 적재하는 방법이 있고, 이 경우에도 화면은 바뀌지 않습니다.

정책이 바뀌면 지난 기간 결과가 달라집니까?

운영 설계에서는 정책표에 유효기간을 두므로 지난 기간은 그 기간의 정책으로 판정됩니다. 정책을 새로 적용하려면 새 유효 시작일로 행을 추가합니다.

정책 변경 전후의 이동 필요 금액 차이를 비교하고 싶으면 CSV 로 두 시점의 결과를 받아 대조하면 됩니다.

감사인과는 어떻게 이 화면을 함께 씁니까?

화면은 판단을 대신하지 않고 어긋난 건의 목록과 근거를 줍니다. 점검 필요 건을 CSV 로 받아 감사인과 정책표의 해석을 논의하는 자료로 쓰고, 합의한 해석은 정책표에 반영해 다시 돌립니다.

범주 판단과 최종 결정은 회사와 감사인의 몫이라는 점은 변하지 않습니다.

유지보수는 무엇을 하게 됩니까?

정기적으로 손이 가는 곳은 정책표와 계정 매핑 두 곳입니다. 새 계정이 생기거나 정책이 바뀔 때 현업이 직접 고칠 수 있고, 뷰와 화면은 손대지 않습니다.

기준서 적용 이후에는 점검 코드별 건수를 월 결산 전 점검표로 쓰는 운영이 일반적입니다.

숫자가 기대와 다르면 어떻게 확인합니까?

순서가 있습니다.

① 조회조건이 같은지 봅니다(회계연도·회사·기간).
② 대사 결과 탭에서 차이가 0인지 봅니다.
③ 손익 건별 점검에서 해당 건의 점검 코드를 봅니다.
④ 표준 화면(FAGLL03)에서 같은 계정 건을 조회해 맞춥니다.

대부분은 ①이나 정책표 유효기간에서 풀립니다.

손익 범주 점검 말고 다른 용도로도 쓸 수 있습니까?

구조는 ‘정책표로 다시 정한 값과 장부 값을 건별로 맞댄다’는 점검 틀이라 범주가 아닌 다른 속성에도 응용할 수 있습니다. 다만 이 앱의 정책표와 판정 코드는 사업결합 손익 다섯 구성요소에 맞춰져 있어, 다른 영역에는 정책표와 코드를 새로 정해야 합니다.