생산 · 통합 관리

생산 계획·능력 통합 관리 — 수요에서 계획오더·생산오더까지, 능력 부하와 실적 차이를 한 앱에서

기준정보 · 문서 처리와 2단계 승인 · 시뮬레이션을 거친 일괄 실행 · 대사와 예외 조치 · 능력 부하 분석과 요인분해 · AI 해설과 에이전트 · 영역 간 연계와 감사 — 소개 영상과 실제 화면 29종, 그리고 CDS 코드까지

소개 영상블로그 목차 순서대로 · 자막 포함

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

생산 계획 회의의 질문은 늘 같습니다. 이번 달 수요를 받을 능력이 있는가, 누가 승인했고 무엇이 아직 막혀 있는가, 계획과 실적은 왜 벌어졌는가. 지금 이 세 답은 소요량 계획(MD01·MD04) 결과, 생산오더 조회(COOIS), 능력 평가(CM01·CM21), 그리고 밤새 맞춘 엑셀과 메일 승인으로 흩어져 있습니다. 이 앱은 세 답을 한 화면에 붙여, 계획 담당자가 표준 거래 사이를 오가며 숫자를 옮기는 일을 줄입니다.

표준 거래는 한 건을 정확히 처리하는 데 강하고, 이 앱은 그 사이를 잇는 쪽에 섭니다. 계획오더 문서를 만들고 검토 요청·승인·확정까지 상태를 서버가 지키며, 수요를 일괄로 계획오더로 바꾸기 전에 시뮬레이션으로 부하와 가공비를 먼저 보고, 확정한 숫자는 대사식으로 검산합니다. 그 위에 작업장 × 기간 부하를 축을 바꿔 가며 보고, 가공비 차이를 요인으로 가르는 분석을 얹었습니다.

한 줄 요약 — 문서를 만드는 일은 표준도 합니다. 이 앱의 값은 만든 다음에 있습니다: 시뮬레이션 없이는 실행되지 않고, 작성자는 자기 문서를 승인할 수 없고, 대사식이 매번 숫자를 검산하며, 차이는 네 요인으로 갈라 보여 줍니다.

핵심 포인트 여덟 가지

핵심 포인트고객이 얻는 것지금 방식이라면
① 계획·승인·확정이 한 앱에서 끝난다계획오더·생산오더·조정 문서를 만들고 검토 요청 → 승인 → 확정까지 한 화면에서 처리합니다. 상태 전이는 서버가 판정해 화면이 바뀌어도 규칙이 같습니다.표준 거래를 오가며 입력하고, 승인은 메일과 구두로 받아 누가 언제 승인했는지 찾기 어렵습니다.
② 직무 분리와 금액별 2단계 승인작성자가 자기 문서를 승인하면 서버가 거절하고, 1,500만 원 이상은 서로 다른 승인자 두 명이 필요합니다. 1단계가 끝나면 상태 칸에 "1 / 2 단계"가 보입니다.승인 규칙이 담당자의 기억과 메일에 있어, 사람이 바뀌면 규칙도 흔들립니다.
③ 시뮬레이션을 거쳐야 실행되는 일괄 실행수요를 계획오더로 바꾸기 전에 항목 수·총 시간·가공비·능력 초과 작업장을 미리 봅니다. 시뮬레이션 없이 실행하거나 조건이 바뀌면 서버가 거절합니다.일괄 실행을 돌린 뒤에야 능력 초과를 알고, 되돌리는 데 하루가 걸립니다.
④ 대사와 예외 조치를 앱 안에서규칙 네 개(머리·항목 시간, 계획·실적, 부하·능력, 수요·계획오더)를 돌려 예외를 만들고, 조정 문서·사유·보류로 조치한 뒤 재대사합니다.엑셀로 두 표를 맞추고 차이를 메일로 물으며, 조치 이력은 담당자의 파일에만 남습니다.
⑤ 능력 부하를 축을 바꿔 가며 본다작업장 × 기간 피벗을 작업장 유형·자재 그룹 등으로 바꿔 보고, 칸을 누르면 그 값을 만든 문서 라인이 열립니다. 모든 축이 같은 큐브에서 나와 합계가 갈라지지 않습니다.축마다 리포트를 따로 만들고, 숫자가 의심스러우면 다른 거래로 옮겨 조건을 다시 넣습니다.
⑥ 가공비 차이를 네 요인으로계획 대비 가공비 차이를 물량·수율·능률·요율로 가르고, 네 요인의 합이 총차이와 같은지 매번 검산합니다."왜 더 들었나"를 엑셀로 분해하고, 산식이 사람마다 달라 회의에서 다시 따집니다.
⑦ 수주에서 구매요청까지 이어지는 연계와 감사 로그수주 → 계획오더 → 구매요청의 앞뒤 문서를 한 줄로 따라가고, 모든 쓰기는 누가·언제·무엇을 바꿨는지 감사 로그에 남습니다.문서마다 다른 거래를 열어 번호를 이어 보고, 변경 이력은 필요할 때 찾아야 합니다.
⑧ 숫자는 서비스가, 말은 규칙이AI 해설의 금액·비율은 서비스가 계산하고, 감시 규칙 다섯 개가 걸리면 받을 역할의 대기함에 보고가 올라갑니다. 보고는 하루 한 번만 만들어집니다.숫자가 나빠진 날에도 아무도 화면을 열지 않으면 그대로 지나갑니다.

사례로 보는 효과 — 가공비 차이 3,485만 원의 진짜 이유

2026년 1~10월 계획 가공비는 800,494,307원, 실적은 835,342,365원이었습니다. 차이 +34,848,058원(4.4%)까지는 표준 리포트도 말해 줍니다. 이 앱은 그 다음을 답합니다. 네 요인으로 가르자 몫이 가장 큰 것은 능률 +39,276,968원이었습니다 — 같은 물량을 만드는 데 계획보다 시간이 더 든 몫입니다. 물량 +2,858,012원과 수율 +2,570,390원이 더해졌고, 요율은 −9,857,312원으로 총차이를 일부 줄여 주었습니다.

양품 수량 Q · 불량 수량 S · 투입 I = Q + S · 수율 y = Q ÷ I · 투입 단위당 시간 h · 시간당 가공비 r (a = 실적, p = 계획)

물량 = (Qa − Qp) ÷ yp × hp × rp  ·  수율 = Qa (1 ÷ ya − 1 ÷ yp) × hp × rp

능률 = Ia (ha − hp) × rp  ·  요율 = Ha (ra − rp)  (Ha = 실적 시간)

네 항을 더하면 전개 과정에서 중간 항이 서로 지워져 실적 가공비 − 계획 가공비와 정확히 같아집니다.

분해에는 조건을 걸었습니다. 네 요인의 합이 총차이와 1원도 어긋나면 안 됩니다. 화면이 매번 그 등식을 검산해 보여 줍니다. 2,858,012 + 2,570,390 + 39,276,968 − 9,857,312 = 34,848,058. 이 한 줄이 맞아야 "능률이 문제"라는 말이 회의에서 통합니다. 대사식 검사 건수와 차이 0건은 검증 결과 절에 따로 적었습니다.

도입하면 달라지는 것

  • 계획 회의 준비 — 부하율·승인 대기·예외가 개요 한 화면에 모이므로 엑셀 취합과 메일 확인 시간이 줄어듭니다.
  • 승인의 기록 — 누가 언제 어떤 사유로 승인·반려했는지가 상태 이력과 감사 로그에 남아 사람이 바뀌어도 규칙이 이어집니다.
  • 일괄 실행의 안전 — 시뮬레이션 합계와 실행 결과가 같고, 같은 조건의 두 번째 실행은 막혀 중복 오더가 생기지 않습니다.
  • 회의의 주제 — "어느 숫자가 맞나"가 아니라 "능률이 왜 벌어졌나"를 이야기합니다.
  • 놓치는 날이 없는 점검 — 아무도 화면을 열지 않은 날에도 규칙에 걸린 항목은 받을 역할의 대기함에 올라갑니다.

이런 회사에 맞습니다

작업장 여러 곳을 공유하는 제조 법인으로, 수요가 월 단위로 들어오고 계획오더를 일괄로 만들며 승인 단계가 둘 이상인 회사에 맞습니다. S/4HANA의 생산 계획·오더 관리를 쓰면서 능력 평가와 계획 대비 실적을 엑셀로 맞추고 있는 생산관리팀, 그리고 숫자의 출처를 통제하면서 AI 해설을 쓰고 싶은 경영지원 조직이 대상입니다. 반대로 한 작업장에서 한 가지 제품만 만들거나 승인 단계가 없는 곳이라면 표준 거래만으로 충분할 수 있습니다.

실행 화면

실제로 돌아가는 화면 29종을 사용 순서대로 싣습니다. 그림을 누르면 크게 볼 수 있고, 화면마다 무엇을 하는 자리이고 왜 그렇게 두었는지를 아래에 적었습니다. 숫자는 모두 같은 자료에서 나온 것이라 화면끼리 서로 맞춰 읽을 수 있습니다.

사용 방법

  1. 조회조건을 입력합니다. 화면 맨 위 한 줄에 사업장·기간(시작)·기간(종료)이 있고 모두 선택 입력입니다. 기간은 2026-01 형식이며 시작이 종료보다 늦으면 안내가 뜹니다.
  2. 조회를 누르거나 입력 칸에서 Enter 키를 누릅니다. 개요·문서 처리·기준정보 화면은 열 때 현재 조건으로 자동 조회되고, 분석 화면은 조회를 눌러야 큐브를 읽습니다.
  3. 개요의 요약 타일(부하율·승인 대기·반려·미해결 예외·확정·열린 할 일)을 먼저 봅니다. 아래 "내 할 일"에서 줄을 누르면 해당 문서나 예외로 바로 이동합니다.
  4. 왼쪽 메뉴를 위에서 아래로 따라갑니다 — 개요 · 기준정보 관리(작업장·자재·공정 순서 탭) → 문서 처리 → 일괄 실행 → 대사·점검 → 분석 → 영역 간 연계 → 이력·감사·권한.
  5. 행이나 칸을 눌러 상세를 엽니다. 문서 처리에서는 오른쪽에 항목·상태 이력·연계 문서·감사 로그가 열리고, 분석에서는 피벗 칸을 누르면 그 값을 만든 문서 라인이 열립니다.
  6. 처리자가 문서를 만들어 검토 요청하면 승인자가 승인(또는 사유를 적어 반려)하고 처리자가 전기합니다. 일괄 실행은 시뮬레이션 → 결과 검토 → 실행, 대사는 대사 실행 → 예외 목록 → 조치 → 재대사 순서입니다.
  7. 내보내기 — 기준정보·문서·드릴스루·연계 내역·피벗의 CSV는 UTF-8(BOM)이라 엑셀에서 한글이 깨지지 않습니다. 문서는 xlsx 내보내기와, 미리 검사한 뒤 반영하는 xlsx 업로드도 있습니다.

무엇으로 만들었나

