제조원가 분석

금형·치공구 원가 배부 점검 — 제조원가 분석, 취득원가를 예상 타수로 나눈 배부율로 배부액을 다시 구해 장부와 맞춰 보는 월마감 화면

배부율로 배부액 재계산 · 장부 배부액 대조 · 누적 타수와 사용률 · 예상 타수에 가까운 금형·치공구 찾기 · 점검 필요만 골라 보기 — 소개 영상과 실제 화면 7종, 그리고 CDS 코드까지

소개 영상1분 37초9개 장면음성 안내·자막표지에서 점검 필요 조회, 금형·치공구별·구분별·월별 탭과 행 상세, 대사 결과를 거쳐 정리까지

개발 배경 — 이 앱을 사용해야 하는 이유

사출금형, 프레스금형, 조립 지그, 검사 게이지 같은 금형·치공구는 한 번 취득하면 여러 달 동안 같은 제품을 만드는 데 쓰입니다. 그래서 원가를 한꺼번에 반영하지 않고 생산한 타수에 비례해 제품에 나누어 담는 방식을 쓰는 회사가 많습니다. 월마감에는 늘 같은 질문이 따라붙습니다. 이번 달 타수에 배부율을 곱한 값이 장부 배부액과 같은가, 누적 타수가 예상 총 타수를 넘지 않았는가, 얼마나 남았는가. 지금은 이 답이 자산 화면, 생산 실적, 배부 전표, 엑셀 관리표에 흩어져 있어서 마감 때마다 사람이 맞춥니다.

이 앱은 취득원가에서 잔존가치를 뺀 배부대상액을 예상 총 타수로 나눠 타수당 배부율을 구하고, 월별 타수에 곱해 배부액을 다시 계산한 뒤 장부 배부액과 견줍니다. 그리고 확인이 필요한 라인만 골라 줍니다. 표준 실행과 전표는 그대로 두고 조회·검증 관점만 더하는 화면입니다.

한 줄 요약 — 배부 내역을 보여 주는 화면은 많습니다. 이 앱의 값은 그 다음에 있습니다: 배부율과 타수로 배부액을 다시 구해 장부와 맞추고, 누적 타수가 예상 타수에 가까워졌거나 넘은 금형·치공구를 미리 가려 줍니다. 그 판단과 책임은 여전히 회사와 감사인에게 있습니다.

배부 전표만 봐서는 남은 몫을 알 수 없다

배부 전표에는 그 달에 얼마를 배부했는지만 남습니다. 그래서 “이 금형은 앞으로 몇 타수를 더 쓸 수 있고 미배부 잔액은 얼마인가” 같은 질문이 나오면 엑셀에 누적 타수와 배부율을 붙여 다시 계산해야 합니다. 이 앱은 라인마다 누적 타수, 사용률, 잔여 타수, 미배부 잔액을 미리 계산해 두므로 한 줄에서 현재 위치를 읽을 수 있습니다.

예상 타수를 넘었는지는 합계로는 보이지 않는다

금형·치공구는 대상마다 예상 총 타수가 다릅니다. 전체 합계에서는 여유가 있어 보여도 한 대상은 이미 넘었을 수 있습니다. 이 앱은 대상마다 사용률을 다시 구하고 100%를 넘은 곳(OVR)과 95% 이상 쓴 곳(NEAR)을 점검 필요로 바꿉니다. 95% 기준은 이 검증용 샘플에서 잡은 값이며, 실제 기준과 예상 타수는 회사가 정합니다.

장부 배부액이 재계산과 다르면 어디서 갈렸는지 찾기 어렵다

배부율 적용이 한 달만 달라도, 전표가 빠져도 장부와 재계산은 어긋납니다. 합계만 보면 묻히는 차이입니다. 이 앱은 장부 배부액과 재계산 배부액의 차이를 월별 한 줄 단위로 대조하고, 차이가 있으면 점검 코드 AMT 로 표시합니다.

사용 방법

  1. 조회조건 입력 — 회계연도(필수, 4자리)를 확인합니다. 구분·금형·치공구·마감 월·전기일·점검 결과는 선택이며 비워 두면 전체입니다. 화면을 처음 열면 기본 조건으로 자동 조회됩니다.
  2. 조회 버튼 또는 Enter — 조회조건 영역 가장 오른쪽의 조회 버튼을 누르거나, 입력 칸에서 Enter 키를 누릅니다. 초기화 버튼은 같은 줄에 있습니다.
  3. 요약 확인 — 위쪽 여섯 개 타일(재계산 배부액 · 장부 배부액 · 장부와 재계산 차이 · 최대 사용률 · 점검 필요 라인 · 대사 차이 건수)을 봅니다. 금액은 백만원 단위입니다.
  4. 탭 이동 — 월별 명세 · 금형·치공구별 · 구분별 · 월별 추이 · 대사 결과 탭으로 근거에서 넓은 곳까지 오가며 봅니다.
  5. 행 클릭 상세 — 월별 명세의 행을 누르면 배부 과정과 같은 금형·치공구의 월별 흐름이 열립니다.
  6. 내보내기 — 현재 탭의 조회 결과를 UTF-8 CSV 로 내려받습니다. 파일명은 기능명과 탭 이름입니다.

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

