제조원가

품질원가 점검 — 제조원가 분석, 예방·평가·실패 비용을 품목·월별로 모아 한도에 견주고 분류가 어긋난 명세까지 한 화면에서

품질 비용 네 범주 · 품질원가율 · 외부실패 비중 · 예방·평가 대 실패 · 분류 확인 · 대사 — 소개 영상과 실제 화면 8종, 그리고 CDS 코드까지

소개 영상1분 29초8개 장면음성 안내 · 자막 포함표지 → 처음 연 화면 → 조건 → 범주 구성 → 명세 → 대사 결과 → 행 상세 → 정리

도입 포인트 — 이 앱을 사용해야 하는 이유

월 마감 때 품질팀과 원가팀이 가장 자주 부딪히는 질문은 이렇습니다. 품질에 쓴 돈이 제조원가의 몇 퍼센트이고, 그 돈이 예방에 쓰였습니까, 실패 뒤처리에 쓰였습니까. 같은 품질 비용이라도 검사·교육 같은 예방·평가 활동에 쓰면 미리 막는 돈이고, 스크랩·재작업·클레임·보증 수리로 나가면 이미 터진 뒤에 치르는 돈입니다. 그런데 이 비용은 코스트센터 라인, 생산오더 정산, 품질 통보에 흩어져 있어서 한 표로 모아 보려면 화면을 여러 개 열어 엑셀에서 맞추게 됩니다.

이 앱은 그 작업을 한 화면에 모읍니다. 품질 비용 명세를 예방 · 평가 · 내부실패 · 외부실패 네 범주로 나누어 품목·월별로 합산하고, 제조원가에 대한 품질원가율, 실패비용 가운데 고객에게 넘어간 외부실패 비중, 실패 비용에 견준 예방·평가 투자 수준 세 가지를 한도에 견줍니다. 하나라도 한도를 넘으면 ‘점검 필요’로 표시하고, 활동이 원래 속하는 범주와 다른 범주로 전기된 명세도 따로 가려 보여 줍니다. 관련 기준서는 없고, 대상 영역은 제조원가 분석입니다. 표준 실행은 SAP 표준 T-code 가 그대로 담당하고, 이 화면은 품질 비용을 한도에 견주는 점검 관점을 더해 확장합니다.

한 줄 요약 — 품질 비용을 범주별로 보여 주는 화면은 많습니다. 이 화면의 값은 품목·월마다 세 가지 비율을 한도에 견주고, 활동의 기준 범주와 전기 범주가 어긋난 명세까지 한 줄로 걸러 낸 뒤, 그 숫자가 서로 맞는지 대사식으로 매번 검산한다는 데 있습니다. 판단은 사람이 하고, 화면은 확인할 자리를 좁혀 줍니다.

월 합계는 멀쩡한데 품목 안에서는 한도를 넘는다

샘플의 여섯 달 품질원가율은 월 합계로 보면 4.60%~4.98%로 한도 6.00% 안에 얌전히 들어옵니다. 그러나 같은 달을 품목·월로 풀면 유압 실린더 3월 8.46%, 4월 7.79%, 커넥터 하네스 4월 7.58%, 구동 샤프트 6월 6.75%가 한도를 넘습니다. 합계는 큰 품목의 낮은 비율에 섞여 작은 품목의 문제를 가립니다. 이 앱은 월 합계와 품목·월을 같은 화면의 다른 탭으로 두어, 합계가 괜찮을 때에도 품목 단위로 내려가 보게 합니다.

비용의 크기보다 비용이 어디서 나왔는지가 신호다

품질원가율이 한도 안이어도 구성이 나쁠 수 있습니다. 인버터 보드는 1월, 3월, 4월, 5월, 6월 다섯 달에 걸쳐 품질원가율이 4.51%~5.94%로 한도 안인데도 외부실패 비중이 51.60%~66.23%로 계속 한도 50.00%를 넘습니다. 실패 비용의 절반 넘게가 출하 뒤 고객에게서 발견된 문제라는 뜻이므로, 비율 하나만 보는 리포트로는 이 품목이 눈에 띄지 않습니다. 외부실패 비중을 별도 조건으로 둔 이유입니다.

쓴 돈이 막는 쪽에 가고 있는지도 같이 본다

예방·평가 비용은 아낄수록 좋아 보이는 항목이지만, 너무 적으면 나중에 실패 비용으로 돌아옵니다. 이 앱은 (예방 + 평가) ÷ (내부실패 + 외부실패)를 예방·평가 대 실패로 계산해 30.00% 아래로 내려가면 점검 필요로 표시합니다. 센서 브래킷 3월은 이 값이 19.72%, 커넥터 하네스 1월과 4월은 20.51%와 26.27%로 낮았습니다. 이 한도는 샘플용 가상 기준이며, 회사 기준에 맞춰 바꾸는 값입니다.

분류가 어긋난 명세는 합계에 조용히 섞여 들어간다

범주를 사람이 정해 전기하면 같은 활동이 다른 범주로 들어가는 일이 생깁니다. 샘플에는 현장 출동 비용 18,859,000원이 외부실패가 아니라 내부실패로 전기된 명세, 재검사가 평가가 아니라 내부실패 활동인데 평가로 전기된 명세 등 6건이 일부러 들어 있습니다. 합계는 맞으므로 대사로는 걸리지 않고 비율만 달라집니다. 활동 기준 범주와 전기 범주를 나란히 두고 다른 것을 ‘점검 필요(분류 확인)’로 표시하는 이유입니다.

사용 방법

  1. 조회조건을 넣습니다. 회계연도(필수, 4자리)를 확인하고, 필요하면 전기 월 시작·종료, 플랜트, 품목, 품질원가 범주, 전기일, 점검 결과를 고릅니다. 고르지 않은 조건은 걸리지 않습니다(전체).
  2. 조회합니다. 조건 영역 오른쪽 끝의 조회 버튼을 누르거나 입력 칸에서 Enter 키를 누릅니다. 초기화 버튼은 같은 줄에 있고, 앱을 열면 기본 조건으로 한 번 자동 조회됩니다.
  3. 요약을 읽습니다. 총 품질원가, 제조원가, 품질원가율, 실패비용 비중, 점검 필요 품목, 분류 확인 필요 명세, 대사 차이 건수를 위쪽 일곱 칸에서 봅니다.
  4. 탭을 옮깁니다. 품목 판정에서 범주 구성, 명세, 월별 추이, 대사 결과 순서로 넘어갑니다. 탭 이름 위 숫자는 조건에 맞는 건수입니다.
  5. 행을 눌러 상세를 봅니다. 표의 행을 누르면 상세 창이 열려 지표 전체와 같은 품목·월(또는 범주·월)의 명세를 보여 줍니다.
  6. 내려받습니다. CSV 내려받기 버튼은 지금 보고 있는 탭의 조회 결과를 UTF-8 CSV 로 저장합니다.

숫자를 믿을 수 있는가 — 검증 결과

리포트에서 가장 비싼 질문은 “이 숫자 맞아?”입니다. 대사식을 먼저 세우고 샘플 데이터 전수에 돌린 결과입니다.