화면은 OpenUI5 표준 컨트롤로 짰고, 판정과 집계는 서비스가 맡습니다. 어디에 무엇을 두었는지와 그렇게 한 까닭을 표로 적었습니다.

자리무엇왜 그렇게 두었나
화면 컨트롤OpenUI5 표준 컨트롤(sap.m · sap.f · sap.tnt · sap.ui.table · sap.uxap)과 직접 그린 SVG 차트, 테마 sap_horizon외부 차트 라이브러리를 들이지 않아 반입 심사가 필요 없고, 표와 차트의 숫자가 다른 경로로 만들어질 일이 없습니다.
집계 · 판정 로직큐브 재집계와 요인분해, 상태 전이·채번·승인·대사·시뮬레이션은 모두 서비스 쪽 로직이 판정화면은 요청을 보내고 서버 응답을 그대로 보여 주므로, 같은 규칙을 다른 화면에서 다시 구현하지 않습니다.
OData 서비스 구성OData V2 서비스 1개 — 엔티티셋 34개(기준정보·문서·집계·대사·감사), 펑션 12개(검토 요청·승인·전기·역처리·일괄 실행·대사·요인분해·에이전트 등). 화면은 기본 모델 1개로 모든 셋을 읽습니다.조회·단건·생성·수정·삭제와 펑션만 쓰는 표준 형태라, 운영 서비스로 바꿀 때 서비스 주소 한 곳만 교체합니다.
보조 모델문구(i18n) · 공통 조회조건과 사용자 모델 · 화면별 입력 상태 모델조회조건을 화면마다 따로 두지 않고 하나를 공유해 개요에서 정한 사업장이 분석까지 따라옵니다.
테마와 접근성sap_horizon, 좁은 화면에서는 메뉴가 아이콘으로 접히고 조회조건이 한 줄씩 쌓임현장 태블릿과 휴대폰에서도 같은 화면을 열 수 있게 했습니다.

앱 정보

항목내용
영역생산 (PP) · 통합 관리
업무 흐름 범위수요 → 계획오더 → 승인·확정 → 생산오더 → 능력 부하·실적 차이 분석
모듈 구성개요·할 일 / 기준정보 / 문서 처리 / 일괄 실행 / 대사·점검 / 분석 / 영역 간 연계 / 이력·감사·권한
SAP 표준 T-codeCO01 · CO02 · CO03 · COOIS · MD01 · MD04 · CM01 · CM21 · CR03 · CA03
데이터 연동OData V2 서비스 1개 (조회·단건·생성·수정·삭제·펑션)
테마sap_horizon
SAP 표준 기능을 그대로 이어받은 부분 — 작업장·자재·라우팅·계획오더·생산오더·오더 확인의 데이터 구조와 용어는 표준(CR03·MM03·CA03·MD13·CO03·COOIS)을 따릅니다. 이 앱은 표준 실행을 대신하지 않고, 표준 데이터 위에 조회·검증·승인 관점을 더해 확장합니다.

처음 열었을 때 — 부하율과 할 일이 앞에 선다

처음 여는 화면은 숫자 몇 개와 할 일입니다. 조회조건 아래에 타일 여섯 개가 서고, 그 아래 "내 할 일"이 역할에 맞게 줄을 세웁니다.

처음 열었을 때 — 부하율과 할 일이 먼저
처음 열었을 때 — 부하율과 할 일이 먼저 — 상단 조회조건 아래에 KPI 타일 여섯 개와 내 할 일 목록이 놓입니다.

가장 먼저 보이는 것은 이번 기간의 작업장 부하율(2,563 / 4,122 h, 62.2%)과 승인 대기 34건 · 반려 22건 · 미해결 대사 예외 15건 · 확정 202건 · 열린 할 일 145건입니다. 타일 색은 부하율이 85% 이하면 녹색, 85%를 넘으면 주황, 95%를 넘으면 빨강으로 바뀝니다. 오른쪽 위 사용자 전환으로 역할을 바꾸면 같은 화면이 그 역할의 눈높이로 다시 그려집니다.

내 할 일 — 승인자가 열면 승인 대기가 앞에 선다
내 할 일 — 승인자가 열면 승인 대기가 앞에 선다 — 승인자로 바꾸고 "내 역할 것만"을 켠 모습입니다.

할 일은 서버가 문서 상태에 맞춰 만들고 닫습니다. 승인 대기 · 반려 · 대사 예외 · 시작일 임박이 한 목록에 모이고, 한 줄을 누르면 해당 문서 상세로 바로 넘어갑니다. 상태 오른쪽의 색 글씨는 기한이 지났거나 임박했는지를 뜻합니다.

기준정보 관리 — 작업장 · 자재 · 공정 순서

기준정보는 계획 숫자의 바닥입니다. 작업장의 가용 능력·효율·시간당 가공비가 여기서 정해지고, 부하율과 가공비가 모두 이 값에서 나옵니다.

기준정보 관리 — 작업장 13곳의 능력과 가공비
기준정보 관리 — 작업장 13곳의 능력과 가공비 — 작업장 · 자재 · 공정 순서 세 탭 가운데 작업장 탭입니다.

일 가용 능력(h) · 효율(%) · 교대 · 시간당 가공비가 한눈에 보이고, 위쪽 검색어는 코드와 이름에 모두 걸립니다. 생성 · 수정 · 사용 중지 버튼은 관리자에게만 켜지며, 행의 라디오를 먼저 골라야 수정과 사용 중지가 열립니다. 목록은 CSV로 내려받을 수 있습니다.

자재 탭 — 그룹 · 단위 · 표준 로트
자재 탭 — 그룹 · 단위 · 표준 로트 — 자재 기준정보는 그룹과 단위, 표준 로트 수량을 함께 보여 줍니다.

표준 로트는 일괄 실행이 계획오더 수량을 자를 때 쓰는 값이라 이 탭에서 고치면 다음 실행부터 반영됩니다. 사용 중지한 자재는 목록에 남되 새 문서에서는 고를 수 없습니다.

작업장 생성 — 필수값과 중복은 서버가 확인한다
작업장 생성 — 필수값과 중복은 서버가 확인한다 — 생성 창의 입력 칸은 사업장 · 작업장 · 일 가용 능력 · 효율 · 교대 · 시간당 가공비 · 이름입니다.

저장을 누르면 화면이 아니라 서비스가 필수값과 중복을 확인합니다. 이미 있는 작업장 코드를 다시 넣으면 "이미 있는 작업장입니다"라는 메시지가 그대로 돌아옵니다. 입력을 바꾼 뒤 닫으려 하면 저장하지 않은 변경이 있다고 한 번 더 묻습니다.

변경 이력 — 누가 무엇을 바꿨는지
변경 이력 — 누가 무엇을 바꿨는지 — 방금 만들고 고친 작업장의 변경 이력 창입니다.

생성과 수정이 시각 · 사용자 · 이전 값 · 이후 값으로 남습니다. 효율과 시간당 가공비를 바꾸면 두 값이 한 줄에 같이 기록되므로, 가공비가 달라진 이유를 나중에 따라가기 쉽습니다.

문서 처리와 승인 — 상태와 권한을 서버가 지킨다

문서가 한 번 만들어지면 상태는 서버가 지킵니다. 목록·상세·생성·업로드가 한 화면 안에서 이어지고, 버튼은 현재 상태와 내 역할에 맞는 것만 켜집니다.

문서 처리 — 계획오더 · 생산오더 · 조정 문서 352건
문서 처리 — 계획오더 · 생산오더 · 조정 문서 352건 — 문서 번호 · 구분 · 자재 · 사업장 · 수량 · 시작일 · 가공비 · 상태가 한 목록에 있습니다.

상태 글씨 색으로 임시저장 · 검토요청 · 승인 · 확정을 구분합니다. 위쪽 문서번호·자재 검색과 구분 · 상태 필터로 좁히고, 업로드(xlsx) · CSV · xlsx 버튼으로 여러 건을 올리거나 내려받습니다.

문서 상세 — 항목 · 상태 이력 · 연계 문서 · 감사 로그
문서 상세 — 항목 · 상태 이력 · 연계 문서 · 감사 로그 — 목록과 상세가 나란히 열리고, 상세에는 공정 항목과 상태 이력이 이어집니다.

공정 항목마다 작업장 · 시간(h) · 준비 시간(h) · 가공비가 있고, 머리의 총 시간과 가공비는 항목 합계와 같아야 합니다. 상태 칸에는 승인 단계(0 / 1 단계)와 작성자가 보여, 누가 승인할 수 있는지 미리 알 수 있습니다. 가운데 손잡이를 끌어 목록과 상세 너비를 조절합니다.

문서 생성 — 필수 다섯 칸
문서 생성 — 필수 다섯 칸 — 구분 · 사업장 · 자재 · 수량 · 시작일을 채워 저장하면 문서 번호가 서버에서 매겨집니다.

자재를 고르면 공정 순서(라우팅)에서 항목이 자동으로 펼쳐지고, 시간 · 준비 시간 · 가공비도 서비스가 계산합니다. 수량이 0 이하이거나 종료일이 시작일보다 앞서면 저장되지 않습니다.

일괄 업로드 — 반영 전에 미리 검사한다
일괄 업로드 — 반영 전에 미리 검사한다 — xlsx 업로드 창이 행마다 검사 결과를 미리 보여 줍니다.

"검사 통과 3건 · 확인 필요 1건"처럼 먼저 요약하고, 수량이 0보다 커야 한다는 식의 사유를 행에 붙입니다. 반영을 누르면 서버가 같은 검사를 다시 하며, 통과한 행만 문서로 만들어집니다.

일괄 실행 — 시뮬레이션을 거쳐야 실행된다

수요를 계획오더로 바꾸는 일괄 실행은 되돌리기 어렵습니다. 그래서 시뮬레이션을 거쳐야만 실행되도록 순서를 고정했습니다.

일괄 실행 — 먼저 시뮬레이션으로 본다
일괄 실행 — 먼저 시뮬레이션으로 본다 — 사업장 · 수요 기간을 정하고 시뮬레이션을 누르면 저장 없이 결과가 미리 뜹니다.

미충족 수요 8건이 계획오더 8건 · 638.1 h · 가공비 26,805,730 KRW로 바뀌는 모습이 보이고, 오른쪽 위에 최대 부하율 278.1%가 빨갛게 표시됩니다. 오른쪽 열에는 능력이 넘치는 작업장(M101 · M102)이 적혀 있어 실행 전에 일정을 조정할 수 있습니다. 시뮬레이션 없이는 실행 버튼이 서버에서 거절됩니다.

실행 결과 — 로그와 만들어진 문서
실행 결과 — 로그와 만들어진 문서 — 실행번호 RN00004가 8건 · 638.06시간으로 끝난 뒤의 실행 이력과 로그입니다.