배부 점검 화면에서 가장 비싼 질문은 “이 숫자 맞아?” 입니다. 그래서 계산을 만드는 쪽에서 먼저 대사식을 세워 두고 전수로 돌렸습니다. 아래는 이 검증용 샘플 데이터의 결과입니다. 샘플은 가상의 금형·치공구 18종(사출금형 5 · 프레스금형 6 · 조립 지그 4 · 검사 게이지 3), 2026년 1~9월 마감 월별 명세 158건으로 만들었으며 실제 고객사의 금형 체계와 금액은 쓰지 않았습니다. 타수당 배부율은 원 단위 정수로 떨어지게 구성해 합계 대사가 정확히 맞습니다.

번호대사식검사 건수차이
R01월별 명세 재계산 배부액 합계 = 금형·치공구별 당해 배부액 합계180
R02배부대상액 = 누적 배부액(재계산) + 미배부 잔액180
R03타수당 배부율 × 누적 타수 = 누적 배부액(재계산)180
R04구분별 재계산 배부액 합계 = 월별 재계산 배부액 합계90
R05월별 타수 합계 = 금형·치공구별 당해 타수 합계10
R06장부 배부액 − 재계산 배부액 = 장부-재계산 차이1580
R07취득원가 − 잔존가치 = 배부대상액180
R08전기말 누적 + 당해 배부액 = 누적 배부액(재계산)180

정합성 대사 8건은 모두 차이가 없습니다. 이와 별도로 의도적 예외 세 가지를 일부러 심어 두고 대사 차이와 분리해 따로 집계했습니다.

구분무엇을 심었나검사 건수걸린 건수
E01장부 배부액이 재계산과 다른 월별 명세(4건 — 프레스금형 1종 2개월, 조립 지그 1종 1개월, 검사 게이지 1종 1개월)1584
E02누적 타수가 예상 총 타수를 넘은 금형·치공구182
E03예상 총 타수의 95% 이상을 쓴 금형·치공구181

점검 필요 라인은 22건입니다. 예상 타수를 넘은 대상은 넘은 달부터 매월 점검 필요로 잡히고 한 라인에 코드가 함께 붙을 수 있어, 예외 합계와 라인 수는 같지 않습니다. 의도적 예외를 일부러 남긴 이유는 점검 화면이 정말 이상한 자리를 잡아내는지를 같은 검증에서 함께 보기 위해서입니다. 화면 쪽은 이와 별도로 브라우저 자동화로 확인했습니다 — 점검 필요만 조회하면 22건이 남고, 마감 월을 3월부터로 좁히고 Enter 키로 조회하면 월별 명세가 125건으로 줄며, 행을 누르면 상세 창이 열립니다. 서비스 쪽은 날짜 조건과 함수 두 개(최대 사용률 125.77 · 최소 사용률 28.63)까지 직접 호출해 확인했습니다.

무엇으로 만들었나

자리무엇왜 그렇게 두었나
화면OpenUI5 1.120 · sap_horizon 테마 · sap.ui.table.Table 다섯 개를 탭으로행이 수백 줄이어도 가로·세로 스크롤이 자연스럽고, 열 머리글이 고정되어 월마감 화면에 맞습니다.
데이터 연결OData V2 서비스 한 개 · 앱은 모델 경로에만 바인딩조회조건은 필터로, 정렬·건수는 모델 기능으로 처리합니다. 서비스 주소를 코드에 박지 않아 운영 서비스로 바꾸는 일이 설정 교체로 끝납니다.
서비스 구성다섯 개 결과집합(월별 명세 · 금형·치공구별 · 구분별 · 월별 추이 · 대사 결과)과 파생 지표 계산 두 개탭마다 결과집합을 따로 두어 키가 겹치지 않고, 사용률의 최댓값·최솟값 같은 파생 지표는 함수로 계산합니다.
계산·판정 로직배부율 · 재계산 배부액 · 누적 배부액 · 사용률 · 대사식정수 계산으로 금액이 원 단위까지 맞아 합계 대사가 정확히 0 이 됩니다.
오류 처리서비스가 연결되지 않으면 안내 창빈 화면이나 콘솔 오류로 두지 않고, 무엇이 안 됐는지 사용자 말로 알립니다.
테마sap_horizon (SAP Horizon)SAP 표준 Fiori 화면과 같은 색·글꼴·간격을 써서 표준 화면 옆에 놓아도 이질감이 없습니다.

앱 정보표

항목내용
업무 영역관리회계(CO) · 제조원가 분석
관련 기준서·대상 영역관련 기준서 없음(-) · 대상 영역: 제조원가 분석(금형·치공구 원가 배부)
SAP 표준 T-codeAS03 · AW01N · CO03 · COOIS · KSB1 · KKBC_ORD
화면 성격월마감 제조원가 점검 조회 화면
데이터 연동OData V2 서비스(상대 경로, manifest 선언)
테마sap_horizon
SAP 표준 기능을 그대로 이어받은 부분 — 금형·치공구의 취득원가와 취득일은 표준 자산 마스터를, 타수의 원천인 생산 실적은 표준 오더 확인을, 배부 전표 금액은 표준 CO 전표를 그대로 이어받습니다. 이 앱이 하는 일은 같은 데이터로 배부액을 다시 계산하고 장부와 맞춰 보는 것이고, 배부의 실행과 전표는 표준에 남겨 둡니다.

실행 화면

실제로 돌아가는 화면 7종을 사용 순서대로 싣습니다. 그림을 누르면 크게 볼 수 있고, 화면마다 무엇을 보는 자리인지 아래에 적었습니다. 숫자는 모두 같은 검증용 샘플 데이터에서 나온 것이라 화면끼리 서로 맞춰 보셔도 됩니다.

처음 열었을 때

조회조건과 요약, 표가 한 화면에 세로로 쌓입니다. 가장 먼저 눈에 들어와야 하는 것은 “오늘 확인할 곳이 몇 건인가” 입니다.

