재무회계 · IFRS 18

SAP 파생상품 손익 범주 배분 점검 — IFRS 18, 위험회피수단 손익이 영업·투자·재무 중 어디에 놓여야 하는지 계약마다 다시 따져 원장과 맞춰본다

계약별 기대 범주 · 장부 범주 비교 · 범주·위험별 집계 · 원장 계상 내역 · 대사 — 소개 영상과 실제 화면 6종, 그리고 CDS 코드까지

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

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

IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호)는 손익계산서 항목을 영업·투자·재무 범주로 나누도록 요구합니다. 시행은 2027년 1월 1일 이후 개시하는 회계연도부터이고 조기 적용이 허용되며 비교기간은 다시 작성합니다. 결산 담당자가 지금 부딪히는 질문은 구체적입니다. 파생상품 손익이 올해 어느 범주에 놓였는가, 위험회피수단으로 쓴 계약은 위험회피대상이 속한 범주를 따랐는가, 목적이 분명하지 않은 계약은 무엇으로 보아야 하는가. 이 질문은 준비하는 입장에서 미리 점검해 둘수록 부담이 줄어듭니다.

지금 방식은 대체로 이렇습니다. 자금 부서의 파생상품 계약 목록과 위험관리 문서를 한쪽에 두고, 총계정원장 개별항목(FAGLL03)에서 파생상품 손익 계정의 줄을 내려받아 엑셀에서 계정을 범주로 붙인 뒤 눈으로 맞춰 봅니다. 계약이 수십 건만 되어도 어느 계약의 어느 줄이 어느 범주 계정에 계상됐는지 추적하기 어렵고, 합계가 맞아도 범주가 어긋난 건은 합계 대사에서 드러나지 않습니다.

이 앱은 계약마다 기대 범주를 규칙으로 정하고, 원장 줄이 놓인 장부 범주와 나란히 놓아 어긋난 계약만 점검 필요로 걸러 줍니다. 판단 자료가 모자라 기대 범주를 정하지 못한 계약은 확인 필요로 따로 모읍니다. 최종 판단은 회사와 감사인이 하며 이 화면은 그 판단 앞의 조회·점검을 돕는 도구입니다.

한 줄 요약 — 합계가 맞는지는 대사가 알려 주지만, 합계가 맞아도 손익이 엉뚱한 범주에 놓였는지는 계약마다 따져 봐야 압니다. 이 화면은 그 따져 보는 일을 계약 40건 단위로 한 번에 보여 줍니다.

계정 이름만 보아서는 계약의 목적이 보이지 않는다

같은 통화선도라도 위험회피수단으로 지정된 계약, 지정은 없지만 환위험 관리가 문서로 남은 계약, 목적이 확인되지 않는 계약은 기대하는 범주가 다릅니다. 계정 이름은 결과일 뿐이어서 계정만 보면 이 차이가 지워집니다. 화면은 지정 여부, 위험관리 문서화 여부, 위험회피대상 범주를 계약 행에 함께 두어 기대 범주가 어떤 근거로 정해졌는지 보이게 합니다.

합계가 맞아도 범주가 어긋나 있을 수 있다

평가손익과 실현손익을 더한 값이 원장과 맞는지는 합계 대사로 확인합니다. 그러나 한 계약의 손익 전부가 재무범주 계정에 계상돼 합계는 맞는데 위험회피대상은 영업범주인 경우는 합계 대사를 그대로 통과합니다. 그래서 대사 결과 탭은 합계 사이의 등식(정합성 대사)과 범주 일치 여부(장부 점검 대사)를 나눠 보여 줍니다.

판단 자료가 모자란 계약을 숨기지 않는다

위험관리 문서에서 위험회피대상의 범주를 확인할 수 없는 계약은 기대 범주를 억지로 정하지 않고 확인 필요로 표시합니다. 이런 계약이 몇 건인지, 손익이 얼마인지가 범주별 집계의 별도 줄에 남기 때문에 나머지 범주의 합계를 흐리지 않고 후속 확인 대상으로 넘길 수 있습니다.

한 계약의 평가손익과 실현손익이 갈라지는 경우

같은 계약의 평가손익은 영업범주 계정에, 실현손익은 재무범주 계정에 계상되는 일이 있습니다. 화면은 이런 계약을 별도 점검 코드로 걸러 평가·실현 계상 계정을 같은 범주로 맞출지 확인하게 합니다.

