SAP 제조원가명세서 — CO 원가와 FI 계정이 맞는지 한 줄로 확인하기
원재료비에서 매출원가까지의 흐름을 원가요소별로 세우고, 관리회계로 집계한 금액이 재무회계 계정합계와 어긋나지 않는지를 화면에서 바로 판정하는 원가결산 조회 화면입니다.
제조원가명세서는 숫자가 많은 표지만, 읽는 방법은 하나입니다. 위에서 아래로 원가가 흘러갑니다. 원재료와 부재료를 사서 쓰고, 사람이 일하고, 공장이 돌아가고, 일부는 밖에 맡깁니다. 그 합이 당기총제조비용이 되고, 재공품과 제품 재고의 증감을 거쳐 마지막에 매출원가로 빠져나갑니다.
이 흐름을 관리회계에서 아무리 정교하게 쌓아 올려도, 마지막에 총계정원장의 매출원가와 맞지 않으면 쓸 수 없는 숫자가 됩니다.
그래서 SAP 표준 재무제표 버전과 ACDOCA 잔액을 그대로 이어받아 명세서를 만들고,
그 아래에 CO·FI 차액을 계산하는 [검증] 행을 붙여 OpenUI5 화면으로 확장한 것이 ZLCO06050입니다.
실제 구동 화면 6종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 재무제표 버전 —
T011·T011T설정을 그대로 조회 파라미터로 사용 - 원가요소그룹 —
SETLEAF·SETHEADERT기반 그룹 구조와 레벨 체계 유지 - 잔액 데이터 —
ACDOCA·BKPF에서 집계, 표준 잔액 조회 로직에 대응 - 연계 화면 — 금액은 G/L 개별항목(
FAGLL03H), 계정그룹 ID는 원가요소그룹(KDH3)으로 이어짐
| 항목 | 내용 |
|---|---|
| 업무 영역 | 관리회계(CO-PC) · 제조원가명세서 조회와 CO·FI 대사 |
| Namespace | zui5.cogm |
| 셸 구조 | 조회조건 영역(우측 조회) + 검증 상태 툴바 + 레벨 소계 테이블 |
| 화면 수 | 조회 화면 1개 + 드릴다운 연계 안내 |
| SAP 표준 기능 근거 | T011 · ACDOCA · FAGLL03H · KDH3 |
| 성격 | 조회형(Read-Only) — 전기와 결산 처리는 표준 트랜잭션이 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 6종 둘러보기
회사코드와 재무제표 버전, 기간을 넣고 조회하면 원가요소별 명세가 펼쳐집니다 → 툴바의 CO·FI 대사 결과로 숫자를 믿어도 되는지 먼저 확인하고 → 레벨 그룹화와 가격차이 필터로 구간을 좁혀 들어가 금액 셀에서 개별항목으로 추적합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드와 재무제표 버전을 넣습니다. 둘 다 필수이며 기본값은 1000 · KRI1 입니다.
- 표시 방법을 고릅니다. 월별(기본)은 회계연도와 종료월을, 누계는 당기·전기 연도와 기간을 각각 입력받습니다. 선택에 따라 입력 필드와 출력 컬럼이 함께 바뀝니다.
- 조회조건 입력필드에서 Enter 를 눌러도 바로 조회됩니다. 조회·초기화 버튼은 조회조건 영역 오른쪽 끝에 있습니다.
- 툴바 오른쪽의 검증 상태를 먼저 봅니다. 일치(차액 0)면 아래 숫자를 그대로 읽어도 됩니다.
- 그룹화 필터로 보는 깊이를 바꿉니다. 전체 / 0레벨 / 1레벨 / 2레벨 / 가격차이 다섯 가지입니다.
- 0금액 라인 제외 옵션으로 빈 줄을 걷어냅니다.
[검증]행은 항상 남습니다. - 금액 셀을 선택하면 G/L 개별항목 연계 조건이, 계정그룹 ID 를 누르면 원가요소그룹 연계가 안내됩니다.
- 결과는 CSV 다운로드로 내려받습니다. 현재 표시 중인 컬럼 구성 그대로 담기고 UTF-8 BOM 이 붙어 엑셀에서 한글이 깨지지 않습니다.
원가 흐름과 검증 산식
명세서의 각 구간은 아래 식으로 이어집니다. 재고 라인은 전월 기말이 당월 기초로 이월되므로, 월별 금액의 합과 연간 누계가 어긋나지 않습니다.
원재료비 / 부재료비 = 기초재고 + 당기매입 + 타계정입고 − 타계정출고 ± 원가차이 − 기말재고
당기총제조비용 = 원재료비 + 부재료비 + 노무비(변동·고정) + 제조경비 + 외주가공비
당기제품제조원가 = 당기총제조비용 + 기초재공품 + 타계정입고 − 타계정출고 ± 원가차이 − 기말재공품
매출원가 = 기초제품 + 당기제품제조원가 + 타계정입고 − 타계정출고 − 기말제품
[검증] = 매출원가(CO 산출) − 매출원가(FI 계정합계) → 0 이어야 함
검증 행을 표 안에 넣은 이유
CO 와 FI 를 맞춰 보는 일은 보통 명세서를 뽑은 뒤 총계정원장을 따로 열어 눈으로 대조하는 작업이었습니다. 그 대조를 같은 표 마지막 줄로 옮기면, 조회하는 순간 이번 달 원가가 닫히는지 아닌지가 결정됩니다. 차액이 0이 아니면 그 아래 작업을 계속할 이유가 없다는 것도 함께 알려 주는 셈입니다.
Net 금액
Net 은 원가차이(가격차이) 라인을 제외한 순액이며 소계까지 같은 기준으로 다시 집계됩니다. 표준원가와 실제 매입가의 차이를 걷어내면 소비량 기준의 원가 흐름만 남아, 차이 요인과 소비 요인을 나눠 볼 수 있습니다.
조회조건
| 필드 | 파라미터 | 설명 |
|---|---|---|
| 회사코드 | P_BUKRS | 필수, 기본값 1000 |
| 재무제표 버전 | P_VERSN | 필수, 기본값 KRI1 |
| 표시 방법 | P_DIS_AC · P_DIS_MO | 누계 표시 / 월별 표시(기본). 입력 필드와 출력 컬럼이 함께 전환 |
| 회계연도 · 기간 | P_GJAHR · S_MONAT | 월별은 회계연도 + 종료월, 누계는 당기·전기 연도와 기간을 각각 |
| 0금액 라인 제외 | P_ZERO | 금액이 모두 0 인 라인 숨김. 검증 행은 예외 |
| 그룹화 필터 | 화면 옵션 | 전체 / 0레벨 / 1레벨 / 2레벨 / 가격차이 |
결과 컬럼
| 컬럼 | 참조 | 표시 모드 · 비고 |
|---|---|---|
| 계정그룹 ID | SETID | 공통. 클릭하면 원가요소그룹(KDH3) 연계 |
| Level | LEVEL | 공통. 0 · 1 · 2 레벨에 따라 들여쓰기 |
| 항목 텍스트 | TEXT | 공통 |
| 당기금액 · 당기(Net) | TOTAL_CUR · TOTAL_CUR2 | 누계 표시 |
| 전기금액 · 전기(Net) | TOTAL_PRV · TOTAL_PRV2 | 누계 표시 |
| 합계 | TOTAL | 월별 표시 |
| 1월 ~ 12월 | TOTAL_TSL01 ~ TOTAL_TSL12 | 월별 표시. 종료월 이후 컬럼은 자동 숨김 |
| 통화 | WAERS | KRW 고정 |
SAP 표준 기능 매핑
이 화면은 원가 전기나 결산 처리를 대체하지 않습니다. 재무제표 버전과 원가요소그룹 설정, 잔액은 표준을 그대로 읽고, 그 위에 명세서 서식과 대사 판정을 얹어 확장하는 구성입니다.
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
T011 · T011T | 재무제표 버전 정의 | 버전을 조회 파라미터로 받아 그 체계대로 명세서 라인을 구성 |
SETLEAF · SETHEADERT | 원가요소그룹 구조와 텍스트 | 0·1·2 레벨 소계를 본문에 끼워 넣어 상·하위를 한 화면에서 대조 |
ACDOCA · BKPF | 유니버설 저널 잔액 | 월별·누계 두 관점으로 동시에 집계하고 Net 컬럼을 함께 산출 |
FAGLL03H | G/L 개별항목 조회 | 금액 셀에서 해당 조건(원가요소그룹·회사코드·전기일)으로 연계 |
KDH3 | 원가요소그룹 조회 | 계정그룹 ID 클릭 시 그룹 구조로 연계 |
도입 시 확인이 필요한 부분
제조원가명세서의 라인 구성은 재무제표 버전과 원가요소그룹 설정에 따라 회사마다 달라집니다.
특히 제조경비와 외주가공의 하위 계정 구성, 타계정 대체(입고·출고) 처리 방식은 프로젝트 표준을 함께 확인해야 합니다.
클래식 환경이라면 잔액 원천이 GLT0·COSP 계열로 갈리므로 집계 로직도 그에 맞춰 조정합니다.
참고 CDS 뷰
운영 서비스로 연결할 때는 유니버설 저널을 원가요소그룹·기간 단위로 집계하고 그룹 텍스트를 붙인 뷰로 서빙하는 구성을 제안합니다.
@AbapCatalog.sqlViewName: 'ZCCOGMBAL'
@EndUserText.label: '제조원가명세서 집계 (Z)'
define view Z_C_COGM_BALANCE
as select from acdoca as Line
left outer join setleaf as Grp on Line.racct = Grp.valfrom
and Grp.setclass = '0102'
left outer join setheadert as GrpText on Grp.setname = GrpText.setname
and GrpText.langu = 'K'
{
key Line.rbukrs as Bukrs,
key Line.gjahr as Gjahr,
key Grp.setname as SetId,
GrpText.descript as SetText,
// 기간별 금액을 12개 컬럼으로 펼쳐 월별 표시에 대응
sum( case when Line.poper = '001' then Line.hsl else 0 end ) as TotalTsl01,
sum( case when Line.poper = '002' then Line.hsl else 0 end ) as TotalTsl02,
// … 003 ~ 012 동일 패턴
sum( Line.hsl ) as Total
// 레벨·항목 텍스트는 재무제표 버전(T011) 계층을 붙이는 소비 뷰에서 구성
// Net 금액은 원가차이 계정을 제외한 동일 집계를 한 벌 더 만들어 사용
}
group by Line.rbukrs, Line.gjahr, Grp.setname, GrpText.descript
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경의 재무제표 버전 계층과 그룹 설정에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 결과 테이블 |
| 조회조건 | sap.m.Input · sap.m.Select · sap.m.RadioButton — 우측 끝에 조회 버튼 |
| 결과 테이블 | sap.ui.table.Table — 라인이 많아 그리드형 테이블 사용 |
| 동적 컬럼 | 표시 방법과 종료월에 따라 월 컬럼을 런타임에 숨김·표시 |
| 레벨 표현 | 포맷터로 들여쓰기와 소계 행 강조, 금액은 △ 표기 |
| 검증 상태 | sap.m.ObjectStatus — 툴바 우측에 일치/불일치 표시 |
| 드릴다운 | sap.m.Dialog — 연계 조건 안내 |
월 컬럼을 런타임에 숨기는 이유
9월까지 조회했는데 10~12월 컬럼이 빈 칸으로 남아 있으면 가로 스크롤만 길어집니다. 종료월 이후 컬럼을 감추면 표가 화면 폭에 맞게 줄어들어, 합계와 각 월을 한 눈에 비교할 수 있습니다. CSV 로 내려받을 때도 화면에 보이는 구성 그대로 담깁니다.
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon · lodash · moment |
Component.js | UI 상태 모델과 결과 모델 초기화 |
manifest.json | 앱 디스크립터 — 앱 ID(zui5.cogm) · ko 로케일 |
view/Main.view.xml | 조회조건과 결과 테이블 |
controller/Main.controller.js | 조회 · 레벨필터 · 드릴다운 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise 인터페이스) |
model/formatter.js | 금액(△ 표기) · 들여쓰기 · 행 강조 |
i18n/i18n_ko.properties | ko 로케일 리소스 |
localdata/cogm.json | 제조원가명세서 집계 데이터 |
운영 전환 시에는 ModelMock.read() 내부만 실제 서비스 호출로 바꾸면 화면 로직은 그대로 씁니다.
검증 결과
화면 구성에 쓴 데이터는 위 산식을 12개월 전 구간과 누계·Net 컬럼 모두에서 만족하도록 만들었고, 별도 스크립트로 재계산해 대조했습니다.
| 검증 항목 | 결과 |
|---|---|
| Level 0 소계 = 하위 라인 합 (12개월 전 구간) | 통과 |
| 당기총제조비용 = 원가요소 6개 합 | 통과 |
| 당기제품제조원가 = 총제조비용 + 재공품 증감 | 통과 |
| 매출원가(CO 산출) = 매출원가(FI 계정합계), [검증] = 0 | 통과 |
| 합계 컬럼 = 월별 누계 (재고 라인 기초·기말 이월 규칙) | 통과 |
| 당기 · 전기 및 Net 컬럼 소계 정합성 | 통과 |
| 총 라인 수 | 90 라인 전 항목 통과 |
| 화면 렌더링 — 실브라우저에서 조회 → 표시 전환 → 필터 실동작 후 캡처 | 6/6 |
계정과 금액은 모두 검증용 데이터입니다. 제조경비·외주가공의 2레벨 상세 계정은 대표 계정으로 구성했습니다.
자주 묻는 질문
[검증] 행은 정확히 무엇을 비교하나요?
관리회계 쪽에서 쌓아 올린 매출원가와 재무회계 계정합계로 집계한 매출원가를 뺀 값입니다. 원재료비에서 시작해 재공품·제품 재고 증감까지 반영해 계산한 금액이, 총계정원장의 매출원가 계정 잔액과 같아야 하므로 이 차액은 0이어야 합니다. 0이 아니면 어딘가에서 원가 흐름이 끊겼거나 전기가 누락됐다는 신호입니다.
누계 표시와 월별 표시는 어떻게 다른가요?
누계는 당기와 전기를 나란히 놓고 비교하는 관점이고, 월별은 합계와 1~12월을 한 줄에 펼쳐 어느 달에 금액이 튀었는지 보는 관점입니다. 선택에 따라 입력 필드와 출력 컬럼이 함께 바뀌고, 월별에서는 조회 종료월 이후 컬럼이 자동으로 숨겨집니다.
Net 금액은 무엇을 뺀 금액인가요?
원가차이(가격차이) 라인을 제외한 순액입니다. 표준원가와 실제 매입가의 차이를 걷어내고 보면 실제 소비량 기준의 원가 흐름이 드러나므로, 차이 요인과 소비 요인을 나눠 볼 때 씁니다. 소계까지 같은 기준으로 다시 집계됩니다.
SAP 표준 기능과 어떻게 이어지나요?
재무제표 버전(T011)과 원가요소그룹(SETLEAF) 설정, ACDOCA 잔액은 표준 구조를 그대로 씁니다. 이 화면은 그 위에 제조원가명세서 서식과 레벨 소계, CO·FI 대사 판정을 얹어 조회 관점으로 확장한 것이며, 금액 셀에서 G/L 개별항목(FAGLL03H), 계정그룹 ID에서 원가요소그룹(KDH3)으로 이어지도록 연계 조건을 안내합니다.


