SAP 위험회피수단 명목금액·평균가격 공시 점검 — IFRS 7, 만기구간별 명목금액과 가중평균 가격을 공시 초안·원장과 맞춘다
만기구간별 명목금액 · 가중평균 가격 · 순장부금액과 비효과 · 공시 초안과 원장 대사 · 점검 코드 — 소개 영상과 실제 화면 6종, 그리고 CDS 코드까지
소개 영상49초8개 장면조회 요약 → 만기구간 → 위험 유형별 → 위험회피 유형별 → 산식 상세 → 대사 결과
도입 포인트 — 이 앱을 사용해야 하는 이유
결산 때마다 주석 담당자가 받는 질문은 같습니다. 위험회피수단의 명목금액이 만기 구간별로 얼마인가, 평균 가격은 얼마로 적었나, 그 숫자가 원장과 맞는가. IFRS 7(K-IFRS 제1107호)은 위험회피회계를 적용하는 회사에게 위험회피수단의 명목금액을 시기별로 나눠 보이고(23B), 해당하면 평균 가격이나 환율까지 적도록 요구합니다. 장부금액·재무상태표 표시 항목·비효과 금액 같은 24A·24C 항목도 함께 요구되니, 한 표를 채우는 데 거래 시스템·원장·엑셀 초안이 모두 불려 나옵니다. 이 앱은 그 세 곳의 숫자를 한 화면에서 다시 계산해 맞춰 보는 점검 도구입니다.
판단은 회사와 감사인의 몫입니다. 위험회피회계를 적용할 수 있는지는 IFRS 9(K-IFRS 제1109호)의 요건이 정하고, 이 앱은 그 판단을 대신하지 않습니다. 앱이 하는 일은 “공시에 적을 숫자가 원천과 같은가” 를 기계적으로 가려내는 데까지입니다.
핵심 포인트 여섯 가지
| 포인트 | 고객이 얻는 것 | 지금 방식이라면 |
|---|---|---|
| ① 만기구간별 명목금액을 다시 더한다 | 1년 이하 · 1~5년 · 5년 초과 구간의 명목금액을 건별로 모아 합계를 냅니다. 구간 합계와 공시 초안 명목금액이 같은지가 한 줄로 나옵니다. | 엑셀 초안의 합계를 믿고, 거래 시스템과 맞춰 보는 일은 시간이 남을 때 합니다. |
| ② 평균 가격은 가중평균으로 다시 구한다 | 구간별 명목금액 × 평균 가격을 합해 가격이 적힌 구간의 명목금액으로 나눕니다. 초안 평균가격과의 차이가 건별로 보입니다. | 단순평균으로 적거나, 어느 구간 가격이 비었는지 모른 채 넘어갑니다. |
| ③ 가격이 빈 구간을 가려낸다 | 명목금액은 있는데 평균 가격이 없는 구간을 따로 표시합니다. 공시표에 ‘가격 없음’ 으로 나가기 전에 잡힙니다. | 공시표를 다 만든 뒤 검토자가 빈칸을 발견합니다. |
| ④ 순장부금액과 비효과를 원장에 맞춘다 | 수단의 자산 장부금액에서 부채 장부금액을 뺀 순장부금액과 수단·대상의 공정가치 변동 차이인 비효과를 계산해 원장 값과 비교합니다. | 계정 잔액을 FAGLB03 으로 따로 뽑아 사람이 눈으로 비교합니다. |
| ⑤ 점검 코드로 이유를 나눈다 | 차이가 난 건에 N01 · R01 · C01 · H01 · B01 같은 점검 코드가 붙어, 명목금액 · 평균가격 · 장부금액 · 비효과 · 가격 미기재 중 무엇이 문제인지 먼저 갈립니다. | “안 맞는다” 만 알고, 어디가 안 맞는지는 처음부터 다시 찾습니다. |
| ⑥ 대사 결과를 12줄로 남긴다 | 구간 합계 ↔ 명세, 명세 ↔ 유형별 집계처럼 내 계산끼리 맞는지(정합성 대사)와 공시 초안·원장과 맞는지(장부 점검 대사)를 나눠 보입니다. | 대사 증빙이 엑셀 시트 여기저기에 흩어져 감사인 요청 때마다 다시 만듭니다. |
사례로 보는 효과 — 5건이 가려진 이유
기준월 202412 의 위험회피관계는 18건, 재계산한 명목금액 합계는 981억(98,100,000,000원)입니다. 공시 초안은 986억이라 5억 많습니다. 합계만 보면 “5억 차이” 한 줄이지만, 건별로 내려가 보면 이유가 다섯 갈래로 갈립니다.
| 점검 코드 | 건 | 무엇이 다른가 | 왜 따로 봐야 하나 |
|---|---|---|---|
N01 | 해외종속기업 순투자 위험회피 A | 공시 초안 명목금액이 65억, 재계산은 60억(+5억) | 합계 차이 5억이 이 한 건에서 나옵니다. 지정 후 일부를 해제했는데 초안에 안 반영됐는지 확인할 자리입니다. |
R01 | 해외종속기업 순투자 위험회피 B | 초안 평균가격 1,339.50, 재계산 1,338.1167(차이 1.3833) | 구간별 가격(1,331.20 · 1,347.80)을 가중평균하면 초안 값이 나오지 않습니다. 단순평균에 가깝습니다. |
C01 | 변동금리 시설자금대출 이자율스왑 | 원장 순장부금액이 재계산보다 37,500,000원 큽니다 | 명목금액과 평균금리는 맞고 장부금액만 다릅니다. 평가 기준일이나 이월 전표를 볼 자리입니다. |
H01 | 변동금리 운영자금 차입금 이자율스왑 | 원장 비효과 16,051,000, 재계산 3,251,000(차이 12,800,000) | 대상 쪽 가치 변동을 어디서 가져왔는지에 따라 갈립니다. 수단·대상 변동의 출처 점검입니다. |
B01 | 미국달러 수출 예정거래 장기 매도 선물환 | 5년 초과 구간 명목금액 9억에 평균 가격이 없습니다 | 가중평균이 가격이 적힌 두 구간(30억)만으로 계산돼 있습니다. 공시표에 ‘가격 없음’ 구간이 남습니다. |
다섯 건은 자료에 일부러 심은 예외입니다. 앱이 이런 차이를 가려내는지 보여 주기 위한 것이라, 숫자가 실제 회사의 것은 아닙니다. 그리고 이 다섯 건은 앱이 스스로 계산해 맞춰 보는 정합성 대사(차이 0건)와는 별개입니다 — 정합성 대사는 “내 계산끼리 맞는가”, 점검 필요는 “내 계산이 초안·원장과 맞는가” 를 가립니다.
도입하면 달라지는 것
주석 준비 시간 — 구간별 합계 · 평균 가격 · 장부금액 대조를 엑셀에서 손으로 하던 일이 조회 한 번으로 줄어듭니다. 검토자와의 문답 — “이 숫자 어디서 나왔나” 에 산식 줄(건당 12줄)을 열어 답합니다. 감사 대응 — 점검 코드와 대사 12줄이 CSV 로 남아 같은 설명을 다시 만들지 않습니다. 다음 결산 — 기준월만 바꿔 같은 점검을 되풀이합니다.
이런 회사에 맞습니다
위험회피회계를 적용하는 파생상품을 여러 건 운용하면서 공시 초안을 엑셀로 만드는 회사, 거래 시스템·원장·주석 초안이 서로 다른 사람의 손에 있는 회사, 감사인이 만기구간별 명목금액과 평균 가격의 근거를 요청하는 회사에 맞습니다. 위험회피수단이 한두 건뿐이면 효과가 작습니다. 한편 위험회피 지정 요건과 효과성 평가를 점검하려면 같은 시리즈의 위험회피회계 요건·효과성 점검과 해외사업장 순투자 위험회피 점검 글을 보시면 됩니다.
숫자를 믿을 수 있는가 — 검증 결과
만드는 쪽에서 먼저 대사식을 세워 전수로 돌렸습니다. 건수는 모두 이 자료의 건수입니다.
| 대사식 | 검사 건수 | 차이 |
|---|---|---|
| 구간 합계 = 명세 명목금액 | 18 | 0 |
| 명목금액 합계 = 구간 1 + 구간 2 + 구간 3 | 18 | 0 |
| 위험 유형별 · 위험회피 유형별 집계 = 명세 | 3 · 3 | 0 |
| 순장부금액 = 자산 장부금액 − 부채 장부금액 | 18 | 0 |
| 비효과 = 수단 공정가치 변동 − 대상 가치 변동 | 18 | 0 |
| 가중평균 가격 재계산 · 구간별 명목금액 × 가격 | 18 · 32 | 0 |
| 산식 상세 12줄 구성 · 비율 = 명목 ÷ 노출 | 18 · 18 | 0 |
대사 결과 12줄 가운데 내 계산끼리 맞춰 보는 정합성 대사 7줄은 전부 차이 0건이고, 공시 초안·원장과 맞추는 장부 점검 대사 5줄에서만 차이가 한 건씩 나옵니다(위 다섯 건). 화면 쪽은 서비스를 실제로 불러 날짜 조건(지정일 이상·이하)이 7건과 11건으로 갈리고 합이 18건인지, 정렬·건수 제한·전체 건수가 맞는지까지 확인했습니다.
도입 후 쓰는 순서
① 기준 연월을 넣고 조회합니다. ② 위쪽 요약에서 점검 필요 건수를 봅니다. ③ 점검 결과를 ‘점검 필요’ 로 고르거나 점검 코드를 골라 해당 건만 모읍니다. ④ 행을 눌러 산식 상세를 열고 어느 줄에서 갈렸는지 확인합니다. ⑤ 원인을 정리해 초안 또는 원장을 바로잡고, 같은 기준월로 다시 조회해 점검 필요가 줄었는지 봅니다. ⑥ 대사 결과 탭과 CSV 를 증빙으로 남깁니다.
실행 화면
실제로 돌아가는 화면 6종을 순서대로 싣습니다. 그림을 누르면 크게 볼 수 있고, 화면마다 무엇을 하는 자리이고 왜 그렇게 두었는지를 아래에 적었습니다. 숫자는 모두 같은 자료에서 나온 것이라 화면끼리 서로 맞춰 보셔도 됩니다. 이 자료는 가상의 회사 데이터이며, 위험회피관계 이름 끝에 ‘(가상)’ 이 붙어 있습니다.
처음 열었을 때
맨 위에는 이 화면이 IFRS 7 공시 요구사항을 원장과 맞춰 보는 점검용이라는 안내가 있고, 그 아래 조회조건 일곱 개(기준 연월 · 위험 유형 · 위험회피 유형 · 지정일 시작과 종료 · 점검 코드 · 점검 결과)와 요약이 놓입니다.

