SAP 계약원가 자산화·상각 점검 — IFRS 15, 수주에 쓴 돈을 자산으로 남길지 먼저 가른다
수주 성과수수료와 계약 전용 투입원가가 자산으로 남을 수 있는 원가인지, 남았다면 기초에서 기말까지 상각과 손상이 제대로 반영됐는지 계약·원장 데이터로 먼저 확인해 둡니다
수주 성과수수료, 대리점 중개수수료, 계약 전용 치구 제작비. 계약을 따내고 이행하려고 쓴 돈은 그 계약이 없었다면 쓰지 않았을 돈입니다. IFRS 15 고객과의 계약에서 생기는 수익(K-IFRS 제1115호)은 이런 원가 가운데 계약체결 증분원가와 계약이행원가를 일정 요건 아래 자산으로 인식하고, 재화·용역이 이전되는 기간에 걸쳐 상각하도록 요구합니다. 문제는 어떤 원가가 자산이 되고 어떤 원가가 즉시 비용인지, 자산이 됐다면 몇 달에 걸쳐 상각하는지, 계약이 나빠졌을 때 손상을 잡았는지가 계약마다 담당자마다 흩어져 있다는 점입니다.
표준 판매문서·내부오더·원장 구조를 그대로 이어받아 계약원가를 유형별로 모으고, 자산 인식 판정과 건별 증감, 유형별 증감표 대사, 잔여 상각 스케줄, 확인 대상 건 추출까지 OpenUI5 화면으로 확장했습니다. 실제 구동 화면 6종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 계약 원천 — 판매문서 헤더·품목(
VBAK/VBAP) 구조를 그대로 사용 - 투입원가 — 내부오더 실제원가 라인(
COEP)과 원장(ACDOCA) 금액을 그대로 집계 - 표준 화면 — 판매오더 조회(VA03) · 판매계약 조회(VA43) · 내부오더 조회(KO03) · 내부오더 개별항목(KOB1)
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 수익 인식 |
| 관련 기준서 | IFRS 15 고객과의 계약에서 생기는 수익(K-IFRS 제1115호) — 계약체결 증분원가와 계약이행원가의 자산 인식, 상각과 손상 |
| Namespace | zui5.contcost |
| 셸 구조 | 조회조건 영역(우측 조회) + 증감 대사 요약 + 계약원가 명세·유형별 증감표·자산화 판정·잔여 상각 스케줄·점검 예외 5개 탭, 상세 Dialog |
| 화면 수 | 조회 화면 1개 + 상세 다이얼로그 |
| SAP 표준 T-code | VA03 · VA43 · KO03 · KOB1 · FBL5N · FAGLL03(§7 참고) |
| 데이터 연동 방식 | OData V2 — 화면 블록마다 엔티티셋에 직접 바인딩 |
| 성격 | 조회·대사·점검형 — 자산 인식 확정과 전표 기표는 화면 밖 프로세스 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 6종 둘러보기
회사코드·회계연도를 넣고 조회하면 증감 대사 요약과 계약원가 명세가 한 화면에 뜹니다 → 탭을 옮겨 유형별 증감표·자산화 판정·잔여 상각 스케줄을 보고 → 점검 예외에서 확인이 필요한 건만 추려 봅니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드·회계연도를 지정하고, 계약번호·원가 유형·판정 상태는 필요할 때만 넣습니다. 비워 두면 전체가 조회됩니다.
- 조회·초기화 버튼은 조회조건 입력 필드 줄의 오른쪽 끝에 있습니다. 입력 필드에서 Enter 키를 눌러도 같은 조회가 실행됩니다.
- 증감 대사 요약에서 기초잔액·당기 자산화·당기 상각·기말잔액과 증감 차이를 먼저 확인합니다.
- 계약원가 명세에서 원가별 자산화 판정과 기초에서 기말까지의 움직임을 봅니다.
- 유형별 증감표에서 증분원가와 이행원가를 각각 대사하고, 자산화 판정 탭에서 자산 인식과 즉시 비용의 구성비를 확인합니다.
- 잔여 상각 스케줄에서 기말 장부금액이 앞으로 어떻게 비용이 되는지 기간별로 봅니다.
- 점검 예외에서 확인이 필요한 건을 추려 보고, 행을 클릭해 상세를 확인한 뒤 CSV 다운로드로 결과를 내려받습니다.
자산으로 남길 원가와 바로 털 원가를 가르는 규칙
판정은 두 갈래입니다. "이 원가가 자산으로 남을 수 있는 성격인가"와 "자산으로 남았다면 상각·손상이 제대로 반영됐는가" 입니다.
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 계약이 없었다면 발생하지 않았을 증분원가이고 회수가 예상된다 | 자산 인식 | 상각기간에 걸쳐 상각합니다 |
| 계약 체결 여부와 무관하게 발생하는 원가다 | 즉시 비용 — 증분원가 아님 | 발생 시점에 비용으로 처리 |
| 자산으로 인식했다면 상각기간이 1년 이하다 | 즉시 비용 — 실무적 간편법 | 간편법을 회계정책으로 채택했는지 확인 |
| 회수가 예상되지 않는다 | 자산 인식 불가 | 즉시 비용으로 처리 |
| 기초 + 자산화 − 상각 − 손상 + 환입 ≠ 기말 | 점검 필요 | 증감 항목 누락 여부와 기말잔액 산정 기준 확인 |
| 기말 장부금액 > 잔여 대가 − 잔여 원가 | 점검 필요 | 손상 인식 여부와 금액 확인 |
| 자산으로 인식했으나 상각기간이 등록되지 않았다 | 확인 필요 | 재화·용역 이전 기간을 근거로 상각기간 지정 |
| 계약이 종료됐는데 잔액이 남아 있다 | 확인 필요 | 잔액 제거 또는 손상 처리 여부 확인 |
이 화면이 대신 정하지 않는 것
어떤 원가를 증분원가로 볼지, 회수 가능성을 어떻게 평가할지, 상각기간을 몇 개월로 정할지는 회사의 회계정책과 계약 사실관계로 정합니다. 이 화면은 그렇게 정해진 결과가 계약·원장 데이터와 정합적으로 대사되는지만 점검하며, 최종 판단은 기준서 원문에 따라 회사와 감사인이 내립니다.
유형 구분에서 상각 전개까지 5단계 산출
| 단계 | 내용 |
|---|---|
| 1단계 | 계약에 투입된 원가를 계약체결 증분원가와 계약이행원가로 가릅니다 |
| 2단계 | 증분 여부·회수 예상·상각기간을 보고 자산 인식 여부를 판정합니다 |
| 3단계 | 건별 증감을 계산합니다 — 기말 = 기초 + 자산화 − 상각 − 손상 + 환입 |
| 4단계 | 유형별·전체로 집계해 대사합니다 — 건별 합계 = 유형별 증감표 = 대사 요약, 판정 구성비 합계 = 100% |
| 5단계 | 기말 장부금액을 잔여 상각기간에 전개합니다 — 예상 상각액 누계 = 기말잔액, 최종 잔여 장부금액 = 0 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 회사코드 | 필수 | 대상 회사코드 — 대사 요약 조회의 키로도 씁니다 |
| 회계연도 | 필수 | 조회 대상 회계연도 |
| 계약번호 | 선택 | 비우면 전체 — 빈 값은 조회 조건으로 보내지 않습니다 |
| 원가 유형 | 선택 | 전체 · 계약체결 증분원가 · 계약이행원가 |
| 판정 상태 | 선택 | 전체 · 정상 · 점검 필요 · 확인 필요 |
결과 컬럼
| 영역 | 컬럼 · 표시 |
|---|---|
| 증감 대사 요약 | 원가 건수 · 자산 인식 건수 · 기초잔액 · 당기 자산화 · 당기 상각 · 기말잔액 · 증감 차이 · 예외 건수 |
| 계약원가 명세 | 원가번호 · 계약번호 · 고객 · 원가 유형 · 원가 내용 · 자산화 판정 · 기초잔액 · 당기 자산화 · 당기 상각 · 손상차손 · 기말잔액 · 상각기간 · 판정 |
| 유형별 증감표 | 원가 유형 · 건수 · 기초잔액 · 당기 자산화 · 당기 상각 · 손상차손 · 손상환입 · 기말잔액 |
| 자산화 판정 | 판정 구분 · 건수 · 금액 · 구성비 |
| 잔여 상각 스케줄 | 기간 · 예상 상각액 · 누계 · 잔여 장부금액 |
| 점검 예외 | 예외번호 · 계약번호 · 원가번호 · 예외 유형 · 내용 · 차이 · 중요도 |
SAP 표준 기능 매핑
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 그 데이터에 자산화·상각 관점의 조회·검증을 더해 확장합니다.
| 표준 T-code | 표준 기능 | 이 화면이 더한 것 |
|---|---|---|
VA03 | 판매오더 조회 | 원가를 계약 단위로 묶어 잔여 대가와 비교합니다 |
VA43 | 판매계약 조회 | 계약 종료 여부와 남은 잔액을 대조합니다 |
KO03 | 내부오더 조회 | 계약별 집계 투입원가를 자산 후보로 가져옵니다 |
KOB1 | 내부오더 개별항목 조회 | 투입원가 명세를 원가 유형으로 가릅니다 |
FBL5N | 고객 개별항목 조회 | 고객 단위로 계약을 묶어 봅니다 |
FAGLL03 | G/L 개별항목 조회 | 상각·손상 전표를 증감표와 대사합니다 |
IFRS 요구사항 매핑표
| 기준서 | 요구사항 | 이 화면의 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| IFRS 15 (K-IFRS 제1115호) | 계약체결 증분원가의 자산 인식 | 증분 여부·회수 예상에 따른 자산화 판정과 판정별 집계 | VBAK · COEP | 증분 여부 판단 근거는 화면에 담지 않습니다 |
| IFRS 15 (K-IFRS 제1115호) | 상각기간 1년 이하의 실무적 간편법 | 상각기간 1년 이하 건을 별도 판정 코드와 예외로 표시 | COEP · 계약 기간 | 간편법 적용 여부는 회사의 회계정책에 따릅니다 |
| IFRS 15 (K-IFRS 제1115호) | 계약이행원가의 자산 인식 요건 | 계약 직접 관련·자원 창출·회수 예상 판정과 유형별 증감 | COEP · ACDOCA | 자원 창출·증대 여부 판단은 사용자 몫입니다 |
| IFRS 15 (K-IFRS 제1115호) | 자산화한 원가의 상각과 손상 | 건별 상각·손상·환입 증감표와 잔여 상각 스케줄, 손상 징후 판정 | ACDOCA · VBAP | 회수예상액은 잔여 대가 − 잔여 원가로 산출합니다 |
참고 CDS 뷰
| 원천 테이블 | 주요 필드 | 쓰임 |
|---|---|---|
VBAK | VBELN · KUNNR · NETWR · WAERK | 계약 헤더와 잔여 대가 |
VBAP | VBELN · POSNR · NETWR | 계약 품목 금액 |
COEP | OBJNR · KSTAR · WTGBTR · GJAHR | 계약별 투입원가 명세 |
ACDOCA | RBUKRS · GJAHR · RACCT · HSL | 상각·손상 전표 |
KNA1 | KUNNR · NAME1 | 고객명 표기 |
define view entity ZC_ContCostItem
as select from I_SalesDocument as hd
inner join ZI_ContractCostLine as cl on cl.ContractNo = hd.SalesDocument
{
key cl.CostId as CostId,
hd.SalesDocument as ContractNo,
hd.SoldToParty as Kunnr,
cl.CostType as CostType,
cl.CostText as CostDesc,
cl.BeginAmount as BeginBalance,
cl.AddAmount as Addition,
cl.AmortAmount as Amortization,
cl.AmortMonths as AmortMonths,
hd.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개·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.contcost · 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 서비스가 제공하며, 검증용 샘플 데이터는 화면과 완전히 분리해 별도로 둡니다. 화면과 판정 로직은 그대로 씁니다.
검증 결과
화면 구성에 쓴 검증용 샘플 데이터는 계약 11건·원가 15건 기준으로 기초에서 기말까지의 증감이 원(KRW) 단위로 정확히 맞물리도록 구성했습니다.
| 검증 항목 | 결과 |
|---|---|
| 건별 기초 + 자산화 − 상각 − 손상 + 환입 = 기말(11건) | 통과(의도적 예외 제외 차이 0) |
| 유형별 증감표 = 명세 집계 · 증감표 자체 대사 | 통과(차이 0) |
| 자산화 판정 구성비 합계 100% · 건수 합계 = 전체 | 통과(차이 0) |
| 상각 스케줄 누계 = 기말잔액 · 최종 잔여 장부금액 = 0(12개 기간) | 통과(차이 0) |
| 즉시 비용·인식 불가 건의 기말잔액 = 0(4건) | 통과 |
| 확인 대상 건 안내 | 증감 불일치 1건 · 상각기간 미등록 1건 · 손상 징후 1건 · 종료 계약 잔액 1건 · 1년 이하 자산 인식 1건(의도적으로 구성한 케이스) |
| 조회 조건 전달 — 15건 → 2건 필터, 정렬·건수 옵션 동작 | 확인 |
| 표시 금지 검사 — 커스텀 프로그램ID·앱 식별자·출처 표현 검출 | 0건 |
| 화면 렌더링 — 실브라우저에서 조회 → 탭 이동 → 행 클릭 상세까지 실동작 후 캡처 | 6/6 |
조회 버튼 위치 · sap_horizon 테마 · Enter 키 조회 · 서비스 미연결 시 오류 안내 | 확인 |
계약·고객·원가·금액은 모두 검증용으로 구성한 가상 데이터입니다.
자주 묻는 질문
IFRS 15 는 이미 시행 중인데, 왜 지금 이 점검이 필요한가요?
IFRS 15 고객과의 계약에서 생기는 수익(K-IFRS 제1115호)은 이미 시행 중인 기준서입니다. 다만 계약원가는 계약이 새로 체결될 때마다 자산 인식 여부를 판정해야 하고, 자산으로 남은 뒤에는 매 보고기간 상각과 손상을 다시 봐야 하므로 시행 여부와 무관하게 상시 점검 대상입니다. 이 화면은 새 기준서를 도입하기 위한 것이 아니라, 시행 중인 요구사항을 기존 계약·원장 데이터로 다시 맞춰 보는 용도입니다.
화면의 "점검 필요" 표시는 회계처리 오류를 뜻하나요?
아닙니다. 이 화면은 자산 인식 결과와 증감을 집계·대사해 확인이 필요한 건을 가려내는 점검 도구이며, 최종 자산 인식·상각기간·손상 판단은 기준서 원문에 따라 회사와 감사인이 내립니다.
상각기간이 1년 이하면 무조건 즉시 비용인가요?
아닙니다. 상각기간이 1년 이하일 때 즉시 비용으로 처리할 수 있는 실무적 간편법이 있을 뿐 강제는 아닙니다. 화면은 해당 건을 별도 판정 코드와 점검 예외로 표시하므로, 회사가 그 간편법을 회계정책으로 채택했는지 확인한 뒤 판단하면 됩니다.
손상 징후는 어떤 기준으로 표시되나요?
기말 장부금액이 잔여 대가에서 잔여 원가를 뺀 금액을 넘으면 회수예상액을 초과한 것으로 보고 점검 대상으로 표시합니다. 실제 손상 인식 여부와 금액은 계약 조건과 향후 원가 추정을 다시 확인한 뒤 결정합니다.