대사식검사 건수차이 · 예외
예방 + 평가 + 내부실패 + 외부실패 = 총 품질원가480
명세 금액 합계 = 품목 집계 총 품질원가480
명세 범주별 합계 = 품목 범주 금액 (4범주 × 48)1920
총 품질원가 ÷ 제조원가 × 100 = 품질원가율480
품목 합계 = 월 합계 = 범주 합계120
활동 기준 범주와 전기 범주가 다른 명세 (의도적 예외)3986 (예외)

요약의 총 품질원가 1,642.0백만원, 제조원가 34,430.9백만원, 품질원가율 4.77%, 점검 필요 품목 12건(48개 품목·월 중 25.00%)은 별도 검증 스크립트가 데이터를 처음부터 다시 계산한 값과 같습니다. 날짜 조건 · 정렬 · 건수 · 쓰기 반영 · 집계 함수 두 개의 결과도 기대값과 맞았고, 화면은 헤드리스 브라우저에서 콘솔 에러 없이 열렸습니다.

무엇으로 만들었나

자리무엇왜 그렇게 두었나
화면OpenUI5 1.120 · sap_horizon 테마 · 조회조건 + 요약 + 탭 다섯 개SAP 표준 화면과 같은 Horizon 모양이라 현업이 낯설어하지 않습니다
판정·집계품목·월 단위 비율 계산과 한도 비교, 활동 기준 범주 대조비율 계산이 화면 컨트롤에 흩어지지 않도록 한곳에서 계산합니다
데이터 연결OData V2 모델 한 개를 기본 모델로 선언하고, 탭마다 조회 대상 하나에 바인딩운영에서는 서비스 주소만 바꾸면 되고 화면 코드는 건드리지 않습니다
조회 방식조건은 필터로 서버에 보내고 정렬·건수·페이징도 서버가 처리필요한 만큼만 가져오므로 명세가 늘어도 화면이 무거워지지 않습니다
오류 안내서비스 연결 실패와 빈 결과를 구분해 안내 창을 표시연결 문제를 조건에 맞는 데이터가 없는 것으로 오해하지 않게 합니다
테마sap_horizonS/4HANA 사용자의 화면 경험과 맞춥니다
항목내용
기능품질원가 점검 — 예방 · 평가 · 내부실패 · 외부실패 비용을 품목·월별로 모아 한도에 견주는 점검 화면
대상 영역제조원가 분석 (관련 기준서 없음)
표준 T-codeKSB1 · KOB1 · QM03 · QA32 · CO03 · CKM3 · KKBC_ORD
샘플 데이터가상 2026년 1~6월 · 품목 8개 · 플랜트 2곳 · 명세 398건 · 품목·월 48행

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

비용의 원천은 SAP 표준이 이미 쌓아 둔 CO 전표 라인(KSB1, KOB1), 품질 통보(QM03), 검사 로트(QA32), 생산오더 원가(CO03, KKBC_ORD)입니다. 이 앱은 그 데이터 구조를 그대로 이어받아 네 범주로 묶고 한도에 견주는 관점만 더합니다. 기존 표준 리포트를 없앨 필요가 없습니다.

실행 화면

검증용 샘플 데이터로 실제 브라우저에서 찍은 화면 8종입니다. 화면을 누르면 크게 볼 수 있고, 화면 순서는 실제로 쓰는 순서를 따랐습니다.

처음 열었을 때

앱을 열면 올해 값으로 한 번 자동 조회됩니다. 조회조건, 요약, 표가 위에서 아래로 놓입니다.

처음 연 화면 — 조회조건 · 요약 일곱 칸 · 품목 판정 표
처음 연 화면 — 조회조건, 요약 일곱 칸, 품목·월별 판정 표가 한 화면에 뜹니다.

앱을 열면 올해 값으로 자동 조회되어 품목 8개 × 6개월, 48행이 한 표에 나옵니다. 위쪽 요약에서 총 품질원가 1,642.0백만원, 제조원가 34,430.9백만원, 품질원가율 4.77%, 실패비용 비중 61.74%를 먼저 읽고, 표에서는 품목·월마다 네 범주 금액과 세 가지 비율, 점검 결과를 한 줄씩 봅니다. 점검 필요 품목 12건은 표의 점검 결과 열에서 바로 구별됩니다.

조회조건으로 좁힌 화면 — 플랜트와 점검 결과
조건으로 좁히기 — 플랜트와 점검 결과를 골라 조회한 모습입니다.

플랜트와 점검 결과를 고르고 조건 영역 오른쪽 끝의 조회 버튼을 누르면 조건에 맞는 행만 남습니다. 입력 칸에서 Enter 키를 눌러도 같은 조회가 되고, 초기화 버튼은 처음 조건으로 되돌립니다. 위쪽 요약 일곱 칸도 같은 조건으로 다시 계산되므로 표와 요약이 서로 다른 범위를 보는 일은 없습니다.

3월을 열고, 한 행을 파고든다

월 마감 회의에서는 한 달을 골라 걸린 품목을 보고 그 품목의 명세까지 내려갑니다.

3월만 조회한 품목 판정
3월만 조회 — 전기 월 시작과 종료를 3월로 두면 그 달의 품목 8개만 남습니다.

전기 월 시작과 종료를 같은 달로 두면 그 달의 품목만 남습니다. 3월에는 유압 실린더가 품질원가율 8.46%로 한도 6.00%를 넘었고, 센서 브래킷은 외부실패 비중과 예방·평가 대 실패 두 조건이 함께 걸렸으며, 인버터 보드는 외부실패 비중 53.70%로 점검 필요가 됩니다. 한 달에 세 품목이 걸린 달이라 월 마감 회의에서 가장 먼저 열어 볼 화면입니다.

행을 눌러 연 품목 상세 창
행을 눌러 상세 보기 — 품목 한 행을 누르면 지표 전체와 같은 품목·월의 명세가 열립니다.

표의 행을 누르면 상세 창이 열립니다. 위에는 그 품목·월의 제조원가, 네 범주 금액, 세 가지 비율과 한도가 나오고, 아래에는 같은 품목·월에 쌓인 명세가 함께 나옵니다. 유압 실린더 3월은 한도를 넘은 비율과 그 비율을 만든 명세를 한 창에서 이어 볼 수 있어, 표준 화면을 여러 개 열어 숫자를 맞추던 수고가 줄어듭니다.

같은 데이터를 다른 묶음으로 본다

범주 구성 · 명세 · 월별 추이는 같은 명세를 범주, 활동, 월로 다시 묶어 보여 줍니다.

범주 구성 탭 — 월별 네 범주
범주 구성 — 월마다 예방, 평가, 내부실패, 외부실패 금액과 비율을 봅니다.

월별로 네 범주의 금액을 모아 총 품질원가에서 차지하는 몫과 제조원가 대비 비율을 함께 보여 줍니다. 예방 208.5백만원, 평가 419.7백만원, 내부실패 570.2백만원, 외부실패 443.5백만원이 여섯 달의 합계이며, 실패비용(내부+외부)이 총 품질원가의 61.74%를 차지합니다. 비율은 같은 달의 총 품질원가와 제조원가를 분모로 계산합니다.

