SAP 공헌이익·손익분기 분석 점검 — 매출이 늘어도 손익분기를 넘겼는지부터 본다
제품군별 매출이 늘어도 손익분기 매출액을 넘기지 못하면 영업이익은 그대로입니다. 공헌이익 구조를 먼저 세우고 손익분기 매출액과 안전마진율로 갈라봤습니다
공헌이익(Contribution Margin)은 매출에서 매출 규모에 비례하는 변동비만 뺀 값입니다. 여기서 고정비를 더 차감하면 영업이익이, 고정비를 공헌이익률로 나누면 손익분기 매출액이 나옵니다. 제품군별 매출이 늘었다고 해서 반드시 영업이익이 느는 것은 아니며, 변동비율과 고정비 배분에 따라 같은 매출 증가도 손익분기 매출액을 넘기지 못하는 경우가 있습니다. 이 구조를 조회 화면으로 세워 손익분기 매출액과 안전마진율(매출이 손익분기 매출액을 얼마나 웃도는지)을 함께 계산했습니다.
제품군·기간별로 매출과 변동비를 집계해 공헌이익과 공헌이익률을 산출하고, 고정비 배분액을 반영한 영업이익과 손익분기 매출액·안전마진율을 계산합니다. 영업이익이 음수이면 “점검필요”, 영업이익은 양수이지만 안전마진율이 10% 미만이면 “확인필요”로 표시해 매출 변동에 취약한 세그먼트를 먼저 보게 했습니다. 기간을 넘나드는 손익분기 추이와 세그먼트별 변동비·고정비 구성 상세도 함께 확인할 수 있습니다. 실제 구동 화면 3종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 세그먼트 손익 조회 — 수익성분석 보고서 실행(
KE30)의 매출·원가·이익 조회 구조를 그대로 이어받습니다
| 항목 | 내용 |
|---|---|
| 업무 영역 | 관리회계(CO) · 수익성 분석 |
| 관련 기준서 | -(대상 영역: 수익성 분석 — 공헌이익·손익분기 구조) |
| Namespace | zui5.contmargin |
| 셸 구조 | 조회조건 영역(우측 조회) + KPI 4종 + 탭 2개, 행 클릭 상세 Dialog |
| 화면 수 | 조회 화면 1개(탭 2개) + 상세 다이얼로그 |
| SAP 표준 T-code | KE30 |
| 데이터 연동 방식 | OData V2 — 화면 블록마다 엔티티셋에 직접 바인딩 |
| 성격 | 조회·점검형 — 최종 판단은 회사가 수행 |
| UI 테마 | sap_horizon 단일 적용 |
| 요약 | 내용 |
|---|---|
| 무엇을 보나 | 제품군·기간별 매출·변동비·공헌이익·공헌이익률·고정비 배분·영업이익·손익분기 매출액·안전마진율 |
| 어떤 기준으로 | 영업이익 부호와 안전마진율(매출과 손익분기 매출액의 괴리율) |
| 무엇을 가려내나 | 손익분기 매출액 미달(점검필요), 안전마진율 10% 미만(확인필요) |
| 추이 확인 | 기간별 전사 매출·공헌이익·손익분기 매출액 합계를 별도 탭으로 확인 |
실제 화면 3종 둘러보기
기본 조건으로 조회하면 제품군별 공헌이익 표가 뜹니다 → 손익분기 추이 탭에서 기간별 합계를 보고 → 행을 클릭해 변동비·고정비 구성 상세를 봅니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
사용 방법
- 화면에 들어오면 서비스 정의가 로드되는 즉시 기본 조건(당해연도 001~009기)으로 자동 조회가 1회 실행됩니다.
- 조회조건 영역에서 회계연도 · 기간(부터~까지)(필수)를 입력하고 제품군(선택)을 고릅니다. “전체”로 두면 모든 제품군을 대상으로 합니다.
- 조회 버튼은 조회조건 입력 필드 줄의 가장 오른쪽에 있습니다. 입력 필드에서 Enter 키를 눌러도 같은 조회가 실행됩니다. 초기화 버튼은 같은 줄 왼쪽에 있습니다.
- KPI 4종(조회 세그먼트 · 정상 아님 건수 · 평균 공헌이익률 · 영업이익 합계)으로 전체 상태를 먼저 봅니다.
- 탭을 옮겨 ① 제품군별 공헌이익 → ② 손익분기 추이 순으로 확인합니다.
- ① 탭에서 행을 클릭하면 변동비·고정비 구성 내역을 담은 상세 다이얼로그가 열립니다.
- ① 탭 오른쪽 위 CSV 내려받기(UTF-8 BOM)로 현재 조회 결과를 저장합니다.
공헌이익·손익분기 판정 규칙
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 영업이익 < 0 (매출이 손익분기 매출액에 못 미침) | 점검필요 | 고정비 배분 기준과 변동비율 구성을 다시 확인하고, 손익분기 매출액 도달 계획을 점검 |
| 영업이익 ≥ 0 이지만 안전마진율 10% 미만 | 확인필요 | 매출 변동에 취약한 구간이므로 다음 기간 추이를 함께 확인 |
| 안전마진율 10% 이상 | 정상 | 별도 조치 불필요 |
고정비 배분 기준과 변동비율 구성은 회사 원가 정책에 따라 달라질 수 있는 가정입니다.
공헌이익·손익분기 산출 절차
| 단계 | 내용 |
|---|---|
| 1단계 | 제품군·기간별 매출·변동비 집계 |
| 2단계 | 공헌이익 = 매출 − 변동비, 공헌이익률 = 공헌이익 ÷ 매출 × 100 |
| 3단계 | 고정비를 제품군·기간 기준으로 배분 |
| 4단계 | 영업이익 = 공헌이익 − 고정비 배분액 |
| 5단계 | 손익분기 매출액 = 고정비 배분액 ÷ 공헌이익률, 안전마진율 = (매출 − 손익분기 매출액) ÷ 매출 × 100 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 회계연도 | 필수 | 4자리 연도 |
| 기간(부터~까지) | 필수 | 3자리 기간(001~012) |
| 제품군 | 선택(기본 전체) | 미선택 시 전체 제품군 대상 |
결과 컬럼
| 컬럼 | 설명 |
|---|---|
| 제품군 / 제품군명 / 연도 / 기간 | 세그먼트 식별 정보 |
| 매출 / 변동비 / 공헌이익 / 공헌이익률 | 공헌이익 손익 구조 |
| 고정비 배분 / 영업이익 | 고정비 반영 후 손익 |
| 손익분기 매출액 / 안전마진율 | 영업이익이 0이 되는 매출 수준과 현재 매출의 여유분 |
| 점검결과 | 정상 / 확인필요 / 점검필요 |
SAP 표준 기능 매핑
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 그 데이터에 손익분기·안전마진 관점을 더해 확장합니다.
| 표준 T-code | 표준 기능 | 이 화면이 더한 것 |
|---|---|---|
KE30 | 수익성분석(CO-PA) 보고서 실행 | 세그먼트별 매출·원가 조회 구조를 이어받아 손익분기 매출액·안전마진율 산출과 판정을 더합니다 |
분석 지표 정의표
| 지표 | 정의(산출식) | 대응 기능 | 원천 데이터 |
|---|---|---|---|
| 공헌이익률 | (매출−변동비)÷매출×100 | 제품군별 공헌이익 표 | ACDOCA 매출·변동비 계정 |
| 손익분기 매출액 | 고정비÷공헌이익률 | 제품군별 공헌이익 표, 손익분기 추이 탭 | ACDOCA 고정비 계정, CSKS 원가센터 |
| 안전마진율 | (매출−손익분기매출액)÷매출×100 | 제품군별 공헌이익 표 | 상동 |
참고 CDS 뷰
| 원천 테이블 | 주요 필드 | 쓰임 |
|---|---|---|
ACDOCA | RBUKRS · GJAHR · POPER · PRCTR · HSL | 유니버설 저널 — 매출·변동비·고정비 계정 실적 |
CSKS / CSKT | KOSTL · KTEXT | 원가센터 마스터·명칭 — 고정비 배분 축 |
CSKB | KSTAR · KTEXT | 원가요소 마스터 — 변동비/고정비 구성요소 분류 |
define view I_ContributionMarginAnalysis
as select from acdoca as Doc
association [1..1] to csks as _CostCenter on _CostCenter.kostl = Doc.kostl
{
key Doc.rbukrs as CompanyCode,
key Doc.gjahr as Gjahr,
key Doc.poper as Poper,
key Doc.prctr as ProdGroup,
sum(Doc.hsl) as Amount,
_CostCenter
}
group by Doc.rbukrs, Doc.gjahr, Doc.poper, Doc.prctr
위 CDS 스케치는 이 화면의 원천 구조를 설명하기 위해 새로 작성한 예시입니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 · 구성 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 패널 · KPI 4종 · IconTabBar 2개 탭 |
| 데이터 연동 | manifest.json dataSources.mainService(OData V2, 상대 경로)로 기본 모델을 만들고 defaultCountMode:"Inline" · useBatch:false 로 구성합니다. 화면 블록마다 해당 엔티티셋에 직접 바인딩합니다 |
| 조회조건 | sap.ui.model.Filter 로 조립해 바인딩에 적용합니다. 전체를 고른 조건은 필터를 만들지 않습니다. 정렬은 sap.ui.model.Sorter |
| 제품군별 공헌이익 | sap.ui.table.Table — cellClick 으로 상세를 엽니다 |
| 손익분기 추이 · 상세 구성 내역 | sap.m.List / sap.m.Table |
| 예외 메시지 | 메타데이터 실패·요청 실패·빈 결과를 구분해 안내하는 전용 처리기 |
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon, OData 서비스에 연결 |
Component.js | 모델 초기화, 예외 메시지 처리기 연결 |
manifest.json | 앱 디스크립터 — zui5.contmargin · ko 로케일, OData 서비스와 모델 선언 |
view/Main.view.xml | 조회조건 · KPI · 탭 2개 |
view/DetailDialog.fragment.xml | 변동비·고정비 구성 상세 다이얼로그 |
controller/Main.controller.js | 조회조건 조립 · 바인딩 · KPI · 다이얼로그 · CSV |
controller/BaseController.js | CSV 다운로드 공통 처리 |
model/formatter.js · model/ErrorHandler.js | 표시 서식·판정 상태 · 예외 메시지 처리 |
i18n/i18n_ko.properties | 화면 문구 |
검증 결과
검증용 샘플 데이터(가상 5개 제품군 · 21개 기간 · 세그먼트 105건 · 원가요소 630건)를 기준으로 대사식을 전수 검증했습니다.
| 검증 항목 | 결과 |
|---|---|
| 매출 − 변동비 = 공헌이익 (105건) | 통과(차이 0) |
| 공헌이익 − 고정비 배분 = 영업이익 (105건) | 통과(차이 0) |
| 변동비/고정비 원가요소 합계 = 세그먼트 변동비/고정비 (105건 × 2) | 통과(차이 0) |
| 세그먼트 합계(매출·공헌이익) = 손익분기 추이 전사 합계 (21개 기간) | 통과(차이 0) |
| 점검 기능 확인용 의도적 예외(손익분기 미달로 구성한 세그먼트) | 21건 — 모두 “점검필요”로 판정, 예외 외 차이 0건 |
| 화면 KPI · 손익분기 추이 합계 = 검증 스크립트 결과 | 일치 |
| 조회조건 전달 — 회계연도·기간·제품군 필터 · 정렬 · 총건수 | 확인 |
| 표시 금지 검사 — 커스텀 프로그램ID·앱 식별자·출처 표현 | 0건 |
화면 렌더링 — 조회 버튼 위치 · sap_horizon 테마 · Enter 키 조회 · 서비스 미연결 시 안내 메시지 | 확인 |
모든 데이터는 검증용으로 구성한 가상 데이터입니다. 손익분기 판단을 포함한 최종 의사결정은 회사가 수행합니다.
자주 묻는 질문
공헌이익과 매출총이익(매출총손익)은 어떻게 다른가요?
매출총이익은 매출에서 매출원가(변동비와 고정 제조간접비를 포함)를 차감한 값인 반면, 공헌이익은 원가를 변동비와 고정비로 다시 구분해 매출에서 변동비만 차감한 값입니다. 이 화면은 손익분기·안전마진 분석을 위해 공헌이익 구조를 사용합니다.
손익분기 매출액에 못 미치는 세그먼트가 있으면 바로 철수해야 하나요?
그렇지 않습니다. 이 화면은 어느 세그먼트가 손익분기 매출액에 못 미치는지, 안전마진이 얼마나 되는지를 조회·점검하도록 돕는 도구입니다. 철수나 가격 조정 같은 최종 의사결정은 원가 구조와 성장 단계를 함께 고려해 회사가 판단합니다.
고정비는 어떤 기준으로 제품군에 배분하나요?
이 화면은 원가센터 단위로 집계된 고정비를 제품군·기간 기준으로 배분한 값을 그대로 사용합니다. 배분 기준(매출액 비례, 표준공수 비례 등)은 회사의 원가 배분 정책에 따라 달라질 수 있는 가정입니다.
데이터는 어디서 가져오나요?
화면은 OData 서비스 모델에 바인딩되어 조회조건에 맞춰 데이터를 불러옵니다. 이 글의 화면은 검증용 샘플 데이터를 기준으로 캡처했습니다.