처음 연 화면 — 월별 명세 158건과 여섯 개 요약 타일
처음 연 화면 — 월별 명세 158건과 여섯 개 요약 타일 — 회계연도 2026 으로 월별 배부 명세 158건(1~9월)을 조회한 첫 화면입니다. 위쪽 타일에 재계산 배부액 563.1백만원, 장부 배부액 561.8백만원, 장부와 재계산 차이 2.7백만원, 최대 사용률 125.77%, 점검 필요 22건이 나옵니다.

화면을 열면 기본 조건으로 바로 조회됩니다. 맨 위 파란 안내에는 타수당 배부율과 재계산 배부액을 어떻게 구하는지 한 번 적어 두었고, 그 아래가 조회조건과 요약 타일입니다. 조회 버튼은 조회조건 오른쪽 끝에 있고 입력 칸에서 Enter 키를 눌러도 조회됩니다. 탭 이름 위의 작은 숫자(158 · 18 · 36 · 9 · 11)는 탭마다 몇 건이 조회됐는지입니다.

점검 필요만 조회 — 확인할 라인 22건
점검 필요만 조회 — 확인할 라인 22건 — 점검 결과를 “점검 필요”로 고르고 조회하면 장부 배부액이 재계산과 다르거나 누적 타수가 예상 타수의 95% 이상인 라인 22건만 남습니다.

마감 때 가장 먼저 쓰는 모습입니다. 158건을 훑지 않고 22건으로 줄여 시작합니다. 점검 코드는 장부 배부액 차이(AMT), 예상 타수 초과(OVR), 95% 이상 소진(NEAR) 세 가지이며 한 라인에 함께 붙을 수 있습니다. 금형·치공구별 탭도 같은 조건으로 6건, 구분별 탭은 20건으로 줄어듭니다.

금형·치공구별 탭 — 사용률과 잔여 타수
금형·치공구별 탭 — 사용률과 잔여 타수 — 금형·치공구마다 예상 총 타수, 누적 타수, 사용률, 잔여 타수와 당해 배부액을 보여 줍니다. 예상 타수를 넘었거나 95% 이상 쓴 금형·치공구는 점검 필요로 표시됩니다.

한 대상의 현재 위치를 보는 탭입니다. 커넥터 하우징 금형처럼 사용률이 100%를 넘은 행은 예상 타수 재추정이 필요한지 확인하라는 신호이며, 배부를 끝낼지 예상 타수를 다시 잡을지는 회사 기준과 담당자의 판단입니다.

한 줄에서 근거까지 내려가기

대상 한 줄을 눌러 배부 과정부터 같은 금형·치공구의 월별 흐름까지 이어서 봅니다.

행 클릭 상세 — 배부 과정을 한 화면에
행 클릭 상세 — 배부 과정을 한 화면에 — 행을 누르면 취득원가, 배부대상액, 타수당 배부율과 누적 배부액이 한 화면에 모이고 아래에 같은 금형·치공구의 월별 명세가 이어집니다.

숫자를 의심할 때 다른 화면을 열지 않도록 만든 자리입니다. 위쪽은 “취득원가 − 잔존가치 ÷ 예상 총 타수”로 구한 배부율이 어떻게 재계산 배부액으로 이어지는지를, 아래쪽은 같은 대상의 월별 흐름을 보여 줍니다.

구분·월로 모아 보기

같은 라인을 구분과 마감 월이라는 두 시선으로 묶어 봅니다. 구분별 합계와 월별 합계는 같아야 합니다.

구분별 탭 — 사출금형·프레스금형·조립 지그·검사 게이지
구분별 탭 — 사출금형·프레스금형·조립 지그·검사 게이지 — 구분마다 월별 타수와 재계산 배부액, 장부 배부액, 장부와 재계산 차이를 모아 봅니다.

같은 라인을 구분이라는 시선으로 묶어 봅니다. 구분별 재계산 배부액을 더하면 월별 재계산 배부액과 같아야 하며, 이 관계가 대사 R04 입니다.

월별 추이 탭 — 달마다 장부와 재계산의 차이
월별 추이 탭 — 달마다 장부와 재계산의 차이 — 월마다 재계산 배부액, 장부 배부액, 장부와 재계산 차이와 최대 사용률을 이어서 봅니다. 차이가 있는 달은 점검 필요로 표시됩니다.

마감 달력으로 보는 시선입니다. 차이가 있는 달을 찾아 월별 명세로 내려가면 어느 금형·치공구에서 갈렸는지 바로 찾을 수 있습니다.

숫자를 믿어도 되는지

마지막 탭에서 대사 결과를 확인합니다.

대사 결과 탭 — 정합성 대사 8건과 의도적 예외 3건
대사 결과 탭 — 정합성 대사 8건과 의도적 예외 3건 — 정합성 대사 8건의 검사 건수와 차이 건수, 그리고 시연용으로 일부러 넣은 예외 3건의 집계입니다.

화면의 숫자를 믿어도 되는지 같은 화면 안에서 확인하는 자리입니다. 정합성 대사의 차이는 모두 0건이고, 의도적 예외는 대사 차이 건수와 섞이지 않게 따로 집계합니다.

SAP 표준 기능 확장 포인트

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

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