명세 탭 — 활동별 금액과 전기 범주
명세 — 활동별 금액과 전기 범주, 활동 기준 범주를 나란히 봅니다.

398건의 품질원가 명세가 활동 · 원천 · 전기일 · 금액 · 전기 범주 · 활동 기준 범주와 함께 나옵니다. 활동이 원래 속하는 범주와 실제로 전기된 범주가 다르면 점검 필요(분류 확인)로 표시되며, 이런 명세가 6건 들어 있습니다. 전기일 시작·종료는 이 탭에서만 걸리는 조건입니다.

월별 추이 탭 — 품질원가율과 점검 필요 품목 비율
월별 추이 — 여섯 달의 품질원가율, 실패비용 비중, 점검 필요 품목 수를 비교합니다.

월 합계 기준으로 품질원가율은 4.60%에서 4.98% 사이에서 움직이고, 점검 필요 품목은 1월 2건, 2월 1건, 3월 3건, 4월 3건, 5월 1건, 6월 2건으로 여섯 달에 합계 12건입니다. 월 합계의 품질원가율은 괜찮아 보여도 품목 단위로는 한도를 넘는 달이 섞여 있다는 점을 확인하는 화면입니다.

합계가 맞는지 마지막으로 확인한다

숫자를 믿고 쓰려면 합계가 맞는지 먼저 확인해야 합니다.

대사 결과 탭 — 합계가 맞는지 다섯 가지 식
대사 결과 — 정합성 대사 네 가지와 의도적 예외 한 가지가 구분되어 나옵니다.

네 가지 대사식은 검사 건수와 차이 건수를 보여 주고, 활동 기준 범주와 전기 범주가 다른 명세 6건은 의도적 예외로 따로 셉니다. 정합성 대사의 차이 건수가 모두 0이라는 사실과 분류 확인이 필요한 명세가 있다는 사실이 서로 섞이지 않게 하려는 구성입니다.

화면 뒤에서 일어나는 일

품목·월 한 행마다 아래 조건을 차례로 확인하고, 하나라도 걸리면 점검 필요로 표시합니다. 걸린 조건은 점검 내용 칸에 모두 적힙니다.

판정 조건결과 상태사용자 조치
품질원가율 = 총 품질원가 ÷ 제조원가 × 100 이 한도 6.00%를 넘음점검 필요제조원가 대비 품질 비용이 큰 달입니다. 범주 구성에서 어느 범주가 늘었는지 확인합니다.
외부실패 비중 = 외부실패 ÷ (내부실패 + 외부실패) × 100 이 50.00%를 넘음점검 필요고객 클레임·반품·보증 수리 비중이 큽니다. 출하 전에 걸러지지 않은 원인을 확인합니다.
예방·평가 대 실패 = (예방 + 평가) ÷ (내부실패 + 외부실패) × 100 이 30.00% 미만점검 필요예방·평가 활동이 실패 비용에 비해 적은지 확인합니다.
세 조건에 모두 해당 없음정상한도 안입니다.
명세의 활동 기준 범주와 전기 범주가 다름점검 필요(분류 확인)활동의 기준 범주와 전기된 범주를 확인합니다. 의도적 예외로 따로 집계합니다.

한도(6.00% · 50.00% · 30.00%)는 이 화면의 가상 기준값이며 회사 기준으로 바꿔 씁니다. 점검 필요는 원인을 단정하는 표시가 아니라 확인 대상을 가리는 표시이고, 최종 판단은 회사가 합니다.

산출과 대사의 순서

  1. 예방 + 평가 + 내부실패 + 외부실패를 더해 품목·월의 총 품질원가를 구합니다.
  2. 총 품질원가 ÷ 제조원가 × 100 으로 품질원가율을 구하고 소수 둘째 자리에서 반올림합니다.
  3. 실패비용 비중, 외부실패 비중, 예방·평가 대 실패를 같은 방식으로 구해 한도와 견줍니다.
  4. 명세 금액 합계가 품목 집계의 총 품질원가와 같은지, 품목 합계가 월 합계·범주 합계와 같은지 대사합니다.

조회조건

조건필수기본값동작
회계연도필수20264자리 숫자가 아니면 안내 문구를 띄우고 조회하지 않습니다
전기 월 시작 · 종료선택전체둘 다 고르면 그 구간, 하나만 고르면 그 월 이후 또는 이전
플랜트선택전체전체를 고르면 조건이 걸리지 않습니다
품목선택전체품목 하나를 고릅니다
품질원가 범주선택전체명세와 범주 구성 탭에 걸립니다
전기일 시작 · 종료선택비어 있음명세 탭에만 걸립니다. 시작이 종료보다 늦으면 안내 문구를 띄웁니다
점검 결과선택전체정상 또는 점검 필요

결과 컬럼

컬럼의미산출식
제조원가품목·월의 제조원가(원)오더 정산 합계
총 품질원가네 범주의 합(원)예방 + 평가 + 내부실패 + 외부실패
품질원가율제조원가 대비 품질 비용(%)총 품질원가 ÷ 제조원가 × 100
실패비용 비중총 품질원가 중 실패 비용의 몫(%)(내부실패 + 외부실패) ÷ 총 품질원가 × 100
외부실패 비중실패 비용 중 고객에게 넘어간 몫(%)외부실패 ÷ (내부실패 + 외부실패) × 100
예방·평가 대 실패막는 쪽 비용 대 실패 비용(%)(예방 + 평가) ÷ (내부실패 + 외부실패) × 100
점검 결과 · 점검 내용정상 또는 점검 필요와 걸린 조건세 조건 비교
분류 확인 필요 명세활동 기준 범주 ≠ 전기 범주인 명세 수명세 대조

파일 구성

앱 폴더/
├─ index.html · Component.js · manifest.json     진입점과 서비스 선언
├─ view/        Main.view.xml · DetailDialog.fragment.xml
├─ controller/  Main.controller.js · BaseController.js
├─ model/       formatter.js · ErrorHandler.js
├─ css/ · i18n/ 스타일과 문구
├─ media/       소개 영상과 포스터
└─ odata/       서비스 정의 · 서비스 로직 · 데이터

SAP 표준 기능 확장 포인트 — 표준 T-code 와 어떻게 연계되는지

표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회 · 검증 관점을 더해 확장합니다. 표준이 이미 잘하는 일은 표준에 두고, 품질 비용을 네 범주로 묶어 한도에 견주는 자리만 이어 붙이는 방향으로 만들었습니다.

표준으로 되는 것과 이 앱이 더하는 것

하고 싶은 일SAP 표준이 앱이 더하는 관점
코스트센터에 쌓인 검사·교정·교육 비용 보기KSB1활동별로 예방·평가 범주에 묶고 품목·월로 모읍니다
오더에 쌓인 스크랩·재작업 비용 보기KOB1내부실패 범주로 묶고 같은 품목·월의 다른 범주와 나란히 둡니다
클레임·반품 통보 확인QM03외부실패 명세의 건수와 금액을 통보와 맞춰 볼 자리를 만듭니다
검사 로트 결과 확인QA32평가비용(검사) 건수를 로트 목록과 대조합니다
생산오더 원가 보기CO03품목·월 제조원가를 분모로 품질원가율을 계산합니다
법정 · 공시 숫자표준 마감 거래이 앱은 만들지 않습니다 — 표준에 그대로 둡니다

