SAP 품질통보 처리현황 — 지연되고 있는 통보를 먼저 보여준다
고객클레임·구매처클레임·내부불량 통보가 뒤섞여 있으면 무엇이 급한지 한눈에 안 보입니다. 목표완료일을 넘긴 통보를 자동으로 가려내는 화면입니다.
품질통보는 문제가 생길 때마다 하나씩 만들어집니다. 고객이 불만을 제기하면, 구매처가 납품한 자재에서 불량이 나오면, 또는 공정 중 내부에서 문제를 발견하면 그때마다 통보 한 건이 생성됩니다. 통보 한 건의 상태는 SAP 표준 화면에서 바로 확인할 수 있지만, 문제는 통보가 수십 건 쌓였을 때입니다. 어느 통보가 목표완료일을 넘겼는지, 담당자가 시정조치 과제를 몇 건이나 처리했는지를 알려면 통보를 하나씩 열어봐야 합니다.
SAP 표준 품질통보 헤더·결함항목·시정조치과제 데이터 구조를 그대로 이어받아, 통보유형·플랜트·처리상태·경과일수 조건으로 다건을 한 번에 조회하고, 생성일과 우선순위별 목표처리기간을 비교해 지연 여부를 자동으로 판정하는 화면을 OpenUI5 화면으로 확장했습니다. 실제 구동 화면 4종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 통보 헤더 — 통보유형(고객클레임/구매처클레임/내부불량) · 플랜트 · 자재 · 우선순위 · 생성일
- 결함 항목 — 결함코드 · 결함위치 · 수량
- 시정조치 과제 — 조치내용 · 담당자 · 목표일 · 완료일
- 거래처 연계 — 고객클레임은 고객 마스터, 구매처클레임은 구매처 마스터와 연결
| 항목 | 내용 |
|---|---|
| 업무 영역 | 구매(MM) · 품질관리 · 품질통보 처리 |
| Namespace | zui5.qmnotif |
| 셸 구조 | 조회조건 영역(우측 조회) + 통보 목록, 결함/과제 상세보기 Dialog |
| 화면 수 | 조회 화면 1개 + 상세보기 다이얼로그 |
| SAP 표준 T-code | QM01 / QM02 / QM03 |
| 성격 | 조회형 — 통보 생성·변경은 표준 트랜잭션이 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 4종 둘러보기
플랜트·통보유형·자재·처리상태를 넣고 조회하면 지연 건이 상단 메시지로 먼저 뜹니다 → 자재명으로 좁혀서 확인하고 → 통보를 골라 결함항목과 시정조치 과제 진행률을 드릴다운합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 플랜트 · 통보유형 · 자재 · 처리상태 · 경과일수 · 미완료 건만 조건을 필요한 만큼 지정합니다. 아무 조건도 지정하지 않으면 기본으로 신규·처리중·지연 건만 조회됩니다(완료 건은 처리상태를 직접 선택해야 보입니다).
- 자재코드/자재명 입력 필드는 Enter 키로 즉시 재조회되고, Select·CheckBox 는 선택 즉시 재조회됩니다.
- 조회·초기화 버튼은 조회조건 영역 오른쪽 끝에 나란히 있습니다.
- 지연 건이 있으면 메시지 스트립에 건수가 바로 표시됩니다.
- 목록의 행 오른쪽 화살표를 누르면 상세보기가 열려 결함 항목과 시정조치 과제를 확인할 수 있습니다.
- 하단 CSV 다운로드로 조회 결과를 내려받습니다. UTF-8 BOM 이 붙어 엑셀에서 한글이 깨지지 않습니다.
처리상태 판정 로직
통보 하나의 처리상태는 완료일 · 목표완료일 · 시정조치 과제 진행 여부를 조합해 아래 순서로 판정합니다. 먼저 맞는 조건이 그 통보의 최종 상태가 됩니다.
| 순서 | 조건 | 판정 |
|---|---|---|
| 1 | 완료일이 기록되어 있음 | 완료 |
| 2 | 완료일이 없고, 오늘이 목표완료일을 지남 | 지연 |
| 3 | 완료일이 없고, 시정조치 과제가 1건 이상 등록되어 진행 중 | 처리중 |
| 4 | 그 외(과제 미등록, 목표일 이전) | 신규 |
목표완료일은 우선순위가 정한다
목표완료일은 생성일 + 우선순위별 목표처리기간으로 산출합니다(매우높음 7일 · 높음 14일 · 보통 30일 · 낮음 60일).
같은 날 생성된 통보라도 우선순위가 다르면 지연으로 넘어가는 시점이 달라집니다. 목록은 지연 → 처리중 → 신규 → 완료 순,
같은 상태 안에서는 경과일수가 큰 건이 먼저 보이도록 정렬해 가장 급한 통보가 항상 위쪽에 오도록 했습니다.
품질통보 처리 5단계
이 화면이 데이터로 추적하는 품질통보의 실제 처리 흐름은 다음 5단계로 진행됩니다.
| 단계 | 내용 |
|---|---|
| ① 통보 생성 | 고객 클레임 접수, 구매처 불량 통지, 내부 검사 중 발견된 불량을 통보로 등록(통보유형·자재·플랜트·우선순위 지정) |
| ② 결함 항목 등록 | 결함코드·결함위치(입고검사/공정검사/출하검사/고객사용중 등)·수량을 항목 단위로 기록 |
| ③ 시정조치 과제 배정 | 원인분석, 재작업/선별, 구매처 시정조치요구서 발행, 표준서 개정 등 과제를 등록하고 담당자·목표일을 배정 |
| ④ 과제 이행 | 담당자가 과제를 완료 처리하면 완료일이 기록되고, 화면은 이 진행률(완료/전체)을 실시간으로 계산 |
| ⑤ 통보 완료 | 모든 과제가 완료되면 통보 자체의 완료일을 기록해 처리상태를 완료로 마감 |
조회조건
| 필드 | 구분 | 설명 |
|---|---|---|
| 플랜트 | Select | 전체 플랜트 또는 특정 플랜트만 선택 |
| 통보유형 | Select | 전체 · 고객클레임 · 구매처클레임 · 내부불량 |
| 자재(코드/명) | Input | 부분일치 검색, Enter 키 즉시 조회 |
| 처리상태 | Select | 전체 · 신규 · 처리중 · 지연 · 완료(미지정 시 완료 제외 기본 조회) |
| 경과일수 | Select | 전체 · 7일 이상 · 14일 이상 · 30일 이상 |
| 미완료 건만 | CheckBox | 완료일이 없는 건만 표시 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
| 통보번호 | 품질통보 문서번호 |
| 통보유형 | 고객클레임 · 구매처클레임 · 내부불량 |
| 자재 | 자재코드 + 자재명 |
| 플랜트 | 통보가 발생한 플랜트 |
| 우선순위 | 매우높음/높음/보통/낮음(목표처리기간을 결정) |
| 생성일 · 목표완료일 | YYYY.MM.DD 형식 |
| 과제진행 | 시정조치 과제 완료/전체 건수 |
| 완료일 | 통보 완료일(미완료 시 "미완료") |
| 경과일수 | 생성일부터 완료일(또는 오늘)까지 경과일 |
| 처리상태 | 신규·처리중·지연·완료를 아이콘·색상으로 구분 |
SAP 표준 기능 매핑
이 화면은 통보 생성이나 시정조치 처리 자체를 대체하지 않습니다. 통보 등록과 과제 처리는 표준 트랜잭션이 담당하고, 이 화면은 그 데이터를 조회·검증 관점에서 모아 다건 비교와 지연 자동판정을 더해 확장하는 구성입니다.
| 표준 T-code | 대응 기능 |
|---|---|
QM01 | 품질통보 생성 — 통보 헤더·결함항목 데이터가 여기서 만들어짐 |
QM02 | 품질통보 변경 — 시정조치 과제 배정·완료 처리 |
QM03 | 품질통보 조회 — 통보 1건의 상세 내용을 조회하는 표준 화면 |
도입 시 확인이 필요한 부분
우선순위별 목표처리기간(7/14/30/60일)은 회사 품질 규정에 따라 달라지므로 고정값으로 두지 않습니다. 통보유형별 담당 부서 배정 규칙도 조직 구조에 맞춰 조정이 필요합니다.
참고 CDS 뷰
운영 서비스로 연결할 때는 통보 헤더에 결함·과제 진행 현황을 집계해 붙인 뷰로 서빙하는 구성을 제안합니다.
@AbapCatalog.sqlViewName: 'ZCQMNOTIF'
@EndUserText.label: '품질통보 처리현황용 헤더 (Z)'
define view Z_C_QmNotifStatus
as select from qmel
left outer join qmfe as Defect on Defect.qmnum = qmel.qmnum
left outer join qmma as Task on Task.qmnum = qmel.qmnum
{
key qmel.qmnum as NotifNumber,
qmel.qmart as NotifType,
qmel.werk as Plant,
qmel.matnr as Material,
qmel.prioritaet as Priority,
qmel.qmdat as CreatedDate,
// 목표완료일 = 생성일 + 우선순위별 SLA (연장 뷰에서 계산)
count( distinct Defect.fepos ) as DefectCount,
count( distinct Task.mnnum ) as TaskTotal,
count( distinct case when Task.erldat is not null
then Task.mnnum end ) as TaskDone
}
group by qmel.qmnum, qmel.qmart, qmel.werk, qmel.matnr, qmel.prioritaet, qmel.qmdat
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경의 통보 유형 커스터마이징과 과제 상태 코드에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.f.DynamicPage — 조회조건은 헤더 영역, 결과는 콘텐츠 영역 |
| 조회조건 | sap.ui.layout.form.Form + Select/Input/CheckBox, 오른쪽 끝에 조회 버튼 |
| 결과 목록 | sap.ui.table.Table — 대량 컬럼·행에 적합한 그리드, 행 액션으로 상세 진입 |
| 상세보기 | sap.m.Dialog — 헤더 정보 + 결함/과제/산출근거 3개 테이블 |
| 상태 표시 | sap.m.ObjectStatus — 신규/처리중/지연/완료를 아이콘·색상으로 구분 |
| 다운로드 | CSV(UTF-8 BOM) — BaseController.downloadCsv 공통 함수 |
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon · lodash · moment |
Component.js | 디바이스 모델 초기화 · 라우터 시작 |
manifest.json | 앱 디스크립터 — zui5.qmnotif · ko 로케일 |
view/Main.view.xml | DynamicPage 골격 + 프래그먼트 조합 |
view/fragments/ | 조회조건 · 결과 테이블 · 타이틀 · 메시지스트립 · 상세 Dialog |
controller/Main.controller.js | 조회 · 필터링 · 정렬 · 상세보기 · CSV 다운로드 |
model/ModelMock.js | localdata JSON 을 fetch 로 읽는 Promise 기반 모의 모델 |
js/formatter.js | 일자 · 수량 · 상태 아이콘/색상 포맷 |
i18n/i18n_ko.properties | ko 로케일 리소스 |
localdata/notifications.json | 품질통보 헤더 검증용 데이터 |
localdata/defects.json · tasks.json | 결함 항목 · 시정조치 과제 검증용 데이터 |
운영 전환 시에는 ModelMock 내부만 실제 서비스 호출로 바꾸면 화면과 판정 로직은 그대로 씁니다.
검증 결과
화면 구성에 쓴 데이터는 통보 78건 · 결함 항목 120건 · 시정조치 과제 173건입니다.
| 검증 항목 | 결과 |
|---|---|
| 완료일 있는 통보는 모두 처리상태 = 완료 | 통과 |
| 완료일 없고 목표완료일 경과 시 처리상태 = 지연 | 통과 |
| 완료 과제수 ≤ 전체 과제수 | 통과 |
| 고객클레임은 고객코드, 구매처클레임은 구매처코드 보유 | 통과 |
| 과제 완료 여부와 완료일 존재 여부 일치 | 통과 |
| 결함·과제 FK(통보번호) 정합성 — 오류 0건 | 통과 |
| 화면 렌더링 — 실브라우저에서 조회 → Enter 키 조회 → 상세보기 실동작 후 캡처 | 4/4 |
| 조회 버튼 위치 · 적용 테마(sap_horizon) 확인 | 통과 |
거래처 · 자재 · 담당자명은 모두 검증용 데이터입니다.
자주 묻는 질문
완료된 통보는 왜 기본 조회에서 안 보이나요?
진행 중인 통보에 집중할 수 있도록 기본 조회는 신규·처리중·지연 건만 보여줍니다. 완료 건을 보려면 처리상태 조건에서 완료를 직접 선택하면 됩니다.
지연 여부는 언제 다시 계산되나요?
화면을 열거나 조회를 실행할 때마다 오늘 날짜를 기준으로 목표완료일과 비교해 다시 판정합니다. 어제는 처리중이었던 통보도 오늘 목표일을 넘기면 지연으로 바뀝니다.
시정조치 과제가 0건인 통보는 어떤 상태인가요?
목표완료일 이전이면 신규로, 목표완료일이 지났으면 과제 등록 여부와 관계없이 지연으로 표시됩니다. 과제를 안 만든 것도 처리 지연의 한 형태로 보기 때문입니다.
SAP 표준 기능과 어떻게 이어지나요?
통보유형 구분, 결함코드·결함위치 기록, 시정조치 과제 진행 관리는 SAP 표준 품질통보 화면의 데이터 구조를 그대로 따릅니다. 이 화면은 그 표준 구조 위에서 다건 조회와 지연 자동판정을 더해 확장한 것입니다.