로그 열 개가 시작 → 문서 생성 8건 → 완료 순서로 남고, 아래에는 만들어진 문서가 문서 처리 화면으로 이어지는 링크와 함께 놓입니다. 시뮬레이션 합계(8건 · 638.1 h)와 실행 결과(8건 · 638.06 h)는 반올림 차이 외에는 같습니다. 같은 조건으로 다시 실행하면 서버가 거절합니다.

대사와 예외 조치 — 15건은 의도적으로 남겨 두었다

대사는 "숫자가 맞는가"를 사람 대신 돌려 보는 일입니다. 규칙 네 개가 예외를 만들고, 예외에는 조치와 이력이 붙습니다.

대사 · 점검 — 규칙 네 개와 최근 결과
대사 · 점검 — 규칙 네 개와 최근 결과 — 규칙은 R01~R04이고, 결과표에는 점검 건수 · 차이 건수 · 좌우 합계 · 최대 차이가 있습니다.

R01 문서 머리 시간과 항목 시간 합계, R02 계획 시간과 실적 시간(허용 오차 8%), R03 작업장 월 부하와 가용 능력, R04 당월 수요와 계획오더 수량을 점검합니다. 차이가 난 건은 아래 예외 목록으로 내려가 미해결 → 조치 중 → 해소로 추적합니다.

재대사 — 새 실행번호로 예외가 갱신된다
재대사 — 새 실행번호로 예외가 갱신된다 — 대사 실행(재대사)을 누르면 RC00002가 만들어지고 규칙 4개 · 차이 15건이 머리에 요약됩니다.

같은 데이터를 다시 돌려도 예외가 중복으로 쌓이지 않고 기존 예외가 갱신됩니다. 의도적으로 남겨 둔 15건(R01 1 · R02 5 · R03 3 · R04 6)은 예외 목록에서 조정 문서 · 사유 · 보류로 조치합니다.

분석 — 능력 부하를 축을 바꿔 가며 본다

분석은 이 앱의 중심입니다. 작업장 × 기간 부하를 같은 큐브 위에서 축을 바꿔 가며 보고, 차이는 요인으로 가르고, 칸은 원천 라인까지 내려갑니다.

분석 — 작업장 × 기간 피벗과 차트
분석 — 작업장 × 기간 피벗과 차트 — 조회조건 · 레이아웃 보드 · 피벗 · 차트가 한 화면에 있고, 기본 배치는 행 축 작업장 · 열 축 기간입니다.

조회를 누르면 큐브를 한 번 읽어 피벗을 만듭니다. 합계는 22,324.8 h이고 오른쪽 차트는 같은 값을 그립니다. 조회 전에도 조회조건과 보드 틀이 먼저 보이며, 머리 영역은 접으면 요약 한 줄만 남습니다.

기준 대비 차이 — 같은 표가 계획 대비 표로
기준 대비 차이 — 같은 표가 계획 대비 표로 — 비교 기준을 켜면 칸마다 실적 · 기준 · 차이가 나란히 놓입니다.

합계 실적 22,324.8 h에 대해 기준 22,323.0 h, 차이 +1.8 h입니다. 색은 금액이나 시간 부호가 아니라 가공비에 준 영향 방향으로 칠하며, 금액 임계와 비율 임계를 모두 넘을 때만 입힙니다. 차트는 실적과 기준을 묶음 막대로 바꿉니다.

축 바꾸기 — 서버를 다시 부르지 않는다
축 바꾸기 — 서버를 다시 부르지 않는다 — 차원을 끌어다 놓아 행 축을 작업장 유형 › 작업장, 열 축을 기간으로 바꾼 모습입니다.

행 축은 최대 3단계, 열 축은 최대 2단계까지 쌓을 수 있고, 열 조합이 36을 넘으면 추가를 막습니다. 축을 바꿔도 이미 읽어 온 큐브를 브라우저에서 다시 묶기 때문에 합계가 달라지지 않고 서버 요청도 일어나지 않습니다.

요인분해 — 가공비 차이를 네 요인으로
요인분해 — 가공비 차이를 네 요인으로 — 계획 가공비 800,494,307원과 실적 835,342,365원의 차이 34,848,058원을 가릅니다.

물량 +2,858,012 · 수율 +2,570,390 · 능률 +39,276,968 · 요율 −9,857,312로 나뉘고, 맨 아래 검산 줄이 요인 합과 총차이가 같음(차이 0)을 매번 보여 줍니다. 가장 큰 요인은 능률이며, 원인은 사람이 확인해야 한다고 화면이 적어 둡니다. 오른쪽은 같은 값을 잇는 워터폴 차트입니다.

드릴스루 — 칸 금액을 만든 원천 라인까지
드릴스루 — 칸 금액을 만든 원천 라인까지 — 피벗 칸을 누르면 그 값을 만든 문서 라인이 열립니다.

질의 조건(작업장 유형 = 조립 · 기간 = 2026-02)이 맨 위에 적히고, 칸 부하 598.2 h와 드릴스루 합계 598.2 h · 라인 32개가 같음("일치")을 표시합니다. 문서번호를 누르면 문서 처리의 해당 문서로 이동하고, CSV로 내려받을 수 있습니다.

차원 필터 — 값을 여러 개 고른다
차원 필터 — 값을 여러 개 고른다 — 사업장 · 작업장 · 작업장 유형 · 자재 그룹 · 자재 · 오더 유형 · 근무조별로 값을 여러 개 선택합니다.

같은 차원 안에서는 "또는", 차원 사이에서는 "그리고"로 묶입니다. 목록에는 큐브에 실제로 있는 값만 올라오고, 모두 해제로 한 번에 비웁니다.

레이아웃 저장 · AI 분석 · 에이전트

자주 쓰는 배치는 이름을 붙여 저장하고, 숫자 해설은 AI가 말로 쓰되 숫자는 서비스가 계산하며, 에이전트는 사람이 열지 않아도 감시 규칙을 돌립니다.

레이아웃 저장 — 축과 조건을 이름 붙여 남긴다
레이아웃 저장 — 축과 조건을 이름 붙여 남긴다 — 현재 축 · 조회조건 · 측정값 · 표시 행 수 · 접힘 상태를 이름으로 저장합니다.

기본 레이아웃과 자동 조회를 지정하면 다음에 열 때 조회된 채로 시작합니다. 저장은 서버(LayoutSet)에 사용자별로 남아 다른 브라우저에서도 이어집니다.

레이아웃 관리 — 기본 · 자동 조회 · 이름 바꾸기 · 삭제
레이아웃 관리 — 기본 · 자동 조회 · 이름 바꾸기 · 삭제 — 저장한 레이아웃을 목록으로 관리하는 창입니다.

기본 체크는 하나만 켤 수 있고, 적용을 누르면 그 배치가 바로 피벗에 반영됩니다. 연필은 이름 바꾸기, 휴지통은 삭제입니다.

AI 분석 — 숫자는 서비스가, 말은 규칙이 쓴다
AI 분석 — 숫자는 서비스가, 말은 규칙이 쓴다 — 요약 · 핵심 발견 · 근거 표로 이뤄진 해설 창입니다.

현재 범위의 부하율 55.6%와 가공비 차이 +4.4%를 읽어 요약하고, 계획 대비 5% 넘게 벌어진 작업장을 핵심 발견으로 올립니다. 해설은 기본이 규칙 기반이며 모델 연결은 서비스 설정에서만 켤 수 있고 기본은 꺼져 있습니다. 아래 근거 표를 펼치면 해설이 읽은 값과 출처가 그대로 나옵니다.

AI 에이전트 — 규칙이 곧 받을 사람
AI 에이전트 — 규칙이 곧 받을 사람 — 감시 규칙 · 대기함 · 활동 기록 세 칸으로 이뤄진 창입니다.

규칙은 작업장 월 부하율 상한 · 양품 수량 계획 미달 · 불량률 상승 · 시간당 가공비 상승 · 승인 대기 장기 문서 다섯 개이고, 걸리면 받을 역할(생산 책임자 · COO · 원가 책임자 · 자재 책임자) 관점의 보고가 대기함에 올라갑니다. 실행은 하루 한 번으로 서버가 제한하며, 걸린 것이 없어도 활동 기록은 남습니다.

영역 간 연계 — 수주에서 구매요청까지

문서는 혼자 있지 않습니다. 수요가 계획오더가 되고 구매요청으로 이어지는 앞뒤를 한 줄로 따라갑니다.

영역 간 연계 — 수주에서 계획오더, 구매요청까지
영역 간 연계 — 수주에서 계획오더, 구매요청까지 — 기준 문서의 앞 단계와 뒤 단계를 한 줄로 따라갑니다.

영업 수주 SO26004007이 생산 계획오더 PL26000001이 되고, 그 소요 자재가 구매요청 MR26000001로 이어집니다. 각 문서를 누르면 생산 문서는 문서 처리로 이동하며, 연계 내역은 CSV로 내려받습니다.

이력 · 감사 · 역할

모든 쓰기는 기록이 남고, 역할마다 할 수 있는 일이 다릅니다. 같은 문서를 다른 사람이 열면 버튼이 달라지는 모습입니다.

이력 · 감사 · 권한 — 누가 무엇을 할 수 있는가
이력 · 감사 · 권한 — 누가 무엇을 할 수 있는가 — 데모 사용자 네 명과 역할별 가능 동작, 상태 전이 규칙이 한 화면에 있습니다.

모든 쓰기와 상태 전이, 실행이 서버에서 기록되고, 거절된 요청(직무 분리 · 권한 없음)도 남습니다. 허용되지 않는 전이는 서버가 400으로 거절합니다. 사용자 전환은 데모용이며 운영에서는 SAP 권한 객체로 바꿉니다.

조회자 — 같은 문서, 버튼이 없다
조회자 — 같은 문서, 버튼이 없다 — 조회자로 바꾼 문서 상세입니다.

생성 · 업로드 버튼이 흐려지고 문서 상세의 검토 요청 · 승인 · 전기 버튼이 사라집니다. 화면에서 숨기는 데서 끝나지 않고, 조회자가 직접 쓰기 요청을 보내도 서버가 403으로 거절합니다.

좁은 화면에서는

휴대폰 폭에서는 조회조건과 보드가 한 줄씩 쌓이고, 메뉴는 아이콘으로 접힙니다. 숨기는 기능은 없습니다.

좁은 화면 — 메뉴가 아이콘으로 접힌다
좁은 화면 — 메뉴가 아이콘으로 접힌다 — 휴대폰 폭에서는 조회조건과 레이아웃 보드가 한 줄씩 쌓입니다.

왼쪽 메뉴는 아이콘만 남아 본문 폭을 돌려주고, 차트는 표 아래로 내려갑니다. 행과 열 조합이 상한을 넘으면 반쯤 그린 표 대신 범위를 좁히라는 안내가 뜹니다.

좁은 화면 — 개요
좁은 화면 — 개요 — 타일과 할 일이 한 열로 쌓입니다.

타일은 한 줄에 하나씩 놓이고 내 할 일 목록이 그 아래에 이어집니다. 알림 영역은 목록 아래로 내려갑니다.

화면 뒤에서 일어나는 일

