솔루션 홈
수익성 분석

SAP 고객별 공헌이익 점검 — 매출은 있는데 남는 게 없는 거래를 먼저 찾는다

고객별 매출과 변동비, 배분 고정비를 단계별로 대사해 공헌이익률이 낮거나 역마진인 거래를 결산 전에 걸러 둡니다

같은 매출이라도 고객마다 남는 돈은 다릅니다. 변동매출원가와 변동판매비를 뺀 공헌이익이 충분해야 고정비를 감당하고도 영업이익이 남는데, 할인이나 물량 조건이 쌓이다 보면 매출은 잡히는데 실제로는 남는 게 거의 없거나 오히려 마이너스인 거래가 섞이기 마련입니다. 결산 시점에 전사 손익만 보면 이런 개별 거래는 묻혀서 잘 드러나지 않습니다.

수익성분석 데이터를 그대로 이어받아 고객·기간 단위로 매출 → 공헌이익(1) → 공헌이익(2) → 영업이익을 단계별로 산출하고, 공헌이익률이 임계치 미만이거나 역마진인 거래를 OpenUI5 화면으로 확장해 걸러냈습니다. 실제 구동 화면 3종을 함께 공개합니다.

SAP 표준 기능을 그대로 이어받은 부분

  • 수익성 집계 — 수익성분석(CO-PA) 세그먼트 데이터의 매출·원가 구조를 그대로 사용
  • 청구 — 청구 문서(VBRP)의 순매출 금액을 그대로 사용
  • 표준 화면 — 수익성 보고서(KE30) · 명세 라인 조회(KE24) · 청구 조회(VF03)
항목내용
업무 영역관리회계(CO) · 수익성 분석
관련 기준서-
Namespacezui5.custprofit
셸 구조조회조건 영역(우측 조회) + 대사 요약 + 고객별 공헌이익 명세, 상세 Dialog
화면 수조회 화면 1개 + 상세 다이얼로그
SAP 표준 T-codeKE30 · KE24 · VF03
데이터 연동 방식OData V2 — 화면 블록마다 엔티티셋에 직접 바인딩
성격조회·대사·점검형 — 가격·배분 기준 변경은 화면 밖 프로세스
UI 테마sap_horizon 단일 적용

실제 화면 3종 둘러보기

회계연도·기간을 넣고 조회하면 대사 요약과 고객별 공헌이익 명세가 한 화면에 뜹니다 → 공헌이익률이 낮은 고객이 위로 정렬되어 점검 필요 표시를 바로 확인합니다 → 행을 클릭하면 제품군별 상세가 열립니다.

아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.

Main.view.xml
고객별 공헌이익 명세 화면 — 조회조건과 대사 요약
메인화면 — 회계연도·기간 조회 결과. 대사 요약에 총매출·총공헌이익·총영업이익·대상 고객수·점검 필요 건수가 함께 뜹니다. 조회 버튼은 조회조건 영역 오른쪽 끝에 있습니다.
공헌이익률 · 점검결과
공헌이익률과 점검결과 컬럼
공헌이익률·점검결과 — 공헌이익률이 낮은 고객이 위로 정렬되고, 임계치 미만이거나 역마진인 거래는 점검 필요로 표시됩니다.
상세 내역
고객별 제품군 공헌이익 상세 다이얼로그
상세 내역 — 행을 클릭하면 제품군별 매출·변동원가·공헌이익·공헌이익률이 펼쳐집니다.

조작 방법

  1. 회계연도와 기간(월)을 입력하고 영업조직을 선택합니다. "전체"를 선택하면 조건 없이 전체 고객을 조회합니다.
  2. 조회 버튼은 조회조건 입력 필드 줄의 가장 오른쪽에 있습니다. 입력 필드에서 Enter 키를 눌러도 같은 조회가 실행됩니다.
  3. 대사 요약에서 총매출·총공헌이익·총영업이익·대상 고객수·점검 필요 건수를 먼저 확인합니다.
  4. 명세 표는 공헌이익률이 낮은 순으로 기본 정렬되어 있습니다. 행을 클릭하면 제품군별 상세가 열립니다.
  5. CSV 다운로드로 현재 조회 결과를 내려받을 수 있습니다.
  6. 초기화 버튼을 누르면 기본 조회조건으로 되돌아갑니다.

임계치 밑으로 떨어진 고객을 가르는 판정 로직

공헌이익률과 공헌이익(2)의 부호를 함께 봐서 확인이 필요한 거래를 가려냅니다.

