SAP BOM·라우팅 설계변경 통합 관리 — 설계변경 뒤 남은 구성품 재고를 평가·정리·대사까지 한 화면에서
변경 건별 잔존재고 · 진부화 평가와 정리 문서의 승인 · 일괄 실행 · 대사 예외 조치 · 피벗 분석과 드릴스루 · 기준 대비 차이 요인분해 · 규칙 기반 해설과 AI 에이전트 — 소개 영상과 실제 화면 26종, 그리고 CDS 코드까지
소개 영상블로그 목차 순서대로 · 자막 포함
도입 포인트 — 이 앱을 사용해야 하는 이유
BOM이나 라우팅이 바뀌면 이전 구성품은 하루아침에 쓸 곳이 줄어듭니다. 현업이 부딪히는 질문은 늘 같습니다. 이 변경 때문에 얼마가 남았나, 다른 곳에 쓰거나 소진할 수 있나, 정리한다면 누가 승인하나. 지금은 변경 번호는 표준 화면에서, 재고는 다른 T-code에서, 평가와 정리는 엑셀과 메일 승인으로 나뉘어 있어 월말에 이 셋을 맞추는 일이 따로 생깁니다. 이 앱은 세 질문을 변경 건이라는 하나의 묶음에 붙여, 확인 · 평가 · 승인 · 정리 · 대사를 한 화면 체계에서 처리하게 합니다.
재고 평가와 관련한 회계 기준의 구체 요구사항 매핑은 이 글에서 확인하지 못해 확인 필요로 두었고, 앱은 점검이 필요한 항목을 보여 줄 뿐 위반 여부를 판정하지 않습니다.
핵심 포인트 여덟 가지
| 핵심 포인트 | 고객이 얻는 것 | 지금 방식이라면 |
|---|---|---|
| ① 변경 건마다 남은 재고가 한 줄로 | 설계변경 건 62건 각각의 영향 수량 · 소진 수량 · 장부 잔존 재고가 목록 한 줄에 나옵니다. 어느 변경이 얼마를 남겼는지 바로 보입니다. | 변경 번호로 BOM · 라우팅 변경을 확인한 뒤 재고 화면과 엑셀을 오가며 잔존 수량을 손으로 맞춥니다. |
| ② 평가와 정리를 같은 화면에서 승인까지 | 진부화 평가 · 잔존재고 정리 · 조정 문서를 임시저장에서 확정까지 한 화면에서 처리하고 상태 이력이 남습니다. | 평가는 엑셀, 승인은 메일, 전기는 다른 화면으로 나뉘어 어디까지 갔는지 문서마다 물어봐야 합니다. |
| ③ 작성자와 승인자를 서버가 가른다 | 300만 원 이상은 2단계 승인이고 같은 사용자의 승인은 거절됩니다. 버튼을 숨기는 데서 끝나지 않고 직접 요청도 막습니다. | 직무 분리는 결재 규정에만 있고 시스템은 막지 못해 사후 점검에 기대게 됩니다. |
| ④ 일괄 실행은 먼저 미리 보고 | 시뮬레이션에서 만들어질 문서와 합계를 본 뒤 실행하고, 같은 조건의 재실행은 중복 생성 없이 거절됩니다. | 대상 선정을 엑셀로 하고 실행 뒤에야 합계를 맞춰 보며, 같은 건을 두 번 처리하는 일이 생깁니다. |
| ⑤ 대사 규칙 네 가지로 차이만 남긴다 | 문서 차대, 확정 문서와 원가 라인, 변경 건 장부와 라인 합계, 유효 적용 변경 건과 정리액을 176건 점검해 예외 10건만 보여 줍니다. | 월말에 담당자가 표준 화면 값과 엑셀을 눈으로 대조하고, 어디서 틀어졌는지 찾는 데 시간을 씁니다. |
| ⑥ 축을 바꿔도 합계가 같은 피벗 | 제품군 · 변경 건 · 경과 구간 · 변경 유형을 끌어다 놓아도 총합이 변하지 않고, 칸을 누르면 원천 문서 라인으로 내려갑니다. | 보고 축마다 리포트를 따로 만들어 합계가 다르면 리포트를 맞추는 회의를 엽니다. |
| ⑦ 기준 대비 차이를 요인으로 | 영향 원가 계획 대비 +3,311만 원을 물량 · 소진율 · 재작업 시간 · 시간당 영향 원가로 가르고 합이 총차이와 같은지 검산합니다. | 차이가 난 사실까지는 알아도 왜 났는지는 엑셀로 따로 분해해야 합니다. |
| ⑧ 사람이 열지 않아도 도는 감시 | 181일 초과 장기 재고 비중 같은 규칙 다섯 개가 받을 사람과 함께 대기함에 보고를 올리고, 하루 한 번 제한과 활동 기록이 남습니다. | 숫자가 나빠진 날 아무도 화면을 열지 않으면 그대로 지나갑니다. |
사례로 보는 효과
샘플 데이터 2026년 1월~9월 영향 원가는 898,880,557원이고 이 가운데 790,786,000원(88%)이 다른 용도로 소진되었으며 33,045,034원이 정리되고 75,049,523원이 잔존 재고로 남았습니다. 세 숫자를 더하면 영향 원가와 같습니다. 계획 대비로는 +33,108,695원(3.8%)이며, 요인으로 가르면 시간당 영향 원가가 +16,230,553원으로 가장 크고 소진율 +7,338,081원, 물량 +6,119,597원, 재작업 시간 +3,420,464원이 뒤따릅니다. 네 요인의 합과 총차이의 차이는 0원입니다. 대사 규칙 네 가지는 176건을 점검해 의도적으로 넣어 둔 예외 10건만 남겼고, 큐브 합계와 원천 라인 합계의 차이는 측정값 8종 모두 0입니다.
도입하면 달라지는 것
- 변경 건마다 남은 재고와 영향 금액을 목록에서 바로 확인합니다.
- 평가·정리 문서가 승인 단계까지 같은 화면에서 처리됩니다.
- 월말 대사는 예외 10건만 보면 되고 조치 기록이 남습니다.
- 차이가 나면 요인과 원천 문서 라인까지 내려가 이유를 찾습니다.
이런 회사에 맞습니다
BOM · 라우팅 설계변경이 잦은 제조 회사로, 변경 뒤 구 구성품 재고의 평가와 정리를 엑셀과 메일로 처리하고 있는 곳에 맞습니다. 사업장이 둘 이상이거나 문서에 승인 단계가 있어 작성자와 승인자를 나눠야 하는 생산 · 원가 · 경영지원 조직이라면 효과가 큽니다. 표준 화면은 그대로 두고 변경 건 단위의 점검 관점을 더하려는 SAP 운영 조직에도 맞습니다.
실행 화면
사용 방법
- 조회조건 입력 — 위쪽 조회조건 영역에서 사업장(선택)과 기간(필수)을 정합니다. 사용자 선택에서 역할을 바꿔 볼 수 있습니다.
- 조회 버튼 · Enter — 조회조건 영역 오른쪽 끝의 조회 버튼을 누르거나 입력칸에서 Enter 키를 누릅니다. 초기화 버튼은 같은 줄에 있습니다.
- 요약 확인 — 개요 · 할 일의 타일에서 잔존 재고, 처리 대기, 승인 대기, 대사 예외 건수를 봅니다.
- 탭 · 축 이동 — 왼쪽 메뉴로 기준정보 → 문서 → 일괄 실행 → 대사 → 분석 → 연계 → 감사 순서로 이동합니다. 분석에서는 차원 칩을 행 · 열 칸에 놓습니다.
- 행 · 셀 클릭 상세 — 목록의 행을 누르면 오른쪽에 상세가 열리고, 분석의 값 칸을 누르면 원천 문서 라인이 열립니다.
- 내보내기 — 목록 위의 CSV 버튼과 분석의 PowerPoint 버튼으로 현재 결과를 내려받습니다.
무엇으로 만들었나
| 자리 | 무엇 | 왜 그렇게 두었나 |
|---|---|---|
| 화면 컨트롤 | OpenUI5 표준 컨트롤(ToolPage · FlexibleColumnLayout · TreeTable)과 직접 그린 SVG 차트 | 외부 차트 라이브러리를 들이지 않아 보안 반입 심사가 필요 없습니다 |
| 집계 · 판정 로직 | 서비스 로직 파일 하나가 상태 전이 · 승인 · 대사 · 요인분해를 판정하고, 큐브 재집계는 브라우저 모델 파일이 맡습니다 | 판정과 기록은 서비스에 있어 화면 밖에서 호출해도 같은 결과가 나옵니다 |
| OData 서비스 구성 | 서비스 하나에 엔티티셋 33개와 처리 펑션 12개. 화면은 기본 모델 하나로 읽고, 조회조건은 필터 객체로 만들어 보냅니다 | 한 서비스로 모아 운영 전환 때 서비스 주소만 바꾸면 됩니다 |
| 테마 | sap_horizon | SAP 표준 화면과 같은 시각 언어로 오가는 데 낯설지 않게 |
처음 열었을 때 — 숫자와 할 일이 먼저 보인다