자리하는 일
화면이 하는 일조회조건을 모아 서비스에 요청을 보내고, 돌아온 행과 오류 메시지를 그대로 보여 줍니다. 상태·권한·금액 구간 판정은 화면에 없습니다.
서비스가 하는 일문서 번호 채번, 상태 전이, 직무 분리, 기간 마감 검사, 시뮬레이션·실행, 대사, 요인분해, 에이전트 판정, 감사 로그 기록을 모두 서버가 합니다.
큐브작업장 × 월 × 자재 × 근무조 단위로 미리 묶은 집계 1,380행. 화면은 이 큐브를 한 번 읽어 와 브라우저에서 축을 바꿔 다시 묶습니다.
요청 한 건의 흐름버튼 → 컨트롤러 → 서비스 요청 → 서버 판정 → 결과 행 또는 오류 메시지 → 화면 갱신. 같은 요청은 데모 사용자 전환으로 역할만 바꿔 다시 보낼 수 있습니다.

판정 규칙 — 조건에서 결과까지

아래 표는 화면에서 어떤 조건이 어떤 결과가 되고 사용자가 무엇을 하면 되는지를 정리한 것입니다. 모두 서버가 판정하는 규칙이며, 화면은 결과만 보여 줍니다.

문서 상태 전이

현재 상태동작다음 상태필요 역할서버 검사사용자 조치
임시저장(10)검토 요청검토요청(20)처리자항목 합계 · 필수값 · 기간 열림검토 요청을 누릅니다. 항목이 없거나 기간이 마감이면 서버가 사유를 돌려줍니다.
반려(90)검토 요청검토요청(20)처리자반려 사유를 보완했는지는 사람이 확인보완한 뒤 다시 검토 요청합니다.
검토요청(20)승인승인(30)승인자작성자 ≠ 승인자 · 금액 1,500만 원 이상이면 2단계(서로 다른 승인자)1단계 승인 뒤 상태 칸에 "1 / 2 단계"가 보이면 다른 승인자가 이어서 승인합니다.
검토요청(20)반려반려(90)승인자반려 사유 필수사유를 적어 돌려보냅니다.
승인(30)전기확정(40)처리자기간 열림(마감 월은 거절) · 최종 승인 완료전기하면 문서가 확정되어 수정할 수 없습니다.
확정(40)역처리취소(99)승인자사유 필수 · 마감 월 거절 · 한 번만사유를 적으면 원문서와 연결된 반대 문서(금액 −1배)가 만들어집니다.

부하율 판정

판정 조건결과 상태사용자 조치
부하율 ≤ 85%여유(녹색)추가 수요를 받을 수 있습니다.
85% < 부하율 ≤ 95%주의(주황)일정 조정이나 교대 운영을 검토합니다.
부하율 > 95%능력 초과 위험(빨강)시뮬레이션의 능력 초과 작업장 열에서 어느 작업장인지 확인하고 오더 시작일을 옮기거나 다른 작업장으로 돌립니다.

일괄 실행 판정

판정 조건결과사용자 조치
시뮬레이션 없이 실행SIM_REQUIRED 로 거절먼저 시뮬레이션을 돌립니다.
시뮬레이션 뒤 조건이 바뀜SIM_STALE 로 거절같은 조건으로 시뮬레이션을 다시 돌립니다.
같은 조건으로 이미 실행됨중복 거절처리할 수요가 없다는 메시지를 확인합니다. 새 수요가 들어온 뒤 다시 시뮬레이션합니다.
마감된 기간PERIOD_CLOSED 로 거절열린 기간(2026-09 이후)으로 조건을 바꿉니다.

대사 규칙

규칙판정 조건결과 상태사용자 조치
R01문서 머리 총시간 ≠ 항목 시간 합계(허용 0.01 h)예외 생성항목을 다시 계산하거나 조정 문서로 정리합니다.
R02계획 시간과 실적 시간 차이가 8%(또는 0.5 h) 초과예외 생성실적 입력과 계획 값을 확인하고 사유를 남깁니다.
R03작업장 월 부하 > 가용 능력 + 0.5 h예외 생성 — 능력 초과일정 이동 · 외주 · 교대 증설을 검토합니다.
R04당월 수요 수량 ≠ 계획오더 수량 합계예외 생성미충족 수요를 일괄 실행하거나 보류 사유를 적습니다.

기준 대비 차이 색칠

판정 조건결과 상태사용자 조치
차이가 금액 임계와 비율 임계를 모두 넘음영향 방향에 따라 빨강(나쁨) · 녹색(좋음)차이 요인분해로 원인을 가릅니다.
둘 중 하나만 넘음색을 입히지 않음작은 차이는 눈에 띄게 하지 않습니다.

업무 흐름과 대사식

수요에서 능력 부하·차이까지의 흐름을 단계별 상태와 SAP 데이터 지점, 이 앱의 모듈로 정리했습니다.

단계상태하는 일SAP 데이터 지점이 앱의 모듈
① 수요영업 수주 · 미충족 수요수요 접수VBAK · VBAP · VBEPM7 영역 간 연계 · M4 일괄 실행
② 계획오더임시저장 → 검토요청 → 승인 → 확정일괄 실행이 만들거나 사람이 생성PLAFM3 문서 처리
③ 승인 · 전기승인(1~2단계) → 확정직무 분리 · 기간 열림 확인PLAF · 오더 상태M3 · M8
④ 생산오더확정 → 생산오더 문서공정 항목(작업장 · 시간 · 준비)AFKO · AFPO · AFVC · AFVVM3 문서 처리
⑤ 확인 · 실적양품 · 불량 · 실적 시간실적 입력AFRUM6 분석 큐브
⑥ 능력 부하 · 차이부하율 · 계획 대비 차이 · 요인분해집계 · 대사KAKO · CRHD · 위 테이블 집계M5 대사 · M6 분석
대사식검사 종류검사 대상
① 문서 머리 시간 = 항목 시간 합계R01문서 352건
② 계획 시간 = 실적 시간(확정 생산오더, 허용 오차 8%)R02150건
③ 작업장 월 부하 ≤ 가용 능력R03130건(작업장 × 월)
④ 당월 수요 = 계획오더 수량R0423건
⑤ 집계 큐브 합계 = 원천 라인 합계(6개 측정값)큐브 검산키 묶음 2,808개
⑥ 피벗 총합 = 큐브 총합(축 배치 6가지)화면 검산6가지
⑦ 칸 금액 = 드릴스루 라인 합계화면 검산12칸
⑧ 계획 + 요인 합 = 실적(요인 합 = 총차이)요인분해 검산매 조회
⑨ 시뮬레이션 합계 = 실행 결과 합계서버 검산실행 시
⑩ 역처리 금액 = 원문서 금액 × (−1)서버 검산역처리 시

조회조건

화면마다 쓰는 조건과 서비스 조건($filter)의 대응입니다. 모든 조건은 한 번 정하면 메뉴를 옮겨도 따라옵니다.

화면조건필수기본값서버 조건 대응
공통사업장선택전체Plant eq 'P100'
공통기간(시작)선택2026-01Period ge '2026-01'
공통기간(종료)선택2026-10Period le '2026-10' (시작과 하나의 and 묶음)
문서 처리문서번호 · 자재선택—substringof('값',DocNo) eq true or …
문서 처리구분 · 상태선택전체DocType eq 'PLO' · Status eq '20'
기준정보검색어(코드 · 이름) · 상태선택전체substringof('M10',WorkCenter) eq true or … · Active eq true
일괄 실행사업장 · 수요 기간필수P100 · 2026-10시뮬레이션 펑션의 파라미터
영역 간 연계문서번호선택—FromDoc eq 'PL26000001' or ToDoc eq 'PL26000001'
이력 · 감사검색어선택—substringof('PL26',ObjKey) eq true or …
분석기간 · 사업장 · 측정값 · 표시 행 수 · 비교 기준 · 차원 필터기간 선택2026-01 ~ 2026-09 · 부하 시간(Period ge … and Period le …) and …

결과 컬럼

문서 목록의 컬럼입니다.

컬럼의미 · 산출식
문서번호서버가 채번한 문서 번호 (계획오더 PL · 생산오더 PR · 역처리 RV 접두)
구분계획오더 · 생산오더 · 조정
자재문서가 만드는 자재
사업장—
수량오더 수량과 단위
시작일계획 시작일
가공비(KRW)Σ(시간 + 준비 시간) × 시간당 가공비
상태임시저장 · 검토요청 · 승인 · 확정 · 반려 · 취소

개요와 분석의 컬럼입니다.

컬럼산식의미
작업장 부하율 타일부하 시간 ÷ 가용 능력85% 초과 주황 · 95% 초과 빨강
피벗 합계 · 열 합계Σ 큐브 값측정값(부하 시간 · 실적 시간 · 양품 · 불량 · 가공비 · 가용 능력)을 행 경로 × 열 조합으로 집계
차이실적 − 기준기준 대비 차이 모드에서 칸마다 실적 · 기준 · 차이 · 증감률

좁은 화면에서 달라지는 것

자리달라지는 것
조회조건 · 보드가로로 놓이던 입력 칸과 레이아웃 보드가 한 줄에 하나씩 쌓입니다.
왼쪽 메뉴폭이 900px 아래로 내려가면 아이콘으로 접히고, 넓어지면 다시 펼쳐집니다.
요약 타일한 줄에 하나씩 놓이고 아래에 내 할 일 목록이 이어집니다.
표가로로 넘치는 표는 스크롤합니다. 기능을 줄이지 않고 같은 표를 그대로 둡니다.

파일 구성

앱 폴더/
  index.html · readme.html · Component.js · manifest.json
  controller/    화면별 컨트롤러 10개
  view/          화면 XML 9개 + 창(fragment) XML 15개
  model/         오류 처리 · 권한 · 큐브 재집계 · SVG 차트 · 레이아웃 · 보고서(pptx) · 내보내기(xlsx) · 서식
  i18n/          화면 문구
  odata/         서비스 정의(메타데이터) · 서비스 로직 · 엔티티셋별 데이터
  media/         소개 영상 · 포스터 · 재생 지점 목록

SAP 표준 기능 확장 포인트

이 앱은 SAP 표준을 대체하지 않습니다. 표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회·검증 관점을 더해 확장합니다. 어디까지가 표준이고 어디서부터 이 앱인지를 먼저 적습니다.

표준으로 되는 것과 안 되는 것