판정 조건결과 상태사용자 조치
공헌이익(2)가 0보다 작음(역마진)점검 필요변동비·판매비 배분 기준과 할인·리베이트 반영 여부를 확인합니다.
공헌이익률이 임계치(5.0%) 미만점검 필요가격 조건, 물량 할인, 변동비 배분 비율을 재검토합니다.
그 외(공헌이익률 5.0% 이상이고 공헌이익(2) 0 이상)정상별도 조치가 필요하지 않습니다.

이 화면이 대신 정하지 않는 것

판정 결과는 확인이 필요한 거래를 알리는 표시이며, 손실 거래라고 단정하지 않습니다. 배분 고정비 기준의 타당성, 일시적 할인·리베이트 반영 여부는 회사가 판단합니다. 최종 판단은 회사와 감사인이 합니다.

매출에서 영업이익까지 5단계 산출

단계내용
1단계공헌이익(1)을 산출한다 — 공헌이익(1) = 매출 − 변동매출원가
2단계공헌이익(2)를 산출한다 — 공헌이익(2) = 공헌이익(1) − 변동판매비
3단계영업이익을 산출한다 — 영업이익 = 공헌이익(2) − 배분 고정비
4단계공헌이익률을 계산한다 — 공헌이익률 = 공헌이익(2) ÷ 매출 × 100
5단계대사한다 — 고객·제품군 합계 = 고객 합계, 고객 합계 = 조회 조건 전사 합계

조회조건

필드필수설명
회계연도필수4자리 회계연도
기간(월)필수3자리 회계기간
영업조직선택전체 / 본사 영업조직 / 지사 영업조직

결과 컬럼

영역컬럼 · 표시
대사 요약총매출 · 총공헌이익(2) · 총영업이익 · 대상 고객수 · 점검 필요 건수
고객별 공헌이익 명세고객코드 · 고객명 · 영업조직 · 매출 · 변동매출원가 · 공헌이익(1) · 변동판매비 · 공헌이익(2) · 배분 고정비 · 영업이익 · 공헌이익률 · 점검결과
고객별 제품군 상세제품군 · 매출 · 변동매출원가 · 공헌이익(1) · 공헌이익률

SAP 표준 기능 매핑

표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 그 데이터에 고객별 공헌이익 구조 조회·점검 관점을 더해 확장합니다.

표준 T-code표준 기능이 화면이 더한 것
KE30수익성 보고서 실행고객 단위 매출·원가 집계를 공헌이익 단계로 재구성합니다
KE24수익성분석 명세 라인 조회제품군별 상세 명세의 표준 조회 경로
VF03청구 문서 조회매출 원천 확인용 표준 조회 화면

분석 지표 정의표

지표정의대응 기능원천 데이터
공헌이익률공헌이익(2) ÷ 매출고객별 명세 조회·정렬수익성분석(CO-PA) 세그먼트 데이터
공헌이익 폭포(Waterfall)매출 → 공헌이익(1) → 공헌이익(2) → 영업이익 단계적 차감결과 명세 컬럼 구성수익성분석, 원가센터 배부 결과

참고 CDS 뷰

원천 테이블주요 필드쓰임
VBRK / VBRPVBELN · FKDAT · KUNAG · NETWR고객별 매출 금액
ACDOCARBUKRS · GJAHR · RACCT · HSL변동원가·변동판매비·고정비 배분 요소
KNA1KUNNR · NAME1고객명, 영업조직 배정
define view entity ZC_CustomerMargin
  as select from    I_BillingDocumentItem as bi
    inner join      I_Customer            as cust on cust.Customer = bi.SoldToParty
{
  key cust.Customer          as SoldToId,
      cust.CustomerName      as SoldToName,
      bi.SalesOrganization   as SalesOrg,
      sum(bi.NetAmount)      as Revenue
}
group by cust.Customer, cust.CustomerName, bi.SalesOrganization

표준 CDS 뷰 이름과 필드는 시스템 릴리스에 따라 다를 수 있으므로, 도입 시 실제 시스템에서 확인해 확정합니다.

OpenUI5 구성

기능사용 컨트롤 · 구성
화면 골격sap.m.Page + 조회조건 패널 · 대사 요약 패널 · 명세 표
데이터 연동manifest.json 에 OData V2 서비스를 상대 경로로 선언 — 화면 블록마다 엔티티셋에 직접 바인딩합니다. 전사 합계는 Function Import 로 조회합니다
조회조건sap.m.Input · sap.m.Select — 우측 끝에 조회·초기화 버튼, Enter 키로 즉시 재조회, sap/ui/model/Filter로 조건을 조립합니다. "전체"를 고른 조건은 필터를 만들지 않습니다
정렬 · 총건수sap/ui/model/Sorter로 공헌이익률 오름차순 정렬, 총건수는 모델의 inline count 기능으로 얻습니다
명세 표sap.ui.table.Table — 행 클릭 시 상세 다이얼로그(rowBindingContext 로 컨텍스트 전달)
상세 표sap.m.Tablesap.m.ObjectStatus로 점검결과를 표준 ValueState 로만 표시
공통 처리CSV 다운로드 공통 컨트롤러(UTF-8 BOM), 전역 오류 처리기 — 메타데이터 로드 실패·요청 실패·빈 응답을 구분해 안내