사업장과 기간을 정해 조회하면 타일이 갱신됩니다. 타일을 누르면 해당 목록으로 이동하고, 숫자는 모두 서버가 집계한 값입니다. 기본 기간은 올해 1월부터 오늘이 속한 달까지입니다.

"내 역할 것만" 을 켜면 현재 사용자의 역할이 처리할 일만 남습니다. 할 일을 누르면 그 문서 화면으로 바로 갑니다. 알림 보고는 에이전트를 실행한 뒤에 채워집니다.
기준정보 관리 — 변경 건과 평가 규칙을 한곳에서

변경 건 · 내용 · 사업장 · 유형 · 상태 · 영향 수량 · 소진 수량 · 장부 잔존 재고가 한 줄에 보입니다. 상태가 진행 · 유효 적용 · 마감 가운데 어디인지가 정리 문서를 만들 수 있는지를 정합니다.

저장하면 서버가 값을 검사합니다. 수정 전후 값은 이력으로 남고 감사 로그에도 같은 내용이 기록됩니다. 관리자 역할에게만 버튼이 켜집니다.

변경 이력이 없으면 없다고 알려 줍니다. 수정이나 사용 중지 처리를 하면 이 목록에 행이 생깁니다.

품목 · 변경 유형 · 영향 수량 · 구 구성 단가 · 개시일 · 이름이 필수입니다. 빠진 값은 저장 전에 알려 줍니다.
문서 처리와 승인 — 승인 버튼은 승인자에게만 보인다

한 줄에 변경 건과 품목, 전표일, 금액, 상태가 보입니다. 오른쪽에 상세가 열려도 목록은 그대로 남아 이어서 다음 문서를 고를 수 있습니다.

정리 문서는 유효 적용 상태이면서 진행 중인 정리 문서가 없는 변경 건만 고를 수 있습니다. 금액은 변경 건의 잔존재고에서 서버가 계산합니다.

차변 설계변경 손실, 대변 구성품 재고가 같은 금액으로 나옵니다. 검토 요청 · 승인 · 반려 · 확정 · 역처리 버튼은 서버가 알려 준 상태와 내 역할에 맞는 것만 보입니다.
일괄 실행 — 시뮬레이션 합계와 실행 결과가 같다

시뮬레이션과 실행은 같은 조건을 씁니다. 실행 이력과 로그, 만들어진 문서가 같은 화면 아래에 이어집니다.

합계 2,176,801원을 확인한 뒤 실행하면 같은 금액의 문서가 생깁니다. 시뮬레이션을 거치지 않은 실행과 같은 조건의 재실행은 서버가 거절합니다.
대사와 예외 조치 — 차이는 남기되 조치 기록을 붙인다

