SAP 파생상품 손익 범주 배분 점검 — IFRS 18, 위험회피수단 손익이 영업·투자·재무 중 어디에 놓여야 하는지 계약마다 다시 따져 원장과 맞춰본다
계약별 기대 범주 · 장부 범주 비교 · 범주·위험별 집계 · 원장 계상 내역 · 대사 — 소개 영상과 실제 화면 6종, 그리고 CDS 코드까지
소개 영상1분 39초8개 장면음성 안내·자막장면 흐름 요약
도입 포인트 — 이 앱을 사용해야 하는 이유
IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호)는 손익계산서 항목을 영업·투자·재무 범주로 나누도록 요구합니다. 시행은 2027년 1월 1일 이후 개시하는 회계연도부터이고 조기 적용이 허용되며 비교기간은 다시 작성합니다. 결산 담당자가 지금 부딪히는 질문은 구체적입니다. 파생상품 손익이 올해 어느 범주에 놓였는가, 위험회피수단으로 쓴 계약은 위험회피대상이 속한 범주를 따랐는가, 목적이 분명하지 않은 계약은 무엇으로 보아야 하는가. 이 질문은 준비하는 입장에서 미리 점검해 둘수록 부담이 줄어듭니다.
지금 방식은 대체로 이렇습니다. 자금 부서의 파생상품 계약 목록과 위험관리 문서를 한쪽에 두고, 총계정원장 개별항목(FAGLL03)에서 파생상품 손익 계정의 줄을 내려받아 엑셀에서 계정을 범주로 붙인 뒤 눈으로 맞춰 봅니다. 계약이 수십 건만 되어도 어느 계약의 어느 줄이 어느 범주 계정에 계상됐는지 추적하기 어렵고, 합계가 맞아도 범주가 어긋난 건은 합계 대사에서 드러나지 않습니다.
이 앱은 계약마다 기대 범주를 규칙으로 정하고, 원장 줄이 놓인 장부 범주와 나란히 놓아 어긋난 계약만 점검 필요로 걸러 줍니다. 판단 자료가 모자라 기대 범주를 정하지 못한 계약은 확인 필요로 따로 모읍니다. 최종 판단은 회사와 감사인이 하며 이 화면은 그 판단 앞의 조회·점검을 돕는 도구입니다.
계정 이름만 보아서는 계약의 목적이 보이지 않는다
같은 통화선도라도 위험회피수단으로 지정된 계약, 지정은 없지만 환위험 관리가 문서로 남은 계약, 목적이 확인되지 않는 계약은 기대하는 범주가 다릅니다. 계정 이름은 결과일 뿐이어서 계정만 보면 이 차이가 지워집니다. 화면은 지정 여부, 위험관리 문서화 여부, 위험회피대상 범주를 계약 행에 함께 두어 기대 범주가 어떤 근거로 정해졌는지 보이게 합니다.
합계가 맞아도 범주가 어긋나 있을 수 있다
평가손익과 실현손익을 더한 값이 원장과 맞는지는 합계 대사로 확인합니다. 그러나 한 계약의 손익 전부가 재무범주 계정에 계상돼 합계는 맞는데 위험회피대상은 영업범주인 경우는 합계 대사를 그대로 통과합니다. 그래서 대사 결과 탭은 합계 사이의 등식(정합성 대사)과 범주 일치 여부(장부 점검 대사)를 나눠 보여 줍니다.
판단 자료가 모자란 계약을 숨기지 않는다
위험관리 문서에서 위험회피대상의 범주를 확인할 수 없는 계약은 기대 범주를 억지로 정하지 않고 확인 필요로 표시합니다. 이런 계약이 몇 건인지, 손익이 얼마인지가 범주별 집계의 별도 줄에 남기 때문에 나머지 범주의 합계를 흐리지 않고 후속 확인 대상으로 넘길 수 있습니다.
한 계약의 평가손익과 실현손익이 갈라지는 경우
같은 계약의 평가손익은 영업범주 계정에, 실현손익은 재무범주 계정에 계상되는 일이 있습니다. 화면은 이런 계약을 별도 점검 코드로 걸러 평가·실현 계상 계정을 같은 범주로 맞출지 확인하게 합니다.
사용 방법
- 조회조건 입력 — 필수는 회계연도(4자리, 기본 2026)입니다. 회사, 거래일 시작·종료, 위험, 위험회피 지정, 계약명 일부, 기대 범주, 점검 코드, 점검 결과는 선택이며 비워 두면 조건이 적용되지 않습니다.
- 조회 — 조건 입력란 맨 오른쪽의 조회 버튼을 누르거나 입력란에서 Enter 를 누릅니다. 화면이 열릴 때 한 번 자동 조회됩니다.
- 요약 지표 확인 — 계약 수, 손익 합계, 범주별 기대 손익, 다른 범주 계상액, 점검 필요·확인 필요 계약 수, 정합성 대사 차이 건수를 봅니다.
- 탭 이동 — 계약별 명세 → 범주별 집계 → 위험별 집계 → 대사 결과 순서로 살펴봅니다.
- 계약 행 클릭 — 기대 범주의 근거와 원장 줄별 계상 내역이 상세 창으로 열립니다.
- CSV 내려받기 — 우측 위 버튼으로 현재 탭을 UTF-8 CSV 로 저장합니다. 조회조건이 그대로 반영됩니다.
숫자를 믿을 수 있는가 — 검증 결과
화면의 숫자는 만드는 쪽에서 먼저 대사식을 세워 검증용 샘플 데이터 전체에 대해 돌렸습니다. 샘플은 계약 40건과 원장 131줄이며 모두 가상의 자료입니다.
| 대사식 | 검사 건수 | 차이 건수 | 최대 차이 |
|---|---|---|---|
| R01 평가손익 + 실현손익 = 손익 합계 | 40 | 0 | 0 |
| R02 원장 계상액 합계 = 손익 합계 | 40 | 0 | 0 |
| R03 기대 범주 합계 = 손익 합계 | 4 | 0 | 0 |
| R04 장부 범주 합계 = 원장 계상액 합계 | 4 | 0 | 0 |
| R05 범주별 차이(장부 − 기대) 합계 = 0 | 8 | 0 | 0 |
정합성 대사 다섯 건은 모두 차이가 없습니다. 아래 두 건은 일부러 어긋나게 만든 장부 점검 대사이며, 이렇게 나오는 것이 정상 동작입니다.
| 장부 점검 대사 | 검사 건수 | 차이 건수 | 의도적 예외 |
|---|---|---|---|
| R06 기대 범주와 장부 범주 일치 여부 | 37 | 6 | 점검 필요 6건 (C01 1 · C02 2 · C03 2 · C04 1) |
| R07 위험관리 대상 범주 확인 필요 계약 | 34 | 3 | 확인 필요 3건 (C09) |
무엇으로 만들었나
| 자리 | 무엇 | 왜 그렇게 두었나 |
|---|---|---|
| 화면 컨트롤 | OpenUI5 sap.ui.table 표, 탭, 필터 막대, 상세 창 | 계약·원장 줄처럼 행이 많은 표를 가로로 넘기며 비교하기 위해 표준 컨트롤만 썼습니다. |
| 판정·집계 로직 | 서비스 로직 파일(service.js)과 컨트롤러 | 기대 범주·점검 코드·집계는 서비스 쪽에서 계산하고 화면은 받은 값만 보여 줍니다. 화면과 서비스의 숫자가 갈라지지 않습니다. |
| 데이터 연동 | OData V2 모델(manifest 에 선언) | 조회조건은 Filter 로 $filter 에 담기고 정렬·페이징은 서비스가 처리합니다. 다른 범주 계상액은 서비스의 펑션 하나를 호출해 채웁니다. |
| 테마 | sap_horizon | 표준 Fiori 시각 언어를 그대로 따라 별도 학습 없이 쓰게 했습니다. |
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 재무제표 표시 |
| 관련 기준서·요구사항 | IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호) — 파생상품과 위험회피수단 손익의 범주(영업·투자·재무) 분류 |
| SAP 표준 T-code | FAGLL03 · FS10N · FB03 · S_ALR_87012284 |
| 화면 성격 | 조회·점검 화면 (집계·대사) |
실행 화면
처음 열었을 때와 점검 필요 계약 좁히기
화면은 열리자마자 한 번 조회해 40건 전체를 보여 줍니다. 여기서 조건 하나만 바꾸면 확인할 계약만 남습니다.

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

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

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

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

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

