SAP 계약 결합 판정 점검 — IFRS 15, 같은 고객과 거의 동시에 맺은 계약을 하나로 묶을지 가려 상대 개별판매가격으로 다시 배분한 수익을 장부와 대조한다
결합 지표 판정 · 상대 개별판매가격 배분 · 재배분 효과 · 장부 수익 대조를 계약 묶음 단위로 다시 계산해 비교합니다
같은 고객과 며칠 간격으로 장비 판매 계약과 설치·유지보수 계약을 따로 맺었다면 수익은 어떻게 나눠 잡을까요? IFRS 15 고객과의 계약에서 생기는 수익(K-IFRS 제1115호)의 계약의 결합은 같은 고객(또는 고객의 특수관계자)과 동시 또는 거의 동시에 체결한 둘 이상의 계약이 단일 상업적 목적의 패키지로 협상되었거나, 한 계약의 대가가 다른 계약의 가격이나 이행에 따라 달라지거나, 약속한 재화·용역이 단일 수행의무이면 하나의 계약으로 회계처리하도록 합니다. 묶으면 총 거래가격을 상대 개별판매가격으로 수행의무에 다시 배분하므로 계약별 수익이 달라집니다.
실무에서는 영업 계약과 서비스 계약이 서로 다른 문서와 다른 담당자에게 있어서 묶어야 하는 계약이 따로 인식되거나, 묶지 않아도 되는 계약이 배분 대상으로 섞이거나, 묶기는 했지만 배분 비율이 개별판매가격과 달라지는 일이 한 줄씩 숨어 있기 쉽습니다. 이 화면은 계약 두 건씩 한 묶음으로 보고 결합 후보를 가린 뒤 재배분 수익과 장부 수익을 한 줄에서 비교하도록 OpenUI5 화면으로 확장했습니다. 실제 구동 화면 6종을 함께 공개합니다.
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) — 수익 인식 |
| 관련 기준서 | IFRS 15 고객과의 계약에서 생기는 수익(K-IFRS 제1115호) — 계약의 결합, 상대 개별판매가격 배분 |
| Namespace | zui5.ctrcomb |
| 셸 구조 | 단일 페이지 + 5개 탭 |
| 화면 수 | 메인 1 · 상세 팝업 1 |
| SAP 표준 T-code | VA43 · VA03 · VF03 · FBL5N · FAGLL03 |
| 데이터 연동 방식 | OData V2 (조회조건 전부 $filter) |
| 성격 | 조회·산출·대사·점검형 |
| 테마 | sap_horizon · 한국어 |
| 요약 | 내용 |
|---|---|
| 점검 대상 | 계약 두 건 묶음별 체결일 간격, 세 가지 결합 지표, 결합 판정과 회사 처리, 결합 시 배분액, 장부 수익과 기대 수익 |
| 핵심 산식 | 결합 시 계약 A 배분액 = 총 거래가격 × 계약 A 개별판매가격 ÷ 개별판매가격 합계 · 재배분 효과 = 배분액 − 거래가격 · 차이 = 장부 수익 − 기대 수익 |
| 결과 표시 | 정상 / 점검 필요 |
실제 화면 6종 둘러보기