하고 싶은 일SAP 표준표준에서 걸리는 자리이 앱이 하는 일
소요량 계획과 계획오더MD01 · MD04 · MD11 · MD13실행 결과를 확인하기 전에는 부하와 가공비를 합쳐 볼 수 없습니다일괄 실행 전에 시뮬레이션으로 항목·시간·가공비·능력 초과를 미리 봅니다
생산오더 처리CO01 · CO02 · CO03 · COOIS오더 한 건씩 처리하고, 목록은 조회 중심입니다한 화면에서 검토 요청·승인·전기·역처리를 상태 규칙대로 처리합니다
능력 평가CM01 · CM21작업장별 평가이며 축을 바꾸거나 칸에서 원천으로 내려가기 어렵습니다작업장 × 기간 피벗을 축을 바꿔 보고 칸에서 문서 라인까지 내려갑니다
작업장·라우팅·자재CR01~CR03 · CA03 · MM03조회·변경이 거래별로 나뉘어 있습니다세 탭으로 묶어 보고 변경 이력을 함께 보여 줍니다
계획 대비 실적 차이의 원인없음표준에 없습니다. 보통 엑셀로 분해합니다물량·수율·능률·요율 네 요인으로 가르고 합계를 검산합니다
승인 기록과 직무 분리문서별 상태 · 변경 문서승인 규칙이 문서 유형마다 다르고 금액별 2단계는 별도 설계가 필요합니다금액 구간별 1~2단계와 작성자≠승인자를 서버가 판정합니다
이상 징후 알림SM36 배치 + 메일잡은 돌지만 누가 봐야 하는지는 사람이 정합니다규칙마다 받을 역할이 붙고 대기함에 보고가 올라갑니다

T-code 별 연계 지점

이 앱이 표준 거래의 어느 자리를 이어받는지 적었습니다. 운영에 올릴 때 꼭 나오는 질문이 "기존 거래를 없애야 하는가"인데, 대부분은 없애지 않고 둡니다 — 법정·감사 대응과 세무 신고에 쓰는 숫자는 표준 거래가 만든 값이어야 하기 때문입니다.

T-code이름연계
VA03판매오더 표시수요의 원천입니다. 영역 간 연계 화면에서 수주 번호를 눌러 확인하는 자리와 같은 데이터(판매오더 일정 라인)를 읽습니다.
MD01 · MD04소요량 계획 실행 · 재고/소요 목록일괄 실행이 수요를 계획오더로 바꾸는 자리입니다. 표준 소요량 계획을 돌린 결과와 이 앱의 시뮬레이션 합계를 맞춰 보는 것이 첫 대사입니다.
MD11 · MD12 · MD13계획오더 생성 · 변경 · 표시이 앱의 계획오더 문서가 닿는 자리입니다. 확정한 문서 번호로 표준 화면에서 같은 오더를 찾아 수량·시작일을 대조합니다.
CO01 · CO02 · CO03생산오더 생성 · 변경 · 표시생산오더 문서의 공정 항목(작업장·시간·준비 시간)이 표준 오더의 공정 구조를 따릅니다. 생산오더 정산과 확인 입력은 표준에 남깁니다.
COOIS오더 정보 시스템문서 목록과 드릴스루가 같은 오더를 읽습니다. 표준 목록의 오더 수와 이 앱의 확정 문서 수를 대조하는 것이 운영 대사의 기본입니다.
CM01 · CM21능력 평가 · 능력 계획(작업장)분석의 부하율이 닿는 자리입니다. 같은 작업장·월의 표준 능력 평가 값과 이 앱의 부하 시간을 나란히 보고 차이를 점검합니다.
CR01 · CR02 · CR03작업장 생성 · 변경 · 표시기준정보의 작업장 탭이 같은 작업장(코드·이름·가용 능력·효율)을 읽습니다. 마스터 변경은 표준 거래에서 하고 이 앱은 조회·점검을 맡는 구성도 가능합니다.
CA03라우팅 표시공정 순서 탭이 닿는 자리입니다. 단위당 시간과 준비 시간이 여기서 오며, 바뀌면 부하 시간이 함께 바뀝니다.
MM03자재 표시자재 탭의 그룹·단위·표준 로트가 같은 자재 마스터 값입니다.
CO11N공정 확인 입력실적 시간·양품·불량이 입력되는 자리입니다. 이 앱은 확인된 실적을 읽어 분석에 쓰며 확인 입력 자체는 표준에 남깁니다.
CO88생산오더 정산원가 정산은 표준에 남깁니다. 이 앱의 가공비는 계획 대비 차이를 보는 분석용 값이며 정산 값이 아닙니다.
ME53N구매요청 표시영역 간 연계의 마지막 칸입니다. 계획오더 소요 자재가 만든 구매요청 번호를 눌러 확인하는 자리입니다.
SM36 · SM37배치 잡 등록 · 조회에이전트를 사람 없이 돌리는 자리입니다. 잡이 에이전트 실행 펑션을 두드리면 화면에서 누른 것과 똑같이 감시 규칙을 점검합니다.

지표 정의 — 숫자가 어디서 오는가

화면의 숫자가 표준 데이터의 어느 값에서 어떤 산식으로 만들어지는지 적었습니다. 표준 화면의 값과 맞춰 볼 때 이 표를 씁니다.

지표산식 · 판정 기준대응 기능원천 데이터비고
부하 시간Σ 공정 표준 시간 × 오더 수량 ÷ 기준 수량 + 준비 시간M1 타일 · M6 피벗AFVV 표준값 · AFKO 수량시간 단위는 시간(h)으로 환산
가용 능력일 가용 능력(h) × 월 일수M2 · M6 · R03KAKO · CRHD교대 · 효율은 기준정보에서 관리
부하율부하 시간 ÷ 가용 능력 × 100M1 · M4 · M6위 두 지표85% 초과 주황 · 95% 초과 빨강
실적 시간Σ 확인된 실적 시간M5 R02 · M6AFRU—
양품 · 불량 수량Σ 확인 수량 · Σ 불량 수량M6 · 에이전트 AR03AFRU수율 = 양품 ÷ (양품 + 불량)
가공비실적 시간 × 작업장 시간당 가공비M6 · 기준 대비 차이AFRU · 작업장 요율요율은 기준정보의 시간당 가공비
계획 대비 차이실적 가공비 − 계획 가공비M6 기준 대비 차이계획 데이터(계획오더 기준)계획 데이터 원천은 도입 때 확정
요인분해물량 · 수율 · 능률 · 요율 네 요인으로 총차이를 가름M6 요인분해 · 워터폴위 지표요인 합 = 총차이로 매번 검산

원천 테이블 — 이 앱이 읽는 표준 데이터

테이블이름이 앱이 읽는 것사용 모듈
AFKO생산오더 헤더오더 수량 · 기본 시작일 · 종료일M3 · M6
AFPO생산오더 품목자재 · 계획 수량 · 입고 수량M3 · M6
AFVC오더 공정공정 번호 · 작업장 연결 · 공정 텍스트M3 · M6
AFVV공정 수량 · 값표준 시간(준비 · 가공) · 기준 수량 · 확인 수량M3 · M6
AFRU오더 확인실적 시간 · 양품 · 불량 · 확인 일자M6 · R02
PLAF계획오더계획 수량 · 시작일 · 종료일M3 · M4
RESB예약 · 소요 자재소요 자재 수량(구매 연계)M7
EBAN구매요청계획오더 소요 자재가 만든 구매요청M7
VBAK · VBAP · VBEP판매오더 헤더 · 품목 · 납품 일정수요 수량 · 납기M4 · M7
CRHD · CRTX작업장 헤더 · 텍스트작업장 코드 · 사업장 · 이름 · 유형M2 · M6
KAKO능력 헤더가용 능력 · 효율 · 작업 시간M2 · M6
CRCO작업장-원가센터 지정원가센터M2
MARA · MAKT · MARC자재 마스터 · 텍스트 · 플랜트 데이터그룹 · 단위 · 이름 · 표준 로트M2
MAPL · PLAS · PLPO라우팅 지정 · 공정 지정 · 공정공정 순서 · 작업장 · 표준 시간M2 · M3

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

표준 CDS 분석 쿼리, Fiori 분석 앱, Analysis for Office와 이 앱이 어떻게 겹치고 나뉘는지 층으로 적었습니다.

층무엇이 앱과의 관계
원천생산오더(AFKO·AFPO·AFVC·AFVV)·확인(AFRU)·계획오더(PLAF)·작업장(CRHD·KAKO)이 앱의 큐브가 읽는 표준 테이블입니다. 앱 전용 기록(상태 이력·감사 로그·대사 결과·에이전트 대기함)만 따로 저장합니다.
CDS 분석 뷰차원 → 큐브 → 분석 쿼리(Consumption)표준 Fiori 분석 앱과 Analysis for Office가 같은 쿼리를 읽을 수 있습니다. CDS 구성 절에 이 앱의 뷰 설계를 코드로 실었습니다.
표준 앱 · 거래능력 평가·오더 정보 시스템 등 표준 거래그대로 둡니다. 특정 Fiori 분석 앱의 이름은 환경마다 다르므로 도입 시점에 확인합니다(확인 필요).
이 앱OpenUI5 통합 관리 화면승인·일괄 실행·대사·조치처럼 쓰기가 있는 흐름과, 축을 바꿔 보는 분석을 한 화면에 묶습니다.

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

확장 포인트무엇을 손대나손대는 방법
작업장 유형 매핑표준 작업장 카테고리를 분석 차원(조립·가공·검사·포장·도장)으로 묶는 기준매핑 테이블 한 장에 행을 더하면 됩니다. 새 카테고리가 생길 때 현업이 직접 적습니다.
시간당 가공비 원천작업장 요율을 활동 유형 단가에서 가져올지 별도 기준으로 둘지원가 담당과 정합니다. 기준정보의 시간당 가공비를 읽는 한 곳만 바꿉니다(확인 필요).
계획 데이터 원천기준 대비 차이의 "계획"이 무엇인지(계획오더 × 라우팅 표준값 등)계획 뷰를 한 장 교체합니다. 같은 키 모양만 지키면 화면은 바뀌지 않습니다.
확장 필드자재·작업장에 고객사 고유 속성을 더할 때표준 확장 필드(Custom Fields)로 추가한 뒤 차원 뷰에 노출하면 필터·축으로 쓸 수 있습니다.
BAdI · 승인 규칙금액 구간·승인 단계를 회사 규칙에 맞출 때현재 규칙(1,500만 원 이상 2단계)을 상태 규칙 표에서 바꾸거나 운영에서는 표준 승인 기능에 연결합니다.
권한사업장별로 볼 수 있는 숫자를 가를 때권한 객체와 DCL로 집계 단계에서 자릅니다. 드릴스루에만 걸면 합계의 뺄셈으로 새어 나갑니다.

CDS 구성

이 사례의 화면은 원천 라인 2,834건을 큐브 1,380행으로 묶어 브라우저가 들고 다시 묶습니다. 데모라서 되는 일이고, 운영 데이터에서는 그렇게 하지 않습니다. 운영으로 올릴 때 가장 먼저 하는 일이 집계를 DB로 내리는 것이고, 그 설계가 아래 CDS 뷰입니다.

코드는 스케치입니다. 필드 이름과 표준 뷰 이름은 릴리스·환경에 따라 다르므로 그대로 붙여 넣기 전에 View Browser(F2170)로 실제 이름을 확인해야 합니다. 확인하지 못한 것은 주석에 "확인 필요"로 적었습니다.

뷰 레이어 구성

