SAP 월별 수익·비용 명세서 — 계층으로 접고 전표까지 펼치기
판관비·영업외수익·영업외비용·노무비를 계층 구조로 보여 주고, 계정의 월 금액에서 전표 한 줄까지 내려가는 화면입니다.
손익계산서를 보다가 '판매비와 관리비 62억'에서 멈추면, 그 다음 질문은 언제나 같습니다. 어디에 썼나.
급여인지 복리후생비인지, 그중에서도 어느 계정인지, 그 계정의 3월 금액이 왜 튀는지까지 내려가야 답이 됩니다. 이 화면은 계정 계층을 따라 큰 덩어리부터 보여 주고, 필요할 때 계정 단위로 펼쳐, 월 금액을 누르면 그달 전표 목록까지 이어집니다. 한 화면 안에서 62억이 전표 한 줄로 분해됩니다.
SAP 표준 구조를 그대로 이어받은 부분
- 계정 계층 —
ZTFIF0100(수익비용 계정코드)에 등록된 건만 출력 - 금액 집계 —
FAGLFLEXT에서 RYEAR = 입력연도, RBUKRS = 입력 회사코드 - 전표 상세 —
BKPF·BSEG, 취소전표 제외 - 계정 텍스트 —
SKAT· 전표유형 텍스트T003T
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 손익 명세 |
| Namespace | zui5.pnldetail |
| 셸 구조 | 조회조건 영역(우측 조회) + 월별 명세 + 전표 상세 |
| 화면 수 | 조회 화면 1개 + 전표 상세 패널 |
| 데이터 | 계정 노드 55개 (계정 37) · 전표 326건 · 명세서 4종 |
| 성격 | 조회형(Read-Only) |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 7종 둘러보기
명세서를 고르면 중분류까지 보입니다 → 하위레벨 보임으로 계정을 펼치고 → 월 금액을 눌러 전표까지 내려갑니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- Company code 와 Fiscal Year 를 넣고 볼 명세서를 고릅니다.
- 기본은 대분류·중분류만 나옵니다. 월 추이에서 튀는 덩어리를 먼저 찾습니다.
- 하위레벨 보임을 체크하면 8자리 계정까지 펼쳐집니다.
- 계정의 월 금액을 클릭하면 그달 전표 목록이 아래에 열립니다.
- 전표번호를 누르면 전표 조회 화면으로 이동합니다.
- Excel 다운로드로 계층과 12개월 금액을 원 단위로 내려받습니다.
명세서 부호와 계층 규칙
명세서마다 집계 부호가 다르고, 계층은 세 단계로 나뉩니다.
명세서 4종과 집계 부호 (사양서)
월별 판매비/일반관리비 명세서 차변 − 대변
월별 영업외 수익 명세서 대변 − 차변
월별 영업외 비용 명세서 차변 − 대변
월별 노무비/경비 명세서 차변 − 대변
where RYEAR = 입력연도
and RBUKRS = 입력 회사코드
계정 계층 (ZTFIF0100)
2자리 대분류 예) 51 판매비와 관리비
4자리 중분류 예) 5101 급여 ← 하위 계정 금액의 합
8자리 계정 예) 51010100 임원급여 ← 실제 잔액
계층구조로 ZTFIF0100 에 있는 건만 출력
하위레벨 보임을 켜면 8자리 계정까지 전개
전표 상세
8레벨 계정의 월 금액을 클릭하면 해당 월 전표 목록 출력
취소전표는 제거
전표번호 클릭 시 전표 조회 화면으로 이동| 항목 | 산식 · 규칙 |
|---|---|
| 대상 계정 | ZTFIF0100 에 등록된 계정과 그 하위 |
| 금액 원천 | FAGLFLEXT — 연도·회사코드 기준 |
| 비용 명세서 | 차변 − 대변 |
| 수익 명세서 | 대변 − 차변 |
| 4레벨 금액 | 하위 8레벨 계정 금액의 합 |
| 전표 상세 | 8레벨 계정의 월 금액에서만 열림 |
| 취소전표 | 상세 목록에서 제외 |
상위 합계를 화면에서 계산하는 이유
계층이 회사마다 바뀌는 값이라 뷰에 고정하면 계정 하나가 추가될 때마다 뷰를 고쳐야 합니다. 계정 단위 금액만 읽어 오고 합계는 계층을 따라 화면에서 더하면, 설정 테이블에 계정을 넣는 것만으로 명세서가 바뀝니다.
계층 3단계
큰 덩어리에서 계정으로, 계정에서 전표로 내려갑니다.
| 레벨 | 구분 | 금액 의미 | 표시 조건 |
|---|---|---|---|
| 2자리 | 대분류 | 합계만 표시 | 항상 보임 |
| 4자리 | 중분류 | 하위 계정 합계 | 항상 보임 |
| 8자리 | 계정 | 실제 잔액 | 하위레벨 보임을 켜야 표시 · 전표 드릴다운 가능 |
필요한 깊이만 펼치기 때문에 화면이 넘치지 않으면서도 전표까지 닿습니다.
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| Company code | 필수 | 대상 회사코드 |
| Fiscal Year | 필수 | 조회 회계연도 |
| 명세서 | 필수 | 판관비 / 영업외수익 / 영업외비용 / 노무비·경비 |
| 하위레벨 보임 | 선택 | 8자리 계정까지 전개 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
| 계정코드 / 계정명 | 레벨에 따라 들여쓰기. 대분류는 강조 |
| 연간 합계 | 12개월 합계 |
| 1월 ~ 12월 | 월별 금액 (백만원 단위 표시) |
보조 기능
| 컬럼 | 의미 · 표시 |
|---|---|
| 전표유형 | 전표유형 코드와 명칭 |
| Doc. Date · Posting Date | 증빙일과 전기일 |
| Doc. Number | 전표번호 — 클릭 시 전표 조회로 이동 |
| CUR · Amount(TC) · Amount(LC) | 거래통화와 금액, 현지통화 금액 |
| Account · Account Name · Text | 계정과 적요 |
SAP 표준 기능 매핑
금액과 전표는 표준 구조에서 읽고, 계층만 설정 테이블로 관리합니다.
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
FAGLFLEXT | 총계정원장 합계 | 월별 금액 집계 원천 |
ZTFIF0100 | 수익비용 계정코드 | 계층 구조 정의 |
BKPF · BSEG | 전표 헤더·라인 | 전표 상세 조회 |
FB03 | 전표 조회 | 전표번호 클릭 시 이동 |
S_ALR_87012284 관점 | 재무제표 | 상위 레벨 금액과 대조 |
FS10N 관점 | 계정 잔액 | 계정 단위 월별 잔액 확인 |
운영 데이터 소스 매핑
| 항목 | SAP 원천 | 비고 |
|---|---|---|
| 계층 | ZTFIF0100 | HKONT 와 하위 계정 |
| 금액 | FAGLFLEXT | RYEAR · RBUKRS · 월별 차·대변 |
| 계정 텍스트 | SKAT | 계정 명칭 |
| 전표 | BKPF · BSEG | 전표유형 · 일자 · 통화 · 금액 · 적요 |
| 전표유형 텍스트 | T003T | 전표유형 명칭 |
도입 시 확인이 필요한 부분
계정 계층 테이블의 레벨 체계를 먼저 정해야 합니다. 여기서는 2·4·8자리를 썼지만 계정과목표 자릿수에 따라 달라집니다. 또 명세서별 부호는 계정 성격에 따르므로, 혼합 계정(차감 계정 등)이 있으면 계정 단위로 부호를 지정할 수 있게 설계하는 편이 안전합니다.
참고 CDS 뷰
월별 금액을 조회할 때는 총계정원장 합계에 계층 정보를 붙인 뷰가 편합니다.
@AbapCatalog.sqlViewName: 'ZCPNLMONTH'
@EndUserText.label: '월별 수익·비용 명세 (Z)'
define view Z_C_PNL_MONTHLY
as select from faglflext as Total
inner join ztfif0100 as Tree on Total.racct = Tree.hkont
left outer join skat as AcctText on Total.racct = AcctText.saknr
and AcctText.spras = 'K'
{
key Total.rbukrs as Bukrs,
key Total.ryear as Gjahr,
key Total.racct as GlAccount,
AcctText.txt50 as GlAccountName,
Tree.level as HierarchyLevel,
Tree.parent as ParentAccount,
// 비용은 차변 − 대변, 수익은 대변 − 차변
case when Tree.report = 'NOI'
then Total.hslvt * -1 else Total.hslvt end as CarryForward,
Total.hsl01 as Month01,
Total.hsl02 as Month02,
Total.hsl03 as Month03,
Total.hsl04 as Month04,
Total.hsl05 as Month05,
Total.hsl06 as Month06,
Total.hsl07 as Month07,
Total.hsl08 as Month08,
Total.hsl09 as Month09,
Total.hsl10 as Month10,
Total.hsl11 as Month11,
Total.hsl12 as Month12
}월별 금액을 조회할 때 쓰는 참고용 설계입니다. 상위 레벨 합계는 뷰에서 계산하지 않고 화면에서 롤업합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 월별 명세 · 전표 상세 |
| 조회조건 | sap.m.Input · RadioButtonGroup · CheckBox |
| 월별 명세 | sap.ui.table.Table — 계정·연간합계 2컬럼 고정, 월 12컬럼 |
| 계층 표현 | 들여쓰기 + ObjectStatus 강조 + RowSettings.highlight |
| 드릴다운 | cellClick 의 columnId 로 클릭한 월을 판정 |
| 전표 이동 | sap.m.Link — 전표번호 |
| Excel | Blob + UTF-8 BOM — 계층과 12개월 그대로 |
월 금액을 백만원으로 줄여 보여 주는 이유
12개월을 한 줄에 놓으면 원 단위로는 숫자가 잘립니다. 백만원 단위로 줄이면 열두 달 추이가 한눈에 들어오고, 정확한 금액이 필요할 때는 전표 상세에서 원 단위로 확인합니다. Excel 다운로드는 원 단위 그대로 내보냅니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.pnldetail) · ko 로케일 · sap_horizon |
Component.js | 조회조건 모델 · 결과 모델 초기화 |
view/Main.view.xml | 조회화면 + 월별 명세 + 전표 상세 |
controller/Main.controller.js | 조회 · 명세서 전환 · 드릴다운 · 전표 이동 · Excel |
model/ModelMock.js | 계층 전개 · 상위 합계 롤업 · 전표 상세 조회 |
model/formatter.js | 백만원 축약 · 들여쓰기 · 레벨 강조 · 금액 포맷터 |
i18n/i18n_ko.properties | ko 로케일 리소스 |
localdata/pnldetail.json | 계정 계층·월 금액·전표 시뮬레이션 데이터 |
검증 결과
화면 구성에 쓴 데이터는 명세서 4종의 계정 계층과 월별 금액입니다.
| 데이터 | 규모 | 구성 |
|---|---|---|
| 계정 계층 | 55개 노드 | 대분류 4 · 중분류 14 · 계정 37 |
| 명세서 | 4종 | 판관비 · 영업외수익 · 영업외비용 · 노무비/경비 |
| 전표 상세 | 326건 | 취소전표 제외 · 원화·외화 혼재 |
| 검증 항목 | 결과 |
|---|---|
| 명세서 4종 · 각 명세서마다 대분류 1개 | 통과 |
| 계층 레벨이 2·4·8 이며 계정 자리수와 일치 | 통과 |
| 4레벨의 부모는 2레벨, 8레벨의 부모는 4레벨 | 통과 |
| 자식 계정코드가 부모 코드로 시작 (계층 정합성) | 통과 |
| 모든 계정에 12개월 금액 존재 · 음수 없음 | 통과 |
| 4레벨 금액 = 하위 8레벨 합 | 통과 |
| 전표의 계정이 8레벨에 존재 · 명세서 일치 | 통과 |
| 증빙일 ≤ 전기일 · 전기일의 월이 해당 월과 일치 | 통과 |
| KRW 는 TC=LC · 취소전표 미포함 | 통과 |
| 화면 렌더링 — 판관비 → 계층 전개 → 전표 상세 → 명세서 전환 | 7/7 |
계정명·금액은 모두 검증용 데이터입니다.
자주 묻는 질문
왜 처음에는 계정까지 안 보여 주나요?
계정을 모두 펼치면 판관비만 해도 수십 줄이 됩니다. 월 추이를 보려면 급여·복리후생비 같은 덩어리 단위가 먼저 잡혀야 하고, 어느 덩어리가 튀는지 확인한 뒤에 그 안을 들여다보는 순서가 자연스럽습니다. 사양서에도 하위 레벨은 클릭 시 출력하도록 돼 있습니다.
수익 명세서만 집계 방향이 다른 이유는?
수익 계정은 대변에 쌓이기 때문입니다. 비용처럼 차변에서 대변을 빼면 음수로 나옵니다. 그래서 영업외 수익만 대변에서 차변을 빼도록 사양서에 지정돼 있고, 화면에도 어떤 부호로 계산되는지 표시해 두었습니다.
중분류 금액을 눌러도 전표가 안 열리는 이유는?
중분류는 하위 계정 금액의 합이라 대응하는 전표가 없습니다. 어느 계정의 전표인지 특정할 수 없기 때문입니다. 하위레벨 보임을 켜고 계정 단위에서 눌러야 그달 전표가 열립니다.
취소전표를 빼는 이유는?
취소전표는 원전표와 짝을 이뤄 금액이 상쇄됩니다. 목록에 넣으면 같은 금액이 플러스와 마이너스로 두 번 보여 무엇을 봐야 할지 흐려집니다. 집계 금액에도 이미 반영되지 않으므로 상세에서도 빼는 편이 일관됩니다.
SAP 표준 기능과 어떻게 이어지나요?
금액은 FAGLFLEXT에서, 전표는 BKPF·BSEG에서 그대로 읽습니다. 계층만 커스텀 테이블로 관리해 회사가 원하는 명세서 형태를 만드는 구조입니다. 전표번호를 누르면 표준 전표 조회로 이어지고, 상위 레벨 금액은 재무제표 조회와 대조할 수 있습니다.