하고 싶은 일표준으로 되는 부분표준에서 걸리는 자리이 앱이 더하는 관점
금형·치공구의 취득원가 확인AS03 으로 자산 마스터 조회자산 하나씩 열어야 하고 타수·배부와 나란히 놓이지 않습니다취득원가에서 잔존가치를 뺀 배부대상액을 한 줄에 놓습니다
자산 값의 흐름 확인AW01N 자산 탐색기로 연도별 값 조회자산 가치의 흐름은 보이나 타수 기준 사용률은 담지 않습니다누적 타수와 사용률, 잔여 타수를 더합니다
타수의 원천 확인CO03 · COOIS 로 오더·실적 조회오더 단위라 금형·치공구 단위 월 흐름이 안 보입니다금형·치공구·월로 모아 타수를 보여 줍니다
배부 전표 확인KSB1 로 원가센터 개별 항목 조회전표 단위라 재계산과 나란히 놓이지 않습니다배부율×타수로 다시 구해 장부와 라인마다 견줍니다
오더 차이 분석KKBC_ORD 로 오더별 대상원가 분석오더 차이는 보이나 금형·치공구 배부액과는 이어지지 않습니다금형·치공구별 배부액을 따로 모아 견줘 봅니다

T-code 별 연계 지점

표준 T-code이름이 앱과의 연계
AS03자산 마스터 조회점검 필요가 나온 금형·치공구의 취득원가와 취득일을 원천과 대조합니다.
AW01N자산 탐색기취득원가와 누적 값의 원천을 확인합니다.
CO03생산오더 조회타수를 만든 생산오더와 실적을 대조합니다.
COOIS오더 정보 시스템월별 오더 수와 생산 실적을 목록으로 확인합니다.
KSB1원가센터 개별 항목장부 배부액의 원천 전표 금액을 확인합니다. 장부 차이가 있는 라인은 여기서 전표를 봅니다.
KKBC_ORD오더별 대상원가 분석오더 차이 분석과 이 앱의 금형·치공구별 배부액을 견줘 봅니다.

운영 전환 시 “기존 리포트를 없애야 하나” 에 대한 답은 아니오입니다. 법정 결산과 감사 대응에 쓰는 전표와 표준 화면은 그대로 남기고, 이 앱은 그 위에서 배부 점검 용도로 함께 씁니다. 두 화면의 숫자가 다르면 장부와 재계산 차이 칸이 그 자리를 가려 줍니다.

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

S/4HANA 에서는 CDS 뷰로 만든 분석 쿼리를 표준 Fiori 앱이 그대로 띄워 줍니다. 이 앱을 올리기 전에 표준 스택으로 먼저 되는지를 확인하는 편이 유지보수가 쌉니다.

표준 자리무엇을 하나이 앱과의 관계
Query Browser (F1068)분석 쿼리 뷰를 목록에서 찾아 바로 실행아래 CDS 구성의 쿼리 뷰를 만들어 두면 타수와 배부 금액은 이 앱 없이도 볼 수 있습니다. 재계산과 사용률 판정이 필요 없다면 여기서 끝내도 됩니다.
View Browser (F2170)CDS 뷰의 구조와 의존 관계 탐색자산·오더 확인·CO 개별 항목의 표준 원천 뷰를 고를 때 씁니다.
Analysis for Microsoft Office같은 쿼리를 엑셀 피벗으로엑셀로 내려 다시 가공하는 업무가 많다면 함께 열어 둡니다.
KPI Modeler / 카드요약 지표를 런치패드 타일로이 앱의 요약 지표(재계산 배부액 · 최대 사용률 · 점검 필요 건수 등)를 같은 숫자로 타일에 띄울 수 있습니다.

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

  1. 예상 총 타수의 원천을 정한다. 금형·치공구마다 예상 총 타수를 어디서 읽을지(별도 관리 테이블, 자산 마스터의 사용자 정의 항목 등)는 확인 필요이며, 이 값이 정해져야 배부율이 나옵니다.
  2. 타수 집계 기준을 정한다. 생산 실적에서 어떤 수량을 타수로 볼지(양품만, 불량 포함, 한 번에 여러 개를 찍는 금형의 환산 등)는 회사 기준입니다. 이 기준이 틀리면 사용률이 모두 어긋납니다.
  3. 점검 임계치를 정한다. 샘플은 사용률 95% 이상을 점검 대상으로 잡았습니다. 금형·치공구의 종류와 재추정 주기에 맞춰 정합니다. 너무 낮으면 점검 필요가 쏟아지고 너무 높으면 봐야 할 금형을 놓칩니다.
  4. 예상 타수를 넘었을 때의 처리 절차를 정한다. 예상 타수를 다시 추정할지, 배부를 끝낼지, 잔액을 어떻게 다룰지는 회사의 회계정책과 담당자 판단으로 정합니다. 이 앱은 해당 대상을 알려 주기만 합니다.
  5. 권한을 표준 객체로 건다. 플랜트·회사코드 권한을 집계를 읽는 자리에 겁니다. 금형·치공구 원가는 거래처와의 단가 협상에 쓰일 수 있는 정보라서 보는 사람을 정해야 합니다.
  6. 월마감 조회 시점을 정한다. 생산 실적과 배부 전표가 확정된 뒤 조회하도록 마감 일정 안에 한 칸을 넣어 두면 장부 대조가 의미를 가집니다.
배부율 적용 시점에서 흔히 놓치는 자리. 예상 총 타수를 다시 추정하면 배부율이 바뀌는데, 바뀐 배부율을 어느 달부터 적용하는지가 문서마다 다르면 장부와 재계산이 한 달씩 어긋납니다. 장부와 재계산이 다를 때 가장 먼저 의심할 곳이 배부율의 적용 시점인 이유입니다.

분석 지표 정의