레이어뷰하는 일왜 나누나
기준ZPCAP_WCCAT_MAP표준 작업장 카테고리 → 분석 유형 매핑카테고리 코드는 회사마다 다릅니다. 코드에 박으면 새 코드가 생길 때마다 개발자를 불러야 합니다.
차원ZI_WorkCenterDim작업장 한 행 + 이름 + 유형 + 능력큐브에서 join 을 한 번만 걸고, 값 도움말과 텍스트가 이 뷰 하나를 보게 합니다.
큐브(부하)ZI_CapaLoadCube생산오더 공정을 작업장 × 월로 집계화면이 들고 묶던 일을 DB로 내립니다.
큐브(계획)ZI_CapaPlanCube계획오더와 라우팅 표준값으로 만든 기준키가 어긋나면 기준이 실적 옆에 붙지 않고 따로 뜹니다.
쿼리ZC_CapaLoadQuery행·열 축 기본 배치와 계산 측정값표준 Fiori 와 Analysis for Office 가 그대로 띄웁니다.
권한ZI_CAPALOADCUBE (DCL)사업장 권한집계를 읽는 자리에 걸어야 뺄셈으로 새지 않습니다.
서비스ZUI_CapaLoadService서비스 정의 + OData V2 바인딩화면이 읽는 형태를 고정합니다.
동작(RAP)ZR_PlanOrderDoc검토 요청·승인·전기를 동작으로운영에서는 처리 펑션을 RAP 동작에 연결합니다.

① 작업장 유형 매핑 테이블 — 표준 작업장 카테고리를 분석 유형으로 묶는 기준

표준 작업장은 카테고리 한 칸(CRHD.VERWE)으로 구분됩니다. 그 값을 그대로 분석 차원으로 쓰면 고객사마다 코드가 달라 큐브가 갈라지므로, 사업장 · 카테고리별로 "조립 · 가공 · 검사 · 포장 · 도장" 같은 분석 유형을 한 번 정해 두는 매핑 테이블을 둡니다. 운영에서는 이 표가 부하율을 어느 묶음으로 보여 줄지를 결정합니다.

@EndUserText.label : '작업장 유형 매핑 — 능력 분석 차원'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zpcap_wccat_map {
  " ─────────────────────────────────────────────────────────────
  "  ZPCAP_WCCAT_MAP — 작업장 카테고리 → 분석 유형
  "  역할 : 사업장 + 작업장 카테고리를 앱이 쓰는 유형 코드로 변환
  "  이유 : 표준 코드를 직접 차원으로 쓰면 고객사 코드 변경이 곧 큐브 변경이 된다
  " ─────────────────────────────────────────────────────────────
  key client    : abap.clnt not null;
  key werks     : werks_d not null;
  key verwe     : abap.char(4) not null;   " 작업장 카테고리 (CRHD-VERWE, 확인 필요)
  wc_cat        : abap.char(3);            " ASM · MCH · INS · PKG · PNT
  wc_cat_text   : abap.char(20);
  active        : abap_boolean;
}

② 작업장 차원 뷰 — 코드 · 이름 · 유형을 한 자리에

차원 뷰는 큐브가 붙잡을 "작업장" 한 가지를 정의합니다. 키는 사업장 + 작업장 코드이고, 이름은 로그온 언어로 가져옵니다. 이 뷰에서 결정되는 것은 "어떤 작업장이 분석에 올라오는가"이므로 작업장 유형(타입 A)만 읽도록 조건을 걸어 둡니다.

