SAP 내부오더 정산현황 — 모인 비용이 제자리를 찾았는가
내부오더에 쌓인 비용이 얼마나 정산됐는지와 어느 수신처로 배분됐는지를 확인하는 화면입니다.
내부오더는 비용을 모으는 그릇입니다. 프로젝트나 설비 보수에 들어간 비용을 한곳에 담았다가 끝나면 제자리로 보냅니다.
보내지 않으면 오더에 잔액이 남고 그 비용은 어느 코스트센터에도, 어느 자산에도 반영되지 않습니다. 표준 내부오더 정산 구조를 그대로 이어받아 정산율과 수신처 배분을 보도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면 3종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 내부오더 — 오더번호(
Aufnr) · 유형(Auart) · 명칭(Ktext) - 귀속 — 회사코드(
Bukrs)와 코스트센터(Kostl) - 오더 상태 —
OrderStatus로 REL · TECO 등 구분 - 잔액 — 미정산 잔액(
BalanceOpen) - 정산 완료 — 전액 정산 여부(
IsFullySettled)
| 항목 | 내용 |
|---|---|
| 대응 T-code | KO88 (오더 정산) · KSV5 · KOB1 |
| 업무 영역 | 관리회계(CO-OM) · 오더 정산 |
| Namespace | zui5.ordersettle |
| 셸 구조 | 조회조건 영역(우측 조회·초기화) + 정산 현황, 행 선택 시 수신처 배분 |
| 화면 수 | 조회 화면 1개 + 배분 상세 |
| 데이터 | 오더 10건 · 정산 이력 186건 |
| 성격 | 조회형(Read-Only) — 정산 실행은 표준이 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 3종 둘러보기
회사코드·오더유형·상태로 조회하면 오더별 정산 현황이 나옵니다 → 정산율과 잔액을 확인하고 → 행을 눌러 수신처별 배분을 확인합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드와 오더유형을 고릅니다.
- 오더상태로 진행 중과 기술적 완료를 나눕니다.
- 조회조건 입력필드에서 값을 바꾸거나 Enter 를 누르면 즉시 조회됩니다.
- 정산율이 100%가 아닌 오더를 확인합니다.
- 미정산 잔액이 남은 오더는 결산 전에 정산해야 합니다.
- 행을 선택하면 수신처별 배분이 열립니다.
- 결과는 CSV 다운로드로 내려받아 결산 체크리스트로 씁니다.
정산율 산식
모인 비용 중 얼마가 나갔는지를 봅니다.
정산율 = 정산액 ÷ 발생비용 × 100
미정산 잔액 = 발생비용 − 정산액
정산율 100% → 전액 정산 완료
정산율 100% 미만 → 잔액 존재 — 정산 필요
오더 상태 REL 진행 중 — 계속 비용 발생
TECO 기술적 완료 — 정산 후 종결
CLSD 종결 — 잔액 0이어야 함
수신처를 함께 봐야 하는 이유
정산율이 100%여도 엉뚱한 곳으로 갔으면 문제입니다. 설비 투자 오더인데 자산이 아니라 코스트센터로 정산됐다면 자산화돼야 할 비용이 당기 비용이 됩니다. 수신처 배분까지 확인해야 정산이 제대로 된 것입니다.
수신처 유형 3종
| 수신처 | 대상 | 결과 |
|---|---|---|
| 코스트센터 | 운영성 비용 | 부서 비용으로 반영 |
| 고정자산 | 투자성 지출 | 자산 취득가액으로 |
| GL 계정 | 기타 정산 | 지정 계정으로 |
오더유형에 따라 허용되는 수신처가 다릅니다. 투자성 오더는 자산으로 가야 합니다.
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
회사코드 Bukrs | 필수 | 대상 법인 |
오더유형 Auart | 선택 | 일반내부오더 등 |
오더상태 OrderStatus | 선택 | REL · TECO · CLSD |
코스트센터 Kostl | 선택 | 귀속 부서 |
| 정산 여부 | 선택 | 전액 정산 / 잔액 있음 |
결과 컬럼
오더 현황
| 컬럼 | 의미 · 표시 |
|---|---|
오더번호 Aufnr · 명칭 Ktext | 내부오더 |
오더유형 Auart · AuartText | 일반내부오더 등 |
회사코드 Bukrs · BukrsText | 귀속 법인 |
코스트센터 Kostl · KostlText | 귀속 부서 |
오더상태 OrderStatus | REL · TECO · CLSD |
| 발생비용 | 오더에 모인 총 비용 |
| 정산액 | 수신처로 보낸 금액 |
미정산 잔액 BalanceOpen | 발생 − 정산. 남으면 경고 |
| 정산율 | 정산액 ÷ 발생비용 |
전액 정산 IsFullySettled | 완료 여부 |
수신처 배분
| 컬럼 | 의미 |
|---|---|
| 수신처 유형 | 코스트센터 · 자산 · GL 계정 |
| 수신처 코드 · 명칭 | 배분 대상 |
| 배분 금액 | 수신처별 금액 |
| 배분 비율 | 전체 정산액 대비 |
SAP 표준 기능 매핑
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
KO88 | 내부오더 정산 | 정산율과 수신처 배분을 조회 |
KOB1 | 오더 실제 라인 | 발생비용 원천 |
KSV5 | 배분 실행 | 관련 배분 처리 |
AUFK | 오더 마스터 | 오더 정보 |
COSS · COSP | CO 원가 집계 | 발생·정산 금액 |
COBRB | 정산 규칙 | 수신처 정의 |
도입 시 확인이 필요한 부분
정산 규칙이 오더마다 지정돼 있어야 정산이 실행됩니다. 규칙이 없으면 정산이 실패하고 잔액이 그대로 남습니다. 오더를 만들 때 정산 규칙을 필수로 넣도록 하거나, 규칙 없는 오더를 이 화면에서 함께 걸러 내는 구성이 필요합니다.
참고 CDS 뷰
@AbapCatalog.sqlViewName: 'ZCORDSETTLE'
@EndUserText.label: '내부오더 정산 현황 (Z)'
define view Z_C_ORDER_SETTLEMENT
as select from aufk as Order
left outer join coss as CostSum on Order.objnr = CostSum.objnr
left outer join cobrb as SettRule on Order.objnr = SettRule.objnr
{
key Order.aufnr as Aufnr,
Order.auart as Auart,
Order.ktext as Ktext,
Order.bukrs,
Order.kostl as Kostl,
Order.astnr as OrderStatus,
SettRule.konty as ReceiverType,
SettRule.kostl as ReceiverCostCenter,
SettRule.anln1 as ReceiverAsset,
// 발생비용과 정산액은 원가요소 유형으로 구분해 집계
sum( CostSum.wtg001 ) as CostAmount
// 정산율 = 정산액 ÷ 발생비용, 잔액 = 발생 − 정산
}
group by Order.aufnr, Order.auart, Order.ktext, Order.bukrs,
Order.kostl, Order.astnr, SettRule.konty,
SettRule.kostl, SettRule.anln1
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경 설정과 릴리즈에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 정산 현황 · 배분 상세 |
| 조회조건 | sap.m.Select · sap.m.DatePicker · sap.m.Input — 우측 끝에 조회·초기화 |
| 이벤트 | 모든 버튼이 onPAI 단일 진입점, fcCode 로 분기 |
| 현황 테이블 | sap.m.Table — 발생·정산·잔액 순서 |
| 정산율 | sap.m.ObjectStatus — 완료 / 잔액 있음 |
| 배분 상세 | sap.m.Dialog — 수신처별 금액과 비율 |
오더 상태를 함께 보여 주는 이유
진행 중인 오더에 잔액이 있는 것은 정상입니다. 아직 비용이 더 발생할 예정이기 때문입니다. 문제는 기술적 완료나 종결 상태인데 잔액이 남은 경우입니다. 상태가 함께 보이면 정말 처리해야 할 오더만 걸러집니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.ordersettle) · ko 로케일 |
view/Main.view.xml | 조회조건과 정산 현황 테이블 |
controller/Main.controller.js | 조회 · 정산율 계산 · 배분 상세 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise) |
js/formatter.js | 금액 · 비율 · 상태 색 포맷터 |
localdata/orders.json | 오더 10건 |
localdata/settlements.json | 정산 이력 186건 |
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 미정산 잔액 = 발생비용 − 정산액 (전 오더) | 통과 |
| 정산율 = 정산액 ÷ 발생비용 × 100 | 통과 |
| 수신처 배분 합계 = 정산액 | 통과 |
| 전액 정산 표시가 잔액 0 과 정합 | 통과 |
| 오더유형·코스트센터 코드가 있으면 명칭도 존재 | 통과 |
| XML · JSON 전체 파싱 | 오류 0건 |
| 화면 렌더링 — 실브라우저 조회 → 배분 상세 후 캡처 | 3/3 |
| 테마 런타임 확인 | sap_horizon |
자주 묻는 질문
진행 중인 오더에 잔액이 남아도 되나요?
정상입니다. 아직 끝나지 않은 프로젝트나 보수 작업이라 비용이 더 발생합니다. 문제는 기술적 완료나 종결 상태에서 잔액이 남는 경우입니다.
정산이 실패하는 주된 이유는?
정산 규칙이 없거나 수신처가 잘못된 경우입니다. 자산으로 정산하려는데 자산이 미생성이거나 이미 처분된 경우에도 실패합니다.
투자성 오더는 왜 자산으로 정산해야 하나요?
설비 취득에 든 비용은 자산 가액이 되어 내용연수에 걸쳐 상각돼야 합니다. 코스트센터로 정산하면 당기 비용이 되어 손익이 왜곡됩니다.
SAP 표준 기능과 어떻게 이어지나요?
정산 실행과 규칙 관리는 표준 CO 가 담당합니다. 이 화면은 정산율과 잔액, 수신처 배분을 한 화면에 모아 결산 전에 처리할 오더를 찾게 하는 확장입니다.