파일 구성

경로역할
index.htmlOpenUI5 부트스트랩 — sap_horizon, OData 서비스에 연결
Component.js화면 상태 모델 초기화, 전역 오류 처리기 연결
manifest.json앱 디스크립터 — zui5.custprofit · ko 로케일, OData 서비스와 모델 선언
view/Main.view.xml조회조건 · 대사 요약 · 명세 표
view/DetailDialog.fragment.xml제품군별 상세 다이얼로그
controller/Main.controller.js조회조건 조립 · 바인딩 · 다이얼로그 · CSV 다운로드
controller/BaseController.jsCSV 다운로드 공통 처리
model/ErrorHandler.js전역 오류 처리
model/formatter.js금액 · 비율 · 상태 표시 서식
i18n/i18n_ko.propertiesko 로케일 리소스

운영 데이터는 OData 서비스가 제공하며, 검증용 샘플 데이터는 화면과 완전히 분리해 별도로 둡니다. 화면과 판정 로직은 그대로 씁니다.

검증 결과

화면 구성에 쓴 검증용 샘플 데이터는 20개 고객 × 2개 기간, 총 40건의 명세를 기준으로 매출·변동비·고정비 배분이 원(KRW) 단위로 맞물리도록 구성했습니다.

검증 항목결과
공헌이익(1) = 매출 − 변동매출원가통과(차이 0)
공헌이익(2) = 공헌이익(1) − 변동판매비통과(차이 0)
영업이익 = 공헌이익(2) − 배분 고정비통과(차이 0)
공헌이익률 = 공헌이익(2) ÷ 매출 × 100통과(차이 0)
제품군별 명세 합계 = 고객 합계통과(차이 0)
고객 합계 = 조회 조건 전사 합계통과(차이 0)
점검 필요 판정(저마진·역마진) 검증용 배치40건 중 6건 (의도적으로 구성한 케이스)
조회 조건 전달 — 필터 · 정렬 · 총건수 확인확인
표시 금지 검사 — 커스텀 프로그램ID·앱 식별자·출처 표현 검출0건
화면 렌더링 — 실브라우저에서 조회 → 행 클릭 상세까지 실동작 후 캡처3/3
조회 버튼 위치 · sap_horizon 테마 · Enter 키 조회 · 서비스 미연결 시 오류 안내확인

모든 데이터는 검증용으로 구성한 가상 데이터입니다.

자주 묻는 질문

이 화면의 판정이 곧 손실 거래를 의미하나요?

아닙니다. 공헌이익률이 임계치 미만이거나 공헌이익이 음수인 거래를 먼저 걸러 보여주는 점검 도구이며, 배분 고정비 기준이나 일시적 할인 등 다른 요인이 있을 수 있습니다. 원가 배분 기준의 타당성을 포함한 최종 판단은 회사와 감사인이 합니다.

이 화면은 어떤 기간·조직을 대상으로 하나요?

회계연도와 기간(월) 단위로 조회하며, 영업조직을 지정하거나 전체로 조회할 수 있습니다. 그 밖의 적용 범위나 산정 기준의 세부 사항은 도입 시스템에서 확인이 필요합니다.

공헌이익률 임계치는 고정된 값인가요?

화면 로직상 참고 임계치를 두고 있으며, 업종·제품 특성에 따라 회사가 별도로 정한 기준이 있다면 그 기준을 반영해 조정할 수 있습니다.

제품군별 상세는 어떻게 확인하나요?

고객별 명세에서 행을 클릭하면 해당 고객·기간의 제품군별 매출·변동원가·공헌이익 상세가 팝업으로 열립니다.

고객별 수익성, 결산 전에 한 번 더 확인해보세요

전사 손익만으로는 보이지 않는 저마진·역마진 거래를 화면에서 미리 대사해 두면, 가격·배분 기준 재검토와 결산 준비가 한결 수월해집니다. 현재 SAP 환경 기준으로 어떻게 적용되는지 함께 확인해 드립니다.

수익성 분석공헌이익고객별 수익성변동비고정비 배분OpenUI5