@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '작업장 차원'
@ObjectModel.usageType: { serviceQuality: #A, sizeCategory: #M, dataClass: #MASTER }
@Analytics.dataCategory: #DIMENSION
@ObjectModel.representativeKey: 'WorkCenter'
define view entity ZI_WorkCenterDim
  as select from crhd as wc
    left outer join crtx as tx
      on  tx.objty = wc.objty
      and tx.objid = wc.objid
      and tx.spras = $session.system_language
    left outer join zpcap_wccat_map as mp
      on  mp.werks = wc.werks
      and mp.verwe = wc.verwe
{
      @ObjectModel.text.element: ['WorkCenterText']
  key wc.werks      as Plant,
  key wc.arbpl      as WorkCenter,
      wc.objid      as WorkCenterObjectId,
      tx.ktext      as WorkCenterText,
      mp.wc_cat     as WorkCenterCategory,
      mp.wc_cat_text as WorkCenterCategoryText
}
where wc.objty = 'A'   " 작업장 오브젝트 유형

③ 능력 부하 큐브 — 공정 한 줄이 부하 시간이 되는 자리

큐브는 이 앱의 숫자가 태어나는 곳입니다. 생산오더 공정(AFVC)과 공정 수량 · 값(AFVV)을 읽어 공정 표준 시간에 오더 수량을 곱하고, 시간 단위를 시간(h)으로 환산합니다. 집계는 월 단위 · 작업장 · 자재 그룹 · 자재 · 근무조로 묶으며, 화면의 "칸 금액 = 드릴스루 라인 합계" 검산은 이 뷰의 라인을 그대로 다시 합쳐서 맞춥니다.

@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '능력 부하 큐브 — 생산오더 공정'
@Analytics.dataCategory: #CUBE
@ObjectModel.usageType: { serviceQuality: #D, sizeCategory: #XL, dataClass: #TRANSACTIONAL }
define view entity ZI_CapaLoadCube
  as select from afko as hd
    inner join afpo as it on it.aufnr = hd.aufnr
    inner join afvc as op on op.aufpl = hd.aufpl
    inner join afvv as vv on vv.aufpl = op.aufpl and vv.aplzl = op.aplzl
    inner join crhd as wc on wc.objid = op.arbid and wc.objty = 'A'
  association [0..1] to ZI_WorkCenterDim as _WorkCenter
    on  _WorkCenter.Plant = $projection.Plant
    and _WorkCenter.WorkCenter = $projection.WorkCenter
{
  " ── 키: 오더 + 공정 ───────────────────────────────────────
  key hd.aufnr                                           as OrderNumber,
  key op.vornr                                           as Operation,
      wc.werks                                           as Plant,
      wc.arbpl                                           as WorkCenter,
      it.matnr                                           as Material,
      substring( cast( hd.gstrp as abap.char( 8 ) ), 1, 6 ) as PeriodYYYYMM,

  " ── 측정값: 부하 시간(h) = 가공 표준시간 × 오더 수량 ÷ 기준 수량 + 준비 시간 ──
      @Semantics.quantity.unitOfMeasure: 'HourUnit'
      @Aggregation.default: #SUM
      cast(
        unit_conversion( quantity    => division( vv.vgw02 * hd.gamng, vv.bmsch, 3 ) + vv.vgw01,
                         source_unit => vv.vge02,
                         target_unit => cast( 'H' as abap.unit( 3 ) ),
                         error_handling => 'SET_TO_NULL' )
        as abap.quan( 13, 3 ) )                          as LoadHours,
      cast( 'H' as abap.unit( 3 ) )                      as HourUnit,

  _WorkCenter
}
where hd.autyp = '10'   " 오더 범주 10 = 생산오더

④ 계획 기준 뷰 — 계획오더와 라우팅 표준값으로 만드는 "기준"

기준 대비 차이를 보려면 실적과 같은 차원을 가진 기준이 있어야 합니다. 계획오더(PLAF)의 수량에 라우팅 표준값을 곱해 계획 부하를 만들고, 실적 큐브와 같은 키 이름(사업장 · 작업장 · 월 · 자재)을 씁니다. 어느 계획 원천을 기준으로 삼을지(계획오더 · 판매계획 · 별도 계획 테이블)는 도입 때 가장 먼저 합의할 항목입니다.

@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '능력 계획 기준 — 계획오더 × 라우팅'
@Analytics.dataCategory: #CUBE
define view entity ZI_CapaPlanCube
  as select from plaf as pl
    inner join mapl as ma on ma.matnr = pl.matnr and ma.werks = pl.plwrk and ma.plnty = 'N' and ma.loekz = ''
    inner join plas as pa on pa.plnty = ma.plnty and pa.plnnr = ma.plnnr and pa.plnal = ma.plnal and pa.loekz = ''
    inner join plpo as po on po.plnty = pa.plnty and po.plnnr = pa.plnnr and po.plnkn = pa.plnkn
    inner join crhd as wc on wc.objid = po.arbid and wc.objty = 'A'
{
  key pl.plnum                                           as PlannedOrder,
  key po.vornr                                           as Operation,
      pl.plwrk                                           as Plant,
      wc.arbpl                                           as WorkCenter,
      pl.matnr                                           as Material,
      substring( cast( pl.psttr as abap.char( 8 ) ), 1, 6 ) as PeriodYYYYMM,
      @Aggregation.default: #SUM
      cast( division( po.vgw02 * pl.gsmng, po.bmsch, 3 ) + po.vgw01 as abap.dec( 13, 3 ) ) as PlanLoadHours
}

⑤ 분석 쿼리 — 화면이 부르는 조회 형태를 고정한다

Consumption 뷰는 어떤 차원을 행 · 열 · 필터로 쓸 수 있는지를 선언합니다. 화면의 차원 다중 선택 필터는 아래 @Consumption.filter 선언과 같은 규칙(차원 안 or, 차원 사이 and)을 따릅니다. 가용 능력(KAKO 기반) 큐브를 같은 방식으로 붙이면 부하율을 쿼리 안 계산 키 수치로 둘 수 있으며, 이 글에서는 지면상 부하 시간까지만 보입니다.

@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '작업장 능력 부하 분석'
@Analytics.query: true
@VDM.viewType: #CONSUMPTION
define view entity ZC_CapaLoadQuery
  as select from ZI_CapaLoadCube
{
  @AnalyticsDetails.query.axis: #ROWS
  @Consumption.filter: { selectionType: #RANGE, multipleSelections: true }
  WorkCenter,

  @AnalyticsDetails.query.axis: #COLUMNS
  @Consumption.filter: { selectionType: #INTERVAL, mandatory: true }
  PeriodYYYYMM,

  @Consumption.filter: { selectionType: #SINGLE, multipleSelections: false, mandatory: true }
  Plant,

  Material,

  @AnalyticsDetails.query.axis: #COLUMNS
  @Semantics.quantity.unitOfMeasure: 'HourUnit'
  LoadHours,

  HourUnit
}

⑥ 접근 제어(DCL) — 사업장 권한을 집계 단계에 건다

권한은 드릴스루 화면에만 걸면 안 됩니다. 집계 합계에서 남의 사업장 숫자를 뺀 값으로 역산할 수 있기 때문입니다. 아래 DCL은 쿼리 단계에서 사업장 권한을 걸어, 합계도 드릴스루도 같은 범위만 보이게 합니다. 권한 객체 이름과 필드는 고객사 권한 설계에 맞춰 확인해야 합니다.

@EndUserText.label: '능력 부하 분석 — 사업장 권한'
@MappingRole: true
define role ZC_CapaLoadQuery {
  grant select on ZC_CapaLoadQuery
    where ( Plant ) = aspect pfcg_auth( C_AFKO_AWK, WERKS, ACTVT = '03' );
    " 권한 객체 이름 · 필드는 고객사 권한 설계에 맞춰 확인 필요
}

⑦ 서비스 정의와 바인딩 — OData V2 로 내보내는 자리

뷰를 만든 뒤에는 서비스 정의로 무엇을 내보낼지 정하고, 서비스 바인딩으로 OData V2(UI)로 게시합니다. 이 앱의 화면은 엔티티셋 이름만으로 바인딩되므로, 내보내는 이름을 앱이 기대하는 엔티티셋 이름과 맞추는 일이 전환의 핵심입니다. 게시 뒤에는 서비스 활성화 도구에서 활성 여부를 확인하고 앱 설정의 서비스 주소를 바꿉니다.

@EndUserText.label: '생산 능력 통합 서비스'
define service ZUI_CapaLoadService {
  expose ZC_CapaLoadQuery  as CubeSet;
  expose ZI_WorkCenterDim  as WorkCenterSet;
  expose ZI_CapaPlanCube   as PlanSet;
}

" 서비스 바인딩(ADT)
"   이름 : ZUI_CAPALOAD_O2
"   유형 : OData V2 - UI
"   게시 후 : /IWFND/MAINT_SERVICE 에서 활성 확인 → 앱 manifest 의 서비스 주소 교체

⑧ 문서 처리 — 승인 · 전기를 RAP 동작으로

계획오더 · 생산오더 · 조정 문서의 상태 전이는 운영에서 RAP 동작으로 옮길 수 있습니다. 아래 동작 이름은 이 앱의 펑션(검토 요청 · 승인 · 반려 · 전기 · 역처리)과 1:1이고, 작성자와 승인자가 같으면 막는 직무 분리와 금액 구간별 승인 단계는 구현 클래스에서 판정합니다.

managed implementation in class zbp_i_planorderdoc unique;
strict ( 2 );

define behavior for ZR_PlanOrderDoc alias PlanDoc
persistent table zpcap_doc
lock master
authorization master ( instance )
etag master LastChangedAt
{
  create;
  update ( features : instance );
  delete ( features : instance );

  field ( readonly ) DocNo, Status, ApprovedBy, PostedBy, ApprovalStep;

  action ( features : instance ) submit  result [1] $self;
  action ( features : instance ) approve result [1] $self;
  action ( features : instance ) reject  parameter ZA_RejectReason result [1] $self;
  action ( features : instance ) post    result [1] $self;
  action ( features : instance ) reverse parameter ZA_ReverseReason result [1] $self;

  determination setDocumentNumber on save { create; }
  validation    checkSegregation  on save { field ApprovedBy; }   " 작성자 ≠ 승인자
  validation    checkPeriodOpen   on save { field Period; }

  mapping for zpcap_doc corresponding;
}

운영 시점에 해야 할 일

개발보다 정하는 일이 많습니다. 아래 표의 왼쪽은 대부분 코딩이 아니라 합의입니다.

해야 할 일무엇을 정하나정하지 않으면누가
상태 흐름 · 승인 단계 · 금액 구간임시저장→검토요청→승인→확정의 단계, 1,500만 원 이상 2단계 같은 구간, 반려 후 재요청 규칙화면마다 다른 규칙이 생기고 승인 이력이 갈립니다생산관리 · 경영지원
직무 분리 · 역할 → 권한 객체조회자·처리자·승인자·관리자를 SAP 권한 객체와 PFCG 역할로 옮기기 (데모 사용자 전환 제거)데모용 전환이 운영에 남아 누구나 승인할 수 있게 됩니다권한 담당 · Basis
처리 펑션 → 표준 연결검토 요청·승인·전기·역처리·일괄 실행 펑션을 표준 BAPI·RAP 동작·표준 일괄 처리(MD01 등)에 연결앱 안의 문서와 표준 오더가 따로 놀아 대사가 계속 어긋납니다개발 · 생산관리
문서 번호 범위계획오더·생산오더·역처리 접두와 번호 범위, 연도 전환표준 번호와 겹치거나 해가 바뀔 때 끊깁니다개발 · 기준정보
영역 간 연계 키수주 → 계획오더 → 구매요청을 잇는 키와 문서 흐름 규칙앞뒤 문서를 한 줄로 따라갈 수 없게 됩니다생산관리 · 구매
대사 규칙 · 허용 오차네 규칙의 허용 오차(예: 시간 0.01h, 실적 8%)와 점검 주기숫자를 믿지 않아 아무도 쓰지 않습니다회계 · 원가 담당
계획 원천 · 시간당 가공비 원천기준 대비 차이의 계획이 무엇인지, 요율을 어디서 가져올지"기준이 왜 이 숫자냐"가 매 회의마다 반복됩니다원가 · 기획
차원 범위큐브 group by 에 올릴 차원(작업장·월·자재·근무조 외 추가 여부)나중에 늘리면 뷰를 고쳐 다시 이송해야 합니다현업 · 개발
배치 등록에이전트 실행을 SM36 잡으로 매일 한 번 호출할지, 대상 범위사람이 화면을 열 때만 점검이 돕니다Basis · 생산관리
전송(TR) 순서테이블 → 차원 → 큐브 → 쿼리 → DCL → 서비스 정의·바인딩이송 중 활성화 오류가 납니다개발
서비스 게시 · 주소 교체서비스 바인딩 게시와 활성 확인(/IWFND/MAINT_SERVICE) 후 앱의 서비스 주소 교체화면이 서비스를 찾지 못합니다Basis · 개발

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

대시보드에서 가장 비싼 질문은 "이 숫자 맞아?"입니다. 그래서 만드는 쪽에서 먼저 대사식을 세워 두고 전수로 돌렸습니다. 아래는 이 사례 데이터의 결과입니다.

대사식검사 건수차이 건수비고
R01 문서 머리 시간 = 항목 시간 합계3521의도적 예외 1건 · 최대 차이 8.00 h
R02 계획 시간 = 실적 시간1505의도적 예외 5건 · 최대 차이 60.36 h
R03 작업장 월 부하 ≤ 가용 능력1303의도적 예외 3건 · 최대 차이 34.94 h
R04 당월 수요 = 계획오더 수량236의도적 예외 6건 · 최대 차이 500 EA
집계 큐브 = 원천 라인 합계(키 묶음 × 6개 측정값)2,8080—
피벗 총합 = 큐브 총합(축 배치 6가지)60—
칸 금액 = 드릴스루 라인 합계120—
요인 합 = 총차이10—
시뮬레이션 합계 = 실행 결과 합계(8건)10—
역처리 금액 = 원문서 × (−1)10—

의도적으로 넣은 예외 15건(규칙 R01 1건 · R02 5건 · R03 3건 · R04 6건)은 능력 초과와 계획·실적 불일치 같은 점검 시나리오를 보이려고 샘플 데이터에 일부러 넣은 것이며, 위 "차이 건수"와 같은 건입니다. 나머지 대사식의 차이는 모두 0입니다. 화면 쪽은 브라우저 자동화로 따로 돌려 축을 바꿔도 합계가 변하지 않는지, 칸 금액과 드릴스루 합계가 같은지를 확인했습니다.

운영 데이터로 갈 때 — 문서가 수천만 건이면

이 사례는 원천 라인 2,834건 → 큐브 1,380행입니다. 문서가 수천만 건이 되어도 큐브 행 수는 문서 건수가 아니라 차원 조합 수를 따라갑니다 — 작업장 13곳 × 월 × 자재 × 근무조처럼 조합이 정해져 있기 때문입니다. 그래서 먼저 막히는 곳은 큐브가 아니라 원천 라인 조회입니다.

구간어떻게 되나무엇을 손보나
큐브 수천 행지금 방식 그대로 — 브라우저가 들고 묶어도 걸리지 않습니다 (이 사례 1,380행)손볼 것 없음
큐브 수만 행축을 바꿀 때 눈에 띄게 걸립니다CDS 에서 집계 수준을 올립니다(쓰지 않는 차원을 빼거나 기간을 묶음)
큐브 수십만 행브라우저가 들고 있을 수 없습니다묶기를 서비스로 옮기고 필요한 조합만 받습니다
문서 · 원천 라인 조회전체를 내리면 용량이 폭증합니다건수를 먼저 세고, 조회 조건(기간·사업장)을 필수로 하고, 상위 N건만 받습니다
인덱스 · 응답 시간조건 필드에 인덱스가 없으면 느려집니다기간·사업장·작업장 키에 맞춰 보조 인덱스를 설계하고, 허용 응답 시간을 정해 둡니다

한 가지 더. 드릴스루는 집계가 아니라 조회입니다. 칸 하나에 수만 건이 매달려 있으면 그 화면이 열리지 않으므로, 건수를 먼저 세어 보고 일정 수를 넘으면 조건을 더 좁히라고 안내하는 쪽으로 설계합니다.

자주 묻는 질문

도입을 검토하는 분들이 먼저 묻는 것을 네 묶음으로 모았습니다. 답은 이 글의 사례 데이터에서 확인한 범위로만 적었습니다.

숫자와 산식

부하율은 어떻게 계산됩니까?

부하율 = 부하 시간 ÷ 가용 능력 × 100 입니다. 부하 시간은 공정 표준 시간에 오더 수량을 곱해 기준 수량으로 나눈 값에 준비 시간을 더해 모으고, 가용 능력은 일 가용 능력(h)에 월 일수를 곱합니다. 효율과 교대는 작업장 기준정보에서 관리합니다.

이 사례의 개요에서는 2,563시간 ÷ 4,122시간으로 62.2%입니다. 85%를 넘으면 주황, 95%를 넘으면 빨강입니다.

요인분해의 합이 정말 총차이와 같습니까?

같습니다. 우연이 아니라 그렇게 되는 산식을 골랐습니다. 물량·수율·능률·요율 네 항을 전개하면 중간 항이 서로 지워져 실적 가공비에서 계획 가공비를 뺀 값과 정확히 같아집니다.

이 사례는 2,858,012 + 2,570,390 + 39,276,968 − 9,857,312 = 34,848,058원입니다. 화면은 이 등식을 매번 검산해 보여 주며, 맞지 않으면 그 자체가 오류 신호입니다.

능률이 왜 가장 큰 요인으로 나왔습니까?

능률은 "투입 단위당 시간이 계획보다 얼마나 더 들었나"를 계획 요율로 환산한 값입니다. 이 사례에서는 투입 단위당 시간이 계획보다 길었던 몫이 +39,276,968원으로 나왔습니다. 다만 검증용 샘플 데이터의 값이므로 실제 회사의 결과는 아닙니다. 어느 작업장·자재에서 났는지는 분석 화면에서 차원을 바꿔 가며 확인합니다.

칸 금액과 드릴스루 합계가 같습니까?

같습니다. 큐브가 원천 라인을 더해 만든 값이기 때문입니다. 이 사례에서 눌러 본 칸의 598.2시간은 32개 라인의 합과 같았고, 12개 칸을 골라 대조했을 때 차이는 모두 0이었습니다. 칸 금액과 합계가 다르면 그 즉시 점검 대상으로 봅니다.

대사 예외 15건은 오류 아닙니까?

아닙니다. 점검 화면이 실제로 어떻게 보이는지 보이려고 샘플 데이터에 일부러 넣은 예외입니다. 규칙 R01 1건 · R02 5건 · R03 3건 · R04 6건이며, 대사 차이 건수와 같은 건입니다. 예외를 뺀 나머지는 차이가 모두 0입니다.

계획 데이터는 어디서 옵니까?

이 사례에서는 계획오더의 수량에 라우팅 표준값을 곱해 계획 시간과 계획 가공비를 만듭니다. 운영에서는 계획 원천(계획오더 기준인지, 별도 계획 버전인지)과 시간당 가공비 원천을 도입 단계에서 확정해야 하며, 확인하지 못한 부분은 화면과 코드에 "확인 필요"로 남겨 두었습니다.

화면과 조작

시뮬레이션 없이 일괄 실행을 누르면 어떻게 됩니까?

서버가 거절하고 먼저 시뮬레이션을 돌리라고 안내합니다. 시뮬레이션 뒤 조건(사업장·기간)이 바뀌어도 거절하며, 같은 조건으로 시뮬레이션을 다시 돌려야 합니다. 일괄 실행은 되돌리기 어려운 일이라 순서를 고정했습니다.

같은 조건으로 두 번 실행하면 문서가 두 배로 생깁니까?

생기지 않습니다. 같은 조건으로 이미 실행했다면 처리할 수요가 없다는 메시지로 막습니다. 이 사례에서는 수요 8건이 638.06시간의 문서 8건으로 한 번만 만들어졌고, 새 수요가 들어온 뒤에 다시 시뮬레이션하면 다음 실행이 열립니다.

작성자가 자기 문서를 승인할 수 있습니까?

없습니다. 서버가 작성자와 승인자가 같으면 거절합니다. 금액이 1,500만 원 이상이면 서로 다른 승인자 두 명이 필요하고, 1단계 승인 뒤에는 상태 칸에 "1 / 2 단계"가 보입니다. 조회자는 버튼이 흐려지고 서버도 같은 기준으로 거절합니다.

마감된 기간의 문서는 어떻게 됩니까?

이 사례에서는 2026-01~08 기간이 닫혀 있고 09·10월이 열려 있습니다. 닫힌 기간에는 전기와 역처리가 서버에서 거절됩니다. 확정한 문서를 되돌릴 때는 승인자가 사유를 적어 역처리하며, 원문서와 연결된 반대 문서(금액 −1배)가 만들어지고 한 번만 가능합니다.

엑셀 업로드는 어떻게 검사합니까?

반영하기 전에 행마다 검사 결과를 미리 보여 줍니다. 이 사례의 업로드 창은 "검사 통과 3건 · 확인 필요 1건"처럼 요약하고, 통과한 행만 반영합니다. 검사에 걸린 행은 확인 필요로 표시되고, 고친 뒤 다시 올리면 됩니다.

휴대폰에서도 같은 화면이 보입니까?

보입니다. 폭이 좁아지면 왼쪽 메뉴가 아이콘으로 접히고 조회조건과 보드가 한 줄씩 쌓입니다. 숨기는 기능은 없고 가로로 넘치는 표는 스크롤합니다. 현장 태블릿으로 승인만 하는 경우를 염두에 두었습니다.

분석 기능과 AI

축을 바꿀 때마다 서버를 다시 부릅니까?

부르지 않습니다. 큐브는 이미 브라우저에 있고 축을 바꾸는 일은 그 큐브를 다시 묶는 일입니다. 서버를 다시 부르는 때는 조회를 눌렀을 때뿐입니다. 큐브가 수만 행을 넘으면 묶기를 서비스로 옮기는 것이 CDS 구성 절의 첫 번째 권고입니다.

저장한 레이아웃은 어디에 남습니까?

현재 축·조회조건·측정값·표시 행 수·접힘 상태를 이름으로 저장합니다. 기본 레이아웃과 "열 때 자동 조회"는 하나만 켤 수 있고, 이름 바꾸기와 삭제는 관리 창에서 합니다. 운영에서는 표준 변형 관리 서비스에 두는 방법도 있습니다.

AI 가 금액을 잘못 말하면 어떻게 됩니까?

그럴 자리를 두지 않았습니다. 금액과 비율은 서비스가 큐브에서 계산해 근거 표로 넘기고, 모델은 그 숫자를 읽어 설명만 합니다. 근거 표는 화면에서 펼쳐 볼 수 있어 해설의 숫자와 바로 대조되며, 모델을 붙이지 않아도 같은 근거로 규칙 기반 해설이 나옵니다.

에이전트는 무엇을 감시합니까?

감시 규칙 다섯 개입니다 — 작업장 월 부하율 상한, 양품 수량 계획 미달, 불량률 상승, 시간당 가공비 상승, 승인 대기 장기 문서. 규칙마다 기준값과 받을 역할(생산 책임자·COO·원가 책임자·자재 책임자)이 붙어 있고, 걸리면 그 역할의 대기함에 근거를 단 보고가 올라갑니다.

에이전트 보고는 자동으로 발송됩니까?

발송하지 않습니다. 보고는 앱의 대기함에 쌓이고 사람이 읽고 판단합니다. 같은 날 두 번째 실행은 "하루 한 번 제한"으로 막히고 활동 기록만 남습니다. 조회자는 에이전트를 실행할 수 없으며, 사람이 누르든 타이머나 배치가 부르든 같은 규칙을 탑니다.

도입과 운영

도입하면 어떤 효과가 있고 누가 씁니까?

생산 계획 담당자(문서·일괄 실행), 승인자(검토·승인), 생산 책임자·원가 담당(분석·대사), 관리자(기준정보·권한)가 씁니다. 효과는 이 사례에서 확인한 범위로만 말합니다 — 상태·승인 규칙을 서버가 지키고, 일괄 실행이 시뮬레이션을 거치며, 대사식이 매번 숫자를 검산한다는 점입니다. 시간 절감률 같은 수치는 실제 도입 후 측정해야 합니다.

언제부터 어디까지 적용할 수 있습니까?

확인된 것은 검증용 샘플 데이터 위에서 화면·서비스 로직·대사가 일관되게 동작한다는 사실까지입니다. 운영 시스템의 원천 연결, 권한 설계, 계획 원천 확정은 도입 단계에서 정해야 하며 시기와 소요는 환경마다 다르므로 확인이 필요합니다.

기존 표준 거래는 없애야 합니까?

대부분 없애지 않고 둡니다. 오더 생성·정산·확인 입력은 표준에 남기고, 이 앱은 그 사이의 승인·일괄 실행·대사·분석을 맡습니다. 법정·감사 대응 숫자는 표준 거래가 만든 값이어야 하므로, 이 앱의 숫자와 표준 거래의 숫자를 맞춰 보는 대사를 운영 절차로 둡니다.

표준 T-code 와는 어떻게 오갑니까?

이 앱 → 표준: 확정 문서 번호로 CO03(생산오더)·MD13(계획오더)에서 같은 오더를 열어 수량과 시작일을 대조하고, 부하는 CM01·CM21의 같은 작업장·월 값과 맞춰 봅니다. 표준 → 이 앱: 오더 번호를 문서 처리의 검색에 넣으면 상태 이력과 감사 로그를 볼 수 있습니다. 두 쪽의 건수가 다르면 R01~R04 규칙으로 먼저 좁힙니다.

데이터 원천과 정합성은 어떻게 확인합니까?

원천은 생산오더(AFKO·AFPO·AFVC·AFVV)·확인(AFRU)·계획오더(PLAF)·작업장(CRHD·KAKO)입니다. 정합성은 대사식 열 가지로 확인했습니다 — 머리·항목 시간, 계획·실적, 부하·능력, 수요·계획오더, 큐브·원천 합계, 피벗·큐브 총합, 칸·드릴스루, 요인 합·총차이, 시뮬레이션·실행 결과, 역처리 금액입니다.

외화나 환율은 어떻게 처리합니까?

이 앱의 금액은 가공비(원화)이며 환율 변환이 없습니다. 수입 자재 같은 외화 항목이 계획 원가에 필요하면 환율 유형과 환산 일자를 도입 단계에서 정해 계획 뷰에서 환산한 뒤 같은 키로 맞춥니다. 환율 변동을 평가하는 기능은 이 앱의 범위가 아닙니다.

권한과 보안은 어떻게 됩니까?

데모의 사용자 전환은 시연용입니다. 운영에서는 SAP 권한 객체와 PFCG 역할로 바꾸고 사업장 권한을 CDS 의 DCL 로 집계 단계에 겁니다. 서버가 요청의 사용자로 역할을 판정하는 구조라 대체 지점이 한 곳이며, 화면의 외부 라이브러리는 표준 컨트롤뿐이라 반입 심사 부담이 적습니다.

운영 연결 절차와 소요는 어떻게 됩니까?

순서는 이렇습니다. ① 계획 원천·요율 원천·작업장 유형 매핑을 정합니다. ② CDS 뷰(테이블·차원·큐브·쿼리·DCL·서비스)를 만들어 이송합니다. ③ 서비스를 게시하고 앱의 서비스 주소를 바꿉니다. ④ 처리 펑션을 표준에 연결하고 권한을 PFCG 로 옮깁니다. ⑤ 대사로 표준 거래와 건수를 맞춥니다. 소요는 환경과 합의 속도에 달려 있어 단정하지 않습니다.

대용량이면 느려지지 않습니까?

느려질 수 있는 곳을 미리 정했습니다. 큐브는 차원 조합 수를 따라 늘어 문서 건수와 무관하고, 먼저 막히는 곳은 원천 라인 조회입니다. 조회 조건을 필수로 하고 건수를 먼저 세며 상위 N건만 받습니다. 큐브가 수만 행을 넘으면 묶기를 서비스로 옮깁니다.

작업장 유형이나 계정 같은 매핑이 바뀌면 어떻게 합니까?

작업장 유형 매핑 테이블에 행을 더하거나 바꿉니다. 코드에 박혀 있지 않아 개발 없이 현업이 유지합니다. 새 작업장 카테고리가 생기면 어느 분석 유형으로 묶을지만 적어 주면 되고, 정기적으로 손이 가는 곳은 사실상 이 매핑 하나입니다.

이 도구의 판단을 최종 결과로 써도 됩니까?

이 앱은 업무 처리와 분류·집계·대사를 돕는 점검 도구이며, 최종 판단은 회사와 감사인이 합니다(세무 신고는 회사와 세무 대리인·관세사). 법정·공시·감사 대응에 쓰는 숫자는 SAP 표준 거래가 만든 값을 쓰고, 이 앱의 숫자는 그것을 점검하고 설명하는 데 씁니다.