R01 75건, R02 32건, R03 62건, R04 7건을 점검해 차이 10건이 나옵니다. 모두 의도적으로 넣어 둔 예외라 조치 흐름을 시험할 수 있습니다.

장부 잔존 재고 차이나 유효 적용 변경 건의 미정리 잔액은 조정 문서로 풀 수 없을 수 있어, 사유 기록이나 보류로 처리합니다. 조치 뒤 재대사하면 해소로 바뀝니다.
분석 — 축을 바꿔도 합계가 변하지 않는다

영향 원가를 기본 측정값으로 보여 줍니다. 값 칸을 누르면 그 금액을 만든 원천 문서 라인이 열려 합계가 같은지 바로 확인됩니다.

행↔열 바꾸기나 칩 이동 뒤에도 총합은 변하지 않습니다. 이미 읽어 둔 큐브를 브라우저에서 다시 묶기 때문입니다.

같은 차원 안의 값은 또는, 서로 다른 차원 사이는 그리고로 묶입니다. 적용 후 조회를 누르면 그 범위로 다시 읽습니다.

계획 8.66억 원, 실적 8.99억 원, 총차이 +3,311만 원이며 요인 네 개를 더하면 총차이와 같다는 검산 줄이 매번 표시됩니다.
AI 분석과 에이전트 — 숫자는 서버가, 해설은 그 위에서

요약, 핵심 발견, 근거 표 순서입니다. 금액과 비율은 서버가 큐브에서 계산한 값이고, 해설은 점검 필요 항목을 알려 주는 참고 자료입니다. 표 아래 버튼으로 PowerPoint 보고서를 받습니다.

하루 한 번 제한이 있어 같은 날 두 번째 실행은 활동 기록만 남기고 판정을 건너뜁니다.
레이아웃 — 만든 배치를 다시 쓴다

기본 레이아웃으로 지정하거나 자동 조회로 열도록 고를 수 있습니다.

새로 고친 뒤에도 저장한 레이아웃이 남아 있어 다시 열면 같은 배치로 시작합니다.
영역 간 연계 — 문서에서 문서로 이동한다

설계변경 건에서 시작한 문서가 어떤 후속 문서로 이어졌는지 보이고, 문서를 누르면 그 상세로 이동합니다.
이력 · 감사 · 역할 — 누가 무엇을 했는지 남는다

누가 언제 무엇을 바꿨는지가 변경 전후 값과 함께 남습니다. 조회조건으로 사용자와 결과를 좁힐 수 있습니다.

버튼을 숨기는 데서 끝나지 않고, 직접 요청해도 서버가 같은 이유로 거절합니다.
좁은 화면에서 달라지는 것

가로폭이 좁아져도 같은 기능을 씁니다.

