SAP 수익성분석 조회 — 어느 제품이 어느 고객에게 얼마를 남겼나
영업조직·제품군·고객군·채널별로 매출에서 원가와 비용을 차감해 공헌이익과 영업이익을 보는 화면입니다.
회사 전체 이익이 났다고 해서 모든 거래가 이익인 것은 아닙니다. 남는 제품과 밑지는 제품이 섞여 있고, 합쳐 놓으면 그 사실이 가려집니다.
어느 제품군이 어느 고객군에게 얼마를 남기는지 알아야 가격과 판매 전략이 정해집니다. 표준 수익성분석 구조를 그대로 이어받아 여러 축으로 이익을 나눠 보도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면 2종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 수익성 세그먼트 — 영업조직(
salesOrg) · 제품군(productGroup) · 고객군(customerGroup) · 채널(channel) - 매출 — 총매출(
grossRevenue)과 할인·반품 차감 - 원가 — 매출원가와 변동비
- 기간 — 회계 기간(
period) - 회사코드 — 분석 단위(
bukrs)
| 항목 | 내용 |
|---|---|
| 대응 T-code | KE24 (실제 데이터 조회) |
| 업무 영역 | 관리회계(CO-PA) · 수익성 분석 |
| Namespace | zui5.copa |
| 셸 구조 | 조회조건 영역(우측 조회·초기화) + 수익성 분석 테이블 |
| 화면 수 | 조회 화면 1개 |
| 데이터 | 수익성 세그먼트 12건 |
| 성격 | 조회형(Read-Only) — 데이터 생성은 표준 CO-PA 가 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 2종 둘러보기
회사코드·기간·분석 축으로 조회하면 세그먼트별 이익이 나옵니다 → 공헌이익과 영업이익을 비교하고 → 이익률이 낮은 세그먼트를 찾아냅니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드와 기간을 고릅니다.
- 영업조직·제품군·고객군으로 분석 축을 정합니다.
- 조회조건 입력필드에서 값을 바꾸거나 Enter 를 누르면 즉시 조회됩니다.
- 왼쪽에서 오른쪽으로 읽으며 매출에서 이익까지의 과정을 따라갑니다.
- 공헌이익률이 낮은 세그먼트를 찾습니다. 변동비 대비 수익이 약한 곳입니다.
- 영업이익이 음수인 세그먼트는 판관비까지 감당하지 못하는 상태입니다.
- 결과는 CSV 다운로드로 내려받아 영업 전략 자료로 씁니다.
이익 산식
매출에서 단계별로 차감하며 두 이익을 구합니다.
순매출 = 총매출 − 할인 − 반품
공헌이익 = 순매출 − 변동비(매출원가 등)
영업이익 = 공헌이익 − 고정비(판관비 배부)
공헌이익률 = 공헌이익 ÷ 순매출 × 100
영업이익률 = 영업이익 ÷ 순매출 × 100
공헌이익 > 0, 영업이익 < 0 → 고정비는 못 메우나 변동비는 넘김
공헌이익을 따로 보는 이유
영업이익이 음수라고 해서 그 제품을 당장 접어야 하는 것은 아닙니다. 공헌이익이 양수면 변동비는 넘기고 고정비 일부를 메우고 있습니다. 그 제품을 없애면 고정비는 그대로 남아 다른 제품이 더 부담하게 됩니다. 두 이익을 함께 봐야 철수 판단이 정확해집니다.
수익성 분석 축 4종
| 축 | 예 | 답하는 질문 |
|---|---|---|
| 영업조직 | 국내영업 · 해외영업 등 | 조직별 실적 |
| 제품군 | 제품 카테고리 | 어느 제품이 남는가 |
| 고객군 | 대형 · 중소 · 온라인 등 | 어느 고객이 남는가 |
| 채널 | 직판 · 대리점 · 온라인 | 어느 경로가 효율적인가 |
축을 조합하면 "온라인 채널의 대형 고객에게 파는 스마트가전" 같은 단위까지 좁혀집니다.
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
회사코드 bukrs | 필수 | 분석 단위 |
기간 period | 필수 | 회계 기간 |
영업조직 salesOrg | 선택 | 국내영업 등 |
제품군 productGroup | 선택 | 제품 카테고리 |
고객군 customerGroup | 선택 | 고객 분류 |
채널 channel | 선택 | 판매 경로 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
영업조직 salesOrg · salesOrgText | 조직 코드와 명칭 |
제품군 productGroup · productGroupText | 제품 분류 |
고객군 customerGroup · customerGroupText | 고객 분류 |
채널 channel | 판매 경로 |
기간 period | 회계 기간 |
총매출 grossRevenue | 할인 전 매출 |
| 순매출 | 총매출 − 할인 − 반품 |
| 매출원가 · 변동비 | 변동 원가 |
| 공헌이익 · 공헌이익률 | 순매출 − 변동비 |
| 판관비 | 고정비 배부 |
| 영업이익 · 영업이익률 | 공헌이익 − 고정비. 음수면 경고 색 |
SAP 표준 기능 매핑
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
KE24 | CO-PA 실제 데이터 조회 | 이익률과 단계별 이익을 열로 정리 |
KE30 | CO-PA 리포트 | 축 조합 분석 |
CE1xxxx · CE3xxxx | CO-PA 실제·집계 데이터 | 조회 원천 |
ACDOCA | 유니버설 저널 (S/4HANA) | 계정 기반 CO-PA |
| 특성·값필드 설정 | 분석 축과 금액 항목 | 화면 구성 기준 |
도입 시 확인이 필요한 부분
CO-PA 는 특성과 값필드 설정에 따라 구조가 완전히 달라집니다. 어떤 축으로 분석할지, 어떤 금액 항목을 둘지가 구축 단계에서 정해지므로 화면도 그 설정을 따라야 합니다. 또 고정비 배부 기준이 자의적이면 세그먼트별 영업이익의 신뢰도가 떨어집니다.
참고 CDS 뷰
@AbapCatalog.sqlViewName: 'ZCCOPA'
@EndUserText.label: '수익성 분석 (Z)'
define view Z_C_PROFITABILITY_ANALYSIS
as select from acdoca as Line
{
key Line.rbukrs as Bukrs,
key Line.gjahr,
key Line.poper as Period,
key Line.vkorg as SalesOrg,
key Line.matkl as ProductGroup,
key Line.kdgrp as CustomerGroup,
key Line.vtweg as Channel,
// 값필드는 계정 그룹으로 구분해 집계
sum( case when Line.racct like '4%' then Line.hsl else 0 end ) as Revenue,
sum( case when Line.racct like '5%' then Line.hsl else 0 end ) as Cogs
// 공헌이익 = 순매출 − 변동비, 영업이익 = 공헌이익 − 고정비
}
group by Line.rbukrs, Line.gjahr, Line.poper, Line.vkorg,
Line.matkl, Line.kdgrp, Line.vtweg
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경 설정과 릴리즈에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 수익성 테이블 |
| 조회조건 | sap.m.Select · sap.m.DatePicker · sap.m.Input — 우측 끝에 조회·초기화 |
| 이벤트 | 모든 버튼이 onPAI 단일 진입점, fcCode 로 분기 |
| 수익성 테이블 | sap.m.Table — 매출→이익 순서로 열 배치 |
| 이익 표시 | sap.m.ObjectNumber — 음수 경고 색 |
| 이익률 | sap.m.ObjectStatus — 구간별 색 |
손익 계산 순서대로 열을 배치한 이유
총매출에서 할인을 빼고 원가를 빼면 공헌이익이, 거기서 판관비를 빼면 영업이익이 나옵니다. 이 순서대로 열을 두면 표를 읽는 것이 곧 손익 계산이 됩니다. 순서가 뒤섞이면 어느 단계에서 이익이 사라졌는지 찾기 어렵습니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.copa) · ko 로케일 |
view/Main.view.xml | 조회조건과 수익성 테이블 |
controller/Main.controller.js | 조회 · 이익 계산 · 이익률 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise) |
js/formatter.js | 금액 · 비율 · 부호 색 포맷터 |
localdata/copa.json | 수익성 세그먼트 12건 |
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 순매출 = 총매출 − 할인 − 반품 (전 건) | 통과 |
| 공헌이익 = 순매출 − 변동비 | 통과 |
| 영업이익 = 공헌이익 − 고정비 | 통과 |
| 이익률 = 이익 ÷ 순매출 × 100 | 통과 |
| 영업조직·제품군·고객군 코드가 있으면 명칭도 존재 | 통과 |
| XML · JSON 전체 파싱 | 오류 0건 |
| 화면 렌더링 — 실브라우저 조회 후 캡처 | 2/2 |
| 테마 런타임 확인 | sap_horizon |
자주 묻는 질문
영업이익이 음수인 제품은 없애야 하나요?
공헌이익이 양수면 신중해야 합니다. 그 제품이 고정비 일부를 메우고 있어, 없애면 다른 제품이 그 부담을 떠안습니다. 공헌이익까지 음수일 때 철수를 검토합니다.
고정비 배부 기준은 어떻게 정하나요?
매출액 비율이 가장 흔하지만 자의적입니다. 실제 자원 사용에 가깝게 배부할수록 좋으나 복잡해지므로 균형이 필요합니다. 기준이 바뀌면 세그먼트별 이익도 달라집니다.
CO-PA 는 회계 이익과 다른가요?
다를 수 있습니다. 고정비 배부 기준이나 인식 시점이 달라 총액은 맞아도 세그먼트별 배분이 다릅니다. 경영 판단용이므로 회계 손익과 완전히 같을 필요는 없습니다.
SAP 표준 기능과 어떻게 이어지나요?
수익성 데이터 생성과 조회는 표준 CO-PA 가 담당합니다. 이 화면은 그 데이터를 손익 계산 순서로 배열하고 이익률을 더해, 어느 세그먼트가 약한지 바로 보이게 하는 확장입니다.