사용 방법

  1. 조회조건 입력 — 필수는 회계연도(4자리, 기본 2026)입니다. 회사, 거래일 시작·종료, 위험, 위험회피 지정, 계약명 일부, 기대 범주, 점검 코드, 점검 결과는 선택이며 비워 두면 조건이 적용되지 않습니다.
  2. 조회 — 조건 입력란 맨 오른쪽의 조회 버튼을 누르거나 입력란에서 Enter 를 누릅니다. 화면이 열릴 때 한 번 자동 조회됩니다.
  3. 요약 지표 확인 — 계약 수, 손익 합계, 범주별 기대 손익, 다른 범주 계상액, 점검 필요·확인 필요 계약 수, 정합성 대사 차이 건수를 봅니다.
  4. 탭 이동 — 계약별 명세 → 범주별 집계 → 위험별 집계 → 대사 결과 순서로 살펴봅니다.
  5. 계약 행 클릭 — 기대 범주의 근거와 원장 줄별 계상 내역이 상세 창으로 열립니다.
  6. CSV 내려받기 — 우측 위 버튼으로 현재 탭을 UTF-8 CSV 로 저장합니다. 조회조건이 그대로 반영됩니다.

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

화면의 숫자는 만드는 쪽에서 먼저 대사식을 세워 검증용 샘플 데이터 전체에 대해 돌렸습니다. 샘플은 계약 40건과 원장 131줄이며 모두 가상의 자료입니다.

대사식검사 건수차이 건수최대 차이
R01 평가손익 + 실현손익 = 손익 합계4000
R02 원장 계상액 합계 = 손익 합계4000
R03 기대 범주 합계 = 손익 합계400
R04 장부 범주 합계 = 원장 계상액 합계400
R05 범주별 차이(장부 − 기대) 합계 = 0800

정합성 대사 다섯 건은 모두 차이가 없습니다. 아래 두 건은 일부러 어긋나게 만든 장부 점검 대사이며, 이렇게 나오는 것이 정상 동작입니다.

장부 점검 대사검사 건수차이 건수의도적 예외
R06 기대 범주와 장부 범주 일치 여부376점검 필요 6건 (C01 1 · C02 2 · C03 2 · C04 1)
R07 위험관리 대상 범주 확인 필요 계약343확인 필요 3건 (C09)

무엇으로 만들었나

자리무엇왜 그렇게 두었나
화면 컨트롤OpenUI5 sap.ui.table 표, 탭, 필터 막대, 상세 창계약·원장 줄처럼 행이 많은 표를 가로로 넘기며 비교하기 위해 표준 컨트롤만 썼습니다.
판정·집계 로직서비스 로직 파일(service.js)과 컨트롤러기대 범주·점검 코드·집계는 서비스 쪽에서 계산하고 화면은 받은 값만 보여 줍니다. 화면과 서비스의 숫자가 갈라지지 않습니다.
데이터 연동OData V2 모델(manifest 에 선언)조회조건은 Filter 로 $filter 에 담기고 정렬·페이징은 서비스가 처리합니다. 다른 범주 계상액은 서비스의 펑션 하나를 호출해 채웁니다.
테마sap_horizon표준 Fiori 시각 언어를 그대로 따라 별도 학습 없이 쓰게 했습니다.
항목내용
업무 영역재무회계(FI) · 재무제표 표시
관련 기준서·요구사항IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호) — 파생상품과 위험회피수단 손익의 범주(영업·투자·재무) 분류
SAP 표준 T-codeFAGLL03 · FS10N · FB03 · S_ALR_87012284
화면 성격조회·점검 화면 (집계·대사)
SAP 표준 기능을 그대로 이어받은 부분 — 원장 줄의 계정·금액·전표는 표준 총계정원장 개별항목(FAGLL03)과 같은 데이터를 바탕으로 합니다. 표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회·검증 관점을 더해 확장합니다.

실행 화면

처음 열었을 때와 점검 필요 계약 좁히기

화면은 열리자마자 한 번 조회해 40건 전체를 보여 줍니다. 여기서 조건 하나만 바꾸면 확인할 계약만 남습니다.

처음 연 화면 — 조건, 요약, 계약별 명세가 한 번에
처음 연 화면 — 조건, 요약, 계약별 명세가 한 번에 — 회계연도·회사·거래일·위험 조건 아래로 요약 지표 9개와 계약별 명세 탭이 처음부터 채워져 있습니다.

위쪽 파란 안내 문구는 이 화면이 점검 도구이고 최종 판단은 회사와 감사인이 한다는 점을 먼저 밝힙니다. 조회 버튼은 조건 입력란 맨 오른쪽에 있고 입력란에서 Enter 를 눌러도 조회됩니다. 화면이 열릴 때 한 번 자동 조회되므로 기본값(2026, 전체)으로 40건 전체의 손익 합계 24.8백만 원과 영업·투자·재무범주의 기대 손익이 바로 보입니다. 표에는 계약마다 기대 범주와 장부 범주가 나란히 놓입니다.

점검 필요 계약만 보기
점검 필요 계약만 보기 — 점검 결과를 점검 필요로 고르면 기대 범주와 장부 범주가 다른 계약만 남습니다.

점검 결과 조건을 점검 필요로 두고 조회하면 40건 가운데 6건이 남고 요약 지표의 점검 필요 계약도 6으로 바뀝니다. 표시되는 점검 코드와 점검 내용은 어떤 규칙에 걸렸는지를 설명하는 문장입니다. 차이가 있다는 뜻일 뿐 잘못으로 단정하는 표시가 아니며, 각 건이 정당한지는 계약 문서와 회사 정책으로 확인해야 합니다.