사용 방법
- 회계연도를 넣고, 법인 번호·고객·결합 판정·회사 처리·계약 A 체결일 범위·점검 코드·점검 결과는 필요할 때만 고릅니다. "전체"를 고르면 해당 조건 없이 조회됩니다.
- 조회 버튼은 조회조건 입력 필드 줄의 가장 오른쪽에 있습니다. 입력란에서 Enter 키를 눌러도 같은 조회가 실행됩니다. 화면을 열면 기본 조건(회계연도 2026)으로 자동 조회됩니다.
- 요약 지표에서 고객 수, 결합 검토 건수, 결합 후보 건수, 점검 필요 건수, 계약금액 합계, 결합 후보 재배분 규모, 장부−기대 차이 절대값 합계, 정합성 대사 차이 건수를 확인합니다.
- 결합 검토 명세 → 기준별 점검 → 고객별 집계 → 결합 지표별 집계 → 대사 결과 탭 순서로 이동합니다.
- 결합 검토 명세에서 행을 누르면 재계산 결과와 장부 비교 팝업이 열립니다.
- CSV 내려받기로 현재 탭의 결과를 UTF-8(BOM) 파일로 받습니다.
계약 결합 판정과 점검 코드 규칙
먼저 계약 묶음을 결합 후보·별도 유지·확인 필요로 가르고, 그 판정을 회사 처리와 비교해 점검 코드를 붙입니다.
| 판정 | 조건 |
|---|---|
| 결합 후보 | 체결일 간격이 회사 기준(샘플 가정값 30일) 이내이고, 패키지 협상·대가 상호 의존·단일 수행의무 중 하나 이상 충족 |
| 별도 유지 | 세 가지 지표가 모두 충족되지 않음 |
| 확인 필요 | 체결일 간격이 회사 기준을 넘는데 지표는 하나 이상 충족 — 판단 근거 확인 |
| 점검 코드 | 판정 조건 | 결과 | 사용자 조치 |
|---|---|---|---|
| K01 | 결합 후보인데 계약별로 따로 수익을 인식 | 점검 필요 | 계약 결합 검토 자료와 배분 결과 확인 |
| K02 | 별도 유지인데 하나의 계약처럼 묶어 배분 | 점검 필요 | 결합 근거(지표) 기록 확인 |
| K03 | 결합 처리했으나 계약별 수익이 상대 개별판매가격 배분액과 다름 | 점검 필요 | 배분 비율과 개별판매가격 자료 확인 |
| K04 | 확인 필요(시기 요건 밖에서 지표 충족) | 점검 필요 | 지표 충족 근거와 체결 경위 확인 |
| K00 | 판정과 회사 처리가 같고 장부 수익 = 기대 수익 | 정상 | 조치 없음 |
"거의 동시"의 기간은 기준서가 일수로 정하지 않았으므로 화면의 30일은 가정값이며, 한 건이 여러 기준에 걸리면 앞선 코드를 점검 코드로 표시합니다.
결합 배분에서 수익 차이까지의 산출 순서
- 총 거래가격 = 계약 A 거래가격 + 계약 B 거래가격
- 결합 시 배분액 — 계약 A = 총 거래가격 × 계약 A 개별판매가격 ÷ (계약 A + 계약 B 개별판매가격), 계약 B = 총 거래가격 − 계약 A 배분액
- 재배분 효과 = 결합 시 배분액 − 거래가격 (계약 A 효과 + 계약 B 효과 = 0)
- 기대 수익 — 결합 후보는 결합 시 배분액, 별도 유지는 거래가격, 확인 필요는 판단 보류로 장부와 같게 둠
- 차이 = 장부 수익 − 기대 수익 (계약 A 차이 + 계약 B 차이 = 0), 차이 절대값 합계 = |계약 A 차이| + |계약 B 차이|
예를 들어 계약 A 150,000천원·계약 B 60,000천원, 개별판매가격 160,000천원·70,000천원이면 결합 시 계약 A 배분액은 약 146,087천원, 계약 B 배분액은 약 63,913천원입니다. 장부가 계약 A 130,200천원, 계약 B 79,800천원으로 나눠 잡았다면 계약 A 차이 약 −15,887천원, 계약 B 차이 약 +15,887천원이 점검 후보로 올라옵니다.
조회조건
| 조건 | 필수 | 설명 |
|---|---|---|
| 회계연도 | 필수 | 4자리 숫자 |
| 법인 번호 | 선택 | 예: E01 |
| 고객 | 선택 | 고객 번호 선택 |
| 결합 판정 | 선택 | 결합 후보 · 별도 유지 · 확인 필요 |
| 회사 처리 | 선택 | 결합 처리 · 별도 처리 |
| 계약 A 체결일 시작/종료 | 선택 | 범위 조건 |
| 점검 코드 | 선택 | K00~K04 |
| 점검 결과 | 선택 | 정상 · 점검 필요 |
결과 컬럼
| 탭 | 주요 컬럼 |
|---|---|
| 결합 검토 명세 | 결합 검토 번호 · 법인 · 고객 · 상대방 구분 · 계약 A/B 번호와 체결일 · 체결일 간격 · 시기 요건 · 세 가지 지표 · 결합 판정 · 회사 처리 · 점검 결과와 코드 · 계약 A/B 거래가격 · 개별판매가격 · 결합 시 배분액 · 재배분 효과 · 장부 수익 · 기대 수익 · 차이 · 차이 절대값 합계 · 점검 내용 |
| 기준별 점검 | 점검 코드 · 점검 기준 · 판정 방법 · 검사 건수 · 점검 필요 건수 · 대상 금액 합계 · 최대 금액 · 점검 결과 |
| 고객별 집계 | 고객 · 검토 건수 · 결합 후보·별도 유지·확인 필요 건수 · 점검 필요 건수 · 계약금액 합계 · 결합 후보 계약금액 · 재배분 규모 · 차이 절대값 합계 |
| 결합 지표별 집계 | 결합 요건·지표 · 충족 건수 · 결합 처리 건수 · 별도 처리 건수 · 충족 건 계약금액 · 점검 결과 |
| 대사 결과 | 대사 번호 · 대사 항목 · 대사식 · 좌변 · 우변 · 검사 건수 · 차이 건수 · 최대 차이 |
SAP 표준 기능 매핑
SAP 표준 T-code
| T-code | 표준 기능 | 이 화면과의 관계 |
|---|---|---|
| VA43 | 판매 계약 조회 | 결합 검토 대상 계약의 체결일·금액 확인 |
| VA03 | 판매오더 조회 | 계약에 딸린 오더·품목 확인 |
| VF03 | 청구문서 조회 | 청구 금액과 장부 수익 대조 |
| FBL5N | 고객 개별항목 조회 | 고객별 매출 전표 확인 |
| FAGLL03 | G/L 계정 개별항목 조회 | 수익 계정 전표 확인 |
요구사항 매핑표
| 기준서 | 요구사항 | 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| IFRS 15 고객과의 계약에서 생기는 수익(K-IFRS 제1115호) | 같은 고객(또는 특수관계자)과 동시 또는 거의 동시에 체결한 둘 이상의 계약 | 시기·상대방 요건 판정 | 판매문서 헤더(문서일·고객) | 일수 기준은 회사 정책 — 확인 필요 |
| IFRS 15 고객과의 계약에서 생기는 수익(K-IFRS 제1115호) | 패키지 협상 / 대가 상호 의존 / 단일 수행의무 중 하나 이상 | 세 지표 충족 여부와 결합 판정 | 계약 검토 기록 | 표준 필드 없음 — 확인 필요 |
| IFRS 15 고객과의 계약에서 생기는 수익(K-IFRS 제1115호) | 결합하면 단일 계약으로 보고 상대 개별판매가격으로 배분 | 결합 시 배분액·재배분 효과·기대 수익 | 판매문서 품목, 개별판매가격 자료 | 개별판매가격은 회사 관리 — 확인 필요 |
| IFRS 15 고객과의 계약에서 생기는 수익(K-IFRS 제1115호) | 장부 수익과 기준 수익의 비교 | 장부 수익 − 기대 수익 | 유니버설 저널(수익 계정) | 차이는 후보이며 원인 단정 안 함 |
참고 CDS 뷰
원천테이블
| 테이블 | 내용 | 사용 필드 |
|---|---|---|
| VBAK | 판매문서 헤더 | VBELN, KUNNR, AUDAT, NETWR |
| VBAP | 판매문서 품목 | VBELN, POSNR, NETWR |
| KNA1 | 고객 마스터 | KUNNR, NAME1 |
| ACDOCA | 유니버설 저널 | RBUKRS, GJAHR, BELNR, RACCT, HSL |
| 개별판매가격 관리 자료·결합 지표 검토 기록 | 계약별 개별판매가격과 지표 판단 | 확인 필요 |
CDS 뷰 스케치
@EndUserText.label: 'Contract combination candidate'
define view entity ContractCombineCandidate
as select from vbak as a
inner join vbak as b on b.kunnr = a.kunnr and b.vbeln > a.vbeln
{
key a.vbeln as ContractNoA,
key b.vbeln as ContractNoB,
a.kunnr as CustomerNo,
dats_days_between( a.audat, b.audat ) as DayGap,
a.netwr as PriceA,
b.netwr as PriceB
}OpenUI5 구성
- 데이터는 OData V2 모델 하나로 받으며, 서비스 선언은 앱 설정 파일의 데이터 소스에만 둡니다.
- 탭마다 별도의 데이터 집합에 바인딩해 화면 블록이 각자 필요한 행만 받고, 한 번에 받아 컨트롤러에서 쪼개지 않습니다.
- 조회조건은 필터 객체로 만들어 $filter 로만 전달하고, "전체"는 필터를 만들지 않습니다. 계약 A 체결일 범위는 날짜 필터 하나로 묶어 전달합니다.
- 정렬·페이징은 테이블의 sorter 와 threshold 로 $orderby · $top · $skip 을 호출하고, 총건수는 $inlinecount 로 받습니다.
- 요약 지표의 합산식은 컨트롤러 한 곳에 모았고, 차이 절대값 합계는 서비스 함수로 받습니다. 소계 행은 이중 집계하지 않습니다.
- 서비스에 연결되지 않으면 ErrorHandler 가 메타데이터 실패와 요청 실패를 구분해 안내 창을 띄웁니다.
- 테이블은 sap.ui.table, 상세는 sap.m Dialog 로 구성했습니다.
파일 구성
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
서비스 정의 폴더 메타데이터 · 서비스 로직 · 데이터 파일검증 결과
검증용 샘플 데이터(회계연도 1개, 가상 법인 2곳, 가상 고객 7곳, 가상 계약 묶음 26건, 점검 기준 5개, 지표 5종과 합계 1행)로 실제 브라우저에서 렌더링하고, 원천 행에서 독립 재계산한 값과 화면 요약 지표를 대조했습니다.
| 요약 지표 | 값 |
|---|---|
| 고객 수 | 7곳 |
| 결합 검토 건수 | 26건 |
| 결합 후보 건수 | 15건 |
| 점검 필요 건수 | 11건 |
| 계약금액 합계 | 3,394,000천원 |
| 결합 후보 재배분 규모 | 46,973천원 |
| 장부−기대 차이 절대값 합계 | 105,550천원 |
| 정합성 대사 차이 건수 | 0건 |
| 대사(회계연도 2026) | 검사 건수 | 차이 건수 | 최대 차이 |
|---|---|---|---|
| 결합 배분 합계 | 26 | 0 | 0 |
| 재배분 효과 합계 | 26 | 0 | 0 |
| 기대 수익 합계 | 26 | 0 | 0 |
| 장부 수익 합계 | 26 | 0 | 0 |
| 차이 상계 | 26 | 0 | 0 |
| 판정 건수 | 1 | 0 | 0 |
| 고객별 집계 합계 | 7 | 0 | 0 |
정합성 대사 7식은 검사 138건 모두 차이 0건이며, 별도의 독립 재계산 스크립트가 샘플 26건의 결합 판정·배분액·재배분 효과·기대 수익·차이·점검 코드를 모두 같게 다시 구했습니다(총 438개 검사, 차이 0건). 점검 화면이라 의도적으로 넣은 예외 11건(K01 3건 · K02 2건 · K03 3건 · K04 3건)은 판정과 회사 처리 또는 장부 값과 재계산 값이 달라 점검 필요로 표시되며, 이 건수는 대사 차이 건수와 분리해 기록했습니다.
조회 버튼 위치, Enter 조회, 테마 sap_horizon, 행 클릭 상세 팝업, 연결 실패 안내까지 실제 브라우저에서 확인했습니다.
자주 묻는 질문
이 점검은 어떤 기준서의 어떤 요구사항에 근거하며 적용 시기는 어떻게 되나요?
같은 고객(또는 고객의 특수관계자)과 동시 또는 거의 동시에 체결한 둘 이상의 계약을 하나의 계약으로 회계처리하는 요건과, 결합 시 거래가격을 상대 개별판매가격으로 배분한다는 처리(IFRS 15 고객과의 계약에서 생기는 수익(K-IFRS 제1115호)의 계약의 결합)를 다룹니다. 이 화면은 그 처리를 계약 묶음 단위로 다시 계산해 장부와 맞춰 보는 도구입니다. 이미 시행 중인 기준서이며, 개별 문단의 적용 범위와 경과 규정은 기준서 원문에서 확인 필요합니다.
체결일 간격 30일은 기준서가 정한 값인가요?
아닙니다. 기준서는 "동시 또는 거의 동시"라고만 쓰고 일수를 정하지 않습니다. 30일은 샘플 화면의 가정값이며 회사 정책에 맞게 정해야 합니다. 패키지 협상·대가 의존·단일 수행의무 지표의 충족 여부도 계약 검토 기록으로 판단하는 사항이라 확인 필요입니다.
개별판매가격은 어디서 가져오나요?
가격조건이나 평가 자료처럼 표준 원천 필드로 바로 읽히지 않는 회사 관리 정보입니다. 샘플은 가상 법인 2곳과 가상 고객 7곳, 가상 계약 26건과 가상 개별판매가격을 두고 만들었으며, 실제 적용에서는 회사의 자료를 연결해야 하므로 확인 필요입니다.
"점검 필요"는 회계처리를 잘못했다는 뜻인가요?
그렇게 단정하지 않습니다. 판정과 회사 처리가 다르거나 장부 수익과 다시 계산한 수익이 다른 건을 골라 보여주는 표시입니다. 계약을 묶을지, 어떤 개별판매가격을 쓸지는 계약 내용과 검토 자료를 함께 보아야 알 수 있고, 최종 판단은 회사와 감사인이 합니다.
계약 결합 판단을 계약 묶음 단위로 미리 걸러내세요
영업 계약과 서비스 계약이 흩어져 있어 결합 여부와 배분 근거를 결산 때마다 다시 확인하느라 시간이 든다면, 우리 회사 계정 체계에 맞춘 점검 화면이 필요하다면 문의해 주세요.