지표산식·판정 기준대응 기능원천 데이터비고
배부대상액취득원가 − 잔존가치금형·치공구별ANLA · ANLC원천 필드는 확인 필요
타수당 배부율배부대상액 ÷ 예상 총 타수월별 명세 · 금형·치공구별위 지표예상 총 타수는 회사 정책 확인 필요
재계산 배부액당월 타수 × 타수당 배부율전 탭AFRU · 위 지표타수 환산 기준은 확인 필요
장부와 재계산 차이장부 배부액 − 재계산 배부액월별 명세 · 월별 추이COEP허용오차 0원
누적 배부액·미배부 잔액누적 타수 × 배부율 · 배부대상액 − 누적 배부액금형·치공구별위 지표샘플은 전기말 누적을 입력값으로 둠
사용률누적 타수 ÷ 예상 총 타수 × 100금형·치공구별 · 월별 명세위 지표95% 이상이면 점검(샘플 기준)

CDS 구성

이 사례의 화면은 서비스가 계산한 결과를 보여 줍니다. 운영 데이터로 올릴 때는 자산 값·타수·배부 전표를 읽는 일은 CDS 가, 배부율과 재계산, 점검 코드 판정은 ABAP 클래스가 맡습니다. 아래는 그때 만드는 객체들을 레이어 순서대로 적은 것입니다.

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

뷰 레이어 구성

레이어객체하는 일이렇게 나눈 이유
테이블ZTLC_MASTER금형·치공구별 예상 총 타수, 잔존가치, 점검 임계치예상 타수와 임계치는 회사 정책이라 코드에 박지 않습니다.
차원ZI_ToolCostDim자산 마스터와 정책 테이블을 한 행으로 결합큐브가 같은 join 을 반복하지 않게 합니다.
큐브(타수)ZI_ToolCostShots월·금형·치공구 단위 타수(오더 확인 위)타수는 이 큐브 한 곳에서만 읽습니다.
큐브(배부)ZI_ToolCostAlloc월·금형·치공구 단위 장부 배부액(CO 개별 항목 위)장부 배부액은 이 큐브 한 곳에서만 읽어 재계산과 대조합니다.
쿼리ZC_ToolCostQuery축 기본 배치와 필터표준 Fiori 와 Analysis for Office 가 그대로 띄웁니다.
권한ZI_TOOLCOSTSHOTS(DCL)플랜트 권한집계를 읽는 자리에 걸어야 뺄셈으로 새지 않습니다.
서비스ZCL_TOOLCOST_CHECK배부율·재계산·사용률·점검 코드 계산임계치 비교는 SQL 보다 클래스가 읽기 쉽습니다.

① 금형·치공구 정책 테이블

예상 총 타수와 잔존가치, 점검 임계치를 정하는 자리라 운영 전환에서 가장 먼저 합의해야 하는 항목입니다. 유효기간을 키에 둔 이유는 예상 타수를 다시 추정해도 과거 달의 점검 결과가 흔들리지 않게 하려는 것입니다.

" ────────────────────────────────────────────────────────────────
"  ZTLC_MASTER — 금형·치공구 배부 정책
"  역할   : 대상별 예상 총 타수, 잔존가치, 점검 임계치를 담는다
"  이렇게 나눈 이유 : 예상 타수와 임계치는 회사 정책이라 코드에 박으면 바꿀 때마다 개발을 부르게 된다
" ────────────────────────────────────────────────────────────────
@EndUserText.label : '금형·치공구 배부 정책'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
define table ztlc_master {
  key client       : abap.clnt not null;
  key bukrs        : bukrs     not null;
  key anln1        : anln1     not null;      " 자산번호 — 금형·치공구를 자산으로 관리하는 경우(확인 필요)
  key valid_to     : datum     not null;      " 유효 종료일 — 이력을 남기려고 키에 둔다
  valid_from       : datum;
  exp_shots        : abap.int4;               " 예상 총 타수 (원천은 회사 기준)
  salvage_amt      : abap.curr(15,2);         " 잔존가치
  near_limit_pct   : abap.dec(5,2);           " 점검 임계치(%) — 샘플은 95
}

② 대상 차원 — ZI_ToolCostDim

자산 마스터의 취득일·취득원가와 정책 테이블을 한 뷰로 모아 큐브가 같은 join 을 반복하지 않게 합니다. 배부대상액(취득원가 − 잔존가치)의 원천이 여기서 정해집니다.