T-code 별 연계 지점

T-code이름연계
KSB1코스트센터 실제 라인 아이템검사·교정·교육 같은 예방·평가 활동 비용의 원천 라인입니다. 이 앱의 명세 금액이 이 라인의 금액과 같은 필드에서 나오므로, 한 활동의 월 합계를 두 화면에서 맞춰 볼 수 있습니다. 이 앱에서 값이 이상하면 KSB1 에서 같은 코스트센터와 월로 원천 라인을 확인합니다.
KOB1오더 실제 라인 아이템스크랩·재작업 같은 내부실패 비용의 오더별 원천 라인입니다. 내부실패 금액이 큰 품목·월은 KOB1 에서 오더별 라인으로 내려가 원인 오더를 찾습니다.
QM03품질 통보 표시클레임·반품 통보와 외부실패 명세를 대조합니다. 외부실패 비중이 한도를 넘은 품목·월은 QM03 에서 통보 건수와 내용을 확인하는 것이 다음 단계입니다.
QA32검사 로트 목록평가비용(검사) 건수와 결과를 대조합니다. 평가비용이 갑자기 늘거나 줄면 검사 로트 건수가 같이 움직였는지 봅니다.
CO03생산오더 표시품목·월 제조원가의 분모가 되는 오더 원가를 확인합니다. 품질원가율이 이상하면 분자(품질 비용)뿐 아니라 분모(제조원가)도 CO03 에서 같이 확인합니다.
CKM3자재 가격 분석품목 원가 구성이 바뀐 달에 품질원가율이 움직였는지 볼 때 씁니다.
KKBC_ORD오더 원가 분석제조원가 집계를 대조하는 자리입니다. 오더 정산 합계가 이 앱의 제조원가와 같은지 확인합니다.

이 앱을 도입한다고 기존 리포트를 없애야 하는 것은 아닙니다. 법정·감사 대응에 쓰는 표준 거래는 그대로 두고, 이 앱은 그 앞 단계에서 “어느 품목·월을 먼저 열어 볼 것인가”를 좁히는 용도로 쓰시면 됩니다.

분석 지표 정의

지표산식 · 판정 기준대응 기능원천 데이터비고
총 품질원가예방 + 평가 + 내부실패 + 외부실패품목 판정 · 월별 추이명세 금액 합계네 범주는 전기 범주 기준
품질원가율총 품질원가 ÷ 제조원가 × 100, 한도 6.00% 초과 시 점검 필요품목 판정제조원가(오더 정산 합계)한도는 가상 기준값
실패비용 비중(내부 + 외부) ÷ 총 품질원가 × 100품목 판정 · 월별 추이범주별 금액참고 지표
외부실패 비중외부 ÷ (내부 + 외부) × 100, 50.00% 초과 시 점검 필요품목 판정범주별 금액고객에게 넘어간 불량의 몫
예방·평가 대 실패(예방 + 평가) ÷ (내부 + 외부) × 100, 30.00% 미만 시 점검 필요품목 판정범주별 금액예방·평가 투자 수준
분류 확인 필요 명세활동 기준 범주 ≠ 전기 범주명세활동 기준 범주 매핑의도적 예외로 별도 집계

S/4HANA 분석 스택과의 자리

S/4HANA 에는 CO 전표 라인을 보는 표준 CDS 분석 뷰와 Fiori 분석 앱, Analysis for Office 같은 도구가 이미 있습니다. 이 앱은 그 도구들과 경쟁하는 것이 아니라 “품질 비용을 네 범주로 묶어 한도에 견주는 판정 규칙”이라는 한 층을 더합니다. 운영에서는 이 글의 CDS 구성처럼 ACDOCA 와 활동 매핑 테이블을 바탕으로 뷰를 만들고, 판정 규칙은 소비 뷰에서 계산해 화면은 서비스만 읽습니다. 표준 CDS 뷰의 정확한 이름과 필드는 릴리스마다 다를 수 있어, 이 글에서는 원천 테이블을 기준으로 적었고 확인이 필요한 곳에는 확인 필요로 표시했습니다.

확장 포인트 — 운영에서 실제로 손대는 자리

자리손대는 내용화면 코드를 고쳐야 하나
활동 → 기준 범주 매핑회사의 품질 활동(검사, 교정, 재작업, 클레임 처리 등)이 네 범주 중 어디에 속하는지 정합니다아닙니다. 매핑 테이블 값입니다
전기 계정 → 전기 범주 매핑어떤 계정이나 오더 유형으로 전기된 비용을 어느 범주로 볼지 정합니다아닙니다. 매핑 테이블 값입니다
한도품질원가율 · 외부실패 비중 · 예방·평가 하한을 회사 기준으로 바꿉니다아닙니다. 한도 테이블 값입니다
제조원가 범위분모에 넣을 제조원가의 범위(오더 정산 합계 등)를 정합니다아닙니다. 제조원가 뷰의 선택 조건입니다
커스텀 필드품질 통보 번호나 불량 코드를 명세에 더해 보려는 경우명세 컬럼 추가가 필요합니다
권한플랜트 단위로 볼 수 있는 범위를 나눕니다아닙니다. 접근 제어 정의입니다

CDS 구성 — 운영 데이터에 붙일 때의 뷰와 테이블

샘플에서는 서비스가 정해진 모양의 데이터를 돌려주지만, 운영에서는 ACDOCA 와 매핑 테이블 위에 CDS 뷰를 쌓아 같은 모양을 만들어야 합니다. 아래는 그 뼈대입니다. 이름과 필드 가운데 릴리스나 고객사 설정에 따라 달라질 수 있는 부분은 코드 안에 확인 필요로 적었습니다.

뷰 레이어 구성

레이어객체하는 일왜 나누나
기준(매핑)ZQCOST_ACTMAP · ZQCOST_ACCMAP · ZQCOST_CATMAP · ZQCOST_LIMIT · ZQCOST_MFGACC활동의 기준 범주, 전기 범주, 범주 이름, 한도, 제조원가 계정군을 담습니다회사마다 다른 기준을 코드가 아니라 값으로 두기 위해서입니다
차원ZI_QualCostCategory네 범주의 코드와 이름, 적합비용·실패비용 구분을 제공합니다화면의 범주 이름과 구분이 한곳에서 나오게 합니다
큐브ZI_QualCostItem · ZI_QualCostProdMonth · ZI_QualCostMfg명세 단위 금액과 범주 대조, 품목·월 단위 네 범주 합계, 품목·월 제조원가(제조원가 계정군 기준)를 만듭니다명세 수준과 집계 수준을 나누어 합계 대사를 쉽게 합니다
쿼리(소비)ZC_QualCostProdQuery세 가지 비율을 계산하고 한도에 견주어 점검 결과를 정합니다판정 규칙을 한곳에 두어 화면이 규칙을 모르게 합니다
권한ZC_QualCostProdQuery 접근 제어플랜트 단위로 읽을 수 있는 범위를 제한합니다합계 화면으로 다른 플랜트 숫자가 새는 일을 막습니다
서비스ZUI_QualCost (정의 + 바인딩)OData V2 서비스로 게시합니다화면은 서비스 주소만 알면 됩니다