요약 여덟 칸이 한 줄에 놓입니다. 건수 · 재계산 명목금액 · 초안 명목금액 · 둘의 차이 · 원장 순장부금액 · 원장과 재계산의 차이 · 점검 필요 건수 · 정합성 대사 차이 건수. 맨 오른쪽 ‘정합성 대사 차이 0’ 은 내 계산이 스스로 맞는다는 뜻이고, 그 왼쪽 ‘점검 필요 5’ 가 초안·원장과 다른 건입니다. 두 숫자를 나란히 둔 이유는, 앱을 믿어도 되는지와 데이터를 의심해야 하는지를 한눈에 갈라 보기 위해서입니다.
구간별 · 위험 유형별 · 위험회피 유형별
탭 다섯 개가 같은 자료를 다섯 방향으로 잘라 보여 줍니다. 탭 머리에 건수가 먼저 적혀 있어 눌러 보지 않아도 얼마나 되는지 압니다 — 명세 18, 구간 32, 위험 유형 3, 위험회피 유형 3, 대사 12.

위험회피관계 18건이 구간으로 펼쳐져 32줄이 됩니다. 한 건이 한 줄이 아니라 구간 수만큼 줄을 가진다는 점이 공시 형태(구간별 프로파일)와 같습니다. 가중평균의 재료인 ‘명목금액 × 가격’ 열이 함께 있어, 평균 가격이 어디서 나왔는지 열 하나로 따라갈 수 있습니다. 가격이 비어 있는 구간은 이 탭에서 확인 필요로 표시됩니다.