범주와 위험으로 모아 보기

계약별 명세를 범주와 위험 두 축으로 다시 모아 어디에 어긋남이 몰려 있는지 읽습니다.

범주별 집계 — 기대 손익과 장부 손익의 차이
범주별 집계 — 기대 손익과 장부 손익의 차이 — 회사마다 영업·투자·재무범주와 범주 미확정 행의 기대 손익, 장부 손익, 차이를 견줍니다.

범주별 집계 탭은 회사 두 곳을 각각 영업범주·투자범주·재무범주·확인 필요 네 줄로 보여 줍니다. 차이 열은 장부 손익에서 기대 손익을 뺀 값이라 한 회사 안에서 더하면 0이 됩니다. 지정은 있었으나 대상 범주를 정하지 못한 계약은 확인 필요 줄로 따로 모여 다른 범주 합계를 흐리지 않습니다.

위험별 집계 — 환율·이자율·상품가격·주가
위험별 집계 — 환율·이자율·상품가격·주가 — 위험마다 평가손익·실현손익, 다른 범주에 계상된 금액과 확인 필요 계약 수를 봅니다.

위험별 집계 탭은 같은 40건을 환율위험·이자율위험·상품가격위험·주가위험으로 나눠 다시 모읍니다. 지정 계약 수와 점검 필요 계약 수를 함께 보여 주므로 어느 위험 쪽에서 범주 어긋남이 몰리는지 읽을 수 있습니다. 합계는 계약별 명세 탭의 합과 같아야 하며 대사 결과 탭에서 이를 검산합니다.

계약 한 건의 근거와 대사

계약을 눌러 기대 범주의 근거를 확인하고, 마지막으로 대사 결과 탭에서 숫자가 맞는지 검산합니다.

계약 상세 — 기대 범주의 근거와 원장 줄별 계상 내역
계약 상세 — 기대 범주의 근거와 원장 줄별 계상 내역 — 계약을 누르면 기대 범주를 정한 근거와 원장 줄마다 계정·범주·금액이 열립니다.

계약별 명세에서 한 행을 누르면 열리는 상세 창입니다. 위쪽에는 위험회피 지정 여부, 위험관리 문서화 여부, 위험회피대상 범주로부터 기대 범주가 어떻게 정해졌는지가 적히고, 아래 표에는 평가손익 줄과 실현손익 줄이 어느 계정(영업·투자·재무)에 얼마씩 계상됐는지 나옵니다. 계정 범주가 기대 범주와 다른 줄은 다른 범주 계상액 열에 같은 금액이 표시됩니다.

대사 결과 — 정합성 대사와 장부 점검 대사
대사 결과 — 정합성 대사와 장부 점검 대사 — 정합성 대사 5건은 차이가 없고, 장부 점검 대사 2건에서 확인 대상이 나옵니다.

대사 결과 탭은 R01에서 R05까지 정합성 대사(합계 사이의 등식)와 R06·R07 장부 점검 대사를 구분해 보여 줍니다. 정합성 대사는 모두 차이 0이어야 정상이고, 장부 점검 대사의 차이 건수는 점검 필요와 확인 필요 계약 수와 맞아야 합니다. 요약 지표의 정합성 대사 차이 건수가 0인 이유가 여기에 있습니다.

화면 뒤에서 일어나는 일

계약 1건마다 아래 순서로 기대 범주를 정하고 장부 범주와 비교합니다. 해당하면 점검 필요 또는 확인 필요와 코드를 표시합니다. 규칙의 세부는 회사의 위험관리 정책과 감사인의 판단으로 달라질 수 있어 확인 필요입니다.

점검 코드판정 조건결과 상태사용자 조치
C00아래 조건에 해당하지 않음정상조치 없음
C01위험회피수단으로 지정된 계약인데 장부 범주가 위험회피대상이 속한 범주와 다름점검 필요지정 문서와 계상 계정의 범주 확인 필요
C02지정은 없으나 관리하는 위험이 문서화돼 있고, 장부 범주가 그 위험의 대상 범주와 다름점검 필요위험관리 문서의 대상 범주와 계상 계정 확인 필요
C03위험관리 목적이 확인되지 않아 영업범주가 기대되는데 영업범주 밖 계정에 계상됨점검 필요계약 목적과 계상 계정의 범주 확인 필요
C04같은 계약의 평가손익과 실현손익이 서로 다른 범주 계정에 계상됨점검 필요평가·실현 계상 계정을 같은 범주로 맞출지 확인 필요
C09위험관리 대상 범주를 확인할 수 없어 기대 범주를 정하지 못함확인 필요위험관리 문서에서 대상 범주 확인 필요
  1. 계약의 평가손익과 실현손익을 더해 손익 합계를 만듭니다.
  2. 지정 여부·위험관리 문서화 여부·위험회피대상 범주로 기대 범주를 정합니다.
  3. 원장 줄의 계정이 속한 범주로 장부 범주를 정하고, 기대 범주와 다른 줄의 금액을 더해 다른 범주 계상액을 만듭니다.
  4. 회사·범주·위험별로 집계하고 대사식으로 검산합니다.

