SAP 생산오더 원가차이분석 — 목표와 실제가 갈라진 이유
생산오더의 목표원가와 실제원가를 비교해 가격차이·수량차이·기타차이로 나누고, 차이비율로 판정하는 화면입니다.
생산오더 원가가 계획보다 많이 나왔다는 사실은 금방 압니다. 어려운 것은 재료를 비싸게 산 것인지 많이 쓴 것인지를 가르는 일입니다.
앞은 구매 문제이고 뒤는 생산 문제라 찾아갈 부서가 다릅니다. 표준 원가차이 구조를 그대로 이어받아 차이를 가격·수량·기타로 분해해 보도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면 3종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 생산오더 — 오더번호(
Aufnr)와 오더유형(AuartCode) - 플랜트 · 자재 — 생산 공장(
Werk)과 대상 자재(Matnr) - 코스트센터 — 생산 부서(
Kostl) - 산출량 — 실제 산출 수량(
Ausbrmenge)과 단위(Meins) - 목표원가 — 원가요소별 목표 금액(
ZielMaterial등)
| 항목 | 내용 |
|---|---|
| 대응 T-code | CO88 (정산) · KKS1 (차이계산) · KKBC_ORD |
| 업무 영역 | 관리회계(CO-PC) · 생산원가 |
| Namespace | zui5.costvar |
| 셸 구조 | 조회조건 영역(우측 조회·초기화) + 차이 분석 테이블 |
| 화면 수 | 조회 화면 1개 + 상세 |
| 데이터 | 생산오더 차이 24건 |
| 성격 | 조회형(Read-Only) — 차이 계산은 표준이 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 3종 둘러보기
플랜트·오더유형·기간으로 조회하면 오더별 차이가 나옵니다 → 가격차이와 수량차이로 나눠 보고 → 차이비율 판정으로 확인 대상을 좁힙니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 플랜트를 고릅니다. 공장마다 원가 구조가 다릅니다.
- 오더유형으로 표준생산오더 등을 나눕니다.
- 자재로 특정 제품만 볼 수 있습니다.
- 조회조건 입력필드에서 값을 바꾸거나 Enter 를 누르면 즉시 조회됩니다.
- 총차이가 큰 오더부터 봅니다.
- 가격차이가 크면 구매 단가를, 수량차이가 크면 생산 효율을 확인합니다.
- 판정이 초과인 오더는 별도 검토 대상입니다.
- 결과는 CSV 다운로드로 내려받습니다.
차이 분해 산식
총차이를 세 갈래로 나눠야 원인이 보입니다.
목표원가 = 표준단가 × 표준수량 × 실제 산출량
실제원가 = 실제단가 × 실제수량
총차이 = 실제원가 − 목표원가
가격차이 = (실제단가 − 표준단가) × 실제수량
수량차이 = (실제수량 − 표준수량) × 표준단가
기타차이 = 총차이 − 가격차이 − 수량차이
차이비율 = 총차이 ÷ 목표원가 × 100
정상 · 주의 · 초과로 판정
기타차이를 남겨 두는 이유
가격과 수량으로 설명되지 않는 차이가 남습니다. 로트 크기 차이, 대체 자재 사용, 스크랩 처리 같은 것들입니다. 억지로 앞의 두 항목에 밀어 넣으면 가격차이나 수량차이가 왜곡됩니다. 따로 두면 그 금액이 클 때 별도로 조사하게 됩니다.
차이 유형과 책임 부서
| 유형 | 내용 | 확인 부서 |
|---|---|---|
| 가격차이 | 구매 단가가 표준과 다름 | 구매팀 |
| 수량차이 | 투입량이 표준과 다름 | 생산팀 |
| 기타차이 | 로트·대체자재·스크랩 등 | 생산관리 · 원가팀 |
| 활동차이 | 가공 시간이 표준과 다름 | 생산팀 · 설비관리 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
플랜트 Werk | 선택 | 전체 또는 특정 공장 |
오더유형 AuartCode | 선택 | 표준생산오더 등 |
자재 Matnr | 선택 | 생산 대상 제품 |
코스트센터 Kostl | 선택 | 생산 부서 |
| 기간 | 선택 | 오더 기간 |
| 판정 | 선택 | 정상 / 주의 / 초과 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
오더번호 Aufnr | 생산오더 |
오더유형 AuartCode · AuartText | 표준생산오더 등 |
플랜트 Werk · WerkText | 생산 공장 |
자재 Matnr · MatnrText | 생산 대상 |
코스트센터 Kostl · KostlText | 생산 부서 |
산출량 Ausbrmenge · 단위 Meins | 실제 생산 수량 |
| 목표원가 | 표준 기준 원가 |
| 실제원가 | 실제 투입 원가 |
| 총차이 | 실제 − 목표 |
| 가격차이 · 수량차이 · 기타차이 | 차이 분해 |
| 차이비율 · 판정 | 정상 / 주의 / 초과. 상태 색 |
SAP 표준 기능 매핑
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
KKS1 | 생산오더 차이 계산 | 차이를 유형별로 분해해 표시 |
CO88 | 오더 정산 | 정산 전 차이 확인 |
KKBC_ORD | 오더별 원가 분석 | 판정과 비율을 추가 |
AUFK · AFKO | 오더 헤더와 생산 정보 | 오더 정보 |
COSS · COSP | CO 원가 집계 | 목표·실제 원가 |
KEKO | 원가추정 | 표준 단가 기준 |
도입 시 확인이 필요한 부분
차이 분해 방식이 차이 키(Variance Key) 설정에 따라 다릅니다. 어떤 차이 범주를 계산할지, 어느 시점 표준을 목표로 쓸지가 설정에 있어 화면도 그것을 따라야 합니다. 판정 기준(정상·주의·초과 구간)도 제품 특성에 맞춰 정해야 합니다.
참고 CDS 뷰
@AbapCatalog.sqlViewName: 'ZCCOSTVAR'
@EndUserText.label: '생산오더 원가차이 (Z)'
define view Z_C_ORDER_COST_VARIANCE
as select from aufk as Order
left outer join afko as ProdInfo on Order.aufnr = ProdInfo.aufnr
left outer join coss as CostSum on Order.objnr = CostSum.objnr
{
key Order.aufnr as Aufnr,
Order.auart as OrderType,
Order.werks as Werk,
Order.kostl as Kostl,
ProdInfo.plnbez as Matnr,
ProdInfo.gamng as PlanQty,
ProdInfo.igmng as ActualQty,
// 목표·실제 원가는 COSS/COSP 를 버전별로 집계
sum( CostSum.wtg001 ) as CostAmount
// 총차이 = 실제 − 목표
// 가격차이 = (실제단가 − 표준단가) × 실제수량 (소비 뷰에서 분해)
}
group by Order.aufnr, Order.auart, Order.werks, Order.kostl,
ProdInfo.plnbez, ProdInfo.gamng, ProdInfo.igmng
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경 설정과 릴리즈에 맞춰 조정합니다.
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.costvar) · ko 로케일 |
view/Main.view.xml | 조회조건과 차이 분석 테이블 |
controller/Main.controller.js | 조회 · 차이 분해 · 판정 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise) |
js/formatter.js | 금액 · 비율 · 판정 색 포맷터 |
localdata/costvar.json | 생산오더 차이 24건 |
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 총차이 = 실제원가 − 목표원가 (전 건) | 통과 |
| 가격차이 + 수량차이 + 기타차이 = 총차이 | 통과 |
| 차이비율 = 총차이 ÷ 목표원가 × 100 | 통과 |
| 판정이 차이비율 구간과 정합 | 통과 |
| 자재·코스트센터 코드가 있으면 명칭도 존재 | 통과 |
| XML · JSON 전체 파싱 | 오류 0건 |
| 화면 렌더링 — 실브라우저 조회 후 캡처 | 3/3 |
| 테마 런타임 확인 | sap_horizon |
자주 묻는 질문
차이가 음수면 좋은 건가요?
실제원가가 목표보다 적다는 뜻이라 유리한 차이입니다. 다만 표준이 느슨했을 수도 있으므로 지속적으로 유리한 차이가 나면 표준 재설정을 검토합니다.
기타차이가 크면 무엇을 봐야 하나요?
대체 자재를 썼거나 로트 크기가 표준과 크게 달랐을 가능성이 높습니다. 오더의 실제 투입 내역을 열어 표준 BOM 과 대조합니다.
차이는 어디로 정산되나요?
설정에 따라 재고 가액에 반영되거나 매출원가로 갑니다. 자재원장을 쓰면 기말에 배부돼 제품 원가에 녹아듭니다.
SAP 표준 기능과 어떻게 이어지나요?
차이 계산은 KKS1 이 수행하고 정산은 CO88 이 담당합니다. 이 화면은 그 결과를 유형별로 분해하고 비율 판정을 붙여, 확인할 오더를 좁히는 확장입니다.