SAP 채권채무 연령분석 — 금액이 아니라 시간으로 줄 세우기
거래처별 미결 채권·채무를 만기 경과일수로 갈라 구간별로 세우고, 오래 묶인 돈부터 회수 순서를 정하는 화면입니다.
채권 잔액이 크다는 사실만으로는 아무 판단도 나오지 않습니다. 어제 발행한 10억과 여덟 달 전에 발행한 1억 중 먼저 챙겨야 할 것은 뒤쪽입니다.
그래서 채권은 금액이 아니라 시간으로 줄을 세워야 합니다. 만기가 얼마나 지났는지에 따라 회수 가능성도, 대손 판단도 달라지기 때문입니다. SAP 표준 미결항목 구조를 그대로 이어받아 경과일수 구간으로 갈라 보도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면 3종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 계정유형 — 고객(D) · 공급업체(K) 구분(
AcctType)을 표준 분류대로 유지 - 기산일 — 만기 계산의 기준이 되는
Zfbdt를 그대로 사용 - 전표 키 — 전표번호(
Belnr) · 회계연도(Gjahr)로 표준 전표 추적 - 금액 — 원화환산 금액(
Dmbtr)과 통화(Waers) 표준 필드 - 거래처 마스터 — 고객(
KNA1) · 공급업체(LFA1) 명칭
| 항목 | 내용 |
|---|---|
| 대응 T-code | FBL5N · FBL1N (고객 · 공급업체 개별항목) |
| 업무 영역 | 재무회계(FI-AR/AP) · 채권채무 연령분석 |
| Namespace | zui5.aging |
| 셸 구조 | 조회조건 영역(우측 조회·초기화) + 연령 분포 목록, 행 선택 시 상세 다이얼로그 |
| 화면 수 | 조회 화면 1개 + 전표 상세 |
| 데이터 | 미결 항목 51건 (12개 필드) |
| 성격 | 조회형(Read-Only) — 전기와 반제는 표준 트랜잭션이 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 3종 둘러보기
회사코드·계정유형·기준일로 조회하면 거래처별 연령 분포가 나옵니다 → 오래된 구간에 금액이 몰린 거래처를 먼저 짚고 → 행을 눌러 어떤 전표가 그 구간을 만들었는지 확인합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드와 계정유형(고객/공급업체)을 고릅니다.
- 기준일을 넣습니다. 경과일수는 이 날짜에서 만기일을 뺀 값이라, 기준일을 바꾸면 분포가 다시 계산됩니다.
- 거래처 조건으로 특정 거래처만 볼 수 있습니다.
- 조회조건 입력필드에서 값을 바꾸거나 Enter 를 누르면 즉시 조회됩니다.
- 오래된 구간(91일 이상)에 금액이 몰린 거래처부터 봅니다. 회수 독촉과 대손 검토 대상이 여기서 나옵니다.
- 행을 선택하면 상세 다이얼로그가 열려 구간을 만든 전표를 확인할 수 있습니다.
- 결과는 CSV 다운로드로 내려받습니다. UTF-8 BOM 이 붙어 엑셀에서 한글이 깨지지 않습니다.
경과일수 산식과 구간 판정
계산은 뺄셈 하나이고, 나머지는 그 값을 어떻게 나누느냐입니다.
경과일수(Tage) = 기준일 − 만기일(Zfbdt)
경과일수 ≤ 0 → 만기 전 (아직 결제일이 오지 않음)
경과일수 > 0 → 만기 경과 (구간으로 분류)
기준일을 조회조건으로 둔 이유
연령분석은 오늘 기준으로만 보면 과거 시점을 재현할 수 없습니다. 월말이나 결산일 기준으로 다시 봐야 할 때가 있고, 대손충당금 설정 근거도 특정 시점 기준이어야 합니다. 기준일을 파라미터로 받으면 같은 데이터로 여러 시점의 분포를 만들 수 있습니다.
연령 구간 4단계
구간이 올라갈수록 회수 가능성이 떨어지고 대응 방식이 달라집니다.
| 구간 | 경과일수 | 통상 대응 |
|---|---|---|
| 만기 전 | 경과일수 ≤ 0 | 정상 — 예정 자금으로 관리 |
| 1~30일 | 갓 지난 구간 | 입금 확인 · 담당자 연락 |
| 31~90일 | 지연이 굳어지는 구간 | 공식 독촉 · 거래 조건 재검토 |
| 91일 초과 | 장기 미회수 | 대손 검토 · 법적 조치 판단 |
구간 경계는 회사 채권 관리 규정에 맞춰 조정합니다. 업종에 따라 30·60·90 대신 15·45·75 를 쓰기도 합니다.
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 회사코드 | 필수 | 대상 회사코드 |
계정유형 AcctType | 필수 | D 고객(채권) / K 공급업체(채무) |
| 기준일 | 필수 | 경과일수 계산 기준. 기본값은 오늘 |
거래처 Partner | 선택 | 고객 또는 공급업체 코드 |
전기일 Budat | 선택 | 기간 From~To |
결과 컬럼
연령 분포
| 컬럼 | 의미 · 표시 |
|---|---|
거래처 Partner · PartnerName | 코드와 명칭 |
계정유형 AcctType | 고객(D) / 공급업체(K) |
| 구간별 금액 | 만기 전 · 1~30일 · 31~90일 · 91일 초과 |
| 합계 | 거래처의 미결 총액 |
| 최장 경과일수 | 가장 오래 묶인 건의 일수. 구간에 따라 상태 색 |
전표 상세
| 컬럼 | 의미 · 표시 |
|---|---|
전표번호 Belnr · 연도 Gjahr | 표준 전표 조회로 이어지는 키 |
증빙일 Bldat · 전기일 Budat | 증빙 날짜와 원장 반영 날짜 |
만기일 Zfbdt | 결제 기한 |
경과일수 Tage | 기준일 − 만기일 |
금액 Dmbtr · 통화 Waers | 원화환산 금액과 통화 |
적요 Sgtxt | 전표 라인 적요 |
SAP 표준 기능 매핑
미결 데이터는 표준 전기와 반제가 만듭니다. 이 화면은 그 항목을 시간 축으로 재배열하는 확장입니다.
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
FBL5N · FBL1N | 고객 · 공급업체 개별항목 조회 | 항목 나열 대신 거래처별 연령 구간으로 집계 |
S_ALR_87012178 관점 | 고객 연령분석 표준 리포트 | 기준일을 바꿔 가며 여러 시점을 즉시 재계산 |
BSID · BSIK | 고객 · 공급업체 미결 항목 | 분석 원천 |
BSEG · BKPF | 전표 라인과 헤더 | 전표 키 · 일자 · 적요 |
KNA1 · LFA1 | 고객 · 공급업체 마스터 | 거래처 명칭 |
ACDOCA | 유니버설 저널 (S/4HANA) | 원천을 표준 CDS 로 교체 가능 |
도입 시 확인이 필요한 부분
만기일 기준이 회사마다 다릅니다. 기산일에 결제조건 일수를 더해 계산하는 곳과 전표에 직접 입력한 만기일을 쓰는 곳이 섞여 있어, 어느 값을 쓸지 먼저 정해야 합니다. 구간 경계도 채권 관리 규정과 대손충당금 설정률 체계에 맞춰 조정합니다.
참고 CDS 뷰
운영 서비스로 연결할 때는 미결 항목에 경과일수와 구간을 계산해 붙인 뷰를 제안합니다.
@AbapCatalog.sqlViewName: 'ZCAGING'
@EndUserText.label: '채권채무 연령분석 (Z)'
define view Z_C_AR_AP_AGING
with parameters p_keydate : dats
as select from bsid as Item
left outer join kna1 as Customer on Item.kunnr = Customer.kunnr
{
key Item.bukrs, key Item.gjahr, key Item.belnr, key Item.buzei,
'D' as AcctType,
Item.kunnr as Partner,
Customer.name1 as PartnerName,
Item.bldat, Item.budat, Item.zfbdt,
Item.dmbtr, Item.waers, Item.sgtxt,
// 경과일수 = 기준일 − 만기일
dats_days_between( Item.zfbdt, :p_keydate ) as Tage,
// 구간 분류 — 경계는 회사 규정에 맞춰 조정
case when dats_days_between( Item.zfbdt, :p_keydate ) <= 0 then 'B0'
when dats_days_between( Item.zfbdt, :p_keydate ) <= 30 then 'B1'
when dats_days_between( Item.zfbdt, :p_keydate ) <= 90 then 'B2'
else 'B3' end as AgingBucket
}
// 공급업체는 BSIK 로 같은 형태의 뷰를 만들어 union 으로 합침
매핑 이해를 돕기 위한 참고용 설계입니다. S/4HANA 환경이면 ACDOCA 기반 표준 CDS 로 대체합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 연령 분포 테이블 |
| 조회조건 | sap.m.Select · sap.m.DatePicker — 우측 끝에 조회·초기화 |
| 분포 테이블 | sap.m.Table — 구간별 금액을 열로 배치 |
| 상태 표시 | sap.m.ObjectStatus — 구간별 상태 색 |
| 상세 화면 | sap.m.Dialog — 구간을 만든 전표 목록 |
| 이벤트 | 모든 버튼이 onPAI 단일 진입점, fcCode 로 분기 |
구간을 열로 펼친 이유
거래처마다 구간별 금액을 행으로 늘어놓으면 한 거래처가 네 줄을 차지해 비교가 어렵습니다. 구간을 열로 두면 한 거래처가 한 줄이 되고, 금액이 어느 쪽으로 쏠렸는지가 가로로 읽힙니다. 오른쪽에 금액이 몰린 줄이 곧 문제 거래처입니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.aging) · ko 로케일 · sap_horizon |
view/Main.view.xml | 조회 화면 |
view/fragments/MainHeader.fragment.xml | 조회조건 영역과 우측 조회·초기화 |
view/fragments/MainContent01.fragment.xml | 연령 분포 테이블 |
view/fragments/MainDetailDialog.fragment.xml | 전표 상세 |
controller/Main.controller.js | 조회 · 경과일수 계산 · 구간 분류 · CSV |
js/formatter.js | 금액 · 일자 · 구간 상태 색 포맷터 |
localdata/aging.json | 미결 항목 51건 (12개 필드) |
구간 경계가 바뀌어도 컨트롤러와 포맷터 두 파일만 손보면 됩니다.
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 경과일수 = 기준일 − 만기일 (전 건 재계산) | 통과 |
| 구간 분류가 경과일수와 정합 | 통과 |
| 구간별 금액 합 = 거래처 미결 총액 | 통과 |
| 계정유형과 거래처 필드 정합 (D↔고객 · K↔공급업체) | 통과 |
| XML · JSON 전체 파싱 | 오류 0건 |
| manifest 참조 무결성 · i18n 키 누락 | 이상 0건 |
| 화면 렌더링 — 실브라우저 조회 → 상세 실동작 후 캡처 | 3/3 |
| 테마 런타임 확인 | sap_horizon |
거래처·금액·만기일은 모두 검증용 데이터입니다.
자주 묻는 질문
구간 경계를 바꿀 수 있나요?
설정으로 관리합니다. 30·60·90 이 일반적이지만 결제 주기가 짧은 업종은 15·45·75 를 쓰기도 합니다. 대손충당금 설정률 체계와 구간을 맞추면 연령분석 결과가 곧 충당금 산정 근거가 됩니다.
만기 전 항목도 보이나요?
보입니다. 만기 전 구간에 얼마가 있는지를 알아야 앞으로 들어올 자금을 계획할 수 있기 때문입니다. 회수 독촉만 볼 때는 만기 경과 구간만 남기면 됩니다.
채무도 같은 화면에서 보나요?
계정유형을 공급업체로 바꾸면 같은 구조로 채무 연령이 나옵니다. 다만 해석이 반대여서, 오래 남은 채무는 회수가 아니라 지급 지연이므로 거래 조건이나 자금 계획을 먼저 봐야 합니다.
SAP 표준 기능과 어떻게 이어지나요?
미결 항목은 표준이 관리하고 FBL5N·FBL1N 으로 조회할 수 있습니다. 이 화면은 그 항목을 나열하는 대신 기준일 기준 경과일수로 갈라 거래처별 분포로 집계하고, 기준일을 바꿔 여러 시점을 즉시 재계산하는 확장입니다.