" ────────────────────────────────────────────────────────────────
"  ZI_ToolCostDim — 금형·치공구 차원
"  역할   : 대상 한 건의 취득일, 취득원가, 예상 타수, 잔존가치를 한 행으로 낸다
"  이렇게 나눈 이유 : 자산 값과 정책을 한 곳에서 합쳐 두면 큐브가 join 을 반복하지 않는다
" ────────────────────────────────────────────────────────────────
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '금형·치공구 차원'
@ObjectModel.usageType: { serviceQuality: #A, sizeCategory: #M, dataClass: #MASTER }
define view entity ZI_ToolCostDim
  as select from ztlc_master as p
    inner join anla as a
      on a.bukrs = p.bukrs and a.anln1 = p.anln1
{
  key p.bukrs       as CompanyCode,
  key p.anln1       as Asset,
  key p.valid_to    as ValidTo,
      p.valid_from  as ValidFrom,
      a.aktiv       as CapitalizationDate,    " 취득일(자본화일) 필드는 확인 필요
      p.exp_shots   as ExpectedShots,
      p.salvage_amt as SalvageAmount,
      p.near_limit_pct as NearLimitPercent
      // 취득원가는 자산 연도별 값(ANLC)에서 가져오며 필드와 평가영역 선택은 확인 필요
}

③ 타수 큐브 — ZI_ToolCostShots

생산 실적(오더 확인)에서 월·대상 단위의 타수를 읽습니다. 타수를 만드는 수량 기준(양품만 볼지, 한 번에 여러 개를 찍는 금형을 어떻게 환산할지)은 확인 필요로 주석에 남겼습니다.

" ────────────────────────────────────────────────────────────────
"  ZI_ToolCostShots — 타수 큐브
"  역할   : 오더 확인(AFRU) 실적을 월·금형·치공구 단위 타수로 낸다
"  이렇게 나눈 이유 : 타수는 이 큐브 한 곳에서만 읽어 사용률 계산의 단일 원천으로 쓴다
" ────────────────────────────────────────────────────────────────
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '금형·치공구 타수 큐브'
@Analytics.dataCategory: #CUBE
@ObjectModel.usageType: { serviceQuality: #X, sizeCategory: #L, dataClass: #TRANSACTIONAL }
define view entity ZI_ToolCostShots
  as select from afru as f
  association [0..1] to ZI_ToolCostDim as _Dim
    on _Dim.Asset = $projection.Asset
{
  key f.rueck           as Confirmation,
  key f.rmzhl           as ConfirmationCounter,
      f.werks           as Plant,
      f.aufnr           as ProductionOrder,
      f.budat           as PostingDate,
      // 오더와 금형·치공구(자산)의 연결 방식은 회사별로 달라 확인 필요
      cast('' as anln1) as Asset,
      @DefaultAggregation: #SUM
      f.lmnga           as Shots,               " 타수로 볼 수량 기준은 확인 필요
      _Dim
}

④ 배부 큐브 — ZI_ToolCostAlloc

CO 개별 항목에서 월·대상 단위의 장부 배부액을 읽습니다. 장부 배부액은 이 큐브 한 곳에서만 읽어 재계산과 대조합니다. 어떤 원가요소와 전표 유형으로 배부 전표를 가려낼지는 확인 필요입니다.

" ────────────────────────────────────────────────────────────────
"  ZI_ToolCostAlloc — 배부 큐브
"  역할   : CO 개별 항목(COEP)에서 월·대상별 장부 배부액을 낸다
"  이렇게 나눈 이유 : 장부 배부액은 이 큐브 한 곳에서만 읽어 재계산과 대조한다
" ────────────────────────────────────────────────────────────────
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '금형·치공구 배부 큐브'
@Analytics.dataCategory: #CUBE
@ObjectModel.usageType: { serviceQuality: #X, sizeCategory: #L, dataClass: #TRANSACTIONAL }
define view entity ZI_ToolCostAlloc
  as select from coep as c
{
  key c.kokrs           as ControllingArea,
  key c.belnr           as Document,
  key c.buzei           as DocumentItem,
      c.gjahr           as FiscalYear,
      c.perio           as Period,
      c.objnr           as ObjectNumber,        " 배부 대상 객체와 원가요소 선택 기준은 확인 필요
      @Semantics.amount.currencyCode: 'Currency'
      @DefaultAggregation: #SUM
      c.wkgbtr          as Amount,
      c.twaer           as Currency
}

⑤ 분석 쿼리 — ZC_ToolCostQuery

쿼리는 축의 기본 배치와 필터만 정하고, 계산은 큐브와 클래스에 맡깁니다.

" ────────────────────────────────────────────────────────────────
"  ZC_ToolCostQuery — 분석 쿼리
"  역할   : 표준 Fiori·Office 가 읽는 쿼리를 정한다
"  이렇게 나눈 이유 : 계산은 큐브와 클래스에 두고 쿼리는 배치만 맡는다
" ────────────────────────────────────────────────────────────────
@AbapCatalog.viewEnhancementCategory: [#NONE]
@EndUserText.label: '금형·치공구 배부 점검 쿼리'
@Analytics.query: true
define view entity ZC_ToolCostQuery
  as projection on ZI_ToolCostShots
{
  @AnalyticsDetails.query.axis: #ROWS
  Plant,
  @AnalyticsDetails.query.axis: #ROWS
  Asset,
  @AnalyticsDetails.query.axis: #COLUMNS
  Shots
}

⑥ 권한 — ZI_TOOLCOSTSHOTS

권한은 집계를 읽는 큐브에 겁니다. 드릴스루에만 권한을 걸면 합계에서 다른 플랜트의 숫자가 새어 나갑니다.

" ────────────────────────────────────────────────────────────────
"  ZI_TOOLCOSTSHOTS — 권한(DCL)
"  역할   : 타수 큐브를 읽을 수 있는 플랜트를 정한다
"  이렇게 나눈 이유 : 권한을 큐브에 걸어야 집계에서 다른 플랜트의 숫자가 새지 않는다
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '금형·치공구 타수 권한'
@MappingRole: true
define role ZI_TOOLCOSTSHOTS {
  grant select on ZI_ToolCostShots
    where ( Plant ) = aspect pfcg_auth( M_MSEG_WWE, WERKS, ACTVT = '03' );
    " 권한 객체와 필드는 환경에 맞게 확인 필요
}

⑦ 계산·판정 클래스 — ZCL_TOOLCOST_CHECK

배부율, 재계산 배부액, 누적 값, 사용률과 점검 코드(AMT · OVR · NEAR)를 계산합니다. 임계치 비교는 SQL 로 쓰면 읽기 어려워 클래스에 둡니다. 화면의 서비스와 같은 식을 쓰므로 샘플에서 확인한 대사식이 그대로 적용됩니다.

" ────────────────────────────────────────────────────────────────
"  ZCL_TOOLCOST_CHECK — 배부 재계산·점검 코드 판정
"  역할   : 배부율, 재계산 배부액, 사용률, 점검 코드를 계산한다
"  이렇게 나눈 이유 : 임계치 비교와 코드 부여는 클래스가 읽기 쉽고 단위 테스트가 쉽다
" ────────────────────────────────────────────────────────────────
CLASS zcl_toolcost_check DEFINITION PUBLIC FINAL CREATE PUBLIC.
  PUBLIC SECTION.
    TYPES: BEGIN OF ty_line,
             shots_act   TYPE i,          " 당월 타수
             shots_cum   TYPE i,          " 월말 누적 타수
             shots_exp   TYPE i,          " 예상 총 타수
             alloc_base  TYPE p LENGTH 15 DECIMALS 2,
             book_amt    TYPE p LENGTH 15 DECIMALS 2,
             near_pct    TYPE p LENGTH 5  DECIMALS 2,
             rate        TYPE p LENGTH 13 DECIMALS 4,
             recalc_amt  TYPE p LENGTH 15 DECIMALS 2,
             usage_pct   TYPE p LENGTH 7  DECIMALS 2,
             check_code  TYPE c LENGTH 12,
           END OF ty_line.
    CLASS-METHODS calc CHANGING cs_line TYPE ty_line.
ENDCLASS.

CLASS zcl_toolcost_check IMPLEMENTATION.
  METHOD calc.
    IF cs_line-shots_exp > 0.
      cs_line-rate       = cs_line-alloc_base / cs_line-shots_exp.
      cs_line-usage_pct  = cs_line-shots_cum * 100 / cs_line-shots_exp.
    ENDIF.
    cs_line-recalc_amt = cs_line-shots_act * cs_line-rate.
    CLEAR cs_line-check_code.
    IF cs_line-book_amt <> cs_line-recalc_amt.
      cs_line-check_code = 'AMT'.
    ENDIF.
    IF cs_line-shots_cum > cs_line-shots_exp.
      cs_line-check_code = |{ cs_line-check_code }/OVR|.
    ELSEIF cs_line-usage_pct >= cs_line-near_pct.
      cs_line-check_code = |{ cs_line-check_code }/NEAR|.
    ENDIF.
    " 반올림 방식과 통화 소수 자리는 회사 기준에 맞춰 확인 필요
  ENDMETHOD.
ENDCLASS.

운영 작업

  1. 정책 테이블에 대상별 예상 총 타수와 잔존가치, 점검 임계치를 채우고 유효기간을 관리합니다.
  2. 오더 확인에서 금형·치공구로 이어지는 연결 방식과 타수 환산 기준을 현업과 합의합니다.
  3. CO 개별 항목에서 배부 전표를 가려내는 기준(원가요소·전표 유형)을 확정합니다.
  4. 큐브와 쿼리를 개발 시스템에서 먼저 검증하고, 권한 역할을 플랜트 단위로 배포합니다.
  5. 화면의 OData 서비스를 운영 서비스로 교체하고 manifest 의 서비스 경로만 바꿉니다.

자주 묻는 질문

도입을 검토하실 때 가장 자주 나오는 질문을 세 묶음으로 정리했습니다.

숫자와 산식

타수당 배부율은 어떻게 구합니까?

(취득원가 − 잔존가치) ÷ 예상 총 타수입니다. 이 값이 대상마다 정해지고, 월별 타수에 곱해 재계산 배부액을 구합니다. 샘플은 배부율이 원 단위 정수로 떨어지게 구성했습니다.

재계산 배부액과 장부와의 차이는 무엇을 뜻합니까?

재계산 배부액은 당월 타수 × 타수당 배부율이고, 장부와의 차이는 장부 배부액에서 재계산 배부액을 뺀 값입니다. 0이 아니면 점검 코드 AMT 가 붙습니다. 허용오차는 0원으로 두었습니다.

사용률과 잔여 타수는 어떻게 계산합니까?

사용률은 누적 타수 ÷ 예상 총 타수 × 100, 잔여 타수는 예상 총 타수에서 누적 타수를 뺀 값입니다. 100%를 넘으면 잔여 타수가 음수로 나옵니다.

점검 코드 OVR 과 NEAR 는 어떻게 다릅니까?

OVR 은 누적 타수가 예상 총 타수를 넘은 경우, NEAR 는 넘지는 않았지만 95% 이상 쓴 경우입니다. 95% 는 검증용 샘플에서 잡은 기준이며 실제 값은 회사가 정합니다.

점검 필요로 표시되면 배부가 잘못되었다는 뜻입니까?

아닙니다. 장부 배부액이 재계산과 다르거나 누적 타수가 예상 타수에 가까워졌거나 넘었다는 표시일 뿐이며, 원인은 생산 실적과 배부 전표에서 확인해야 합니다. 이 화면은 점검 도구이며 최종 판단은 회사와 감사인이 합니다.

의도적 예외는 왜 따로 둡니까?

점검 화면이 실제로 이상한 자리를 잡아내는지 같은 검증에서 함께 보기 위해서입니다. 장부와 재계산이 다른 월별 명세 4건, 예상 타수를 넘은 대상 2종, 95% 이상 쓴 대상 1종을 일부러 두었고 대사 차이 건수와 섞이지 않게 따로 집계합니다.

화면과 조작

조회는 어떻게 합니까?

회계연도(필수, 4자리)를 확인하고 조회 버튼을 누르거나 입력 칸에서 Enter 키를 누릅니다. 화면을 처음 열면 기본 조건으로 자동 조회되고, 초기화 버튼은 조회 버튼 옆에 있습니다.

점검 필요인 라인만 볼 수 있습니까?

점검 결과를 “점검 필요”로 고르고 조회합니다. 이 샘플에서는 월별 명세 22건이 남습니다. 월마감 때 가장 먼저 쓰는 방법입니다.

행을 누르면 무엇이 나옵니까?

월별 명세의 행을 누르면 상세 창이 열려 취득원가·배부대상액·타수당 배부율·누적 배부액이 한곳에 모이고, 아래에 같은 금형·치공구의 월별 명세가 이어집니다.

마감 월과 전기일은 어떻게 다릅니까?

마감 월은 월 단위 범위(시작·종료)로, 전기일은 날짜 단위 범위로 거릅니다. 전기일 조건은 월별 명세 탭에 적용되며 서비스가 날짜 비교를 직접 처리합니다.

엑셀로 내려받을 수 있습니까?

현재 탭의 조회 결과를 UTF-8 CSV 로 내려받을 수 있습니다. 파일명은 기능명과 탭 이름이며, 한글이 깨지지 않도록 UTF-8 로 저장합니다.

좁은 화면에서도 쓸 수 있습니까?

조회조건과 요약 타일이 줄을 바꿔 쌓이고 표는 가로 스크롤로 봅니다. 열 머리글은 고정되어 있어 행이 많아도 어느 칸인지 놓치지 않습니다.

표준과 도입

SAP 표준 화면으로는 왜 부족합니까?

자산 마스터 조회(AS03)와 생산오더 조회(CO03), 원가센터 개별 항목(KSB1)은 각각 한 가지 사실만 보여 줍니다. 취득원가·타수·배부 금액을 한 줄에 놓고 사용률과 견주는 화면은 표준에 없어 보통 엑셀로 맞춥니다. 이 앱은 그 맞춤을 대신합니다.

표준 T-code 를 대체합니까?

아닙니다. 표준 실행과 전표는 그대로 두고, 이 화면은 조회·검증 관점만 더합니다. 이상한 라인이 나오면 AS03·AW01N·CO03·COOIS·KSB1 로 내려가 원천을 확인합니다.

예상 총 타수는 어디서 가져옵니까?

샘플에서는 대상마다 정해 둔 값을 썼습니다. 실제 적용 때 예상 총 타수는 회사가 정한 기준을 따르며, 원천 필드는 확인 필요입니다. 이 값이 정해져야 배부율과 사용률이 나옵니다.

예상 타수를 넘으면 어떻게 합니까?

화면은 사용률이 100%를 넘었음을 알려 줄 뿐입니다. 예상 타수를 다시 추정할지, 배부를 끝낼지, 잔액을 어떻게 다룰지는 회사의 회계정책과 담당자 판단으로 정합니다.

타수는 무엇으로 셉니까?

샘플에서는 월별 타수를 입력값으로 두었습니다. 운영에서는 생산 실적에서 타수로 볼 수량을 정해야 하며, 양품만 볼지, 한 번에 여러 개를 찍는 금형을 어떻게 환산할지는 회사 기준입니다.

기존 리포트를 없애야 합니까?

아니요. 법정 결산과 감사 대응에 쓰는 전표와 표준 화면은 그대로 두고, 이 앱은 그 위에서 배부 점검 용도로 함께 씁니다. 두 화면의 숫자가 다르면 장부와 재계산 차이 칸이 가려 줍니다.

데이터는 어디서 읽습니까?

운영에서는 자산 마스터(ANLA)·자산 연도별 값(ANLC)·오더 확인(AFRU)·CO 개별 항목(COEP)을 CDS 뷰로 읽고, 재계산은 ABAP 클래스가 맡습니다. 필드와 뷰 이름은 릴리스마다 달라 View Browser 로 확인해야 합니다.

권한은 어떻게 겁니까?

플랜트·회사코드 권한을 집계를 읽는 큐브에 겁니다. 드릴스루에만 걸면 합계에서 다른 플랜트의 숫자가 새어 나가므로 큐브 단계에서 막아야 합니다.

데이터가 매우 많아지면 어떻습니까?

타수·금액 집계는 CDS 에서 하고, 서버 쪽 계산은 필요한 회계연도와 플랜트만 읽도록 필터를 필수로 둡니다. 월별 명세는 페이징으로 나누어 받고 총건수는 별도로 받습니다.

장부 배부액이 재계산과 다를 때 어디부터 봅니까?

먼저 해당 월에 적용된 배부율이 재계산에 쓴 배부율과 같은지 확인합니다. 예상 타수를 다시 추정한 뒤 배부율 적용 시점이 어긋나거나 배부 전표가 빠지면 한 줄씩 어긋납니다. 월별 명세에서 차이가 난 월을 찾고 KSB1 로 원천 전표를 대조합니다.

이 화면의 판정을 감사 대응에 그대로 써도 됩니까?

점검 도구이므로 판단 근거를 정리하는 용도입니다. 점검 필요는 확인이 필요하다는 표시일 뿐 오류의 확정이 아니며, 최종 판단은 회사와 감사인이 합니다.

예상 타수가 중간에 바뀌면 과거 숫자는 어떻게 됩니까?

정책 테이블에 유효기간을 두어 과거 월은 그때의 예상 타수와 배부율로 계산하게 합니다. 그래야 예상 타수를 다시 추정해도 지난 마감의 점검 결과가 흔들리지 않습니다.