조회조건

조건필수기본값$filter 로 전달되는 형태
회계연도필수2026Gjahr eq '2026'
회사선택전체Bukrs eq '1000' (전체면 조건 없음)
거래일 시작·종료선택전체TradeDate ge datetime'…' and TradeDate le datetime'…'
위험선택전체RiskType eq 'FXR'
위험회피 지정선택전체DesigFlag eq 'Y'
계약명선택비움substringof('스왑',InstrName)
기대 범주선택전체ExpCat eq 'FIN'
점검 코드선택전체CheckCode eq 'C01'
점검 결과선택전체CheckStatus eq 'CHECK'

결과 컬럼

컬럼의미산출식
기대 범주규칙으로 정한 손익의 범주(영업·투자·재무·확인 필요)지정·위험관리 문서·위험회피대상 범주
장부 범주원장 줄의 계정이 속한 범주(혼재면 혼재)원장 줄 계정 범주
평가손익 · 실현손익계약의 평가·실현 손익(원, 부호 포함)원장 평가·거래손익 계정 금액
손익 합계계약의 손익 총액평가손익 + 실현손익
다른 범주 계상액기대 범주와 다른 범주 계정에 계상된 금액Σ 기대 범주와 다른 줄의 금액
점검 결과 · 코드 · 내용정상·점검 필요·확인 필요와 해당 규칙판정 규칙표 참고

좁은 화면에서 달라지는 것

이번 점검에서는 넓은 화면(가로 1600픽셀)에서만 화면을 확인했습니다. 좁은 화면과 휴대폰에서의 표시는 확인 필요입니다.

파일 구성

index.html · readme.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/<서비스 폴더>/  metadata.xml · service.js · json/
media/       intro.mp4 · intro_poster.jpg

SAP 표준 기능 확장 포인트

표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회·검증 관점을 더해 확장합니다. 기존에 쓰던 표준 화면을 없애는 것이 아니라 그 옆에서 범주 관점의 점검을 맡습니다.

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

하고 싶은 일표준 화면으로 되는 일이 앱이 더하는 관점
파생상품 손익 계정의 줄 조회개별항목 조회(FAGLL03)로 계정·기간별 줄을 내려받습니다줄을 계약 단위로 묶어 기대 범주와 비교합니다
계정 잔액 확인계정 잔액 조회(FS10N)로 기간별 합계를 봅니다범주별 합계가 기대 손익과 얼마나 다른지 봅니다
전표 내용 확인전표 조회(FB03)로 한 전표를 봅니다계약의 평가·실현 전표가 어느 범주 계정에 있는지 한눈에 봅니다
손익계산서 항목 구성재무제표 버전 기준 손익계산서(S_ALR_87012284)범주 분류 기준으로 다시 모은 점검 결과를 덧붙입니다

T-code 별 연계 지점

T-code이름연계
FAGLL03G/L 계정 개별항목이 앱 원장 줄의 계정·금액과 같은 데이터를 봅니다. 상세 창의 줄 금액과 개별항목 조회의 줄을 맞춰 보고, 어긋나면 개별항목에서 원천 전표를 확인합니다. 법정·감사 대응용 조회는 표준 화면에 남겨 둡니다.
FS10NG/L 계정 잔액 조회범주별 집계의 장부 손익을 같은 계정의 기간 잔액 합과 맞춰 봅니다. 계정이 범주에 어떻게 매핑됐는지는 확인 필요입니다.
FB03전표 조회점검 필요 계약의 평가·실현 전표를 열어 계상 계정이 맞는지 확인합니다.
S_ALR_87012284손익계산서(재무제표 버전)계정이 손익계산서의 어느 범주 항목에 속하는지 확인합니다. 재무제표 버전과 범주 매핑이 일치하는지는 확인 필요입니다.

운영 전환 때 기존 리포트를 없앨 필요는 없습니다. 법정·공시 숫자는 계속 표준 거래와 보고서에서 만들고, 이 앱은 결산 전에 범주 분류가 계획대로인지 미리 점검하는 자리로 쓰는 것이 안전합니다.

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

이 앱의 집계는 아래 CDS 구성에서 보듯 뷰 레이어로 만들 수 있어 표준 분석 쿼리나 Fiori 분석 앱과 같은 스택 위에 놓입니다. 표준 분석 앱이 이미 같은 분류를 제공하는지는 사용 중인 릴리스에 따라 달라 확인 필요이며, 그런 경우에도 이 앱은 계약 단위의 기대 범주 비교라는 점검 관점을 맡습니다.

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

