SAP 수행의무 진행률 측정 점검 — IFRS 15, 진행률에 넣지 말아야 할 원가부터 걸러낸다
원가 기준 투입법 진행률에 설치 전 자재나 낭비 원가가 섞이면 수익이 앞당겨집니다. 결산 전에 수행의무별로 걸러 두는 방법을 정리했습니다
IFRS 15 고객과의 계약에서 생기는 수익(K-IFRS 제1115호)은 기간에 걸쳐 이행하는 수행의무에 대해 완료까지의 진행률을 측정해 수익을 인식하도록 합니다. 원가 기준 투입법(input method)을 쓴다면, 고객에게 통제를 이전하는 정도를 나타내지 못하는 원가 — 아직 설치하지 않은 자재, 계약 가격에 반영되지 않은 비정상적인 낭비 원가 — 는 진행률 계산에서 빼야 합니다.
이런 원가가 진행률에 그대로 섞이면 수익이 이행 정도보다 앞서 인식됩니다. 수행의무별로 측정 누적원가 · 진행률 · 누적수익을 다시 산출하고, 그 결과를 원장에 기표된 누적수익과 대사하는 과정을 OpenUI5 화면으로 확장했습니다. 표준 결과분석이 진행률·수익 산출을 실행하고, 이 화면은 산출 근거와 원장 반영을 한 번에 보는 점검 관점을 더합니다. 실제 구동 화면 6종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 계약 조회 — 판매 계약 조회(
VA03)의 계약번호·거래가격을 그대로 이어받습니다 - 프로젝트 구조 — 프로젝트 빌더(
CJ20N)의 WBS 요소로 수행의무를 연결합니다 - 원가 집계 — 프로젝트 실제원가 개별항목(
CJI3)으로 누적발생원가와 제외 원가를 확인합니다 - 진행률·수익 산출 — 결과분석(
KKA2·KKAJ)이 표준 실행을 담당하고, 이 화면은 그 결과를 다시 산출해 대사합니다 - 원장 대사 — G/L 계정 개별항목(
FAGLL03)으로 원장 누적수익을 확인합니다
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 수익 결산 |
| 관련 기준서 | IFRS 15 고객과의 계약에서 생기는 수익(K-IFRS 제1115호) — 기간에 걸쳐 이행하는 수행의무의 진행률 측정(투입법) |
| Namespace | zui5.progrev |
| 셸 구조 | 조회조건 영역(우측 조회) + 진행률·누적수익 대사 요약 KPI 12종 + 탭 5개, 행 클릭 상세 Dialog |
| 화면 수 | 조회 화면 1개(탭 5개) + 상세 다이얼로그 |
| SAP 표준 T-code | VA03 · CJ20N · CJI3 · KKA2 · KKAJ · FAGLL03 |
| 데이터 연동 방식 | OData V2 — 화면 블록마다 엔티티셋에 직접 바인딩 |
| 성격 | 조회·대사·점검형 — 실제 회계처리와 최종 판단은 회사가 수행 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 6종 둘러보기
기본 조건으로 조회하면 대사 요약과 수행의무별 명세가 뜹니다 → 사업 유형별·진행률 제외 원가·판정별 탭으로 합계를 확인하고 → 예외 목록에서 점검 대상을 추린 뒤 → 행을 클릭해 진행률 산출 단계를 봅니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
사용 방법
- 회사코드·회계연도(필수)와 사업 유형·계약번호·판정(선택)을 입력합니다. 선택 조건을 비워 두면 전체가 조회 대상입니다.
- 조회 버튼은 조회조건 입력 필드 줄의 가장 오른쪽에 있습니다. 입력 필드에서 Enter 키를 눌러도 같은 조회가 실행됩니다. 화면을 열면 기본 조건으로 한 번 자동 조회됩니다.
- 진행률·누적수익 대사 요약에서 산출 누적수익 · 원장 누적수익 · 차이 · 차이 발생 건수 · 확인 필요 건수를 먼저 확인합니다.
- 탭을 옮겨 수행의무별 명세 → 사업 유형별 → 진행률 제외 원가 → 판정별 → 예외 목록 순으로 봅니다.
- 명세에서 행을 클릭하면 진행률 산출 단계 7단계가 다이얼로그로 열립니다.
- 명세·예외 탭의 CSV 내려받기(UTF-8 BOM)로 현재 조회 결과를 저장합니다.
진행률 제외 원가·원장 차이 판정 기준
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 원장 누적수익 − 산출 누적수익 ≠ 0 | 점검 필요 | 결과분석 기준(진행률, 총예정원가 버전)을 원장과 대조 |
| 미설치 자재 원가 > 0 | 확인 필요 | 진행률 분자·분모 제외와 원가 상당액 수익 반영 근거 확인 |
| 비정상 원가 > 0 | 확인 필요 | 계약 가격에 반영되지 않은 낭비 원가인지, 진행률 분자에서 뺐는지 확인 |
| |총예정원가 변경률| > 10% | 확인 필요 | 추정 변경 근거와 누적효과(당기 반영) 처리 확인 |
| 총예정원가 > 거래가격 | 확인 필요 | 손실부담계약 검토(IAS 37 충당부채, 우발부채와 우발자산 — K-IFRS 제1037호) 여부 확인 |
| 위 조건 없음 | 정상 | 조치 없음 |
한 수행의무에 여러 조건이 겹치면 판정은 점검 필요 > 확인 필요 > 정상 순으로 하나만 표시하고, 조건마다 예외 목록에 한 건씩 남깁니다. 10% 기준은 예시 기준이며 회사 정책에 맞게 바꿔 씁니다.
진행률에서 누적수익·원장 대사까지 산출 절차
| 단계 | 내용 |
|---|---|
| 1단계 | 측정 누적원가 = 누적발생원가 − 미설치 자재 − 비정상 원가 |
| 2단계 | 진행률 = 측정 누적원가 ÷ (총예정원가 − 미설치 자재) — 100% 한도 |
| 3단계 | 산출 누적수익 = 진행률 × (거래가격 − 미설치 자재) + 미설치 자재(원가 상당액) |
| 4단계 | 당기 수익 = 산출 누적수익 − 전기말 누적수익 |
| 5단계 | 원장 차이 = 원장 누적수익 − 산출 누적수익 |
| 6단계 | 명세 합계 = 사업 유형별 합계 = 판정별 합계 = 대사 요약을 전수 대사 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 회사코드 | 필수 | 단일 값 |
| 회계연도 | 필수 | 단일 값 |
| 사업 유형 | 선택 | 건설공사 · 시스템 구축 · 설비 제작 — 전체면 조건 제외 |
| 계약번호 | 선택 | 정확히 일치 |
| 판정 | 선택 | 정상 · 점검 필요 · 확인 필요 — 전체면 조건 제외 |
결과 컬럼
| 컬럼 | 설명 |
|---|---|
| 수행의무 · 수행의무명 · 사업 유형 | 기간에 걸쳐 이행하는 수행의무 식별 |
| 거래가격 | 수행의무에 배분된 거래가격 |
| 총예정원가 | 당기말 추정 총원가(비정상 원가 제외) |
| 누적발생원가 | 당기말까지 집계된 원가 |
| 제외 원가 | 진행률에서 뺀 미설치 자재 + 비정상 원가 |
| 진행률 | 측정 누적원가 ÷ (총예정원가 − 미설치 자재) |
| 산출 누적수익 · 당기 수익 | 진행률 기준 누적수익과 당기분 |
| 원장 누적수익 · 차이 | 원장에 기표된 누적수익과 산출값의 차이 |
| 판정 | 정상 · 점검 필요 · 확인 필요 |
SAP 표준 기능 매핑
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 그 데이터에 진행률 측정 관점의 조회·점검을 더해 확장합니다.
| 표준 T-code | 표준 기능 | 이 화면이 더한 것 |
|---|---|---|
VA03 | 판매 계약 조회 | 계약번호·거래가격을 수행의무 단위로 가져옵니다 |
CJ20N | 프로젝트 빌더 | WBS 요소로 수행의무와 원가 집계 단위를 연결합니다 |
CJI3 | 프로젝트 실제원가 개별항목 | 누적발생원가를 미설치 자재·비정상 원가와 나눠 봅니다 |
KKA2 · KKAJ | 결과분석(개별·일괄) | 산출된 진행률·수익을 다시 계산해 대사합니다 |
FAGLL03 | G/L 계정 개별항목 | 원장 누적수익을 산출 누적수익과 대사합니다 |
IFRS 요구사항 매핑표
| 기준서 | 요구사항 | 이 화면의 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| IFRS 15 (K-IFRS 제1115호) | 기간에 걸쳐 이행하는 수행의무의 진행률 측정 | 진행률 · 산출 누적수익 · 당기 수익 | ACDOCA · VBAP · PRPS | 수행의무별 단일 측정 방법 전제 |
| IFRS 15 (K-IFRS 제1115호) | 투입법 — 통제 이전을 나타내지 못하는 투입물의 영향 제외 | 미설치 자재·비정상 원가 제외, 진행률 제외 원가 탭 | ACDOCA | 제외 대상 분류 기준은 회사가 정의 |
| IFRS 15 (K-IFRS 제1115호) | 미설치 자재 — 원가 상당액만 수익 인식 | 산출 누적수익의 원가 상당액 가산 | ACDOCA | 적용 조건 충족 여부는 회사 판단 |
| IFRS 15 (K-IFRS 제1115호) | 진행률 재측정 — 회계추정의 변경 | 총예정원가 변경률 · 추정 변경 예외 | 계획 원가 | 누적효과는 당기 수익에 포함 |
| IAS 37 (K-IFRS 제1037호) | 손실부담계약 | 손실 예상 계약 표시(확인 필요) | VBAP · 계획 원가 | 충당부채 측정은 화면 범위 밖 |
참고 CDS 뷰
| 원천 테이블 | 주요 필드 | 쓰임 |
|---|---|---|
VBAK / VBAP | VBELN · NETWR | 계약 헤더·품목 — 계약번호, 거래가격 |
PROJ / PRPS | PSPID · POSID | 프로젝트·WBS 요소 — 수행의무 연결 |
ACDOCA | RBUKRS · GJAHR · RACCT · PS_POSID · HSL | 누적발생원가 · 제외 원가 · 원장 누적수익 |
ACDOCP | RBUKRS · RACCT · HSL | 계획 원가 — 총예정원가 |
define view entity ZI_ProgRevPob
as select from acdoca as a
inner join prps as w on w.posid = a.ps_posid
{
key a.rbukrs as Bukrs,
key a.gjahr as Gjahr,
key w.posid as WbsElement,
sum( case when a.racct between '0050000000' and '0059999999'
then a.hsl else 0 end ) as CumCostIncurred,
sum( case when a.racct between '0040000000' and '0049999999'
then -a.hsl else 0 end ) as PostedCumRevenue
}
group by a.rbukrs, a.gjahr, w.posid
계정 범위는 가상 계정체계 예시입니다. 미설치 자재·비정상 원가는 원가요소 그룹으로 구분한다고 가정했으며, 실제 구분 기준은 회사마다 확인이 필요합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 · 구성 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 패널 · 대사 요약 KPI · IconTabBar 5개 탭 |
| 데이터 연동 | manifest.json dataSources.mainService(OData V2, 상대 경로)로 기본 모델을 만들고 defaultCountMode:"Inline" · useBatch:false 로 구성합니다. 화면 블록마다 해당 엔티티셋에 직접 바인딩하고, 대사 요약은 회사코드·회계연도 키로 단건 조회합니다 |
| 조회조건 | sap.ui.model.Filter 로 조립해 바인딩에 적용합니다. 전체를 고른 조건은 필터를 만들지 않습니다. 정렬은 Sorter, 총건수는 인라인 카운트로 받습니다 |
| 명세·예외 표 | sap.ui.table.Table — 컬럼이 많은 명세, 행 클릭(cellClick)으로 상세 다이얼로그 |
| 집계 표 | sap.m.Table — 사업 유형별·제외 원가·판정별 소량 집계 |
| 예외 메시지 | 메타데이터 실패·요청 실패·빈 결과를 구분해 안내하는 전용 처리기 |
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon, OData 서비스에 연결 |
Component.js | 모델 초기화, 예외 메시지 처리기 연결 |
manifest.json | 앱 디스크립터 — zui5.progrev · ko 로케일, OData 서비스와 모델 선언 |
view/Main.view.xml | 조회조건 · 대사 요약 · 5개 탭 |
view/DetailDialog.fragment.xml | 진행률 산출 단계 상세 다이얼로그 |
controller/Main.controller.js | 조회조건 조립 · 바인딩 · 다이얼로그 · CSV |
controller/BaseController.js | CSV 다운로드 공통 처리 |
model/formatter.js · model/ErrorHandler.js | 표시 서식 · 예외 메시지 처리 |
i18n/i18n_ko.properties | 화면 문구 |
검증 결과
검증용 샘플 데이터(수행의무 26건, 회사코드 2개)를 기준으로 대사식을 전수 검증했습니다. 점검 화면이라 원장 누적수익 차이 4건과 확인 필요 8건을 의도적으로 넣었고, 대사식 차이와 분리해 기록했습니다.
| 검증 항목 | 결과 |
|---|---|
| 측정 누적원가 = 누적발생원가 − 미설치 자재 − 비정상 원가 (26건) | 통과(차이 0) |
| 진행률 = 측정 누적원가 ÷ (총예정원가 − 미설치 자재), ≤100% (26건) | 통과(차이 0) |
| 산출 누적수익 = 진행률 × (거래가격 − 미설치 자재) + 미설치 자재 (26건) | 통과(차이 0) |
| 당기 수익 = 산출 누적수익 − 전기말 누적수익 (26건) | 통과(차이 0) |
| 원장 차이 = 원장 누적수익 − 산출 누적수익 (26건) | 통과(차이 0) |
| 집계 대사 (명세 합계 = 사업유형별 합계 = 판정별 합계 = 대사 요약, 누적발생원가 − 제외 원가 = 측정 누적원가) (58건) | 통과(차이 0) |
| 판정 규칙 재현 (26건) | 통과(차이 0) |
| 조회 조건 전달 — 판정 필터 · 금액 내림차순 정렬 · 상위 건수 · 총건수 표시 | 확인 |
| 화면 요약 합계 = 검증 스크립트 합계(산출 누적수익 42,800,020,000) | 일치 |
| 표시 금지 검사 — 커스텀 프로그램ID·앱 식별자·출처 표현 | 0건 |
화면 렌더링 — 조회 버튼 위치 · sap_horizon 테마 · Enter 키 조회 · 서비스 미연결 시 안내 메시지 | 확인 |
모든 데이터는 검증용으로 구성한 가상 데이터입니다.
자주 묻는 질문
어떤 수행의무에 적용하나요?
IFRS 15 고객과의 계약에서 생기는 수익(K-IFRS 제1115호)을 적용하는 회사가 기간에 걸쳐 이행하는 수행의무에 원가 기준 투입법으로 진행률을 측정할 때 씁니다. 특정 시점에 이행하는 수행의무나 산출법을 쓰는 수행의무는 대상이 아닙니다.
화면의 판정이 곧 회계처리 결론인가요?
아닙니다. 이 화면은 진행률 산출과 원장 반영을 대사하는 점검 도구입니다. 제외 원가 분류, 추정 변경, 손실부담계약 해당 여부의 최종 판단은 회사와 감사인이 합니다.
미설치 자재는 왜 진행률 분자와 분모에서 모두 빼나요?
설치 전 자재 원가를 진행률에 넣으면 진행률이 실제 이행 정도보다 높게 계산될 수 있습니다. 그래서 진행률에서는 빼고, 조건을 충족하는 경우 그 원가 상당액만 수익으로 더합니다. 조건 충족 여부는 확인 필요로 표시합니다.
원장 차이가 나면 무엇부터 보나요?
결과분석에 쓴 총예정원가 버전, 진행률 제외 원가 반영 여부, 수익 기표 시점을 먼저 대조합니다. 화면은 차이를 점검 필요로만 표시하며 원인을 단정하지 않습니다.