대사 결과 탭은 R01에서 R05까지 정합성 대사(합계 사이의 등식)와 R06·R07 장부 점검 대사를 구분해 보여 줍니다. 정합성 대사는 모두 차이 0이어야 정상이고, 장부 점검 대사의 차이 건수는 점검 필요와 확인 필요 계약 수와 맞아야 합니다. 요약 지표의 정합성 대사 차이 건수가 0인 이유가 여기에 있습니다.
화면 뒤에서 일어나는 일
계약 1건마다 아래 순서로 기대 범주를 정하고 장부 범주와 비교합니다. 해당하면 점검 필요 또는 확인 필요와 코드를 표시합니다. 규칙의 세부는 회사의 위험관리 정책과 감사인의 판단으로 달라질 수 있어 확인 필요입니다.
| 점검 코드 | 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|---|
| C00 | 아래 조건에 해당하지 않음 | 정상 | 조치 없음 |
| C01 | 위험회피수단으로 지정된 계약인데 장부 범주가 위험회피대상이 속한 범주와 다름 | 점검 필요 | 지정 문서와 계상 계정의 범주 확인 필요 |
| C02 | 지정은 없으나 관리하는 위험이 문서화돼 있고, 장부 범주가 그 위험의 대상 범주와 다름 | 점검 필요 | 위험관리 문서의 대상 범주와 계상 계정 확인 필요 |
| C03 | 위험관리 목적이 확인되지 않아 영업범주가 기대되는데 영업범주 밖 계정에 계상됨 | 점검 필요 | 계약 목적과 계상 계정의 범주 확인 필요 |
| C04 | 같은 계약의 평가손익과 실현손익이 서로 다른 범주 계정에 계상됨 | 점검 필요 | 평가·실현 계상 계정을 같은 범주로 맞출지 확인 필요 |
| C09 | 위험관리 대상 범주를 확인할 수 없어 기대 범주를 정하지 못함 | 확인 필요 | 위험관리 문서에서 대상 범주 확인 필요 |
- 계약의 평가손익과 실현손익을 더해 손익 합계를 만듭니다.
- 지정 여부·위험관리 문서화 여부·위험회피대상 범주로 기대 범주를 정합니다.
- 원장 줄의 계정이 속한 범주로 장부 범주를 정하고, 기대 범주와 다른 줄의 금액을 더해 다른 범주 계상액을 만듭니다.
- 회사·범주·위험별로 집계하고 대사식으로 검산합니다.
조회조건
| 조건 | 필수 | 기본값 | $filter 로 전달되는 형태 |
|---|---|---|---|
| 회계연도 | 필수 | 2026 | Gjahr 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 | 이름 | 연계 |
|---|---|---|
| FAGLL03 | G/L 계정 개별항목 | 이 앱 원장 줄의 계정·금액과 같은 데이터를 봅니다. 상세 창의 줄 금액과 개별항목 조회의 줄을 맞춰 보고, 어긋나면 개별항목에서 원천 전표를 확인합니다. 법정·감사 대응용 조회는 표준 화면에 남겨 둡니다. |
| FS10N | G/L 계정 잔액 조회 | 범주별 집계의 장부 손익을 같은 계정의 기간 잔액 합과 맞춰 봅니다. 계정이 범주에 어떻게 매핑됐는지는 확인 필요입니다. |
| FB03 | 전표 조회 | 점검 필요 계약의 평가·실현 전표를 열어 계상 계정이 맞는지 확인합니다. |
| S_ALR_87012284 | 손익계산서(재무제표 버전) | 계정이 손익계산서의 어느 범주 항목에 속하는지 확인합니다. 재무제표 버전과 범주 매핑이 일치하는지는 확인 필요입니다. |
운영 전환 때 기존 리포트를 없앨 필요는 없습니다. 법정·공시 숫자는 계속 표준 거래와 보고서에서 만들고, 이 앱은 결산 전에 범주 분류가 계획대로인지 미리 점검하는 자리로 쓰는 것이 안전합니다.
S/4HANA 분석 스택과의 자리
이 앱의 집계는 아래 CDS 구성에서 보듯 뷰 레이어로 만들 수 있어 표준 분석 쿼리나 Fiori 분석 앱과 같은 스택 위에 놓입니다. 표준 분석 앱이 이미 같은 분류를 제공하는지는 사용 중인 릴리스에 따라 달라 확인 필요이며, 그런 경우에도 이 앱은 계약 단위의 기대 범주 비교라는 점검 관점을 맡습니다.
확장 포인트 — 운영에서 실제로 손대는 자리
| 자리 | 무엇을 손대나 | 비고 |
|---|---|---|
| 계정 → 범주 매핑 | 파생상품 손익 계정이 영업·투자·재무 가운데 어디에 속하는지 정합니다 | 회사의 계정체계에 맞게 매핑 테이블을 채웁니다 |
| 위험회피대상 범주 | 지정·문서화된 계약의 위험회피대상이 속한 범주를 계약에 연결합니다 | 위험관리 문서와 자금 모듈 데이터에서 가져올 필드는 확인 필요 |
| 확장 필드 | 계약에 지정 여부와 문서화 여부를 담는 필드를 둡니다 | 커스텀 필드 또는 BAdI 로 채움 |
| 권한 | 회사코드·계정 단위 조회 권한 | 집계 단계에 겁니다 |
요구사항 매핑표
| 기준서 | 요구사항 | 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호) | 손익계산서 항목을 영업·투자·재무 범주로 분류 | 계약별 기대 범주와 장부 범주 비교, 범주별 집계 | ACDOCA · SKA1 | C01~C04 |
| IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호) | 지정된 위험회피수단의 손익은 위험회피대상 손익이 속한 범주에 분류 | 지정 계약의 위험회피대상 범주를 기대 범주로 사용 | VTBFHA · ACDOCA | C01, 지정 문서 확인 필요 |
| IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호) | 위험관리에 쓰는 파생상품 손익의 분류 | 위험 문서화 계약의 대상 범주를 기대 범주로 사용, 미확인 시 확인 필요 | VTBFHA · VTBFHAPO | C02 · C09, 회사 위험관리 정책 확인 필요 |
| IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호) | 그 밖의 파생상품 손익의 분류 | 목적 불명 계약은 영업범주로 기대하고 계상 범주와 비교 | ACDOCA | C03, 회사 판단 확인 필요 |
| IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호) | 평가손익과 실현손익의 일관된 분류 | 한 계약의 평가·실현 계상 범주 비교 | BSEG · ACDOCA | C04 |
CDS 구성
아래는 화면이 보여 주는 값을 S/4HANA 위에서 만들 때의 CDS 구성 스케치입니다. 뷰 이름과 필드 매핑은 이 글의 설명용이며, 표준 CDS 뷰 연결과 계정 범주 매핑은 사용하는 시스템에서 확인이 필요합니다. 표준 원천은 총계정원장 줄(ACDOCA), 계정 마스터(SKA1), 금융거래(VTBFHA · VTBFHAPO)를 씁니다.
뷰 레이어 구성
| 레이어 | 뷰 | 하는 일 | 왜 나누나 |
|---|---|---|---|
| 기준(매핑) | ZDERIV_ACCTMAP | 파생상품 손익 계정이 영업·투자·재무 어디에 속하는지 담는 매핑 테이블 | 계정체계는 회사마다 달라 코드가 아닌 데이터로 둡니다 |
| 차원 | ZI_DerivInstr | 계약 한 건의 지정 여부·문서화 여부·위험회피대상 범주·기대 범주 | 기대 범주 판정을 한 곳에서만 합니다 |
| 기본 뷰 | ZI_DerivLedgerLine | 원장 줄에 계정 범주를 붙인 줄 단위 뷰 | 장부 범주와 다른 범주 계상액의 원천입니다 |
| 큐브 | ZI_DerivCatCube | 회사·범주·위험별 기대 손익과 장부 손익 집계 | 범주별·위험별 탭이 같은 합계를 쓰게 합니다 |
| 쿼리 | ZC_DerivCatQuery | 화면의 필터와 컬럼을 노출하는 소비 뷰 | 조회조건을 필터로만 받게 합니다 |
| 권한 | ZC_DerivCatQuery 의 DCL | 회사코드 단위 조회 권한 | 집계 단계에서 걸러 새어 나감을 막습니다 |
| 서비스 | Service Definition · Binding | OData 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줄)로는 대용량 성능을 확인하지 못했습니다. 회계연도를 필수 조건으로 두고 집계를 서비스 쪽에서 하도록 설계했으나 응답 시간은 실제 데이터에서 측정해야 하며 확인 필요입니다.
기존 리포트를 없애야 합니까?
없앨 필요가 없습니다. 법정·공시용 숫자는 계속 표준 거래와 보고서에서 만들고 이 화면은 결산 전 범주 분류 점검에 씁니다.