자리무엇을 손대나비고
계정 → 범주 매핑파생상품 손익 계정이 영업·투자·재무 가운데 어디에 속하는지 정합니다회사의 계정체계에 맞게 매핑 테이블을 채웁니다
위험회피대상 범주지정·문서화된 계약의 위험회피대상이 속한 범주를 계약에 연결합니다위험관리 문서와 자금 모듈 데이터에서 가져올 필드는 확인 필요
확장 필드계약에 지정 여부와 문서화 여부를 담는 필드를 둡니다커스텀 필드 또는 BAdI 로 채움
권한회사코드·계정 단위 조회 권한집계 단계에 겁니다

요구사항 매핑표

기준서요구사항대응 기능원천 데이터비고
IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호)손익계산서 항목을 영업·투자·재무 범주로 분류계약별 기대 범주와 장부 범주 비교, 범주별 집계ACDOCA · SKA1C01~C04
IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호)지정된 위험회피수단의 손익은 위험회피대상 손익이 속한 범주에 분류지정 계약의 위험회피대상 범주를 기대 범주로 사용VTBFHA · ACDOCAC01, 지정 문서 확인 필요
IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호)위험관리에 쓰는 파생상품 손익의 분류위험 문서화 계약의 대상 범주를 기대 범주로 사용, 미확인 시 확인 필요VTBFHA · VTBFHAPOC02 · C09, 회사 위험관리 정책 확인 필요
IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호)그 밖의 파생상품 손익의 분류목적 불명 계약은 영업범주로 기대하고 계상 범주와 비교ACDOCAC03, 회사 판단 확인 필요
IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호)평가손익과 실현손익의 일관된 분류한 계약의 평가·실현 계상 범주 비교BSEG · ACDOCAC04

CDS 구성

아래는 화면이 보여 주는 값을 S/4HANA 위에서 만들 때의 CDS 구성 스케치입니다. 뷰 이름과 필드 매핑은 이 글의 설명용이며, 표준 CDS 뷰 연결과 계정 범주 매핑은 사용하는 시스템에서 확인이 필요합니다. 표준 원천은 총계정원장 줄(ACDOCA), 계정 마스터(SKA1), 금융거래(VTBFHA · VTBFHAPO)를 씁니다.

뷰 레이어 구성

레이어뷰하는 일왜 나누나
기준(매핑)ZDERIV_ACCTMAP파생상품 손익 계정이 영업·투자·재무 어디에 속하는지 담는 매핑 테이블계정체계는 회사마다 달라 코드가 아닌 데이터로 둡니다
차원ZI_DerivInstr계약 한 건의 지정 여부·문서화 여부·위험회피대상 범주·기대 범주기대 범주 판정을 한 곳에서만 합니다
기본 뷰ZI_DerivLedgerLine원장 줄에 계정 범주를 붙인 줄 단위 뷰장부 범주와 다른 범주 계상액의 원천입니다
큐브ZI_DerivCatCube회사·범주·위험별 기대 손익과 장부 손익 집계범주별·위험별 탭이 같은 합계를 쓰게 합니다
쿼리ZC_DerivCatQuery화면의 필터와 컬럼을 노출하는 소비 뷰조회조건을 필터로만 받게 합니다
권한ZC_DerivCatQuery 의 DCL회사코드 단위 조회 권한집계 단계에서 걸러 새어 나감을 막습니다
서비스Service Definition · BindingOData V2 로 게시화면은 서비스 주소만 알면 됩니다

① 계정 범주 매핑 테이블

계정이 어느 범주에 속하는지는 이 테이블 한 곳에서 정합니다. 이 값이 틀리면 뒤의 모든 비교가 틀리므로 운영 시작 전에 회계팀과 가장 먼저 확정해야 합니다.

" ─────────────────────────────────────────────
" ZDERIV_ACCTMAP : 파생상품 손익 계정 → 범주 매핑
" 역할  : 계정이 영업(OPR)·투자(INV)·재무(FIN) 중 어디인지 보관
" 이유  : 계정체계는 회사마다 달라 데이터로 둔다
" ─────────────────────────────────────────────
@EndUserText.label : '파생상품 손익 계정 범주 매핑'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zderiv_acctmap {
  key mandt    : mandt not null;
  key ktopl    : ktopl not null;
  key saknr    : saknr not null;
  cat          : abap.char(3);   " OPR / INV / FIN
  item_type    : abap.char(2);   " FV 평가 / RL 실현
}

② 계약 차원 — 기대 범주를 정하는 곳

지정 여부, 위험관리 문서화 여부, 위험회피대상 범주로 기대 범주를 정하는 규칙을 이 뷰 한 곳에 둡니다. 화면과 서비스가 같은 규칙을 쓰므로 판정이 갈라지지 않습니다.