표 대신 카드형 목록으로 바뀌어 한 손으로도 문서를 찾을 수 있습니다.
화면 뒤에서 일어나는 일
문서는 서비스 안에서 상태 규칙 표를 따라서만 움직입니다. 판정 조건에서 결과 상태, 사용자 조치까지를 아래 표로 정리했습니다.
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 임시저장 문서에서 검토 요청 | 20 검토요청 | 승인자에게 할 일이 생깁니다 |
| 검토요청에서 승인(300만 원 미만) | 30 승인 | 처리자가 확정합니다 |
| 검토요청에서 승인(300만 원 이상 1단계) | 20 검토요청 유지, 2단계 대기 | 다른 승인자가 2단계 승인합니다 |
| 작성자와 승인자가 같음 | 거절 | 다른 승인자에게 요청합니다 |
| 검토요청에서 반려 | 90 반려 | 사유를 보고 보완한 뒤 다시 검토 요청합니다 |
| 승인에서 확정 | 40 확정 | 원가 라인에 반영되고 변경 건이 마감으로 바뀝니다 |
| 확정에서 역처리 | 99 취소 | 반대 문서가 연결되어 생성됩니다 |
| 임시저장에서 곧바로 확정 | 거절(400) | 순서대로 검토 요청부터 진행합니다 |
처리 단계의 산출 · 대사식은 다음과 같습니다.
- 잔존 재고 = 영향 발생 − 소진 대체 − 정리액 (변경 건별)
- 진부화 충당 = 경과 구간별 잔존 재고 × 충당률
- 정리 문서 = 차변 설계변경 손실, 대변 구성품 재고(차대 일치)
- 큐브 합계 = 원천 문서 라인 합계(측정값 8종)
- 대사 규칙 R01~R04
조회조건
| 필드 | 필수 | 기본값 | $filter 처리 |
|---|---|---|---|
| 사업장 | 선택 | 전체 | 선택한 때만 Plant eq 조건을 보냅니다 |
| 기간 시작 | 필수 | 올해 1월 | 전표일 ge 조건 |
| 기간 종료 | 필수 | 오늘이 속한 달 | 전표일 le 조건 |
| 변경 상태 | 선택 | 전체 | ChgStat eq 조건 |
| 문서 구분 · 상태 | 선택 | 전체 | DocType · Status eq 조건 |
| 검색어 | 선택 | 없음 | 변경 번호 · 품목 포함 조건 |
결과 컬럼
| 컬럼 | 의미 | 산출식 |
|---|---|---|
| 영향 수량 | 변경으로 쓰이지 않게 된 구성품 수량 | 변경 건 등록 값 |
| 소진 수량 | 다른 용도로 쓰이거나 소진된 수량 | 소진 이동 합계 |
| 장부 잔존 재고 | 남은 구성품 재고 금액 | 영향 − 소진 − 정리 |
| 충당 | 경과 구간별 진부화 충당 금액 | 잔존 × 충당률 |
| 소진율 | 소진 대체 ÷ 영향 원가 × 100 | 계산 항목 |
| 폐기율 | 폐기 수량 ÷ (소진 + 폐기) × 100 | 계산 항목 |
좁은 화면에서 달라지는 것
390px 폭에서는 왼쪽 메뉴가 접히고 타일과 목록이 한 칸씩 쌓입니다. 분석의 차트는 숨기지 않고 표 아래로 내려가며, 축 조합이 상한을 넘으면 안내가 뜹니다.
파일 구성
index.html · Component.js · manifest.json
controller/ 화면별 컨트롤러 9개 + 공통
view/ 화면별 뷰 9개 + 대화상자 15종
model/ formatter · 오류 처리 · 권한 · 큐브 · 차트 · 보고서 · 레이아웃 · 엑셀
odata/ 서비스 정의 · 서비스 로직 · 샘플 데이터
media/ 소개 영상
SAP 표준 기능 확장 포인트 — 표준 T-code 와 어떻게 연계되는지
표준 실행은 SAP 표준 T-code가 담당하고, 이 화면은 조회 · 검증 관점을 더해 확장합니다.
표준으로 되는 것과 안 되는 것
| 하고 싶은 일 | SAP 표준 | 표준에서 걸리는 자리 | 이 앱이 하는 일 |
|---|---|---|---|
| 변경 번호와 유효일 관리 | CC02 · CS03 · CA03 | 변경 번호 단위로 BOM·라우팅은 확인되지만 변경이 남긴 재고 금액은 별도 조회가 필요합니다 | 변경 건별 영향 · 소진 · 정리 · 잔존 재고를 한 줄로 보여 줍니다 |
| 구 구성품의 사용처 | CS15 | 사용처 목록은 품목 단위여서 변경 건과 묶어 보기 어렵습니다 | 변경 건에서 영향 품목과 상위 사용처 확인으로 이어갑니다 |
| 재고 수량·금액 조회 | MB52 · MMBE | 저장 위치별 수량과 평가 금액은 보이지만 경과 구간 충당은 직접 계산합니다 | 경과 구간 1·2·3과 충당률을 적용한 잔존 재고를 보여 줍니다 |
| 소진·폐기 이동 이력 | MB51 | 이동 이력은 건별로 나오고 변경 건 단위 소진율은 따로 만듭니다 | 소진 대체 · 폐기 수량을 변경 건에 묶어 소진율을 보여 줍니다 |
| 폐기 이동 처리 | MIGO | 이동 처리는 표준이 담당하며 승인 근거와 연결하는 일은 사람이 합니다 | 정리 문서 확정 뒤 폐기 이동 처리로 이어갈 근거를 남깁니다 |
| 정리 문서의 승인 흐름 | 표준 승인 기능 | 금액 구간별 2단계와 작성자·승인자 분리를 업무 규칙으로 따로 정해야 합니다 | 300만 원 이상 2단계 승인과 직무 분리를 서버가 지킵니다 |
| 차이의 원인 분해 | 없음 | 표준 화면에는 계획 대비 차이를 요인으로 가르는 기능이 없습니다 | 물량 · 소진율 · 재작업 시간 · 시간당 영향 원가로 가르고 합계를 검산합니다 |
T-code 별 연계 지점
| T-code | 이름 | 연계 |
|---|---|---|
| CC02 | 변경 마스터 변경 | 변경 번호 · 유효 시작일을 이 앱의 설계변경 건으로 이어받습니다. 결과 → CC02로 원천 확인, CC02 값 → 이 앱 기준정보에서 다시 확인합니다. |
| CS03 | 자재 명세서 표시 | 변경 대상 품목의 구성품을 확인합니다. 구성 변경 내용은 이 앱의 변경 유형(구성품 교체·소요량 변경)과 맞춰 봅니다. |
| CA03 | 라우팅 표시 | 공정 변경 건의 라우팅 확인에 씁니다. |
| CS15 | 자재 사용처 목록 | 구 구성품이 어느 상위 품목에 쓰이는지 확인해 소진 가능성을 점검합니다. |
| MB52 | 창고 재고 조회 | 변경 건의 장부 잔존 재고와 표준 화면의 저장 위치 재고를 맞춰 보는 지점입니다. |
| MB51 | 자재 문서 목록 | 소진·폐기 이동을 확인해 이 앱의 소진 수량과 폐기 수량을 대조합니다. |
| MIGO | 자재 문서 처리 | 정리 문서 확정 뒤 실제 폐기 이동 처리는 표준에서 합니다. 법정·감사·세무 신고 대응도 표준에 남겨 둡니다. |
운영 전환 때 기존 리포트를 없앨 필요는 없습니다. 표준 화면은 그대로 두고 두 화면의 숫자를 대사 지점(MB52의 재고와 이 앱의 장부 잔존 재고)에서 맞춰 보며, 법정 · 감사 · 세무 신고 대응은 표준에 남겨 둡니다.
S/4HANA 분석 스택과의 자리
표준 CDS 분석 쿼리나 Fiori 분석 앱과는 대체가 아니라 나란히 쓰는 관계입니다. 표준 분석 앱이 재고와 이동 데이터를 보여 주는 자리라면, 이 앱은 변경 건이라는 묶음 단위의 평가·정리·대사를 더합니다. 특정 Fiori 앱의 이름은 확인하지 못해 적지 않았고 확인 필요로 둡니다. Analysis for Office 같은 도구에서 같은 큐브를 열도록 분석 쿼리를 공개하는 방법은 CDS 구성 절의 쿼리 뷰에 있습니다.
확장 포인트 — 운영에서 실제로 손대는 자리
| 자리 | 무엇을 정하나 | 누가 |
|---|---|---|
| 확장 필드 | 변경 유형 · 영향 수량 같은 항목을 변경 마스터의 확장 필드로 둘지 별도 테이블로 둘지 | 운영 시점에 정합니다 |
| 경과 구간 기준 | 재고의 마지막 사용일을 무엇으로 볼지(마지막 소비 이동일 · 입고일) | 확인 필요 |
| 충당률 테이블 | 구간별 충당률을 코드가 아니라 테이블로 둡니다 | 현업이 직접 유지 |
| 권한 객체 | 사업장 단위 권한을 어떤 객체로 걸지 | 보안·권한 담당 |
| BAdI 연결 | 정리 문서 확정 시 폐기 이동을 자동 호출할지 여부 | IT와 생산·원가 합의 |
분석 지표 정의표
| 지표 | 산식 · 판정 기준 | 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| 영향 원가 | 변경으로 쓰이지 않게 된 구 구성품 재고 금액 | 분석 · 개요 타일 | 문서 라인 영향 금액 | 발생 시점 기준 |
| 소진 대체 | 다른 용도로 쓰이거나 소진된 금액 | 분석 | 소진 이동(MB51) | 점검 필요 시 MB51로 확인 |
| 정리액 | 정리 문서로 처리된 금액 | 문서 처리 | 정리 문서 | 확정 문서만 |
| 잔존 재고 | 영향 − 소진 − 정리 | 기준정보 · 대사 R03 | 변경 건 장부 잔존 | MB52와 대조 |
| 진부화 충당 | 구간별 잔존 × 충당률 | 분석 · 평가 문서 | 문서 라인 충당 금액 | 충당률은 회사 기준 |
| 소진율 | 소진 ÷ 영향 × 100 | 계산 항목 | 큐브 |
CDS 구성
운영 데이터로 갈 때의 구조입니다. 객체 이름과 필드는 스케치이며 실제 시스템에서 확인 필요입니다.
뷰 레이어 구성
| 레이어 | 뷰 | 하는 일 | 왜 나누나 |
|---|---|---|---|
| 기준 | ZDSG_AGING_RT | 경과 구간 충당률 매핑 테이블 | 충당률을 코드에 박지 않고 현업이 유지 |
| 기준 | ZI_DsgChange | 변경 마스터와 변경 대상 객체를 변경 건으로 묶음 | 변경 번호 하나가 여러 객체를 가질 수 있어 |
| 원천 라인 | ZI_DsgCostLine | 영향 · 소진 · 정리 문서 라인을 한 모양으로 통일 | 큐브와 드릴스루가 같은 라인에서 나오게 |
| 차원 | ZI_DsgAgingDim | 경과 일수를 구간 1·2·3으로 변환 | 구간 정의가 한곳에 있게 |
| 큐브 | ZC_DsgCube | 차원 조합별 측정값 집계 | 축을 바꿔도 합계가 같게 |
| 쿼리 | ZC_DsgCubeQuery | 분석 쿼리 정의(행·열·필터) | 화면과 분석 도구가 같은 쿼리를 쓰게 |
| 권한 | ZC_DsgCube (DCL) | 사업장 단위 접근 제어 | 집계 단계에서 걸러 드릴스루로 새지 않게 |
| 서비스 | ZUI_DsgChange | OData 서비스 정의와 바인딩 | 화면이 부르는 서비스 하나로 모음 |
원천테이블과 필드 매핑
| 원천테이블 | 내용 | 쓰는 곳 |
|---|---|---|
| AENR | 변경 마스터 헤더 | 변경 건 기준 뷰 |
| AEOI | 변경 대상 객체 관리 | 변경 건 기준 뷰 |
| STKO · STPO | BOM 헤더 · 품목 | 구성 변경 확인 |
| PLKO · PLPO | 라우팅 헤더 · 공정 | 공정 변경 확인 |
| MARD · MBEW | 저장 위치 재고 · 평가 | 장부 잔존 재고(수량 × 평가 단가, 확인 필요) |
| MSEG · MKPF | 자재 문서 | 소진 · 폐기 이동 |
① 경과 구간 충당률 매핑 테이블 — ZDSG_AGING_RT
충당률이 코드가 아니라 테이블에 있어야 현업이 기준을 바꿀 수 있습니다. 구간 번호, 경과 일수 범위, 충당률을 둡니다.
@EndUserText.label : '경과 구간 충당률'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zdsg_aging_rt {
key client : abap.clnt not null;
key bucket : abap.char(1) not null;
from_days : abap.int4;
to_days : abap.int4;
rate_pct : abap.dec(5,2);
active : abap_boolean;
}
② 기준 뷰 — ZI_DsgChange
변경 마스터와 변경 대상 객체를 변경 건 단위로 묶습니다. 변경 번호가 키이고 유효 시작일이 정리 시점을 정합니다.
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '설계변경 건 기준'
@ObjectModel.usageType: { serviceQuality: #A, sizeCategory: #M, dataClass: #MASTER }
define view entity ZI_DsgChange
as select from aenr as c
inner join aeoi as o on o.aennr = c.aennr
{
key c.aennr as ChangeNo,
c.datuv as EffDate,
o.werks as Plant,
o.matnr as Material,
c.aetxt as ChangeText
}
③ 원천 라인 뷰 — ZI_DsgCostLine
영향 발생, 소진 대체, 정리 라인을 같은 모양으로 맞춰 큐브와 드릴스루가 같은 줄에서 나오게 합니다. 금액 필드는 통화 코드와 함께 둡니다.
@AbapCatalog.viewEnhancementCategory: [#NONE]
@EndUserText.label: '변경 영향 원가 라인'
define view entity ZI_DsgCostLine
as select from zdsg_line as l
association [1..1] to ZI_DsgChange as _Chg on _Chg.ChangeNo = $projection.ChangeNo
{
key l.docno as DocNo,
key l.itemno as ItemNo,
l.period as Period,
l.plant as Plant,
l.changeno as ChangeNo,
l.material as Material,
l.aging as AgingDays,
@Semantics.amount.currencyCode: 'Currency'
l.imp_amt as ImpAmt,
@Semantics.amount.currencyCode: 'Currency'
l.use_amt as UseAmt,
@Semantics.amount.currencyCode: 'Currency'
l.dsp_amt as DspAmt,
l.currency as Currency,
_Chg
}
④ 차원 뷰 — ZI_DsgAgingDim
경과 일수를 구간 1·2·3으로 바꾸는 규칙을 한곳에 둡니다. 충당률 테이블과 조인해 구간별 충당률도 함께 줍니다.
@AbapCatalog.viewEnhancementCategory: [#NONE]
@EndUserText.label: '경과 구간 차원'
define view entity ZI_DsgAgingDim
as select from ZI_DsgCostLine as l
left outer join zdsg_aging_rt as r
on l.AgingDays >= r.from_days
and l.AgingDays <= r.to_days
{
key l.DocNo,
key l.ItemNo,
case when r.bucket is null then '1' else r.bucket end as Aging,
coalesce( r.rate_pct, 0 ) as RatePct
}
⑤ 큐브 뷰 — ZC_DsgCube
차원 조합별로 측정값을 합칩니다. 화면의 피벗과 드릴스루 합계가 같아야 하므로 집계는 여기서만 합니다.
@AbapCatalog.viewEnhancementCategory: [#NONE]
@Analytics.dataCategory: #CUBE
@EndUserText.label: '설계변경 영향 원가 큐브'
@ObjectModel.usageType: { serviceQuality: #D, sizeCategory: #XL, dataClass: #TRANSACTIONAL }
define view entity ZC_DsgCube
as select from ZI_DsgCostLine as l
inner join ZI_DsgAgingDim as a on a.DocNo = l.DocNo and a.ItemNo = l.ItemNo
{
@AnalyticsDetails.query.axis: #ROWS
l.Period,
l.Plant,
l.ChangeNo,
l.Material,
a.Aging,
@Semantics.amount.currencyCode: 'Currency'
@DefaultAggregation: #SUM
l.ImpAmt,
@Semantics.amount.currencyCode: 'Currency'
@DefaultAggregation: #SUM
l.UseAmt,
@Semantics.amount.currencyCode: 'Currency'
@DefaultAggregation: #SUM
l.DspAmt,
l.Currency,
cast( cast( l.ImpAmt as abap.dec(17,2) ) * a.RatePct / 100 as abap.dec(17,2) ) as RsvAmt
}
⑥ 분석 쿼리 뷰 — ZC_DsgCubeQuery
화면과 분석 도구가 같은 쿼리를 쓰도록 행·열·필터 기본값을 정합니다. 기간과 사업장은 조회조건으로 둡니다.
@AbapCatalog.viewEnhancementCategory: [#NONE]
@Analytics.query: true
@EndUserText.label: '설계변경 영향 원가 분석'
define view entity ZC_DsgCubeQuery
as select from ZC_DsgCube
{
@AnalyticsDetails.query.axis: #ROWS
@Consumption.filter: { selectionType: #SINGLE, mandatory: true }
Period,
@AnalyticsDetails.query.axis: #ROWS
@Consumption.filter: { selectionType: #MULTIPLE }
Plant,
@AnalyticsDetails.query.axis: #COLUMNS
Aging,
@AnalyticsDetails.query.axis: #COLUMNS
ImpAmt,
@AnalyticsDetails.query.axis: #COLUMNS
UseAmt,
@AnalyticsDetails.query.axis: #COLUMNS
DspAmt
}
⑦ 권한 정의 — ZC_DsgCube
사업장 단위로 접근을 제한합니다. 권한 객체와 필드 이름은 확인 필요이며 운영 시점에 보안 담당과 정합니다.
@EndUserText.label: '설계변경 큐브 사업장 권한'
@MappingRole: true
define role ZC_DsgCube {
grant select on ZC_DsgCube
where ( Plant ) = aspect pfcg_auth( ZDSG_PLNT, WERKS, ACTVT = '03' );
}
⑧ 서비스 정의와 처리 액션 — ZUI_DsgChange
화면이 부르는 서비스를 하나로 모읍니다. 승인과 확정 같은 처리 펑션은 RAP 액션으로 옮기는 자리입니다.
@EndUserText.label: '설계변경 통합 관리 서비스'
define service ZUI_DsgChange {
expose ZC_DsgCube as CubeSet;
expose ZC_DsgCubeQuery as QuerySet;
expose ZI_DsgChange as ChangeSet;
expose ZI_DsgCostLine as LineSet;
}
// 처리 액션은 RAP 동작 정의에 둡니다 — 이름과 파라미터는 확인 필요
managed implementation in class zbp_dsg_doc unique;
define behavior for ZR_DsgDoc alias Doc
{
action Submit;
action Approve;
action Reject parameter ZA_DsgReason;
action Post;
action Reverse parameter ZA_DsgReason;
}
운영 시점에 해야 할 일
개발보다 정하는 일이 많습니다.
| 해야 할 일 | 무엇을 정하나 | 정하지 않으면 | 누가 |
|---|---|---|---|
| 상태 흐름과 승인 단계 | 임시저장 → 검토요청 → 승인 → 확정 → 취소 전이와 승인 단계 수 | 문서마다 다른 방식으로 처리되어 감사 때 설명이 어렵습니다 | 생산·원가 책임자 |
| 금액 구간 | 2단계 승인 기준 금액(샘플 300만 원) | 모든 문서가 같은 경로를 타 병목이 생기거나 큰 금액이 단일 승인으로 지나갑니다 | 경영지원 |
| 직무 분리와 역할 | 데모 사용자 전환을 SAP 권한 객체와 PFCG 역할로 옮기는 매핑 | 작성자가 스스로 승인하는 길이 열립니다 | 보안·권한 |
| 처리 펑션 연결 | 검토 요청·승인·확정을 표준 BAPI · RAP 액션과 연결하는 방식 | 화면은 처리됐는데 표준 원장에는 반영되지 않습니다 | IT |
| 문서 번호 범위 | 평가·정리·조정 문서의 번호 범위와 연도 구분 | 번호가 겹치거나 추적이 어렵습니다 | IT·경영지원 |
| 영역 간 문서 흐름 키 | 변경 번호와 후속 문서를 잇는 키 | 연계 화면에서 문서가 끊깁니다 | IT |
| 대사 규칙과 허용 오차 | 규칙 네 가지의 허용 오차와 예외 처리 방법 | 차이를 매번 사람이 판단하게 됩니다 | 원가 책임자 |
| 경과 구간과 충당률 | 구간 경계와 충당률, 마지막 사용일의 기준 | 구간이 달라 충당 금액이 들쭉날쭉합니다 | 경영지원·감사 협의 |
| 환율 유형과 환산 시점 | 외화 구성품이 있을 때 적용할 환율과 시점 | 같은 재고가 화면마다 다른 금액으로 보입니다 | 경영지원 |
| 권한 설계 | 사업장 단위 권한을 집계 단계에 거는 방식 | 드릴스루로 다른 사업장 숫자가 보입니다 | 보안·권한 |
| 성능 기준 | 조회 범위 필수화와 응답 시간 목표 | 행이 많아지면 브라우저 집계가 느려집니다 | IT |
| 전송(TR) 순서 | 테이블 → 기준 뷰 → 라인 뷰 → 차원 뷰 → 큐브 → 쿼리 → 권한 → 서비스 | 의존 순서가 어긋나 활성화가 실패합니다 | IT |
| 서비스 활성화와 화면 연결 | 서비스를 게시하고 앱의 서비스 주소를 교체하는 절차 | 화면이 샘플 서비스를 계속 바라봅니다 | IT |
| 배치 등록 | 에이전트 점검을 일정으로 돌리는 방법(SM36 잡 또는 외부 스케줄러) | 사람이 열지 않으면 감시가 돌지 않습니다 | Basis |
숫자를 믿을 수 있는가 — 검증 결과
| 대사식 | 검사 건수 | 차이 건수 |
|---|---|---|
| 큐브 합계 = 원천 라인 합계(측정값 8종) | 8 | 0 |
| 대사 R01 전표 머리 금액 = 항목 차변 합계 | 75 | 2 (의도적 예외) |
| 대사 R02 확정 정리 문서 = 원가 라인 정리액 | 32 | 2 (의도적 예외) |
| 대사 R03 변경 건 장부 잔존 = 라인 합계 | 62 | 2 (의도적 예외) |
| 대사 R04 유효 적용 잔존 = 정리 처리액 | 7 | 4 (의도적 예외) |
| 요인 합계 = 총차이 | 1 | 0 |
대사 예외 10건은 조치 흐름을 시험하려고 넣은 의도적 예외이며, 큐브 합계와 원천 라인의 차이는 0입니다. 독립 계산으로 다시 돌린 R01과 R03은 서비스 결과와 건수 · 차이가 같았습니다. 샘플 데이터 값입니다.
운영 데이터로 갈 때
지금은 큐브를 브라우저에서 다시 묶는 구조라 행 수에 상한이 있습니다. 문서 라인이 수천만 건이면 집계를 서버 쪽 CDS로 옮기고 기간과 사업장을 조회 필수 파라미터로 두며, 큐브 키 차원에 인덱스를 둡니다. 응답 시간 목표는 운영 시점에 정할 일입니다.
자주 묻는 질문
도입 전에 가장 많이 물을 만한 질문을 네 묶음, 25문항으로 정리했습니다.
숫자와 산식
잔존 재고는 어떻게 계산되나요.
변경 건별로 영향 발생 금액에서 소진 대체 금액과 정리액을 뺀 값입니다. 샘플 데이터에서 영향 원가 898,880,557원, 소진 대체 790,786,000원, 정리액 33,045,034원이므로 잔존 재고 증감은 75,049,523원입니다. 이 식은 대사 규칙 R03에서 변경 건 장부 값과 원가 라인 합계를 맞춰 보는 데도 쓰입니다.
진부화 충당은 무엇을 기준으로 정하나요.
경과 구간별 충당률을 잔존 재고에 곱합니다. 샘플은 90일 이내 0%, 91~180일 10%, 181일 초과 30%이며 예시 값입니다. 실제 비율과 구간은 회사의 평가 기준에 따라 기준정보의 평가 규칙 탭에서 정하고, 회계 처리의 최종 판단은 회사와 감사인이 합니다.
큐브와 원천 문서 라인 합계는 정말 같은가요.
측정값 8종 모두 큐브 합계와 원천 라인 합계의 차이가 0입니다. 원천 라인은 886개이고 차원 조합으로 묶은 큐브는 1,087행입니다. 화면의 값 칸을 눌러 열리는 드릴스루 합계도 칸 금액과 같은지 매번 보여 줍니다.
대사 예외 10건은 오류인가요.
아닙니다. 조치 흐름을 시험하려고 의도적으로 넣은 값입니다. R01 2건, R02 2건, R03 2건, R04 4건이고, 이 도구는 점검이 필요한 항목을 알려 줄 뿐 위반 여부를 판정하지 않습니다.
기준 대비 차이 요인은 어떻게 나뉘나요.
물량, 소진율, 재작업 시간 원단위, 시간당 영향 원가 네 요인입니다. 네 요인을 더한 값이 총차이와 같은지를 검산 줄이 매번 보여 주고, 샘플에서는 차이가 0원입니다. 요인의 원인까지는 데이터만으로 알 수 없어 확인 필요로 남깁니다.
화면과 조작
누가 어떤 버튼을 쓸 수 있나요.
조회자는 읽기만, 처리자는 생성·수정·검토 요청·확정·일괄 실행·대사, 승인자는 승인·반려·역처리, 관리자는 기준정보까지 쓸 수 있습니다. 버튼은 서버가 돌려준 상태와 내 역할에 맞는 것만 보이고, 직접 요청해도 서버가 같은 이유로 거절합니다.
같은 사람이 작성하고 승인할 수 있나요.
없습니다. 작성자와 승인자는 달라야 하고, 금액이 300만 원 이상이면 2단계 승인을 거칩니다. 이 기준은 샘플 규칙이며 회사 규정에 맞게 조정합니다.
문서 상태는 어떻게 바뀌나요.
임시저장에서 검토요청, 승인, 확정으로 이어지고 반려되면 보완 뒤 다시 요청합니다. 확정된 문서는 역처리로 취소되며 반대 문서가 원문서와 연결되어 생깁니다. 허용되지 않는 전이는 서버가 400으로 거절합니다.
일괄 실행에서 같은 조건으로 두 번 실행하면 어떻게 되나요.
두 번째는 거절됩니다. 시뮬레이션 합계와 실행 결과 합계가 같고, 같은 조건의 재실행은 중복 문서를 만들지 않으며 실행 로그가 남습니다.
좁은 화면에서도 쓸 수 있나요.
390px 폭에서 메뉴가 접히고 타일과 목록이 한 칸씩 쌓입니다. 분석 화면도 차트가 표 아래로 내려가 같은 기능을 씁니다.
분석 기능
축을 바꿀 때마다 서버에 다시 묻나요.
아닙니다. 조회할 때 큐브를 한 번 읽고, 이후 행·열 바꾸기와 칩 이동은 브라우저에서 다시 묶습니다. 그래서 네트워크 요청이 없고 총합이 바뀌지 않습니다.
셀을 눌러 내려가는 드릴스루는 무엇을 보여 주나요.
그 칸 금액을 만든 원천 문서 라인입니다. 합계가 칸 금액과 같은지 확인되고, 라인의 문서번호를 누르면 문서 상세로 이동합니다.
AI 해설은 숫자를 모델이 만드나요.
아닙니다. 금액과 비율은 서버가 큐브에서 계산하고 해설은 그 근거 위에서만 나옵니다. 모델이 연결되지 않아도 같은 근거로 규칙 기반 해설이 나오며 결과는 점검 필요 항목을 알려 주는 참고 자료입니다.
에이전트는 언제 도나요.
화면을 열어 실행하거나 서버가 정한 주기로 호출됩니다. 감시 규칙 다섯 개를 점검해 걸린 항목을 받을 사람의 대기함에 올리고, 하루 한 번 제한은 서버 기록으로 판정합니다.
분석 결과를 보고서로 받을 수 있나요.
해설 창의 PowerPoint 버튼으로 표와 차트가 든 보고서를 브라우저에서 바로 만듭니다. 외부 라이브러리 없이 만들며 받은 파일은 일반 프레젠테이션 도구에서 열립니다.
도입과 운영
도입하면 누가 가장 큰 도움을 받나요.
설계변경 뒤 구 구성품 재고를 평가하고 정리하는 생산·원가 담당자와, 문서를 승인하는 관리자입니다. 월말 대사와 보고에 쓰던 시간이 예외 확인과 사유 기록으로 바뀝니다.
이 화면의 수치는 어느 범위에서 확인된 건가요.
설명한 모든 수치는 가상 샘플 데이터로 시험한 결과입니다. 실제 적용 시기와 대상 범위는 회사의 평가 기준과 운영 데이터에 따라 정하며 이 글에서 확인된 사실은 샘플 동작뿐입니다.
표준 T-code는 더 이상 쓰지 않나요.
계속 씁니다. 표준 실행은 SAP 표준 T-code가 담당하고 이 화면은 조회·검증 관점을 더해 확장합니다. 변경 마스터는 CC02, BOM은 CS03, 라우팅은 CA03, 재고는 MB52, 폐기 이동은 MIGO에서 이어서 확인합니다.
데이터 원천은 어디인가요.
운영에서는 변경 마스터, BOM·라우팅, 저장 위치 재고와 평가 데이터, 자재 문서를 CDS 뷰로 읽습니다. 지금 화면은 같은 구조의 샘플 데이터이며, 어떤 필드를 쓰는지는 CDS 구성 절의 표에 있습니다.
외화나 환율이 들어가나요.
샘플은 원화 단일 통화입니다. 외화 구성품이 있다면 환산 시점과 환율 유형을 정해야 하며 이는 운영 시점에 해야 할 일 표에 적었습니다.
운영 연결에는 무엇이 필요한가요.
서비스 주소 교체, CDS 뷰 이송, 권한 역할 매핑, 처리 펑션을 표준 BAPI나 RAP 액션과 연결하는 일입니다. 개발보다 승인 단계와 충당률 같은 규칙을 정하는 일이 많습니다.
권한과 보안은 어떻게 하나요.
데모 사용자 전환을 없애고 SAP 권한 객체와 PFCG 역할로 옮깁니다. 사업장 단위 권한은 집계 단계에 걸어야 드릴스루에서 새지 않습니다.
데이터가 아주 많아지면 어떻게 되나요.
지금은 큐브를 브라우저에서 다시 묶는 구조라 행 수에 상한을 둡니다. 문서 라인이 수천만 건이면 큐브 집계를 서버 쪽 CDS와 인덱스로 두고 조회조건 필수화로 범위를 제한합니다.
품목이나 변경 유형이 바뀌면 어떻게 하나요.
기준정보에서 품목과 변경 유형을 관리하고 큐브의 차원 값은 원천 라인에서 다시 만들어집니다. 새 차원이 필요하면 뷰를 고쳐 이송해야 합니다.
이 도구가 위반 여부를 판정하나요.
판정하지 않습니다. 점검이 필요한 항목을 보여 주는 도구이며 최종 판단은 회사와 감사인이 합니다. 세무 신고에 관한 판단은 회사와 세무 대리인이 합니다.