① 매핑 테이블 — 활동 · 계정 · 범주 · 한도 · 제조원가 계정군

이 앱을 운영에 붙일 때 가장 먼저 합의해야 하는 것이 이 표들입니다. 회사마다 품질 활동의 이름과 계정 체계가 달라서, 매핑을 값으로 두어야 뷰를 바꾸지 않고 기준만 바꿀 수 있습니다.

" ─────────────────────────────────────────────────────────
" ① 매핑 테이블 5종
" 역할  : 활동·계정을 네 범주로 매핑하고 한도와 제조원가 범위를 담는다
" 이유  : 기준이 바뀔 때마다 이송을 새로 만들지 않도록 값으로 둔다
" ─────────────────────────────────────────────────────────
@EndUserText.label : '품질 활동 → 기준 범주 매핑'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
define table zqcost_actmap {
  key mandt    : mandt not null;
  key lstar    : lstar not null;          " 활동 유형 (확인 필요 — 활동 식별 방식은 고객사별)
  std_cat      : abap.char(1);            " 1 예방 · 2 평가 · 3 내부실패 · 4 외부실패
  act_name     : abap.char(20);
}

@EndUserText.label : '전기 계정 → 전기 범주 매핑'
define table zqcost_accmap {
  key mandt    : mandt not null;
  key racct    : racct not null;          " 총계정원장 계정
  coq_cat      : abap.char(1);            " 전기 범주
}

@EndUserText.label : '품질원가 범주 이름'
define table zqcost_catmap {
  key mandt    : mandt not null;
  key coq_cat  : abap.char(1) not null;
  cat_name     : abap.char(12);           " 예방 · 평가 · 내부실패 · 외부실패
  group_name   : abap.char(24);           " 적합비용(예방·평가) · 실패비용(내부·외부)
}

@EndUserText.label : '품질원가 점검 한도'
define table zqcost_limit {
  key mandt    : mandt not null;
  key werks    : werks_d not null;        " 플랜트 (품목군 단위로 확장 가능)
  rate_limit   : abap.dec(7,2);           " 품질원가율 한도(%)   예: 6.00
  ext_limit    : abap.dec(7,2);           " 외부실패 비중 한도(%) 예: 50.00
  pf_limit     : abap.dec(7,2);           " 예방·평가 하한(%)    예: 30.00
}

@EndUserText.label : '제조원가 계정군'
define table zqcost_mfgacc {
  key mandt    : mandt not null;
  key racct    : racct not null;          " 제조원가로 볼 계정 (확인 필요)
}

② 차원 — 범주

범주 이름과 구분을 화면 곳곳에 문자열로 흩어 두면 이름이 바뀔 때 놓치는 곳이 생깁니다. 차원 뷰 하나에서 모두 읽도록 했습니다.

" ─────────────────────────────────────────────────────────
" ② ZI_QualCostCategory — 범주 차원
" 역할  : 범주 코드·이름·구분 제공
" 이유  : 화면과 집계가 같은 이름을 쓰게 한다
" ─────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #NOT_REQUIRED
@EndUserText.label : '품질원가 범주'
@ObjectModel.representativeKey : 'CoqCat'
@Analytics.dataCategory : #DIMENSION
define view entity ZI_QualCostCategory
  as select from zqcost_catmap
{
  key coq_cat     as CoqCat,
      cat_name    as CoqCatName,
      group_name  as GroupName
}

③ 큐브 — 명세 단위 (범주 대조까지)

명세 한 줄마다 전기 범주와 활동 기준 범주를 나란히 두고, 다르면 점검 필요(분류 확인)로 표시합니다. 이 뷰에서 정해지는 것은 “분류가 어긋난 명세를 어떻게 알아내는가”이고, 합계 대사의 출발점이기도 합니다.

" ─────────────────────────────────────────────────────────
" ③ ZI_QualCostItem — 명세 큐브
" 역할  : ACDOCA 라인을 전기 범주와 기준 범주에 붙여 한 줄씩 제공
" 이유  : 품목·월 집계의 합이 이 뷰의 합과 같다는 대사를 가능하게 한다
" ─────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '품질원가 명세'
@Analytics.dataCategory : #CUBE
define view entity ZI_QualCostItem
  as select from acdoca as j
    inner join   zqcost_accmap as a on a.racct = j.racct          " 품질 비용 계정만
    left outer join zqcost_actmap as m on m.lstar = j.lstar
  association [0..1] to I_Product as _Product on _Product.Product = j.matnr
{
  key j.rldnr  as Ledger,
  key j.rbukrs as CompanyCode,
  key j.gjahr  as FiscalYear,
  key j.belnr  as AccountingDocument,
  key j.docln  as LedgerGLLineItem,
      j.poper  as FiscalPeriod,
      j.budat  as PostingDate,
      j.werks  as PlantCode,
      j.matnr  as ProductCode,
      a.coq_cat as PostedCat,                         " 전기 범주
      m.std_cat as StdCat,                            " 활동 기준 범주
      case when m.std_cat is not null and m.std_cat <> a.coq_cat
           then 'CHECK' else 'OK' end as CatCheck,    " 분류 확인 필요 여부
      @Semantics.amount.currencyCode : 'Currency'
      j.hsl     as Amount,
      j.rhcur   as Currency,
      _Product
}

④ 큐브 — 품목·월 단위 집계

네 범주를 한 번의 집계로 가로로 펼칩니다. case 로 범주별 합을 만들고 group by 로 품목·월을 묶으며, 합계 열을 따로 계산하지 않고 소비 뷰에서 더합니다. 합계의 출처를 한 곳으로 두어야 “명세 합계 = 품목 합계” 대사가 의미를 가집니다.

" ─────────────────────────────────────────────────────────
" ④ ZI_QualCostProdMonth — 품목·월 큐브
" 역할  : 명세를 품목·월로 묶어 네 범주 금액과 제조원가를 제공
" 이유  : 비율 계산의 분자(범주 합)와 분모(제조원가)를 같은 줄에 둔다
" ─────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '품질원가 품목·월 집계'
@Analytics.dataCategory : #CUBE
define view entity ZI_QualCostProdMonth
  as select from ZI_QualCostItem as i
{
  key i.FiscalYear,
  key i.FiscalPeriod,
  key i.PlantCode,
  key i.ProductCode,
      i.Currency,
      @Semantics.amount.currencyCode : 'Currency'
      sum( case i.PostedCat when '1' then i.Amount else cast( 0 as abap.curr(15,2) ) end ) as PreventionAmt,
      @Semantics.amount.currencyCode : 'Currency'
      sum( case i.PostedCat when '2' then i.Amount else cast( 0 as abap.curr(15,2) ) end ) as AppraisalAmt,
      @Semantics.amount.currencyCode : 'Currency'
      sum( case i.PostedCat when '3' then i.Amount else cast( 0 as abap.curr(15,2) ) end ) as IntFailAmt,
      @Semantics.amount.currencyCode : 'Currency'
      sum( case i.PostedCat when '4' then i.Amount else cast( 0 as abap.curr(15,2) ) end ) as ExtFailAmt,
      sum( case i.CatCheck when 'CHECK' then 1 else 0 end ) as MisclassifiedCnt,
      count( * ) as ItemCnt
}
group by i.FiscalYear, i.FiscalPeriod, i.PlantCode, i.ProductCode, i.Currency