" ─────────────────────────────────────────────
" ZI_DerivInstr : 계약 차원 (기대 범주 판정)
" 이유  : 규칙을 한 곳에 둬 화면·서비스가 같은 값을 쓴다
" ─────────────────────────────────────────────
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #NOT_REQUIRED
@Analytics.dataCategory: #DIMENSION
@ObjectModel.representativeKey: 'InstrNo'
define view entity ZI_DerivInstr
  as select from vtbfha as h
{
  key h.rfha                       as InstrNo,
      h.rbukrs                     as CompanyCode,
      cast( ' ' as abap.char(1) )  as DesigFlag,     " 지정 여부 (확장 필드, 확인 필요)
      cast( ' ' as abap.char(1) )  as RiskDoc,       " 위험관리 문서화 (확인 필요)
      cast( '   ' as abap.char(3) ) as HedgedCat,     " 위험회피대상 범주 (확인 필요)
      case
        when DesigFlag = 'Y'                       then HedgedCat
        when RiskDoc   = 'Y' and HedgedCat <> ''   then HedgedCat
        when RiskDoc   = 'Y'                       then 'UNK'
        else 'OPR'
      end                          as ExpCat
}

③ 원장 줄 기본 뷰 — 줄마다 계정 범주 붙이기

원장 줄에 매핑 테이블의 범주를 붙여 줄 단위로 기대 범주와 비교합니다. 다른 범주 계상액은 이 뷰에서 줄마다 정해집니다.

