SAP 수행의무별 거래가격 배분 점검 — IFRS 15, 계약 금액을 의무별로 나눠 다시 맞춰본다
제품 공급·설치·유지보수가 한 계약에 섞여 있을 때 거래가격이 개별판매가격 비율대로 배분됐는지, 배분액 합계가 거래가격과 맞는지 원장·계약 데이터로 먼저 확인해 둡니다
계약 금액이 한 줄로 떨어져도, 그 안에 제품 공급·설치 용역·2년 유지보수처럼 이행 시점이 다른 의무가 섞여 있으면 이야기가 달라집니다. IFRS 15 고객과의 계약에서 생기는 수익(K-IFRS 제1115호)은 거래가격을 수행의무별 개별판매가격 비율대로 배분하도록 요구합니다. 배분이 어긋나면 금액 총액은 같아도 수익을 인식하는 시점이 달라지고, 계약자산·계약부채 잔액도 함께 틀어집니다. 그런데 개별판매가격은 계약마다 산정 방법이 다르고, 성과보너스·반품 추정 같은 변동대가까지 끼면 거래가격 자체가 확정된 값이 아니라 추정치에서 제약을 뺀 값이 됩니다.
표준 판매문서·청구·원장 구조를 그대로 이어받아 계약별 수행의무와 개별판매가격을 한자리에 모으고, 배분 비율과 배분액 산출, 배분액 합계 대사, 개별판매가격 산정방법별 구성비, 변동대가 추정·제약 집계, 확인 대상 건 추출까지 OpenUI5 화면으로 확장했습니다. 실제 구동 화면 5종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 계약·수행의무 원천 — 판매문서 헤더·품목(
VBAK/VBAP) 구조를 그대로 사용 - 청구·수익 — 청구문서(
VBRK/VBRP)와 원장(ACDOCA) 금액을 그대로 집계 - 표준 화면 — 판매오더 조회(VA03) · 판매계약 조회(VA43) · 청구문서 조회(VF03) · 가격 조건 레코드 조회(VK13)
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 수익 인식 |
| 관련 기준서 | IFRS 15 고객과의 계약에서 생기는 수익(K-IFRS 제1115호) — 거래가격의 배분, 변동대가의 추정과 제약 |
| Namespace | zui5.poalloc |
| 셸 구조 | 조회조건 영역(우측 조회) + 배분 대사 요약 + 수행의무 명세·계약별 집계·개별판매가격 산정방법·변동대가·점검 예외 5개 탭, 상세 Dialog |
| 화면 수 | 조회 화면 1개 + 상세 다이얼로그 |
| SAP 표준 T-code | VA03 · VA43 · VF03 · VK13 · FBL5N · FAGLL03(§7 참고) |
| 데이터 연동 방식 | OData V2 — 화면 블록마다 엔티티셋에 직접 바인딩 |
| 성격 | 조회·대사·점검형 — 배분 확정과 전표 기표는 화면 밖 프로세스 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 5종 둘러보기
회사코드·회계연도를 넣고 조회하면 배분 대사 요약과 수행의무 명세가 한 화면에 뜹니다 → 탭을 옮겨 계약별 집계·산정방법·변동대가를 보고 → 점검 예외에서 확인이 필요한 건만 추려 봅니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드·회계연도를 지정하고, 고객·계약번호·판정 상태는 필요할 때만 넣습니다. 비워 두면 전체가 조회됩니다.
- 조회·초기화 버튼은 조회조건 입력 필드 줄의 오른쪽 끝에 있습니다. 입력 필드에서 Enter 키를 눌러도 같은 조회가 실행됩니다.
- 배분 대사 요약에서 거래가격 합계·배분액 합계·차이를 먼저 확인합니다. 차이가 0이 아니면 요약 오른쪽에 점검 안내가 붙습니다.
- 수행의무 명세에서 계약별 개별판매가격·배분비율·배분액과 청구액·인식수익을 나란히 봅니다.
- 계약별 집계에서 고정대가·변동대가·거래가격·배분액 합계·비율 합계를 계약 단위로 대사합니다.
- 개별판매가격 산정방법과 변동대가 탭에서 구성비와 추정·제약·반영액을 확인합니다.
- 점검 예외에서 확인이 필요한 건만 유형별로 추려 보고, 행을 클릭해 상세를 확인한 뒤 CSV 다운로드로 결과를 내려받습니다.
배분 비율과 확인 대상 판정 규칙
이 화면의 핵심 판정은 두 가지입니다. "거래가격이 개별판매가격 비율대로 남김없이 배분됐는가"와 "그 비율을 만든 개별판매가격·변동대가가 근거를 갖췄는가" 입니다.
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 수행의무 배분액 합계 ≠ 계약 거래가격 | 점검 필요 | 배분 계산 기준과 단수 처리 방식을 확인 — 할인의 배분 대상이 빠지지 않았는지 점검 |
| 계약의 개별판매가격 비율 합계 ≠ 100% | 점검 필요 | 비율 산출에서 빠진 수행의무가 없는지 확인 |
| 개별판매가격이 등록되지 않은 수행의무가 있음 | 확인 필요 | 관측가능 가격이 없을 때 쓸 추정 방법(시장평가 조정 · 예상원가와 이윤 · 잔여접근법)을 정한 뒤 재조회 |
| 계약의 모든 수행의무에 잔여접근법을 적용 | 확인 필요 | 잔여접근법 적용 요건에 해당하는지 확인 — 관측가능 가격이 있는 의무에 쓰이지 않았는지 점검 |
| 변동대가 추정액은 있는데 제약액이 0 | 확인 필요 | 수익 환원 가능성이 매우 높은 금액만 거래가격에 포함했는지 확인 |
| 위 조건에 해당하지 않음 | 정상 | 별도 조치 불요 — 배분 대사에 그대로 반영됩니다 |
이 화면이 대신 정하지 않는 것
수행의무를 어떻게 식별할지, 개별판매가격을 어떤 방법으로 추정할지, 변동대가에 어느 정도 제약을 둘지는 회사의 회계정책과 계약 사실관계로 정합니다. 이 화면은 그렇게 정해진 결과가 원장·계약 데이터와 정합적으로 대사되는지만 점검하며, 최종 배분·공시 판단은 기준서 원문에 따라 회사와 감사인이 내립니다.
거래가격 확정에서 배분 대사까지 5단계 산출
| 단계 | 내용 |
|---|---|
| 1단계 | 변동대가를 유형별로 추정하고 제약을 적용합니다 — 반영액 = 추정액 − 제약액 |
| 2단계 | 고정대가에 변동대가 반영액을 더해 계약의 거래가격을 확정합니다 — 거래가격 = 고정대가 + 반영액 |
| 3단계 | 계약 안 수행의무의 개별판매가격 합계 대비 구성비를 구합니다 — 비율 = 개별판매가격 ÷ Σ개별판매가격, 비율 합계는 100% |
| 4단계 | 거래가격을 그 비율대로 배분합니다 — 배분액 = 거래가격 × 비율, 배분액 합계는 거래가격과 일치 |
| 5단계 | 산정방법별 구성비(합계 100%)와 전체 대사 요약을 만들고, 차이가 있는 계약을 확인 대상으로 제시합니다 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 회사코드 | 필수 | 대상 회사코드 — 대사 요약 조회의 키로도 씁니다 |
| 회계연도 | 필수 | 조회 대상 회계연도 |
| 고객 | 선택 | 비우면 전체 — 빈 값은 조회 조건으로 보내지 않습니다 |
| 계약번호 | 선택 | 한 계약만 좁혀 볼 때 사용 |
| 판정 상태 | 선택 | 전체 · 정상 · 점검 필요 · 확인 필요 |
결과 컬럼
| 영역 | 컬럼 · 표시 |
|---|---|
| 배분 대사 요약 | 계약 건수 · 수행의무 건수 · 거래가격 합계 · 배분액 합계 · 차이 · 예외 건수 |
| 수행의무 명세 | 계약번호 · 수행의무 · 수행의무 내용 · 고객 · 품목 · 개별판매가격 산정방법 · 개별판매가격 · 배분비율 · 배분액 · 청구액 · 인식수익 · 판정 |
| 계약별 집계 | 계약번호 · 고객 · 수행의무 수 · 고정대가 · 변동대가 추정 · 변동대가 제약 · 거래가격 · 배분액 합계 · 차이 · 비율 합계 · 판정 |
| 개별판매가격 산정방법 | 산정방법 · 수행의무 수 · 배분액 · 구성비 · 점검 대상 건수 |
| 변동대가 | 변동대가 유형 · 계약 수 · 추정액 · 제약액 · 반영액 |
| 점검 예외 | 예외번호 · 계약번호 · 수행의무 · 예외 유형 · 내용 · 차이금액 · 중요도 |
SAP 표준 기능 매핑
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 그 데이터에 배분 관점의 조회·검증을 더해 확장합니다.
| 표준 T-code | 표준 기능 | 이 화면이 더한 것 |
|---|---|---|
VA03 | 판매오더 조회 | 오더 품목을 수행의무 단위로 모아 배분 비율을 붙입니다 |
VA43 | 판매계약 조회 | 계약 단위 거래가격과 배분액 합계를 한 줄에서 대사합니다 |
VF03 | 청구문서 조회 | 청구액을 배분액과 나란히 놓아 차이를 보여줍니다 |
VK13 | 가격 조건 레코드 조회 | 개별판매가격 산정방법별 배분액 구성비로 집계합니다 |
FBL5N | 고객 개별항목 조회 | 고객 단위로 계약을 묶어 봅니다 |
FAGLL03 | G/L 개별항목 조회 | 인식수익을 배분액과 대사합니다 |
IFRS 요구사항 매핑표
| 기준서 | 요구사항 | 이 화면의 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| IFRS 15 (K-IFRS 제1115호) | 거래가격을 수행의무에 개별판매가격 비율로 배분 | 수행의무 명세의 배분비율·배분액 산출과 합계 대사 | VBAK · VBAP | 단수 조정 방식은 회사 정책에 따릅니다 |
| IFRS 15 (K-IFRS 제1115호) | 개별판매가격의 추정(관측가능 가격이 없는 경우) | 산정방법별 배분액 구성비와 확인 대상 건수 | VBAP · 가격 조건 | 잔여접근법 적용 요건 판단은 사용자 몫입니다 |
| IFRS 15 (K-IFRS 제1115호) | 변동대가의 추정과 제약 | 변동대가 유형별 추정액·제약액·반영액 집계 | VBAK · ACDOCA | 제약 판단 근거 자체는 화면에 담지 않습니다 |
| IFRS 15 (K-IFRS 제1115호) | 청구와 수익인식의 시차 | 배분액 대비 청구액·인식수익 비교 컬럼 | VBRK · VBRP · ACDOCA | 계약자산·계약부채 증감표는 별도 화면이 다룹니다 |
참고 CDS 뷰
| 원천 테이블 | 주요 필드 | 쓰임 |
|---|---|---|
VBAK | VBELN · KUNNR · NETWR · WAERK | 계약 헤더와 고객, 고정대가 |
VBAP | VBELN · POSNR · MATNR · NETWR · ARKTX | 수행의무 단위 품목과 금액 |
VBRK / VBRP | VBELN · POSNR · NETWR · FKDAT | 청구액 |
ACDOCA | RBUKRS · GJAHR · RACCT · HSL · KUNNR | 인식수익 |
KNA1 / MARA | KUNNR · NAME1 / MATNR | 고객명·품목 표기 |
define view entity ZC_PoAllocItem
as select from I_SalesDocumentItem as it
inner join I_SalesDocument as hd on hd.SalesDocument = it.SalesDocument
{
key it.SalesDocument as ContractNo,
key it.SalesDocumentItem as PoNo,
hd.SoldToParty as Kunnr,
it.Material as Matnr,
it.SalesDocumentItemText as PoDesc,
it.NetAmount as SspAmount,
it.TransactionCurrency as Waers
}
표준 CDS 뷰 이름과 필드는 시스템 릴리스에 따라 다를 수 있으므로, 도입 시 실제 시스템에서 확인해 확정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 · 구성 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 패널 · 배분 대사 요약 패널 · sap.m.IconTabBar 5개 탭 |
| 데이터 연동 | manifest.json dataSources.mainService(OData V2, 상대 경로) — 화면 블록마다 엔티티셋(수행의무 명세 · 계약별 집계 · 산정방법 · 변동대가 · 점검 예외 · 대사 요약)에 직접 바인딩합니다. 모델 설정은 useBatch:false · defaultBindingMode:"OneWay" · defaultCountMode:"Inline" |
| 조회조건 | sap.m.Input · sap.m.ComboBox — 우측 끝에 조회·초기화 버튼, Enter 키로 즉시 재조회, sap/ui/model/Filter로 조회조건을 조립해 바인딩에 적용합니다. "전체"를 고른 조건은 필터를 만들지 않습니다 |
| 정렬 · 페이징 | sap/ui/model/Sorter와 모델의 페이징 기능으로 처리 — 전체를 받아 화면에서 걸러내지 않습니다 |
| 명세·집계·예외 표 | sap.ui.table.Table(컬럼 13개·11개·7개) — 행 클릭 시 상세 다이얼로그 |
| 요약 표 | sap.m.Table — sap.m.ObjectStatus로 판정 상태를 표준 ValueState 로만 표시 |
| 공통 처리 | CSV 다운로드 공통 컨트롤러(UTF-8 BOM), 전역 오류 처리기 — 메타데이터 로드 실패·요청 실패·빈 응답을 구분해 안내 |
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon · lodash · moment, OData 서비스에 연결 |
Component.js | 화면 상태·조회조건 모델 초기화, 전역 오류 처리기 연결 |
manifest.json | 앱 디스크립터 — zui5.poalloc · ko 로케일, OData 서비스와 모델 선언 |
view/Main.view.xml | 조회조건 · 대사 요약 · 5개 탭 |
view/DetailDialog.fragment.xml | 상세 내역 다이얼로그 |
controller/Main.controller.js | 조회조건 조립 · 바인딩 · 다이얼로그 · CSV 다운로드 |
controller/BaseController.js | CSV 다운로드 공통 처리 |
model/ErrorHandler.js | 전역 오류 처리 |
model/formatter.js | 금액 · 비율 · 상태 표시 서식 |
i18n/i18n_ko.properties | ko 로케일 리소스 |
운영 데이터는 OData 서비스가 제공하며, 검증용 샘플 데이터는 화면과 완전히 분리해 별도로 둡니다. 화면과 판정 로직은 그대로 씁니다.
검증 결과
화면 구성에 쓴 검증용 샘플 데이터는 계약 8건·수행의무 22건 기준으로 거래가격과 배분액이 원(KRW) 단위로 정확히 맞물리도록 구성했습니다.
| 검증 항목 | 결과 |
|---|---|
| 거래가격 대사(고정대가 + 변동대가 추정 − 제약, 8건) | 통과(차이 0) |
| 배분액 합계 = 거래가격(8건) · 비율 합계 = 100%(8건) | 통과(의도적 예외 제외 차이 0) |
| 산정방법별 구성비 합계 100% · 금액 합계 = 배분 합계 | 통과(차이 0) |
| 변동대가 추정액 − 제약액 = 반영액(4건) | 통과(차이 0) |
| 확인 대상 건 안내 | 배분 차이 1건 · 개별판매가격 미등록 1건 · 잔여접근법 과다 사용 1건 · 변동대가 제약 미적용 1건(의도적으로 구성한 케이스) |
| 조회 조건 전달 — 조회조건 22건 → 4건 필터, 정렬·건수 옵션 동작 | 확인 |
| 표시 금지 검사 — 커스텀 프로그램ID·앱 식별자·출처 표현 검출 | 0건 |
| 화면 렌더링 — 실브라우저에서 조회 → 탭 이동 → 행 클릭 상세까지 실동작 후 캡처 | 5/5 |
조회 버튼 위치 · sap_horizon 테마 · Enter 키 조회 · 서비스 미연결 시 오류 안내 | 확인 |
계약·고객·품목·금액은 모두 검증용으로 구성한 가상 데이터입니다.
자주 묻는 질문
IFRS 15 는 이미 시행 중인데, 왜 지금 이 점검이 필요한가요?
IFRS 15 고객과의 계약에서 생기는 수익(K-IFRS 제1115호)은 이미 시행 중인 기준서입니다. 다만 거래가격의 배분은 계약 조건이 바뀌거나 수행의무가 추가될 때마다 다시 계산해야 하는 절차라, 시행 여부와 무관하게 결산·계약 변경 시점마다 반복되는 상시 점검 대상입니다. 이 화면은 새 기준서를 도입하기 위한 것이 아니라, 시행 중인 요구사항을 기존 계약·청구·원장 데이터로 다시 맞춰 보는 용도입니다.
화면의 "점검 필요" 표시는 회계처리 오류를 뜻하나요?
아닙니다. 이 화면은 배분 결과를 집계·대사해 확인이 필요한 건을 가려내는 점검 도구이며, 최종 배분·공시 판단은 기준서 원문에 따라 회사와 감사인이 내립니다.
배분액 합계가 거래가격과 몇 원 차이 납니다. 오류인가요?
배분 비율을 소수점 넷째 자리에서 끊으면 단수차이가 남습니다. 회사가 정한 단수 조정 방식(마지막 수행의무 흡수, 최대 금액 흡수 등)이 적용됐는지 먼저 확인하는 것이 순서입니다. 화면은 차이 금액을 그대로 보여줄 뿐 임의로 조정하지 않습니다.
개별판매가격이 등록되지 않은 수행의무는 어떻게 보이나요?
배분 비율이 0으로 잡히고 판정이 확인 필요로 표시되며, 점검 예외 목록에도 별도 행으로 올라옵니다. 관측가능한 개별판매가격이 없다면 시장평가 조정 접근법·예상원가와 이윤 접근법·잔여접근법 중 어떤 방법을 쓸지 정한 뒤 다시 조회합니다.