SAP 생산 스크랩·불량 손실 점검 — 불량이 났다면, 얼마짜리인지부터 본다
생산오더의 불량수량에 표준단가를 곱해 손실금액을 산출하고, 작업장·기간별로 다시 모아 임계금액을 넘는 항목부터 가려냅니다
생산 현장에서 스크랩이 나면 수량은 이동전표로 남지만, 그 수량이 얼마짜리 손실인지는 별도로 계산해 보지 않으면 잘 드러나지 않습니다. 그래서 생산오더 단위로 불량수량에 표준단가를 곱해 손실금액을 산출하고, 작업장·기간별로 다시 모아 살펴보는 화면을 OpenUI5로 구현했습니다.
손실금액이 임계금액(50만원)을 넘으면 "점검 필요"로 자동 판정합니다. 스크랩 이동전표 등록·오더 확정이라는 표준 기능 위에, 손실금액이라는 관점 하나를 더해 확장한 셈입니다. 실제 구동 화면 3종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 스크랩 이동전표 등록 — 이동유형 551 기준
MB1A(또는MIGO) 전표의 수량·전기일·사유 구조를 그대로 이어받습니다 - 오더 확정 — 생산오더 실적 확인(
CO11N)에서 입력되는 투입·양품 수량 구조를 그대로 이어받습니다 - 오더 정보시스템 — 생산오더 정보시스템(
COOIS)의 오더별 조회 관점을 명세 탭 구성에 옮겨 왔습니다
| 항목 | 내용 |
|---|---|
| 업무 영역 | 생산(PP) · 생산 분석 |
| Namespace | zui5.scraploss |
| 셸 구조 | 조회조건 영역(우측 조회) + 요약 KPI 3종 + 탭 3개, 행 클릭 상세 Dialog |
| 화면 수 | 조회 화면 1개(탭 3개) + 상세 다이얼로그 |
| SAP 표준 T-code | MB1A · CO11N · COOIS · MB51 |
| 데이터 연동 방식 | OData V2 — 화면 블록마다 엔티티셋에 직접 바인딩 |
| 성격 | 조회·점검형 — 실제 원인 판단은 담당자가 수행 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 3종 둘러보기
기본 조건으로 조회하면 요약 KPI와 명세 탭이 뜹니다 → 집계 탭에서 작업장·기간 축으로 다시 모아 보고 → 행을 클릭해 상세를 봅니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
사용 방법
- 화면에 들어오면 기본 조건(전체 플랜트·작업장·2026.03.01~2026.08.31)으로 자동 조회가 1회 실행되어 요약 KPI와 명세 탭이 함께 채워집니다.
- 조회조건 영역에서 플랜트·작업장·스크랩 사유를 선택합니다(선택하지 않으면 전체). 전기일(시작/종료)은 기본값이 채워져 있어 필요할 때만 바꿉니다.
- 조회 버튼은 조회조건 입력 필드 줄의 가장 오른쪽에 있습니다. 조회조건 영역 어디서든 Enter 키를 눌러도 같은 조회가 실행됩니다. 초기화 버튼은 조회 버튼 바로 왼쪽에 있습니다.
- 상단 카드에서 총 손실금액 · 평균 스크랩률 · 임계초과 건수를 먼저 확인합니다.
- 탭을 옮겨 명세 → 집계 → 사유별 추이 순서로 봅니다.
- 명세 탭에서 행을 클릭하면 해당 건의 수량·손실금액·점검결과 상세가 다이얼로그로 열립니다.
- 명세·집계 탭 우측 상단의 CSV 다운로드(UTF-8 BOM)로 현재 조회 결과를 저장합니다.
점검 판정 기준
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 손실금액(불량수량 × 표준단가) > 임계금액(500,000원) | 점검 필요 | 스크랩 사유·작업장·공정을 확인하고 필요 시 재발방지 조치를 검토 |
| 손실금액 ≤ 임계금액(500,000원) | 정상범위 | 조치 없음 |
임계금액은 화면에서 조정하는 값이 아니라 서비스 쪽에 반영된 관리 기준값입니다. 위 기준은 조회·점검을 돕기 위한 것이며, 실제 원인 판단과 조치는 화면이 단정하지 않고 담당자가 확인합니다.
손실금액 산출 절차
| 단계 | 내용 |
|---|---|
| 1단계 | 생산오더·자재·작업장·전기일 단위로 투입·양품·불량 수량을 모음(투입 = 양품 + 불량) |
| 2단계 | 자재·플랜트별 표준단가를 조회 |
| 3단계 | 손실금액 = 불량수량 × 표준단가로 산출 |
| 4단계 | 플랜트·작업장·기간(연월)별로 투입·불량 수량과 손실금액을 집계(소계 행 별도 표시) |
| 5단계 | 건별 손실금액을 임계금액과 비교해 점검 대상 여부를 판정 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 플랜트 | 선택 | 전체면 조건 제외 |
| 작업장 | 선택 | 전체면 조건 제외 |
| 스크랩 사유 | 선택 | 전체면 조건 제외 — 명세 탭에만 적용 |
| 전기일(시작/종료) | 기본값 제공 | 스크랩 이동전표 전기일 범위 — 명세·추이 탭에 적용 |
결과 컬럼
| 컬럼 | 설명 |
|---|---|
| 생산오더 · 오더유형 · 플랜트 · 자재 · 작업장 · 전기일 · 스크랩 사유 | 명세의 기준 정보 |
| 투입수량 · 양품수량 · 불량수량 · 표준단가 · 손실금액 · 점검결과 | 수량·금액 실적과 판정 결과 |
| 플랜트 · 작업장 · 기간 · 투입수량합계 · 불량수량합계 · 손실금액합계 · 스크랩률 | 집계 컬럼(소계 행은 "ZZ99 소계"로 구분) |
SAP 표준 기능 매핑
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 그 데이터에 손실금액 대사 관점을 더해 확장합니다.
| 표준 T-code | 표준 기능 | 이 화면이 더한 것 |
|---|---|---|
MB1A | 스크랩 이동전표 등록(이동유형 551) | 등록된 수량·전기일·사유에 표준단가를 곱해 손실금액으로 환산합니다 |
CO11N | 생산오더 실적 확인 | 투입·양품 수량과 스크랩 수량을 같은 오더 축에서 대사합니다 |
COOIS | 생산오더 정보시스템 | 오더별 조회 관점을 손실금액 중심으로 재구성합니다 |
MB51 | 자재이동 조회 | 스크랩 이동전표 내역을 대사할 때 참고합니다 |
분석 지표 정의표
| 대상 영역 | 지표 | 정의 | 원천 데이터 |
|---|---|---|---|
| 생산 분석 | 손실금액(LossAmount) | 불량수량 × 표준단가 | 스크랩 이동전표(이동유형 551), 자재 평가(표준단가) |
| 생산 분석 | 스크랩률(ScrapRate) | 불량수량 ÷ 투입수량 × 100 | 스크랩 이동전표, 오더 실적 확인 |
| 생산 분석 | 임계초과 여부 | 손실금액 > 임계금액(500,000원) | 산출값 비교(점검 대상 판정용, 최종 판단 아님) |
참고 CDS 뷰
| 원천 테이블 | 주요 필드 | 쓰임 |
|---|---|---|
AFKO / AFPO | AUFNR · AUART · WERKS · MATNR | 생산오더 헤더·품목 |
AFRU | GMNGA | 오더 확정 실적(투입·양품 수량) |
MSEG / MKPF | BWART · MENGE · GRUND · BUDAT | 스크랩 이동전표(이동유형 551) |
MBEW | STPRS | 자재 평가(표준단가) |
CRHD | ARBPL | 작업장 마스터 |
define view entity I_ScrapLossItem
as select from afpo
inner join afko on afko.aufnr = afpo.aufnr
inner join mseg on mseg.aufnr = afpo.aufnr
and mseg.bwart = '551'
inner join mbew on mbew.matnr = afpo.matnr
and mbew.bwkey = afpo.werks
{
key afpo.aufnr as ProdOrder,
afko.auart as OrderType,
afpo.werks as Plant,
afpo.matnr as Material,
mseg.grund as ScrapReason,
mseg.menge as ScrapQty,
mbew.stprs as StdPrice
}
필드 매핑은 가상 데이터 기준 스케치이며, 손실금액(불량수량 × 표준단가)은 별도 파생값으로 계산합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 · 구성 |
|---|---|
| 화면 골격 | 조회조건 패널 · 요약 KPI · IconTabBar 3개 탭 |
| 데이터 연동 | manifest.json dataSources.mainService(OData V2, 상대 경로)로 기본 모델을 만들고 defaultCountMode:"Inline" · useBatch:false 로 구성합니다. 화면 블록마다 해당 엔티티셋에 직접 바인딩합니다 |
| 명세 탭 | sap.ui.table.Table(컬럼 13개) — 셀 클릭으로 상세 다이얼로그를 엽니다 |
| 집계 탭 | sap.ui.table.Table — 소계 행(전체 작업장)은 배경색으로 구분 표시 |
| 조회조건 | sap.ui.model.Filter 로 조립해 바인딩에 적용합니다. 같은 필드(전기일 시작·종료)의 조건은 하나의 AND 복합 Filter 로 묶어 전달합니다. 전체를 고른 조건은 필터를 만들지 않습니다 |
| 예외 메시지 | 메타데이터 실패·요청 실패를 구분해 안내하는 전용 처리기 |
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon, OData 서비스에 연결 |
Component.js | 모델 초기화, 예외 메시지 처리기 연결 |
manifest.json | 앱 디스크립터 — zui5.scraploss · ko 로케일, OData 서비스와 모델 선언 |
view/Main.view.xml | 조회조건 · 요약 KPI · 3개 탭 |
view/DetailDialog.fragment.xml | 명세 상세 다이얼로그 |
controller/Main.controller.js | 조회조건 조립 · 바인딩 · 다이얼로그 · CSV |
controller/BaseController.js | CSV 다운로드 공통 처리 |
model/formatter.js · model/ErrorHandler.js | 표시 서식 · 예외 메시지 처리 |
i18n/i18n_ko.properties | 화면 문구 |
검증 결과
검증용 샘플 데이터(명세 192건, 플랜트 2개, 작업장 4개, 자재 5종, 기간 6개월)를 기준으로 대사식을 전수 검증했습니다. 점검 로직 확인을 위해 스크랩률을 의도적으로 높인 예외 건 7건을 포함했습니다.
| 검증 항목 | 결과 |
|---|---|
| 투입수량 = 양품수량 + 불량수량 (192건 전수) | 통과(불일치 0건) |
| 집계(플랜트·작업장·기간) 손실금액합계 = 명세 손실금액 합계 | 통과(차이 0) |
| 조회 조건 전달 — 플랜트·작업장·스크랩 사유·전기일 필터 · 정렬 · 총건수 표시 | 확인 |
| 표시 금지 검사 — 커스텀 프로그램ID·앱 식별자·출처 표현 | 0건 |
화면 렌더링 — 조회 버튼 위치 · sap_horizon 테마 · Enter 키 조회 · 서비스 미연결 시 안내 메시지 | 확인 |
모든 데이터는 검증용으로 구성한 가상 데이터입니다.
자주 묻는 질문
이 화면은 어떤 기간의 스크랩 데이터를 대상으로 하나요?
검증용 샘플 데이터는 2026년 3월부터 8월까지로 구성되어 있습니다. 실제 운영에서는 특정 시행일이나 적용 범위가 정해진 것이 아니라, 조회조건의 전기일(시작/종료) 범위를 회사가 정한 관리 기간에 맞춰 자유롭게 선택해 사용합니다.
"점검 필요"로 표시되면 바로 불량 처리하면 되나요?
아닙니다. 이 화면은 임계금액을 기준으로 확인이 필요한 항목을 먼저 걸러주는 조회·점검 도구입니다. 실제 원인 파악과 처리 여부는 담당자와 관련 부서가 표준 프로세스에 따라 확인하고 결정합니다.
임계금액은 화면에서 조정할 수 있나요?
현재 화면에는 임계금액을 직접 입력하는 조회조건이 따로 없습니다. 관리 기준금액은 서비스 쪽 정책 값으로 관리하고, 화면은 그 값을 기준으로 판정 결과만 보여줍니다.
이 화면은 스크랩 이동전표 등록(MB1A)이나 오더 확정(CO11N)을 대체하나요?
아닙니다. 스크랩 이동전표 등록과 오더 확정 입력은 표준 트랜잭션에서 그대로 수행합니다. 이 화면은 이미 등록된 실적·이동전표 데이터를 손실금액 관점에서 다시 조회하고, 임계금액을 넘는 대상을 찾아내는 조회·점검 화면입니다.