" ─────────────────────────────────────────────
" ZI_DerivLedgerLine : 원장 줄 + 계정 범주
" 이유  : 장부 범주와 다른 범주 계상액의 원천을 줄 단위로 둔다
" ─────────────────────────────────────────────
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #CHECK
@ObjectModel.usageType: { serviceQuality: #C, sizeCategory: #XL, dataClass: #TRANSACTIONAL }
define view entity ZI_DerivLedgerLine
  as select from acdoca as a
    inner join   zderiv_acctmap as m
      on  m.ktopl = 'YCOA' and m.saknr = a.racct       " 계정과목표는 시스템에 맞게 (확인 필요)
    association [1] to ZI_DerivInstr as _Instr
      on  _Instr.InstrNo = $projection.InstrNo
{
  key a.rldnr                     as Ledger,
  key a.rbukrs                    as CompanyCode,
  key a.gjahr                     as FiscalYear,
  key a.belnr                     as DocumentNo,
  key a.docln                     as LineItem,
      a.racct                     as GlAccount,
      m.cat                       as AcctCat,
      m.item_type                 as ItemType,
      @Semantics.amount.currencyCode: 'Currency'
      a.hsl                       as Amount,
      a.rhcur                     as Currency,
      a.sgtxt                     as InstrNo,            " 계약 번호 연결 방식은 확인 필요
      _Instr.ExpCat               as ExpCat,
      case when m.cat <> _Instr.ExpCat then a.hsl else 0 end as MisAmt,
      _Instr
}

④ 집계 큐브 — 기대 손익과 장부 손익

회사·범주별로 기대 손익과 장부 손익을 한 뷰에서 집계합니다. 범주별 차이의 합이 0이어야 한다는 대사식이 이 뷰의 결과를 검산합니다.

" ─────────────────────────────────────────────
" ZI_DerivCatCube : 회사·범주별 기대/장부 손익 집계
" ─────────────────────────────────────────────
@AbapCatalog.viewEnhancementCategory: [#NONE]
@Analytics.dataCategory: #CUBE
@ObjectModel.usageType: { serviceQuality: #D, sizeCategory: #XL, dataClass: #MIXED }
define view entity ZI_DerivCatCube
  as select from ZI_DerivLedgerLine as l
{
  key l.CompanyCode,
  key l.FiscalYear,
  key l.AcctCat                                           as BookCat,
  key l.ExpCat,
      @Aggregation.default: #SUM
      @Semantics.amount.currencyCode: 'Currency'
      sum( l.Amount )                                     as BookAmt,
      @Aggregation.default: #SUM
      @Semantics.amount.currencyCode: 'Currency'
      sum( case when l.AcctCat <> l.ExpCat then l.Amount else 0 end ) as MisAmt,
      l.Currency
}
group by l.CompanyCode, l.FiscalYear, l.AcctCat, l.ExpCat, l.Currency

⑤ 분석 쿼리 — 화면이 부르는 필터와 컬럼

화면의 조회조건은 이 뷰의 필터 항목으로만 들어옵니다. 필터를 쓰지 않는 커스텀 파라미터를 두지 않는 것이 서비스 계약의 원칙입니다.

" ─────────────────────────────────────────────
" ZC_DerivCatQuery : 화면용 소비 뷰
" ─────────────────────────────────────────────
@AccessControl.authorizationCheck: #CHECK
@Analytics.query: true
@EndUserText.label: '파생상품 손익 범주 점검'
define view entity ZC_DerivCatQuery
  as select from ZI_DerivCatCube
{
  @Consumption.filter: { selectionType: #SINGLE, mandatory: true }
  key FiscalYear,
  @Consumption.filter.selectionType: #RANGE
  key CompanyCode,
  @AnalyticsDetails.query.axis: #ROWS
  key BookCat,
  @AnalyticsDetails.query.axis: #ROWS
  key ExpCat,
  @AnalyticsDetails.query.axis: #COLUMNS
  BookAmt,
  @AnalyticsDetails.query.axis: #COLUMNS
  MisAmt
}

⑥ 권한 — 회사코드 단위로 거르기

집계 단계에서 회사코드를 거르지 않으면 드릴다운이나 합계 뺄셈으로 다른 회사의 숫자가 드러날 수 있습니다.

" ─────────────────────────────────────────────
" ZC_DerivCatQuery 접근 제어
" ─────────────────────────────────────────────
@EndUserText.label: '파생상품 범주 점검 권한'
@MappingRole: true
define role ZC_DerivCatQuery {
  grant select on ZC_DerivCatQuery
    where ( CompanyCode ) = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' );
}

⑦ 서비스 정의와 바인딩

쿼리를 OData V2 로 게시해 화면이 서비스 주소만 알면 되게 합니다. 게시 방법은 시스템 구성에 따라 달라 확인 필요입니다.

" ─────────────────────────────────────────────
" 서비스 정의 : 쿼리를 하나의 서비스로 묶는다
" ─────────────────────────────────────────────
@EndUserText.label: '파생상품 손익 범주 점검 서비스'
define service ZUI_DerivCatCheck {
  expose ZC_DerivCatQuery as CatQuery;
}
" 바인딩은 OData V2 - UI 로 게시한다(Service Binding 화면, 확인 필요)

운영 시점에 해야 할 일

개발보다 정하는 일이 많습니다.

해야 할 일무엇을 정하나정하지 않으면누가
계정 → 범주 매핑파생상품 손익 계정 각각이 영업·투자·재무 중 어디인지장부 범주가 틀려 모든 비교가 무의미해집니다회계팀
위험회피 지정·문서 연결지정 여부, 문서화 여부, 위험회피대상 범주를 계약에 연결하는 방법기대 범주를 정하지 못한 계약이 확인 필요로 쌓입니다자금팀 · 회계팀
목적 불명 계약의 처리목적이 확인되지 않은 계약을 어느 범주로 볼지화면의 기본 가정(영업범주)이 실제 정책과 달라집니다회계팀 · 감사인 협의
부호 규칙손익의 부호(이익 +, 손실 −)와 원장 부호의 대응합계 대사가 어긋납니다회계팀
권한 설계회사코드·계정 단위 조회 권한다른 회사의 숫자가 드러납니다보안 · 권한
대사 체계표준 T-code(FAGLL03 · FS10N)와 맞출 항목과 주기숫자가 맞는지 설명할 근거가 없어집니다회계팀
전송(TR) 순서매핑 테이블 → 뷰 → 쿼리 → 권한 → 서비스 순서이송 중 의존성 문제가 생깁니다Basis
서비스 활성화서비스 게시와 화면 manifest 의 서비스 주소 교체화면이 샘플 서비스를 그대로 봅니다Basis · 개발

운영 데이터로 갈 때

파생상품 계약은 보통 수백 건이지만 원장 줄은 평가 주기만큼 늘어납니다. 회계연도를 필수 조건으로 두고 회사코드와 거래일 범위를 함께 쓰며, 집계는 큐브에서 서비스 쪽으로 밀어 넣어 화면으로 줄 단위 전체를 내려받지 않게 합니다. 응답 시간 기준과 인덱스 설계는 실제 데이터 규모에서 측정해 정하는 것이 맞으며 이번 샘플(계약 40건·원장 131줄)로는 확인하지 못했습니다. 확인 필요입니다.

자주 묻는 질문

도입 검토에서 자주 나오는 질문을 네 묶음으로 적었습니다.

숫자와 산식

손익 합계는 어떻게 만들어집니까?

계약마다 평가손익과 실현손익을 더한 값입니다. 샘플 40건의 합은 24.8백만 원이며 원장 계상액 합계와 같습니다(대사 R01·R02 차이 0).

기대 범주는 어떻게 정해집니까?

샘플은 지정된 위험회피수단은 위험회피대상의 범주를, 지정은 없고 위험관리가 문서화된 계약은 그 위험의 대상 범주를, 그 밖의 계약은 영업범주를 기대하도록 가정했습니다. 회사의 위험관리 정책에 따른 실제 판단 기준은 확인 필요입니다.

다른 범주 계상액은 무엇입니까?

원장 줄 가운데 계정이 속한 범주가 기대 범주와 다른 줄의 금액 합입니다. 요약 지표에는 절댓값 합계가 나오며 서비스 펑션 하나가 계산합니다. 샘플 전체는 307.0백만 원입니다.

범주별 차이의 합이 왜 0입니까?

차이는 장부 손익에서 기대 손익을 뺀 값이고 두 합계가 모두 손익 합계와 같기 때문입니다. 0이 아니면 집계 로직이나 데이터에 문제가 있다는 신호이며 대사 R05 가 이를 검산합니다.

확인 필요 줄의 금액은 어디에 들어갑니까?

기대 범주를 정하지 못한 계약의 손익은 범주별 집계의 별도 줄에 모읍니다. 이 줄 덕분에 영업·투자·재무범주 합계는 판단이 끝난 계약만으로 읽을 수 있습니다.

화면과 조작

조회 버튼은 어디에 있습니까?

조회조건 입력란의 맨 오른쪽에 있고 그 옆에 초기화 버튼이 있습니다. 입력란에서 Enter 를 눌러도 조회되며 화면이 열릴 때 한 번 자동 조회됩니다.

필수 조건은 무엇입니까?

회계연도(4자리)뿐입니다. 나머지는 비워 두면 조건에 쓰이지 않습니다. 거래일 시작이 종료보다 늦으면 안내 문구가 뜹니다.

점검 필요와 확인 필요는 어떻게 다릅니까?

점검 필요는 기대 범주와 장부 범주가 다른 계약이고, 확인 필요는 판단 자료가 부족해 기대 범주를 정하지 못한 계약입니다. 둘 다 잘못으로 단정한 표시가 아니며 후속 확인 대상을 가려 주는 표시입니다.

CSV 에는 무엇이 담깁니까?

현재 탭의 표가 UTF-8 CSV 로 저장되며 조회조건이 그대로 반영됩니다. 요약 지표는 담기지 않습니다.

계약 상세 창에서는 무엇을 봅니까?

기대 범주를 정한 근거(지정·문서화·위험회피대상 범주)와 원장 줄마다 계정·범주·금액을 봅니다. 기대 범주와 다른 범주 줄은 다른 범주 계상액 열에 금액이 표시됩니다.

기준서와 판단

IFRS 18 의 어떤 요구사항을 다룹니까?

손익계산서 항목을 영업·투자·재무 범주로 나누는 요구사항 가운데 파생상품과 위험회피수단 손익의 분류를 점검합니다. 기준서 문단 번호는 원문 확인 후에만 적습니다.

언제부터 적용됩니까?

IFRS 18 은 2027년 1월 1일 이후 개시하는 회계연도부터 적용되며 조기 적용이 허용되고 비교기간은 다시 작성합니다. 그 밖의 경과규정은 원문 확인이 필요합니다.

이 화면의 판정이 곧 회계 판단입니까?

아닙니다. 이 화면은 분류·집계·대사를 돕는 조회·점검 도구입니다. 최종 판단은 회사와 감사인이 합니다.

목적이 확인되지 않은 계약은 왜 영업범주로 기대합니까?

샘플의 기본 가정입니다. 실제 회사에서 이런 계약을 어느 범주로 볼지는 정책과 감사인 협의 사항이며 확인 필요입니다. 가정이 달라지면 매핑과 판정 규칙을 그에 맞춰 바꿔야 합니다.

위험회피회계를 쓰지 않는 계약도 대상입니까?

대상입니다. 지정이 없어도 위험관리가 문서화돼 있는지에 따라 기대 범주가 달라지도록 규칙을 두었습니다. 위험회피회계 자체의 적격성이나 효과성 평가는 이 화면의 범위가 아닙니다.

도입과 운영

표준 T-code 와의 관계는 무엇입니까?

표준 실행은 SAP 표준 T-code 가 담당하고 이 화면은 조회·검증 관점을 더해 확장합니다. 원장 줄은 FAGLL03, 계정 잔액은 FS10N, 전표는 FB03 으로 원천을 확인합니다.

데이터는 어디서 가져옵니까?

운영에서는 총계정원장 줄(ACDOCA), 금융거래(VTBFHA · VTBFHAPO), 계정 마스터(SKA1)를 원천으로 CDS 뷰를 만듭니다. 계약 번호와 원장 줄의 연결 방식, 지정·문서화 정보를 담는 필드는 사용하는 시스템에서 확인이 필요합니다.

운영 연결에는 무엇이 필요합니까?

계정 범주 매핑 확정, 위험회피 지정·문서 연결, 권한 설계, 뷰 전송, 서비스 게시, 화면 manifest 의 서비스 주소 교체입니다. 소요는 매핑 확정과 연결 방식 결정에 가장 크게 좌우됩니다.

권한과 보안은 어떻게 합니까?

회사코드 단위 조회 권한을 집계 단계에서 겁니다. 화면은 OpenUI5 표준 컨트롤만 쓰며 외부로 데이터를 보내지 않습니다.

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

계정이 새로 생기면 매핑 테이블에 어느 범주인지 한 줄을 더하면 됩니다. 코드를 고치지 않습니다.

대용량에서도 쓸 수 있습니까?

이번 샘플(계약 40건, 원장 131줄)로는 대용량 성능을 확인하지 못했습니다. 회계연도를 필수 조건으로 두고 집계를 서비스 쪽에서 하도록 설계했으나 응답 시간은 실제 데이터에서 측정해야 하며 확인 필요입니다.

기존 리포트를 없애야 합니까?

없앨 필요가 없습니다. 법정·공시용 숫자는 계속 표준 거래와 보고서에서 만들고 이 화면은 결산 전 범주 분류 점검에 씁니다.