외환위험 9건은 재계산 가중평균 1,331.4023 과 초안 1,331.5827 이 0.1804 다르고 명목금액도 5억 다릅니다. 이자율위험은 평균금리 3.4245 로 초안과 같지만 순장부금액(원장과 +37,500,000)과 비효과(+12,800,000)가 달라 점검 필요가 2건입니다. 상품가격위험은 4건 모두 맞습니다. 위험 유형마다 가격의 단위(원/달러, %, 원/단위)가 달라 평균 가격을 위험 유형을 넘어 합치지 않고 따로 구합니다.

현금흐름 위험회피 10건은 순장부금액 차이 +37,500,000 과 비효과 차이 +12,800,000 이 모두 여기서 나옵니다. 공정가치 위험회피 6건은 전부 맞고, 순투자 위험회피 2건은 명목금액 5억이 갈립니다. 같은 18건을 위험 유형으로 묶느냐 위험회피 유형으로 묶느냐에 따라 문제가 어디 몰려 있는지가 달리 보입니다.
한 건을 풀어 보기
요약과 집계는 “어디가 다른가” 를 말하고, 산식 상세는 “왜 다른가” 를 말합니다.

결과가 “맞지 않는다” 에서 끝나지 않도록 산식 줄을 열어 둡니다. 구간별 명목금액을 더하는 줄, 가격과 곱하는 줄, 가격이 적힌 구간만 모아 나누는 줄, 자산에서 부채를 빼는 줄, 수단 변동에서 대상 변동을 빼는 줄이 차례로 놓입니다. 검토자가 계산기를 두드릴 필요 없이 줄 하나씩 확인합니다.
대사 결과
마지막 탭이 앱 전체의 성적표입니다. 증빙으로 남길 때는 이 탭과 CSV 를 함께 보관합니다.