⑤ 쿼리 — 비율 계산과 점검 판정

이 뷰에서 판정 규칙이 정해집니다. 세 비율을 계산해 한도 테이블과 견주고, 걸린 조건을 점검 코드로 만듭니다. 화면은 이 결과만 읽으므로 한도나 규칙이 바뀌어도 화면 코드를 고치지 않습니다. 나눗셈은 분모가 0일 때를 막아 두어야 하고, 제조원가가 없는 품목·월이 생기는 경우의 처리는 도입 때 정해야 합니다.

" ─────────────────────────────────────────────────────────
" ⑤ ZC_QualCostProdQuery — 소비 쿼리
" 역할  : 품질원가율·외부실패 비중·예방평가 대 실패 계산과 한도 비교
" 이유  : 판정 규칙을 화면이 아니라 뷰에 둔다
" ─────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '품질원가 품목 판정'
@Metadata.allowExtensions : true
define view entity ZC_QualCostProdQuery
  as select from ZI_QualCostProdMonth as p
    left outer join zqcost_limit as l on l.werks = p.PlantCode
    left outer join ZI_QualCostMfg as f
         on f.FiscalYear = p.FiscalYear and f.FiscalPeriod = p.FiscalPeriod
        and f.PlantCode  = p.PlantCode  and f.ProductCode  = p.ProductCode
{
  @Consumption.filter : { selectionType : #SINGLE, mandatory : true }
  key p.FiscalYear,
  @Consumption.filter.selectionType : #INTERVAL
  key p.FiscalPeriod,
  @Consumption.filter.selectionType : #SINGLE
  key p.PlantCode,
  @Consumption.filter.selectionType : #SINGLE
  key p.ProductCode,
      f.MfgCost,
      p.PreventionAmt, p.AppraisalAmt, p.IntFailAmt, p.ExtFailAmt,
      ( p.PreventionAmt + p.AppraisalAmt + p.IntFailAmt + p.ExtFailAmt ) as TotalCoq,

      " 비율은 소수 둘째 자리 반올림 — 분모 0 처리는 도입 시 확정 (확인 필요)
      division( cast( ( p.PreventionAmt + p.AppraisalAmt + p.IntFailAmt + p.ExtFailAmt ) as abap.dec(15,2) ) * 100,
                cast( f.MfgCost as abap.dec(15,2) ), 2 )                        as CoqRate,
      division( cast( ( p.IntFailAmt + p.ExtFailAmt ) as abap.dec(15,2) ) * 100,
                cast( ( p.PreventionAmt + p.AppraisalAmt + p.IntFailAmt + p.ExtFailAmt ) as abap.dec(15,2) ), 2 ) as FailShare,
      division( cast( p.ExtFailAmt as abap.dec(15,2) ) * 100,
                cast( ( p.IntFailAmt + p.ExtFailAmt ) as abap.dec(15,2) ), 2 )  as ExtShare,
      division( cast( ( p.PreventionAmt + p.AppraisalAmt ) as abap.dec(15,2) ) * 100,
                cast( ( p.IntFailAmt + p.ExtFailAmt ) as abap.dec(15,2) ), 2 )  as PfRatio,

      l.rate_limit as RateLimit, l.ext_limit as ExtLimit, l.pf_limit as PfLimit,
      p.MisclassifiedCnt,
      p.ItemCnt
      " 점검 결과 : 세 비율 중 하나라도 한도를 넘거나 MisclassifiedCnt > 0 이면 '점검 필요'
      " 걸린 조건을 점검 코드(RATE · EXT · PREV)로 이어 붙이는 case 식은 지면상 생략
}

⑥ 접근 제어 — 플랜트 단위 권한

권한을 명세 뷰에만 걸면 품목·월 집계나 월별 합계로 다른 플랜트의 숫자가 새어 나갑니다. 소비 쿼리와 집계 큐브 양쪽에 같은 규칙을 걸었습니다. 권한 객체와 필드는 회사의 권한 설계에 맞춰 정하는 값이라 확인 필요입니다.

" ─────────────────────────────────────────────────────────
" ⑥ ZC_QualCostProdQuery 접근 제어 (DCL)
" 역할  : 사용자의 플랜트 권한 범위의 행만 읽게 한다
" 이유  : 집계 단계에서 걸어야 합계로 새지 않는다
" ─────────────────────────────────────────────────────────
@EndUserText.label : '품질원가 플랜트 권한'
@MappingRole : true
define role ZC_QUALCOSTPRODQUERY {
  grant select on ZC_QualCostProdQuery
    where ( PlantCode ) = aspect pfcg_auth( M_MSEG_WWA, WERKS, ACTVT = '03' );
    " 권한 객체와 활동 값은 고객사 권한 설계에 따른다 (확인 필요)
}

⑦ 서비스 정의와 바인딩

마지막 단계는 뷰를 서비스로 게시하는 일입니다. 화면은 게시된 서비스 주소만 알면 되므로, 이 단계가 끝나면 화면 쪽에서는 서비스 주소만 바꿉니다. OData V2 로 게시할지 V4 로 게시할지는 화면이 쓰는 모델 종류와 맞춰야 합니다.

" ─────────────────────────────────────────────────────────
" ⑦ ZUI_QualCost — 서비스 정의와 바인딩
" 역할  : 소비 쿼리와 명세·월 집계를 OData 서비스로 노출
" 이유  : 화면과 CDS 사이의 계약을 서비스 한 곳으로 모은다
" ─────────────────────────────────────────────────────────
@EndUserText.label : '품질원가 점검 서비스'
define service ZUI_QualCost {
  expose ZC_QualCostProdQuery as ProdCheck;
  expose ZI_QualCostItem      as CostItem;
  expose ZI_QualCostCategory  as Category;
}

" 서비스 바인딩 : 유형 OData V2 - UI, 이름 ZUI_QUALCOST_O2 로 만들고 게시 (확인 필요)
" 활성화 확인 : /IWFND/MAINT_SERVICE 또는 바인딩 화면의 게시 버튼

운영 시점에 해야 할 일

개발보다 정하는 일이 많습니다. 아래 표의 항목은 코딩이 아니라 합의입니다.

해야 할 일무엇을 정하나정하지 않으면누가
활동 · 계정 → 범주 매핑검사, 교정, 교육, 스크랩, 재작업, 클레임, 보증 수리 등 활동이 네 범주 중 어디에 속하는지, 어떤 계정으로 전기되는지범주 합계가 표준 보고서와 달라 첫 회의에서 막힙니다원가회계 · 품질관리
제조원가 범위분모에 넣을 제조원가(오더 정산 합계 등)와 계정군품질원가율의 기준이 흔들려 한도 비교가 의미를 잃습니다원가회계
한도품질원가율 · 외부실패 비중 · 예방·평가 하한을 플랜트나 품목군별로 얼마로 둘지점검 필요가 너무 많거나 적어 화면을 신뢰하지 않게 됩니다원가회계 · 품질관리
분모 0 처리제조원가가 없는 품목·월(생산 없는 달)의 비율을 비워 둘지 0으로 둘지비율 열이 오류를 내거나 의미 없는 값이 나옵니다원가회계
부호 · 환입 처리품질 비용의 환입(클레임 회수 등)을 음수 라인으로 둘지 별도로 둘지합계가 의도와 달라집니다원가회계
권한 설계플랜트 · 회사코드 단위로 볼 수 있는 범위합계 화면으로 다른 플랜트 숫자가 드러납니다보안 · 권한
대사 체계KSB1 · KOB1 · QM03 · QA32 · CO03 과 매월 맞출 항목과 허용 차이화면 숫자와 표준 화면 숫자가 어긋났을 때 누가 어떻게 풀지 정해져 있지 않습니다원가회계 · IT
전송(TR) 순서테이블 → 차원 → 큐브 → 소비 쿼리 → 접근 제어 → 서비스 순으로 이송의존성 때문에 활성화가 실패합니다IT
서비스 활성화서비스 게시 후 활성화 확인, 화면의 서비스 주소 교체화면이 서비스 연결 안내 창만 띄웁니다IT

운영 데이터로 갈 때

샘플은 명세 398건이지만 운영의 ACDOCA 는 수천만 건이 될 수 있습니다. 첫째, 회계연도를 필수 조건으로 두어 한 해 범위 안에서만 읽게 하고, 명세 탭은 전기 월이나 전기일로 좁힌 뒤 읽도록 안내합니다. 둘째, 품목·월 집계는 CDS 에서 매번 계산하기보다 집계 결과를 미리 쌓아 두는 방식(마감 후 배치로 적재)을 검토합니다. 셋째, 전기일 · 플랜트 · 품목에 해당하는 인덱스와 조회 조건이 실제로 쓰이는지 실행 계획으로 확인합니다. 화면의 응답 시간 기준은 조회 한 번에 몇 초 안으로 둘지 먼저 정하고 그에 맞춰 집계 위치를 고르시기 바랍니다.

자주 묻는 질문

도입을 검토하시는 분들이 자주 묻는 내용을 숫자와 산식, 화면과 조작, 분류와 예외, 도입과 운영으로 나누어 모았습니다.

숫자와 산식

품질원가율은 어떻게 계산합니까?

예방 · 평가 · 내부실패 · 외부실패 네 범주를 더한 총 품질원가를 같은 품목·월의 제조원가로 나눈 뒤 100을 곱하고, 소수 둘째 자리에서 반올림합니다. 샘플 전체로는 총 품질원가 1,642.0백만원을 제조원가 34,430.9백만원으로 나눈 4.77%입니다. 대사식으로 품목·월 48행 전부에서 이 계산이 표의 값과 맞는지 검사하며 차이는 0건입니다.

실패비용 비중과 외부실패 비중은 어떻게 다릅니까?

실패비용 비중은 총 품질원가 중 내부실패와 외부실패가 차지하는 몫이고, 외부실패 비중은 그 실패 비용 가운데 외부실패(고객에게 넘어간 것)가 차지하는 몫입니다. 샘플에서 실패비용 비중은 61.74%이고, 점검 조건으로 쓰는 것은 외부실패 비중(한도 50.00%)입니다. 실패비용 비중은 참고 지표라서 그 자체로는 점검 필요를 만들지 않습니다.

예방·평가 대 실패 비율은 무엇을 뜻합니까?

(예방 + 평가) ÷ (내부실패 + 외부실패) × 100 입니다. 막는 쪽에 쓴 돈이 실패 뒤처리에 쓴 돈의 몇 퍼센트인지 보여 주며, 30.00% 아래이면 점검 필요가 됩니다. 값이 낮다는 것은 예방·평가에 쓴 돈이 적다는 사실을 말할 뿐, 적정 수준인지는 회사가 판단합니다. 샘플에서는 센서 브래킷 3월이 19.72%로 가장 낮았습니다.

한도는 어떤 값입니까? 바꿀 수 있습니까?

샘플에서는 품질원가율 6.00%, 외부실패 비중 50.00%, 예방·평가 하한 30.00%를 씁니다. 이 값은 설명을 위한 가상 기준이며 회사의 실제 기준과 무관합니다. 운영에서는 한도 테이블의 값으로 두므로 화면 코드를 고치지 않고 플랜트나 품목군별로 바꿀 수 있습니다. 한도는 과거 몇 달의 데이터에 먼저 돌려 점검 필요 비율이 현업이 느끼는 수준과 맞는지 보고 정하시기 바랍니다.

점검 필요 12건이면 품질 문제가 12건입니까?

아닙니다. 12건은 48개 품목·월 가운데 세 조건 중 하나 이상이 한도를 넘었다는 뜻입니다. 한도 초과는 원인을 단정하지 않으며, 일시적인 클레임이나 한 번의 대규모 재작업일 수도 있습니다. 화면은 확인할 자리를 좁혀 줄 뿐이고, 원인을 판단하고 조치를 정하는 일은 현업과 회사가 합니다.

월 합계 품질원가율은 괜찮은데 품목은 점검 필요일 수 있습니까?

그렇습니다. 샘플의 월 합계 품질원가율은 4.60%~4.98%로 한도 안이지만, 같은 달의 유압 실린더는 8.46%(3월)와 7.79%(4월)로 한도를 넘었습니다. 합계는 비용이 작은 품목의 낮은 비율과 섞이기 때문입니다. 그래서 월별 추이 탭에는 월 합계와 함께 그 달에 점검 필요인 품목 수를 보여 줍니다.

화면과 조작

조회조건 중 필수는 무엇입니까?

회계연도 하나입니다. 4자리 숫자가 아니면 안내 문구를 띄우고 조회하지 않습니다. 전기 월 시작·종료, 플랜트, 품목, 품질원가 범주, 전기일, 점검 결과는 비워 두면 전체입니다. 앱을 열면 올해 값으로 한 번 자동 조회됩니다.

Enter 키로도 조회됩니까?

됩니다. 조건 입력 칸에서 Enter 키를 누르면 조회 버튼과 같은 동작을 합니다. 초기화 버튼은 조건을 처음 값으로 되돌리고 다시 조회합니다. 조회 버튼은 조건 영역의 오른쪽 끝에 있어 입력 칸을 보면서 바로 누를 수 있습니다.

탭 이름 위의 숫자는 무엇입니까?

그 탭에서 지금 조건에 맞는 행 수입니다. 조건을 바꾸면 다섯 탭이 같은 조건으로 함께 다시 조회되므로, 품목 판정에서 본 범위와 명세에서 본 범위가 달라지지 않습니다. 전기일 조건만은 명세 탭에만 걸립니다.

행을 누르면 무엇이 열립니까?

상세 창이 열립니다. 위쪽에는 그 행의 지표 전체(제조원가, 네 범주 금액, 세 가지 비율과 한도, 점검 내용)가 나오고, 아래쪽에는 같은 품목·월에 쌓인 명세가 나옵니다. 비율이 왜 그렇게 나왔는지 그 비율을 만든 명세까지 한 창에서 따라갈 수 있습니다. 닫기 버튼으로 돌아옵니다.

CSV 로 내려받으면 무엇이 담깁니까?

지금 보고 있는 탭의 조회 결과가 UTF-8 CSV 로 담기며, 화면에 보이지 않는 열(점검 코드 등)까지 화면과 같은 한글 제목으로 들어갑니다. 요약 일곱 칸의 숫자는 CSV 에 따로 넣지 않으며, 같은 값을 표에서 합산해 확인할 수 있습니다.

서비스에 연결하지 못하면 어떻게 됩니까?

화면이 빈 표로 조용히 멈추지 않고 ‘서비스 연결 안내’ 창을 띄웁니다. 서비스 정의를 불러오지 못했는지, 요청이 실패했는지, 조건에 맞는 데이터가 없는지를 구분해 안내합니다. 연결 문제를 조건에 맞는 데이터가 없는 것으로 오해하지 않게 하려는 처리입니다.

분류와 예외

활동 기준 범주와 전기 범주가 다르다는 것은 무슨 뜻입니까?

활동 기준 범주는 그 활동이 원래 속해야 하는 범주(예: 현장 출동은 외부실패)이고, 전기 범주는 실제 전표가 들어간 범주입니다. 둘이 다르면 비용이 다른 범주로 들어가 있다는 뜻이며, 합계는 맞아도 비율이 달라집니다. 샘플에는 이런 명세가 398건 중 6건 들어 있고, 명세 탭에서 점검 필요(분류 확인)로 표시됩니다.

분류 확인 필요 6건은 왜 대사 차이로 세지 않습니까?

합계는 맞고 분류만 다른 건이라서 대사 차이와 성격이 다릅니다. 대사 차이 0건이라는 결과와 분류 확인 필요 6건을 섞어 세면, 합계 오류가 있는지 없는지를 읽기 어려워집니다. 그래서 대사 결과 탭에서 정합성 대사 네 가지와 의도적 예외 한 가지를 따로 보여 줍니다.

분류가 다르면 어느 쪽이 맞는 것입니까?

화면은 어느 쪽이 맞는지 정하지 않습니다. 활동 마스터의 기준 범주가 오래되었을 수도 있고, 전기 계정이 잘못 골라졌을 수도 있습니다. 두 값을 나란히 놓고 현업이 확인하도록 하는 것이 화면의 일이며, 판단은 회사가 합니다.

금액이 큰 분류 불일치는 어떻게 찾습니까?

명세 탭에서 점검 결과를 ‘점검 필요’로 좁혀 조회하면 분류 확인 명세만 남고, 금액으로 정렬해 큰 건부터 볼 수 있습니다. 샘플에서는 인버터 보드 2월의 현장 출동 18,859,000원이 가장 큽니다. 이 건이 외부실패로 들어갔다면 그 달의 외부실패 비중이 더 높아졌을 것이라는 점을 함께 확인합니다.

환입이나 취소 전표는 어떻게 다룹니까?

샘플에는 환입 라인이 없습니다. 운영에서는 클레임 회수나 취소 전표가 음수 라인으로 들어올 수 있으므로, 부호 규칙을 도입 때 정해야 합니다. 음수를 해당 범주에서 차감할지 별도로 볼지에 따라 비율이 달라지기 때문에, 도입 항목 표에 부호 · 환입 처리를 넣어 두었습니다.

도입과 운영

누가 어떻게 쓰는 화면입니까?

월 마감 직전의 원가회계 담당자와 품질관리 책임자가 같은 숫자를 보고 이야기하는 용도입니다. 담당자는 점검 필요 품목·월을 추리고, 품질관리는 상세 창에서 명세를 보며 원인을 확인합니다. 법정 보고나 공시를 만드는 화면이 아니라 마감 전에 확인할 자리를 좁히는 점검 도구입니다.

SAP 표준 T-code 와는 어떤 관계입니까?

표준 실행은 SAP 표준 T-code 가 그대로 담당합니다. 코스트센터 라인은 KSB1, 오더 라인은 KOB1, 품질 통보는 QM03, 검사 로트는 QA32, 생산오더 원가는 CO03 과 KKBC_ORD 에서 확인합니다. 이 화면은 같은 데이터를 품질 비용 네 범주 관점으로 한 번에 보여 주는 확장이라, 기존 리포트를 없앨 필요가 없습니다.

운영 데이터에 붙이려면 무엇이 필요합니까?

매핑 테이블 다섯 종과 CDS 뷰 몇 개(명세 · 품목·월 집계 · 제조원가 · 소비 쿼리), 접근 제어, 서비스 게시입니다. 화면은 서비스 주소만 바뀌므로 코드를 고치지 않습니다. 이 글의 CDS 구성 절에 코드와 정할 일을 함께 적어 두었으며, 정할 일 가운데 활동·계정 매핑과 제조원가 범위가 가장 먼저 합의할 항목입니다.

계정 체계나 매핑이 바뀌면 어떻게 합니까?

매핑 테이블의 값만 바꾸면 되고 화면 코드는 건드리지 않습니다. 다만 바뀐 시점 이전의 데이터를 어느 기준으로 볼지 정해야 하므로, 변경일 기준의 유효 기간을 매핑에 두는 방식을 검토합니다. 바꾼 뒤에는 과거 몇 달에 다시 돌려 점검 필요 비율이 크게 달라지지 않는지 먼저 봅니다.

권한은 어떻게 나눕니까?

플랜트 단위 권한을 집계 단계에서 겁니다. 명세에만 걸면 품목·월 집계나 월별 합계로 다른 플랜트의 숫자가 새어 나갈 수 있기 때문입니다. CDS 구성 절의 접근 제어 정의가 그 예이며, 사용할 권한 객체와 필드는 회사의 권한 설계에 맞춰 정합니다.

명세가 수천만 건이 되어도 쓸 수 있습니까?

조회조건으로 범위를 좁히고 필요한 만큼만 가져오는 구조(표 행 수를 한정하고 전체 건수만 따로 받는 방식)라서 건수 자체에는 둔감합니다. 다만 샘플은 398건이므로 운영 규모에서는 집계 위치와 인덱스를 먼저 점검해야 합니다. 품목·월 집계는 마감 후에 미리 적재해 두는 방식이 안전합니다.

점검 도구라는 말은 정확히 무슨 뜻입니까?

이 화면은 분류 · 집계 · 대사를 도와 확인할 대상을 좁히는 조회 도구이고, 품질원가의 최종 판단은 회사와 감사인이 합니다. 그래서 화면은 ‘위반’이나 ‘오류’ 같은 단정 표현을 쓰지 않고 ‘점검 필요’ · ‘확인 필요’라고만 표시합니다.

적용 시기나 기준서와 연결되는 부분이 있습니까?

특정 기준서의 시행일에 묶인 화면이 아닙니다. 대상 영역은 제조원가 분석이고 관련 기준서는 해당 없음입니다. 도입 시기는 회사의 월 마감 일정에 맞춰 정하면 되고, 샘플 데이터는 가상의 8개 품목 · 6개월 값입니다.