SAP 채권/채무 증감내역 집계표 — 이월에서 잔액까지 한 줄로
계정과 거래처별로 이월 잔액에서 차변·대변을 거쳐 기말 잔액에 이르는 흐름을 한 줄에 담아, 어느 거래처에서 잔액이 움직였는지 보는 집계표입니다.
거래처 잔액이 지난달과 다르다는 것까지는 쉽게 압니다. 어려운 것은 왜 달라졌는가입니다. 새로 발행한 것이 많았는지, 회수가 적었는지는 잔액만 봐서는 갈라지지 않습니다.
그래서 필요한 것은 이월에서 기말까지의 경로입니다. SAP 표준 채권채무 전기 구조를 그대로 이어받아 이월 · 차변 · 대변 · 증감 · 잔액을 한 줄에 담아 거래처별로 비교하도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 계정유형 — 고객(D) · 공급업체(K) 구분(
koart)을 표준 분류대로 유지 - 계정과 거래처 — 조정계정(
racct)과 고객(kunnr) · 공급업체(lifnr) 표준 키 - 차대 구분 —
drcrk로 차변·대변을 갈라 집계 - 금액 — 회사코드 통화 금액(
hsl)과 거래통화 금액(tsl), 환율(kursf) - 전표 키 — 전표번호(
belnr) · 라인(buzei) · 전기일(budat)
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI-AR/AP) · 거래처별 잔액 증감 |
| Namespace | zui5.arapmove |
| 셸 구조 | 조회조건 영역(우측 조회·초기화) + 증감 집계 테이블 |
| 화면 수 | 조회 화면 1개 |
| 데이터 | 전기 라인 94건 (19개 필드) |
| 성격 | 조회형(Read-Only) — 전기는 표준 트랜잭션이 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 1종 둘러보기
회사코드·계정유형·기간으로 조회하면 계정·거래처별 증감이 한 줄씩 나옵니다 → 증감이 큰 거래처를 추려 보고 → 라인수와 차변·대변 구성으로 무엇이 잔액을 움직였는지 확인합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드와 계정유형(고객/공급업체)을 고릅니다.
- 기간을 지정합니다. 이월은 기간 시작 직전까지의 누계로 계산됩니다.
- 조정계정과 거래처로 범위를 좁힙니다. 특정 계정의 거래처별 구성을 볼 때 주로 씁니다.
- 조회조건 입력필드에서 값을 바꾸거나 Enter 를 누르면 즉시 조회됩니다.
- 증감 열로 잔액이 늘어난 거래처와 줄어든 거래처를 가릅니다.
- 라인수가 유난히 많은 거래처는 거래 빈도가 높거나 분할 결제가 잦은 곳입니다.
- 결과는 CSV 다운로드로 내려받습니다. UTF-8 BOM 이 붙어 엑셀에서 한글이 깨지지 않습니다.
증감 산식
한 줄에 담긴 다섯 숫자는 서로 묶여 있습니다. 어느 하나가 어긋나면 나머지도 맞지 않습니다.
차변합계 = Σ(drcrk = S 인 라인의 hsl)
대변합계 = Σ(drcrk = H 인 라인의 hsl)
증감 = 차변합계 − 대변합계
잔액 = 이월 + 증감
원화환산 검증 hsl = tsl × kursf
증감을 별도 열로 두는 이유
이월과 잔액만 있으면 차이는 알 수 있지만 그 차이가 어떻게 만들어졌는지는 모릅니다. 차변 5억·대변 4억으로 1억이 늘어난 것과, 차변 1억·대변 0으로 1억이 늘어난 것은 전혀 다른 상황입니다. 증감을 따로 두고 그 좌우에 차변·대변을 놓으면 한 줄만 보고도 거래 규모까지 읽힙니다.
잔액이 움직이는 네 가지 모양
증감의 부호와 차대 구성을 함께 보면 그 거래처에서 무슨 일이 있었는지가 좁혀집니다.
| 모양 | 무엇을 뜻하는가 | 다음에 볼 것 |
|---|---|---|
| 증가 · 차변 위주 | 매출은 늘었는데 회수는 적음 | 회수 지연 여부 확인 |
| 감소 · 대변 위주 | 회수가 활발했음 | 정상 — 다음 달 발행 계획 확인 |
| 증가 · 양쪽 모두 큼 | 거래량 자체가 늘었음 | 여신한도 여유 확인 |
| 변동 없음 · 라인 0 | 기중 거래가 없었음 | 휴면 거래처 · 잔액 정리 대상 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
회사코드 bukrs | 필수 | 대상 회사코드 |
계정유형 koart | 필수 | D 고객 / K 공급업체 |
기간 budat | 필수 | 전기일 From~To. 이월은 시작일 직전까지 누계 |
조정계정 racct | 선택 | 외상매출금·외상매입금 등 계정 범위 |
거래처 partner | 선택 | 고객 또는 공급업체 코드 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
계정코드 racct · 계정명 racctTx | 조정계정과 명칭 |
거래처 partner · partnerTx | 고객 또는 공급업체 코드와 명칭 |
통화 rhcur | 회사코드 통화 |
| 이월 | 기간 시작 직전까지의 누계 잔액 |
| 차변 | 기중 차변 합계 |
| 대변 | 기중 대변 합계 |
| 증감 | 차변 − 대변 |
| 잔액 | 이월 + 증감. 부호에 따라 상태 색 |
| 라인수 | 집계에 들어간 전기 라인 건수 |
SAP 표준 기능 매핑
전기는 표준이 만들고, 이 화면은 그 라인을 계정·거래처 축으로 접어 증감을 계산합니다.
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
FBL5N · FBL1N | 고객 · 공급업체 개별항목 | 라인 나열 대신 거래처별로 접어 이월·차변·대변·잔액으로 요약 |
FD10N · FK10N | 고객 · 공급업체 잔액 조회 | 잔액에 더해 차변·대변 구성과 라인수를 함께 표시 |
BSEG · BKPF | 전표 라인과 헤더 | 집계 원천 |
KNA1 · LFA1 | 고객 · 공급업체 마스터 | 거래처 명칭 |
SKA1 | 계정 마스터 | 조정계정 명칭 |
ACDOCA | 유니버설 저널 (S/4HANA) | 집계 원천을 표준 CDS 로 교체 가능 |
도입 시 확인이 필요한 부분
이월 잔액을 어디서 가져올지가 관건입니다. 기간 시작 직전까지 라인을 누계하는 방법과 월별 잔액 테이블에서 읽는 방법이 있고, 데이터 양과 성능에 따라 선택이 갈립니다. 또 특별원장(선급금·선수금)을 이 집계에 포함할지도 업무 기준에 따라 정해야 합니다.
참고 CDS 뷰
운영 서비스로 연결할 때는 계정·거래처 단위로 차대를 갈라 집계한 뷰를 제안합니다.
@AbapCatalog.sqlViewName: 'ZCARAPMOVE'
@EndUserText.label: '채권채무 증감내역 (Z)'
define view Z_C_AR_AP_MOVEMENT
as select from acdoca as Line
left outer join kna1 as Customer on Line.kunnr = Customer.kunnr
left outer join lfa1 as Vendor on Line.lifnr = Vendor.lifnr
left outer join skat as AcctText on Line.racct = AcctText.saknr
and AcctText.spras = 'K'
{
key Line.rbukrs as Bukrs,
key Line.racct as Racct,
key coalesce( Line.kunnr, Line.lifnr ) as Partner,
AcctText.txt50 as RacctTx,
coalesce( Customer.name1, Vendor.name1 ) as PartnerTx,
Line.rhcur,
// 차변·대변을 갈라 집계하고 증감을 계산
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 NetChange,
count(*) as LineCount
// 이월 잔액은 기간 시작 직전까지 누계를 계산하는 소비 뷰에서 결합
}
group by Line.rbukrs, Line.racct, Line.kunnr, Line.lifnr,
AcctText.txt50, Customer.name1, Vendor.name1, Line.rhcur
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 이월 산출 방식과 릴리즈에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 집계 테이블 |
| 조회조건 | sap.m.Select · sap.m.DatePicker · sap.m.Input — 우측 끝에 조회·초기화 |
| 집계 테이블 | sap.m.Table — 금액 열 우측정렬, popin 반응형 |
| 잔액 표시 | sap.m.ObjectStatus — 부호에 따라 상태 색 |
| 거래처 열 | 계정유형에 따라 머리글이 고객/공급업체로 바뀜 |
| 이벤트 | 모든 버튼이 onPAI 단일 진입점, fcCode 로 분기 |
거래처 열 머리글을 바꾸는 이유
같은 열이 고객일 때와 공급업체일 때 의미가 다릅니다. 머리글을 "거래처" 로 고정하면 지금 보는 것이 받을 돈인지 줄 돈인지 헷갈립니다. 계정유형 선택에 따라 머리글을 바꾸면 화면 하나로 두 업무를 쓰면서도 오독이 줄어듭니다.
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon |
Component.js | 조회조건 모델 · 결과 모델 초기화 |
manifest.json | 앱 디스크립터 — 앱 ID(zui5.arapmove) · 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/arapmove.json | 전기 라인 94건 (19개 필드) |
집계 축이나 이월 산출 방식이 바뀌어도 컨트롤러 한 파일만 손보면 됩니다.
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 증감 = 차변합계 − 대변합계 (전 행) | 통과 |
| 잔액 = 이월 + 증감 (전 행) | 통과 |
| 원화환산 = 거래통화금액 × 환율 | 통과 |
| 라인수 = 집계에 들어간 전기 라인 건수 | 통과 |
| 계정유형과 거래처 필드 정합 (D↔고객 · K↔공급업체) | 통과 |
| XML · JSON 전체 파싱 | 오류 0건 |
| 화면 렌더링 — 실브라우저 조회 후 캡처 | 통과 |
| 테마 런타임 확인 | sap_horizon |
계정·거래처·금액은 모두 검증용 데이터입니다.
자주 묻는 질문
이월 잔액은 어떻게 계산하나요?
조회 기간 시작일 직전까지의 전기를 누계해 만듭니다. 월별 잔액 테이블을 쓰는 방법도 있고, 데이터 양과 성능에 따라 선택이 갈립니다. 어느 쪽이든 잔액 = 이월 + 증감 이 성립해야 합니다.
라인수는 왜 보여 주나요?
같은 증감이라도 한 건으로 움직인 것과 서른 건이 오간 것은 의미가 다릅니다. 라인수가 많으면 분할 결제나 잦은 거래를 뜻하므로, 대사할 때 어느 거래처가 손이 많이 가는지 미리 알 수 있습니다.
특별원장 항목도 포함되나요?
기본 집계는 일반 채권채무만 봅니다. 선급금·선수금 같은 특별원장 항목을 함께 볼지는 업무 기준에 따라 달라지므로 도입 시 포함 범위를 정합니다.
SAP 표준 기능과 어떻게 이어지나요?
전기 데이터는 표준 구조 그대로이고, FD10N·FK10N 으로 잔액을 볼 수 있습니다. 이 화면은 잔액에 더해 이월·차변·대변·증감·라인수를 한 줄에 놓아, 잔액이 왜 달라졌는지까지 같은 화면에서 읽게 하는 확장입니다.