SAP 계정별 월별잔액 조회 — 잔액이 맞는지 세 번 확인하기
계정 하나를 골라 1월부터 기말까지 기초·차변·대변·기말 흐름을 펼치고, 잔액식·전표합계·기간이월 세 가지로 대사해 숫자를 믿어도 되는지 판정하는 화면입니다.
월별 잔액표는 보기에 단순합니다. 기초에서 시작해 차변과 대변을 더하고 빼면 기말이 나옵니다. 그런데 이 표가 맞는지는 표 안에서 알 수 없습니다. 집계가 잘못돼도 표는 여전히 말이 되기 때문입니다.
그래서 필요한 것은 표 바깥의 근거입니다. 잔액식이 성립하는지, 집계 금액이 실제 전표 합계와 같은지, 전월 기말이 당월 기초로 넘어왔는지. SAP 표준 원장 구조를 그대로 이어받아 이 세 가지를 조회할 때마다 자동으로 대사하도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면 3종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 계정 마스터 —
SKA1기준 계정과목과 계정그룹·정상잔액측(차/대) 구분을 그대로 사용 - 잔액 구조 — 회사코드 · 회계연도 · 기간 · 계정 키로 기초 · 차변 · 대변 · 기말을 보관하는 표준 구조
- 전표 라인 —
BKPF·BSEG(S/4HANA는ACDOCA)에서 개별항목을 집계 - 회사코드 마스터 —
T001기준 회사코드·통화
| 항목 | 내용 |
|---|---|
| 대응 T-code | FS10N (G/L 계정 잔액 표시) |
| 업무 영역 | 재무회계(FI) · 총계정원장 잔액 조회와 대사 |
| Namespace | zui5.glbal |
| 셸 구조 | 조회조건 영역(우측 조회·초기화) + 월별 잔액 테이블, 행 선택 시 개별항목 |
| 화면 수 | 조회 화면 1개 + 개별항목 상세 |
| 데이터 | 계정 10건 · 월별 잔액 80건 · 개별항목 504건 |
| 성격 | 조회형(Read-Only) — 전기와 결산은 표준 트랜잭션이 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 3종 둘러보기
회사코드·회계연도·계정을 고르고 조회하면 1월부터 기준월까지 잔액이 한 줄씩 펼쳐집니다 → 각 행의 대사체크로 숫자를 믿어도 되는지 먼저 확인하고 → 금액이 튄 달을 눌러 개별항목으로 내려갑니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드와 회계연도를 고릅니다. 둘 다 필수입니다.
- 기준월은 연초부터 어디까지 볼지 정하는 값입니다. 08 을 고르면 1~8월이 펼쳐집니다.
- G/L 계정을 고릅니다. 현금·보통예금·외상매출금처럼 잔액을 따라가야 하는 계정에 주로 씁니다.
- 조회조건 입력필드에서 값을 바꾸거나 Enter 를 누르면 즉시 조회됩니다.
- 대사체크 열을 먼저 훑습니다. 모두 정상이면 아래 숫자를 그대로 읽어도 됩니다.
- 금액이 크게 움직인 달을 선택하면 개별항목이 열립니다.
- 결과는 CSV 다운로드로 내려받습니다. UTF-8 BOM 이 붙어 엑셀에서 한글이 깨지지 않습니다.
3중 대사 산식
같은 잔액을 서로 다른 세 경로로 계산해 봅니다. 세 값이 모두 맞아야 그 달의 숫자를 믿을 수 있습니다.
① 원장 잔액식 기말잔액 = 기초잔액 + 차변합계 − 대변합계
② 전표합계 차변합계 = Σ(개별항목 중 차변) · 대변합계 = Σ(개별항목 중 대변)
③ 기간이월 당월 기초잔액 = 전월 기말잔액 (1월은 연초 이월잔액)
대사체크 = ① AND ② AND ③ → 하나라도 어긋나면 그 달을 경고로 표시
세 개를 모두 보는 이유
①만 보면 집계 자체가 틀려도 통과합니다. 기초와 기말을 같은 잘못된 소스에서 만들었으면 식은 성립하니까요. ②는 그 집계를 전표로 되짚고, ③은 달과 달 사이가 끊기지 않았는지 봅니다. 세 관문을 두면 "표는 맞는데 실제와 다른" 상태가 남지 않습니다.
잔액이 어긋나는 네 가지 경우
대사체크가 걸렸을 때 어디를 볼지는 어긋난 항목으로 좁혀집니다.
| 어긋난 항목 | 증상 | 먼저 볼 곳 |
|---|---|---|
| ① 잔액식 불일치 | 기말 ≠ 기초 + 차변 − 대변 | 집계 로직 또는 소스 데이터 손상 |
| ② 전표합계 불일치 | 집계 금액 ≠ 개별항목 합 | 기간 귀속이 다른 전표, 집계 누락 |
| ③ 기간이월 끊김 | 당월 기초 ≠ 전월 기말 | 기간 이월 미실행, 소급 전기 |
| ①③ 동시 | 연속된 달이 함께 어긋남 | 특정 시점 이후 전 구간 재집계 필요 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
회사코드 Bukrs | 필수 | 1000 한국법인 / 2000 미국법인 |
회계연도 Gjahr | 필수 | 대상 회계연도 |
기준월 MonatTo | 필수 | 연초 누계 대상월 (01~12) |
G/L 계정 Saknr | 필수 | 계정코드와 명칭을 함께 표시 |
| 잔액표시 기준 | 옵션 | 정상잔액측(차/대) 기준 표시 전환 |
결과 컬럼
월별 잔액
| 컬럼 | 의미 · 표시 |
|---|---|
연월 MonatLabel | 회계연도와 기간을 결합해 표시 |
기초잔액 OpeningBalance | 그 달이 시작할 때의 잔액 |
차변합계 DebitTotal | 그 달의 차변 전기 합계 |
대변합계 CreditTotal | 그 달의 대변 전기 합계 |
기말잔액 ClosingBalance | 기초 + 차변 − 대변 |
| 대사체크 | 3중 대사 결과. 정상/경고를 상태 색으로 표시 |
개별항목 상세
| 컬럼 | 의미 · 표시 |
|---|---|
전기일 Budat | 전표가 원장에 반영된 날 |
전표번호 Belnr · 라인 Buzei | 표준 전표 조회로 이어지는 키 |
전표유형 Blart | 전표 성격 구분 |
차대 DC · 금액 Dmbtr | 차변/대변 구분과 금액 |
적요 Sgtxt · 거래처 Partner | 무엇에 대한 전기인지 |
SAP 표준 기능 매핑
잔액을 만드는 것은 표준 전기입니다. 이 화면은 그 결과를 월 단위로 펼치고 대사 판정을 얹어 확장합니다.
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
FS10N | G/L 계정 잔액 표시 | 월별 추이를 한 화면에 펼치고 대사체크를 열로 추가 |
FBL3N 관점 | G/L 개별항목 조회 | 월 행에서 바로 그 달의 라인으로 드릴다운 |
SKA1 · SKB1 | 계정 마스터 | 계정명·계정그룹·정상잔액측 표시 |
BKPF · BSEG | 전표 헤더와 라인 | 전표합계 대사의 근거 |
ACDOCA | 유니버설 저널 (S/4HANA) | 집계 원천을 표준 CDS 로 교체 가능 |
T001 | 회사코드 마스터 | 회사코드·통화 |
도입 시 확인이 필요한 부분
클래식 환경과 S/4HANA 는 잔액 원천이 다릅니다. 전자는 GLT0·BSEG 계열, 후자는 ACDOCA 기반 표준 CDS 가 기준입니다. 또 특별기간(13~16기)을 월 흐름에 넣을지, 이월 시점을 어떻게 볼지는 결산 운영 방식에 따라 달라지므로 대사 규칙을 그에 맞춰 정합니다.
참고 CDS 뷰
운영 서비스로 연결할 때는 유니버설 저널을 회사코드·연도·기간·계정으로 집계하고 계정명을 붙인 뷰를 제안합니다.
@AbapCatalog.sqlViewName: 'ZCGLBAL'
@EndUserText.label: '계정별 월별잔액 (Z)'
define view Z_C_GL_MONTHLY_BALANCE
as select from acdoca as Line
left outer join skat as AcctText on Line.racct = AcctText.saknr
and AcctText.spras = 'K'
{
key Line.rbukrs as Bukrs,
key Line.gjahr as Gjahr,
key Line.poper as Monat,
key Line.racct as Saknr,
AcctText.txt50 as Txt50,
// 차변·대변을 부호로 갈라 집계
sum( case when Line.drcrk = 'S' then Line.hsl else 0 end ) as DebitTotal,
sum( case when Line.drcrk = 'H' then abs(Line.hsl) else 0 end ) as CreditTotal,
sum( Line.hsl ) as NetAmount
// 기초잔액은 직전 기간까지의 누계를 계산하는 소비 뷰에서 산출
// 기말잔액 = 기초 + 차변 − 대변 으로 재계산해 ① 대사에 사용
}
group by Line.rbukrs, Line.gjahr, Line.poper, Line.racct, AcctText.txt50
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경의 원장 구조와 릴리즈에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.f.DynamicPage + 조회조건 영역 · 잔액 테이블 |
| 조회조건 | sap.m.Select 4종 — 우측 끝에 조회·초기화 |
| 잔액 테이블 | sap.m.Table — 금액은 ObjectNumber 로 우측정렬 |
| 대사체크 | sap.m.ObjectStatus — 정상/경고 상태 색 |
| 개별항목 | sap.m.Dialog + 테이블 — 월 행에서 드릴다운 |
| 이벤트 | 모든 버튼이 onPAI 단일 진입점, fcCode 로 분기 |
대사 결과를 열로 만든 이유
대사는 보통 별도 리포트로 돌리고 결과를 따로 받습니다. 그러면 잔액표를 볼 때는 그 결과가 손에 없습니다. 같은 표 오른쪽 끝에 한 칸으로 붙여 두면, 잔액을 읽는 순간 그 줄을 믿어도 되는지가 함께 보입니다. 확인 절차가 한 단계 줄어듭니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.glbal) · ko 로케일 · sap_horizon |
view/Main.view.xml | 조회 화면 |
view/fragments/MainSearch.fragment.xml | 조회조건 폼과 우측 조회·초기화 |
view/fragments/MainTable.fragment.xml | 월별 잔액 테이블과 대사체크 열 |
view/fragments/DetailDialog.fragment.xml | 개별항목 상세 |
controller/Main.controller.js | 조회 · 3중 대사 계산 · 드릴다운 · CSV |
js/formatter.js | 금액 · 연월 · 대사 상태 포맷터 |
localdata/glaccounts.json | 계정 마스터 10건 (7개 필드) |
localdata/glbalances.json | 월별 잔액 80건 (8개 필드) |
localdata/glitems.json | 개별항목 504건 (12개 필드) |
대사 규칙이 바뀌어도 컨트롤러와 포맷터 두 파일만 손보면 됩니다.
검증 결과
| 검증 항목 | 결과 |
|---|---|
| ① 기말 = 기초 + 차변 − 대변 (전 월 · 전 계정) | 통과 |
| ② 집계 차변·대변 = 개별항목 합계 | 통과 |
| ③ 당월 기초 = 전월 기말 (1월은 연초 이월) | 통과 |
| 계정 마스터의 정상잔액측과 기말 부호 정합 | 통과 |
| XML · JSON 전체 파싱 | 오류 0건 |
| manifest 참조 무결성 · i18n 키 누락 | 이상 0건 |
| 화면 렌더링 — 실브라우저 조회 → 드릴다운 실동작 후 캡처 | 3/3 |
| 테마 런타임 확인 | sap_horizon |
계정·금액·거래처는 모두 검증용 데이터입니다.
자주 묻는 질문
대사체크가 경고로 뜨면 무엇부터 보나요?
어긋난 항목이 셋 중 무엇인지에 따라 갈립니다. 잔액식이 깨졌으면 집계 로직을, 전표합계가 다르면 기간 귀속이 다른 전표를, 기간이월이 끊겼으면 이월 실행 여부를 봅니다. 연속된 달이 함께 걸렸다면 특정 시점 이후를 다시 집계해야 합니다.
기준월은 왜 따로 받나요?
연초부터 어디까지 볼지를 정하는 값입니다. 결산 중에는 진행 중인 달까지만 보는 게 자연스럽고, 지난 시점을 재현해야 할 때도 있기 때문에 고정하지 않고 파라미터로 받습니다.
특별기간도 표시되나요?
기본 화면은 1~12기를 대상으로 합니다. 13~16기 특별기간을 월 흐름에 함께 넣을지는 결산 운영 방식에 따라 달라지므로, 도입 시 표시 여부와 대사 규칙을 함께 정합니다.
SAP 표준 기능과 어떻게 이어지나요?
잔액은 표준 전기가 만들고 FS10N 으로도 볼 수 있습니다. 이 화면은 그 잔액을 월별 추이로 펼치고, FBL3N 으로 따로 열던 개별항목을 같은 화면에서 드릴다운하게 하며, 대사 결과를 열로 붙여 확인 절차를 줄인 확장입니다.