좌변 · 우변 · 검사 건수 · 차이 건수 · 최대 차이가 줄마다 있습니다. 01~07 은 차이가 모두 0건입니다. 11(초안 명목금액) 5억, 12(초안 평균가격) 1.3833, 13(원장 순장부금액) 37,500,000, 14(원장 비효과) 12,800,000, 15(평균가격 미기재) 1건이 각각 한 건씩 남습니다. 번호를 01~07 과 11~15 로 띄운 것은 두 성격의 대사를 눈으로 섞지 않기 위해서입니다.
조건을 좁히는 법
점검 코드로 걸면 같은 이유로 걸린 건만 모이고, 점검 결과를 ‘점검 필요’ 로 고르면 정상 건이 빠집니다. 지정일은 시작과 종료를 따로 넣어 범위로 걸 수 있습니다 — 서비스는 이 두 조건을 ‘이상 · 이하’ 로 풀어 and 로 묶습니다. 같은 필드에 두 조건을 각각 필터로 넣으면 UI5 가 or 로 묶어 버리는 일이 있어서, 두 조건을 한 묶음으로 만들어 보냅니다.
화면 안에서 지키는 원칙은 세 가지입니다. 금액 단위는 원이고 명목금액은 원 환산 기준입니다. 숫자는 서비스가 주는 그대로 쓰고 화면이 다시 계산하지 않습니다. 오류는 서비스 연결 안내로 쉽게 풀어 보여 줍니다.
SAP 표준 기능 확장 포인트
이 앱은 SAP 표준을 대체하지 않습니다. 표준이 이미 잘하는 일은 표준에 맡기고, 표준이 끊기는 자리만 이어 붙이는 쪽으로 만들었습니다. 어디까지가 표준이고 어디서부터 이 앱인지를 먼저 적습니다.
표준으로 되는 것과 안 되는 것
| 하고 싶은 일 | SAP 표준 | 표준에서 걸리는 자리 | 이 앱이 하는 일 |
|---|---|---|---|
| 위험회피수단 거래 관리 | Treasury and Risk Management 의 거래 관리(FTR_EDIT) | 거래 단위 정보라 공시 형태(구간별 명목금액)로 모아 주지는 않습니다 | 건별 명목금액을 만기구간으로 다시 모읍니다 |
| 위험회피관계 지정·효과성 | Treasury and Risk Management 의 위험회피 관리(Hedge Management) | 지정과 평가는 하지만 공시표 점검은 범위 밖입니다 | 공시 숫자가 지정 내용과 같은지 점검합니다 |
| 계정 잔액·전표 확인 | FAGLB03 · FAGLL03 · FB03 | 계정 단위 잔액이라 위험회피관계 단위로는 사람이 모아야 합니다 | 건별 순장부금액·비효과를 원장 값과 나란히 둡니다 |
| 구간별 명목금액 프로파일(IFRS 7 23B) | — | 표준에 없습니다. 보통 엑셀로 만듭니다 | 구간별 명목금액과 평균 가격을 재계산합니다 |
| 공시 초안과의 대사 | — | 초안이 SAP 밖(엑셀 · 공시 시스템)에 있어 맞춰 볼 도구가 없습니다 | 초안 값을 받아 건별로 차이와 점검 코드를 만듭니다 |
| 점검 결과의 기록 | 전표 적요 · FB02 텍스트 | 전표 단위라 점검 결과를 붙일 곳이 없습니다 | 대사 12줄과 CSV 로 남깁니다 |
T-code 별 연계 지점
이 앱이 표준 거래를 대신하지는 않지만, 점검 결과를 본 사람은 곧바로 표준 거래로 내려가 원인을 확인합니다. 연결 지점은 다음과 같습니다.
| 점검 코드 | 내려가 볼 자리 | 무엇을 확인하나 |
|---|---|---|
N01 명목금액 초안 상이 | FTR_EDIT (거래 명목금액) · 위험회피관계 지정 내용 | 지정 후 해제·변경이 있었는지, 초안이 지정 시점 금액을 쓴 것은 아닌지 |
R01 평균가격 초안 상이 | FTR_EDIT (구간별 행사·선물환율) | 초안이 가중평균이 아닌 단순평균으로 구했는지 |
C01 순장부금액 상이 | FAGLB03 · FAGLL03 (파생상품 자산·부채 계정) | 평가 기준일, 이월 전표, 수동 조정 전표 |
H01 비효과 상이 | FAGLL03 (비효과 손익 계정) · 대상 가치 변동의 출처 | 수단·대상 변동 중 어느 쪽이 원장과 다른지 |
B01 평균가격 미기재 | FTR_EDIT (해당 구간 거래) | 가격을 못 구한 이유(거래 누락, 구간 분할 오류) |
S/4HANA 분석 스택과의 자리
이 앱의 점검은 “구간으로 나누고, 가격으로 가중하고, 원장과 빼는” 세 동작이라 CDS 뷰로 내리기에 알맞습니다. 구간 배분은 뷰의 case 식으로, 가중평균은 sum 두 개의 비율로, 원장 대조는 ACDOCA 집계와의 join 으로 만듭니다. 쿼리 뷰로 열어 두면 표준 Fiori 앱과 Analysis for Office 가 같은 숫자를 그대로 띄웁니다. 이 앱이 부르는 OData 서비스의 역할을 쿼리 뷰가 이어받는 구조입니다.
확장 포인트 — 운영에서 실제로 손대는 자리
| 자리 | 무엇을 정하나 | 정하지 않으면 |
|---|---|---|
| 위험회피관계 식별 키 | 원장 전표의 어느 필드(배정 · 참조 · 세그먼트 등)에 관계 번호를 싣는가 | 원장 순장부금액을 위험회피관계별로 모을 수 없습니다 |
| 만기구간의 경계 | 1년 · 5년을 보고기준일 기준 잔존만기로 보는가, 계약 만기로 보는가 | 구간 합계가 공시 초안과 다른 이유를 설명하기 어렵습니다 |
| 평균 가격의 정의 | 선물환율 · 행사가격 · 고정금리 중 무엇을 평균 가격으로 적는가 | 위험 유형마다 가격이 다른 기준이라 비교가 안 됩니다 |
| 가격이 비는 구간의 처리 | 가중평균에서 뺄지, 공시표에 ‘가격 없음’ 으로 둘지 | 같은 건이 담당자마다 다르게 공시됩니다 |
| 초안 값의 입수 경로 | 엑셀 업로드 · 공시 시스템 인터페이스 · 직접 입력 중 무엇인가 | 초안 대조가 사람 손을 다시 거치게 됩니다 |
CDS 구성
이 사례의 화면은 위험회피관계 18건과 구간 32줄을 서비스가 만들어 주는 값으로 보여 줍니다. 데모라서 되는 일이고, 운영에서는 구간 배분 · 가중평균 · 원장 대조를 CDS 로 내려 DB 에서 계산합니다. 아래는 그때 만드는 뷰를 레이어 순서대로 적은 것입니다.
코드는 스케치입니다. 필드 이름과 표준 뷰 이름은 릴리스·환경에 따라 다르므로, 그대로 붙여 넣기 전에 View Browser(F2170) 로 실제 이름을 확인해야 합니다. 확인이 필요한 자리는 주석에 적어 두었습니다.
뷰 레이어 구성
| 레이어 | 뷰 | 하는 일 | 왜 나누나 |
|---|---|---|---|
| 기준 | ZHDD_BUCKET | 만기구간 경계(개월) 매핑 | 1년 · 5년 같은 경계를 코드에 박지 않습니다. |
| 기본 | ZI_HdgRelation | 위험회피관계 한 행 + 유형 · 위험 · 지정일 · 만기 | 구간·장부 뷰가 모두 이 뷰 하나를 봅니다. |
| 구간 | ZI_HdgNomBucket | 수단 명목금액을 잔존만기 구간에 배분 | 구간 합계의 정의를 한 곳에 둡니다. |
| 가격 | ZI_HdgAvgPrice | 구간별 명목 × 가격의 가중평균, 가격 미기재 표시 | 가격이 빈 구간 처리 규칙을 여기서만 정합니다. |
| 원장 | ZI_HdgLedgerBook | ACDOCA 에서 순장부금액 · 비효과 집계 | 원장 대조가 한 뷰에 모입니다. |
| 대사 | ZI_HdgRecon | 재계산 · 초안 · 원장을 나란히 두고 점검 코드 부여 | 차이를 화면이 아니라 DB 가 판정합니다. |
| 쿼리 · 권한 | ZC_HdgDisclosureQuery · DCL | 분석 쿼리와 회사코드 권한 | 집계를 읽는 자리에 권한을 겁니다. |
① 만기구간 매핑 테이블
구간 경계는 회사가 정합니다. 보고기준일에서 잔존만기를 재서 어느 구간에 넣을지 정하는 표이므로, 공시 형태가 바뀌어도 코드를 고치지 않게 테이블에 둡니다.
@EndUserText.label : '위험회피 만기구간 매핑'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zhdd_bucket {
key mandt : mandt not null;
key bucket : abap.char(1) not null; " 1 · 2 · 3
text : abap.char(30); " 1년 이하 · 1년 초과 5년 이하 · 5년 초과
from_months : abap.int2; " 하한(개월, 초과)
to_months : abap.int2; " 상한(개월, 이하) — 마지막 구간은 9999
}
② 위험회피관계 기본 뷰
거래 시스템의 위험회피관계 지정 정보를 한 행으로 모읍니다. 원천 테이블은 Treasury 사용 여부와 릴리스에 따라 다르므로 아래는 자리만 잡았습니다.
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '위험회피관계 기본'
define view entity ZI_HdgRelation
as select from zhdd_relation as r " 확인: 환경의 위험회피관계 지정 원천으로 교체
{
key r.bukrs as CompanyCode,
key r.hedge_id as HedgeId,
r.hedge_name as HedgeName,
r.hedge_type as HedgeType, " C 현금흐름 · F 공정가치 · N 순투자
r.risk_type as RiskType, " X 외환 · I 이자율 · M 상품가격
r.instr_type as InstrType, " F 선물환 · S 스왑 · C 통화스왑 · D 상품파생
r.desig_date as DesigDate,
r.end_date as EndDate,
r.exposure_amt as ExposureAmt, " 위험회피대상 노출금액(원)
r.bs_line as BsLine " 재무상태표 표시 항목(24A)
}
③ 구간 배분 뷰
명목금액을 보고기준일 기준 잔존만기로 구간에 넣습니다. 구간 경계는 ① 의 테이블에서 읽습니다.
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '수단 명목금액 구간 배분'
define view entity ZI_HdgNomBucket
with parameters
p_keydate : abap.dats
as select from zhdd_instr_nom as n " 확인: 수단별 명목금액 원천
inner join zhdd_bucket as b
on dats_days_between( $parameters.p_keydate, n.maturity_date ) / 30 > b.from_months
and dats_days_between( $parameters.p_keydate, n.maturity_date ) / 30 <= b.to_months
{
key n.bukrs as CompanyCode,
key n.hedge_id as HedgeId,
key b.bucket as Bucket,
@Semantics.amount.currencyCode: 'Currency'
sum( n.nominal_amt ) as Notional,
n.currency as Currency,
avg( n.rate as abap.dec(18,4) ) as AvgRate " 구간 안 평균 가격(없으면 null)
}
group by n.bukrs, n.hedge_id, b.bucket, n.currency
④ 가중평균 가격 뷰
가중평균의 분모는 가격이 적힌 구간의 명목금액입니다. 가격이 빈 구간까지 분모에 넣으면 평균이 실제보다 낮아지므로, 빈 구간은 분모에서 빼고 따로 표시합니다.
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '가중평균 가격'
define view entity ZI_HdgAvgPrice
with parameters p_keydate : abap.dats
as select from ZI_HdgNomBucket( p_keydate : $parameters.p_keydate )
{
key CompanyCode,
key HedgeId,
sum( Notional ) as NomTotal,
sum( case when AvgRate is not null
then Notional else 0 end ) as NomPriced,
cast( sum( case when AvgRate is not null
then Notional * AvgRate else 0 end )
/ nullif( sum( case when AvgRate is not null
then Notional else 0 end ), 0 )
as abap.dec(18,4) ) as AvgCalc,
sum( case when AvgRate is null and Notional <> 0
then 1 else 0 end ) as MissCnt " B01 대상
}
group by CompanyCode, HedgeId
⑤ 원장 대조 뷰
위험회피관계 번호가 전표 어느 필드에 실리는지는 도입 때 합의해야 합니다. 아래는 배정(ZUONR)에 싣는다고 가정한 스케치입니다.
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '위험회피 원장 장부금액'
define view entity ZI_HdgLedgerBook
with parameters p_ryear : gjahr, p_poper : poper
as select from acdoca as a
{
key a.rbukrs as CompanyCode,
key a.zuonr as HedgeId, " 합의: 관계 번호를 싣는 필드
sum( case when a.racct between '0000115000' and '0000115999' " 확인: 파생상품 자산 계정
then a.hsl else 0 end ) as LedgerAsset,
sum( case when a.racct between '0000255000' and '0000255999' " 확인: 파생상품 부채 계정
then a.hsl else 0 end ) as LedgerLiab,
sum( case when a.racct between '0000780000' and '0000780999' " 확인: 비효과 손익 계정
then a.hsl else 0 end ) as LedgerIneff
}
where a.rldnr = '0L'
and a.gjahr = $parameters.p_ryear
and a.poper <= $parameters.p_poper
group by a.rbukrs, a.zuonr
⑥ 대사 뷰
재계산 · 초안 · 원장을 한 행에 놓고 점검 코드를 붙입니다. 우선순위는 명목금액 → 평균가격 → 가격 미기재 → 순장부금액 → 비효과 순으로 두었는데, 한 건이 여러 이유로 걸리면 어느 코드를 먼저 보일지는 회사가 정합니다.
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '위험회피 공시 대사'
define view entity ZI_HdgRecon
with parameters p_keydate : abap.dats, p_ryear : gjahr, p_poper : poper
as select from ZI_HdgAvgPrice( p_keydate : $parameters.p_keydate ) as c
inner join zhdd_draft as d on d.bukrs = c.CompanyCode and d.hedge_id = c.HedgeId
left outer join ZI_HdgLedgerBook( p_ryear : $parameters.p_ryear,
p_poper : $parameters.p_poper ) as l
on l.CompanyCode = c.CompanyCode and l.HedgeId = c.HedgeId
{
key c.CompanyCode,
key c.HedgeId,
c.NomTotal,
d.nominal_draft as DraftNom,
d.nominal_draft - c.NomTotal as NomDiff,
c.AvgCalc,
d.avg_draft as AvgDraft,
d.avg_draft - c.AvgCalc as AvgDiff,
( l.LedgerAsset + l.LedgerLiab ) as LedgerCarry,
case
when d.nominal_draft <> c.NomTotal then 'N01'
when abs( d.avg_draft - c.AvgCalc ) > 0.0001 then 'R01'
when c.MissCnt > 0 then 'B01'
else 'I00'
end as CheckCode
}
⑦ 분석 쿼리와 권한 (DCL)
쿼리 뷰로 열면 표준 Fiori 와 Analysis for Office 가 같은 점검 결과를 띄웁니다. 권한은 쿼리가 아니라 읽는 자리에 걸어야 합니다.
@AccessControl.authorizationCheck: #CHECK
@Analytics.query: true
@EndUserText.label: '위험회피 공시 점검'
define view entity ZC_HdgDisclosureQuery
with parameters
@Consumption.derivation: { lookupEntity: 'I_CalendarDate', resultElement: 'CalendarDate' }
p_keydate : abap.dats,
p_ryear : gjahr,
p_poper : poper
as select from ZI_HdgRecon( p_keydate : $parameters.p_keydate,
p_ryear : $parameters.p_ryear,
p_poper : $parameters.p_poper )
{
@AnalyticsDetails.query.axis: #ROWS HedgeId,
@AnalyticsDetails.query.axis: #COLUMNS NomTotal,
DraftNom, NomDiff, AvgCalc, AvgDraft, AvgDiff, LedgerCarry, CheckCode
}
@EndUserText.label: '위험회피 점검 — 회사코드 권한'
@MappingRole: true
define role ZI_HDGRECON {
grant select on ZI_HdgRecon
where CompanyCode = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' );
}
운영 시점에 해야 할 일
위 뷰를 만들기 전에 합의가 먼저입니다. 관계 번호를 싣는 원장 필드, 구간 경계의 기준(잔존만기 · 계약 만기), 평균 가격의 정의, 가격이 빈 구간의 처리, 초안의 입수 경로 다섯 가지입니다. 앞의 확장 포인트 표와 같습니다. 합의가 끝나면 기술 작업은 뷰 일곱 벌을 만들고 전송하는 일입니다. 초안 값은 처음에는 엑셀 업로드로 받고, 안정되면 공시 시스템 인터페이스로 바꾸는 순서가 무난합니다.
운영 데이터로 갈 때 — 관계가 수백 건이면
이 자료는 18건이라 화면이 전부 받아도 가볍습니다. 관계가 수백 건, 구간이 수천 줄이 되면 화면은 건수 제한과 정렬을 서비스에 맡기고, 요약과 집계 탭은 DB 에서 미리 집계한 값을 읽게 합니다. 평가 기준일을 바꿔 가며 되풀이 조회하는 일이 많다면 ③ 구간 배분 뷰의 결과를 결산 시점에 물리적으로 쌓아 두는 방법도 있습니다. 그때는 쌓은 값과 뷰 계산 값이 같은지를 대사 행으로 하나 더 두는 것이 안전합니다.
자주 묻는 질문
도입 상담과 데모에서 자주 나오는 질문들입니다. 세 묶음으로 나눠 적었습니다.
숫자와 산식
명목금액을 왜 구간별로 나눠야 합니까?
IFRS 7 은 위험회피수단 명목금액의 시기별 분포를 공시하도록 요구합니다(23B). 한 건의 총 명목금액만 적으면 그 위험회피가 언제까지 이어지는지 이용자가 알 수 없습니다. 그래서 만기 구간(이 사례에서는 1년 이하 · 1~5년 · 5년 초과)에 걸쳐 나눠 적고, 이 앱은 그 구간 합계가 건별 총액과 같은지를 대사 01번으로 확인합니다.
평균 가격은 단순평균이면 안 됩니까?
구간마다 명목금액이 다르면 단순평균은 큰 구간의 가격을 작게 반영합니다. 이 사례의 순투자 위험회피 한 건은 구간 가격이 1,331.20 과 1,347.80 인데 초안은 둘의 단순평균(1,339.50)이고, 명목금액(35억 · 25억)으로 가중하면 1,338.1167 입니다. 차이 1.3833 은 작아 보여도, 같은 방식으로 적은 건이 여러 개면 위험 유형 평균까지 번집니다. 이 앱은 가중평균을 기준으로 삼고 초안과의 차이를 점검 코드 R01 로 보입니다.
가격이 빈 구간이 있으면 평균은 어떻게 구합니까?
가격이 적힌 구간의 명목금액만 분모로 씁니다. 이 사례의 장기 선물환은 5년 초과 구간 9억에 가격이 없어서, 앞의 두 구간(18억 · 12억)만으로 평균 1,352.90 을 구합니다. 빈 구간까지 분모에 넣으면 평균이 실제보다 낮아지기 때문입니다. 대신 ‘가격 미기재’ 구간이 있다는 사실은 점검 코드 B01 로 따로 남겨, 공시표에 가격 없음이 나가는지 사람이 정하게 합니다.
이자율위험과 상품가격위험도 ‘평균 가격’ 입니까?
위험 유형마다 가격의 의미가 다릅니다. 외환은 선물환율(원/달러), 이자율은 고정금리(%), 상품가격은 단위당 가격(원)입니다. 단위가 다르니 위험 유형을 넘어 평균을 내지 않고, 위험 유형별 탭에서 따로 구합니다. 이 사례에서는 외환 1,331.4023, 이자율 3.4245, 상품가격 8,780,238.0952 입니다.
재계산 명목금액과 공시 초안 명목금액은 왜 5억이 다릅니까?
합계 차이 5억이 한 건(순투자 위험회피 A)에서 나옵니다. 재계산은 60억, 초안은 65억입니다. 지정 이후 일부를 해제했는데 초안에 반영되지 않았을 수도 있고, 초안이 다른 시점의 금액을 가져왔을 수도 있습니다. 앱은 어느 쪽이 맞는지 판단하지 않고, 다르다는 사실과 어느 건인지까지만 가려냅니다.
순장부금액은 어떻게 구합니까?
수단의 자산 장부금액에서 부채 장부금액을 뺍니다(24A 가 두 금액을 따로 요구합니다). 이 사례 18건의 재계산 합계는 −129,803,000원이고 원장 합계는 −92,303,000원으로, 차이 +37,500,000원이 변동금리 이자율스왑 한 건에서 나옵니다.
비효과는 무엇과 무엇의 차이입니까?
위험회피수단의 공정가치 변동에서 위험회피대상의 가치 변동을 뺀 값입니다(24A(d) 의 변동 금액을 쓰고, 비효과 손익은 24C 가 다룹니다). 이 사례의 재계산 합계는 33,516,000원, 원장 합계는 46,316,000원이며 차이 12,800,000원이 운영자금 차입금 이자율스왑 한 건에서 나옵니다. 앱은 효과성이 충분한지는 판단하지 않습니다 — 그것은 위험회피 지정 요건의 영역입니다.
‘정합성 대사 차이 0’ 이면 공시가 맞다는 뜻입니까?
아닙니다. 정합성 대사는 앱이 계산한 숫자들끼리 서로 맞는지(구간 합계와 건별 합계, 건별 합계와 유형별 집계 등)를 봅니다. 공시 초안·원장과 맞는지는 별개이고, 그것이 점검 필요 건수입니다. 두 숫자를 요약에 나란히 둔 이유가 이것입니다.
점검 필요 5건은 모두 잘못된 것입니까?
그렇게 단정하지 않습니다. 가려낸 것은 “재계산과 초안·원장이 다르다” 는 사실이고, 어느 쪽이 맞는지는 원천을 확인해야 합니다. 이 사례의 5건도 자료에 일부러 심은 예외입니다. 최종 판단은 회사와 감사인의 몫입니다.
위험회피회계를 적용할 수 있는지도 점검합니까?
하지 않습니다. 적용 요건(공식 지정과 문서화, 경제적 관계, 신용위험 지배 여부, 위험회피비율)은 IFRS 9(K-IFRS 제1109호)이 정하고, 이 앱은 그 판단 뒤에 나온 공시 숫자를 점검합니다. 요건과 효과성은 같은 시리즈의 다른 글에서 다룹니다.
화면과 조작
어떤 조건으로 조회합니까?
기준 연월(필수), 위험 유형, 위험회피 유형, 지정일 시작·종료, 점검 코드, 점검 결과 일곱 가지입니다. 기준 연월만 넣어도 조회되고, 나머지는 범위를 좁힐 때 씁니다.
점검 필요 건만 모아 볼 수 있습니까?
점검 결과를 ‘점검 필요’ 로 고르면 됩니다. 이 사례에서는 18건 가운데 5건이 남습니다. 점검 코드를 골라 같은 이유로 걸린 건만 보는 방법도 있습니다.
탭은 왜 다섯 개입니까?
같은 자료를 다섯 방향으로 자르기 위해서입니다. 위험회피관계 명세(18), 만기구간별 명목금액·평균가격(32), 위험 유형별 집계(3), 위험회피 유형별 집계(3), 대사 결과(12). 어디가 다른지 보려면 집계 탭이, 왜 다른지 보려면 명세와 상세가, 앱이 믿을 만한지는 대사 탭이 답합니다.
행을 누르면 무엇이 열립니까?
그 위험회피관계의 재계산 산식 상세가 열립니다. 건마다 12줄로, 구간별 명목금액 · 합계 · 가중평균 · 순장부금액 · 비효과를 계산 순서대로 풀어 둔 것입니다.
CSV 로 내려받으면 무엇이 들어 있습니까?
지금 보고 있는 탭의 열이 그대로 들어갑니다. 대사 결과 탭의 CSV 는 감사인에게 줄 대사 증빙으로 쓸 수 있습니다.
지정일 범위 조건은 어떻게 걸립니까?
시작과 종료를 각각 ‘이상’ · ‘이하’ 로 풀어 and 로 묶습니다. 같은 필드에 두 조건을 따로 넣으면 UI5 가 or 로 묶어 모든 건이 통과하는 일이 있어, 한 묶음으로 만들어 보냅니다. 이 사례에서 이상은 7건, 이하는 11건이고 합이 18건입니다.
도입과 운영
거래 시스템이 SAP Treasury 가 아니어도 됩니까?
됩니다. 필요한 것은 위험회피관계별 명목금액·평균 가격·장부금액·비효과 숫자이고, 그 원천이 Treasury 인지 다른 시스템인지는 상관없습니다. 다만 원장 대조는 관계 번호를 전표에 실을 수 있어야 하므로, 그 필드를 먼저 합의해야 합니다.
공시 초안은 어떻게 앱에 넣습니까?
이 사례에서는 서비스가 초안 값을 함께 들고 있습니다. 운영에서는 엑셀 업로드로 시작해 공시 시스템 인터페이스로 바꾸는 순서를 권합니다. 어느 경로든 앱은 초안을 읽기만 하고 고치지 않습니다.
초안이나 원장을 앱이 고쳐 줍니까?
고치지 않습니다. 이 앱은 조회·점검 전용이고, 차이의 원인을 찾아 초안이나 원장을 바로잡는 일은 사람이 표준 거래에서 합니다. 그래서 표준 거래로 내려갈 자리를 점검 코드마다 적어 두었습니다.
권한은 어떻게 겁니까?
회사코드 단위로 겁니다. 집계 화면은 권한이 없는 회사의 합계를 뺄셈으로 드러낼 수 있으므로, 권한은 드릴스루가 아니라 집계를 읽는 뷰에 겁니다(⑦ 의 DCL).
다른 회계기준이나 다른 공시 항목에도 쓸 수 있습니까?
구간으로 나누고 가중하고 원장과 빼는 구조는 같으니 다른 항목에도 옮길 수 있습니다. 다만 이 앱은 IFRS 7 위험회피회계 공시의 명목금액·평균 가격에 맞춰 만들었고, 다른 공시 항목은 항목별로 대사식을 새로 세워야 합니다.
결과를 최종 공시 숫자로 써도 됩니까?
쓰지 않습니다. 점검 도구의 결과이고, 공시 판단의 최종 결정은 회사와 감사인이 합니다. 앱은 초안이 원천과 같은지 가려내는 데까지입니다.
이 화면의 숫자는 실제 회사 데이터입니까?
아닙니다. 모두 가상의 자료이고, 위험회피관계 이름 끝에 ‘(가상)’ 이 붙어 있습니다. 점검 필요 5건은 점검 기능을 보여 주려고 일부러 심은 예외입니다.
도입하려면 무엇부터 합니까?
합의부터 합니다. 관계 번호를 싣는 원장 필드, 구간 경계의 기준, 평균 가격의 정의, 가격이 빈 구간의 처리, 초안 입수 경로 다섯 가지입니다. 합의가 끝나면 CDS 뷰를 만들고 화면을 올리는 기술 작업이 이어집니다. 상담은 사이드바의 문의하기로 받습니다.