SAP 대손충당금 설정 — 못 받을 돈을 미리 인정하기
매출채권 연령분석과 고객 위험등급으로 충당금 요설정액을 산출하고, 이동표와 원장 잔액을 대사하는 화면입니다.
매출채권은 모두 받을 수 있는 돈이 아닙니다. 오래 밀릴수록, 거래처 사정이 나쁠수록 못 받을 확률이 올라갑니다.
그 확률만큼 미리 비용으로 잡는 것이 대손충당금입니다. 문제는 얼마를 잡을지입니다. 연령별로 일괄 적용하면 간편하지만 부실 징후가 뚜렷한 거래처를 놓칩니다. 두 방식을 함께 쓰도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면 3종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 회사코드 — 대상 법인(
Bukrs)과 회계연도(Gjahr) - 기준월 — 연초 누계 대상월(
MonatTo) - 위험등급 — 고객 등급(
RiskGrade) A~D - 충당금 이동 — 기초잔액(
BeginningBalance) · 설정(Addition) · 상각(WriteOff) · 기말(EndingBalance) - 채권 — 고객별 미결 항목과 연령
| 항목 | 내용 |
|---|---|
| 대응 T-code | F107 (충당금 설정) |
| 업무 영역 | 재무회계(FI) · 채권 평가 |
| Namespace | zui5.baddebt |
| 셸 구조 | 조회조건 영역(우측 조회·초기화) + 월별 추이 + 이동표 + 위험 고객 |
| 화면 수 | 조회 화면 1개 + 상세 |
| 데이터 | 이동표 16건 · 채권 184건 · 고객 23건 |
| 성격 | 조회·산출형 — 전기는 표준이 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 3종 둘러보기
회사코드·회계연도·기준월로 조회하면 요설정액이 나옵니다 → 설정률과 이동표를 확인하고 → 원장 잔액과 대사합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드와 회계연도를 고릅니다.
- 기준월을 지정합니다. 연초부터 그 달까지 누계로 집계됩니다.
- 위험등급으로 A(우량)부터 D(부실)까지 나눠 볼 수 있습니다.
- 조회조건 입력필드에서 값을 바꾸거나 Enter 를 누르면 즉시 조회됩니다.
- 요설정액과 설정률을 확인합니다.
- 이동표로 기초에서 기말까지의 흐름을 봅니다.
- 기말잔액이 원장 충당금 계정과 맞는지 대사합니다.
- 결과는 CSV 다운로드로 내려받아 결산 조서에 첨부합니다.
설정액 산식
연령분석법과 개별평가를 함께 씁니다.
연령분석법 요설정액 = Σ(연령 구간별 채권 × 구간 설정률)
개별평가 D등급 등 부실 징후 거래처는 개별 판단으로 설정
요설정액 = 연령분석 대상 설정액 + 개별평가 설정액
설정률(커버리지) = 요설정액 ÷ 채권총액 × 100
이동표
기말잔액 = 기초잔액 + 당월설정 − 당월상각
기말잔액이 원장 충당금 계정 잔액과 일치해야 함
추가 설정 필요액 = 요설정액 − 현재 충당금 잔액
두 방법을 함께 쓰는 이유
연령분석법은 통계적 접근이라 대체로 맞지만 개별 사정은 반영하지 못합니다. 연체가 30일밖에 안 됐어도 거래처가 회생 절차에 들어갔으면 전액이 위험합니다. 그런 건은 개별평가로 따로 잡아야 충당금이 실제 위험을 반영합니다.
위험등급 4구간
| 등급 | 상태 | 설정 방식 |
|---|---|---|
| A (우량) | 연체 없고 신용 양호 | 최저 설정률 |
| B (양호) | 경미한 연체 | 기본 설정률 |
| C (주의) | 연체 반복 또는 장기화 | 높은 설정률 |
| D (부실) | 회수 곤란 징후 | 개별평가 대상 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
회사코드 Bukrs | 필수 | 대상 법인 |
회계연도 Gjahr | 필수 | 대상 연도 |
기준월 MonatTo | 필수 | 연초 누계 대상월 |
위험등급 RiskGrade | 선택 | 전체 / A / B / C / D |
고객명·코드 CustText | 선택 | 거래처 검색 |
결과 컬럼
월별 추이
| 컬럼 | 의미 |
|---|---|
연월 MonatLabel | 집계 기간 |
| 채권총액 | 매출채권 잔액 |
| 요설정액 | 산출된 충당금 필요액 |
| 설정률 | 요설정액 ÷ 채권총액 |
| 위험고객수 | C·D 등급 거래처 수 |
| 위험신호 | 급증·집중 등 경고. 상태 색 |
이동표(전사)
| 항목 | 의미 |
|---|---|
기초잔액 BeginningBalance | 기간 시작 충당금 |
당월설정 Addition | 추가 설정액 |
당월상각 WriteOff | 대손 확정 상각 |
기말잔액 EndingBalance | 기초 + 설정 − 상각 |
| 원장 대사 | 충당금 계정과 일치 여부 |
SAP 표준 기능 매핑
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
F107 | 대손충당금 설정 | 연령분석과 개별평가를 함께 제시 |
FBL5N | 고객 개별항목 | 채권 연령 원천 |
S_ALR_87012178 | 채권 연령분석 | 구간별 집계 |
BSID · BSAD | 고객 미결·반제 | 조회 원천 |
KNA1 · KNB1 | 고객 마스터 | 거래처 정보 |
FS10N | 계정 잔액 | 충당금 대사 |
도입 시 확인이 필요한 부분
연령 구간과 설정률은 회사가 정하고 감사인과 협의합니다. 과거 대손 실적을 근거로 산정하는 것이 원칙이며, 근거 없이 낮게 잡으면 감사에서 지적받습니다. 설정률을 바꾸면 그 사유도 함께 남겨야 합니다.
참고 CDS 뷰
@AbapCatalog.sqlViewName: 'ZCBADDEBT'
@EndUserText.label: '대손충당금 산출 (Z)'
define view Z_C_BAD_DEBT_ALLOWANCE
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.kunnr as Customer,
key Item.belnr, key Item.gjahr, key Item.buzei,
Customer.name1 as CustomerName,
Item.zfbdt as DueDate,
Item.dmbtr as Amount,
// 연령 = 기준일 − 만기일, 구간별 설정률을 적용해 요설정액 산출
dats_days_between( Item.zfbdt, :p_keydate ) as AgingDays
// 위험등급은 고객 평가 테이블과 조인, D등급은 개별평가
// 이동표는 충당금 계정 전기 이력에서 집계
}
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경 설정과 릴리즈에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 월별 추이 · 이동표 |
| 조회조건 | sap.m.Select · sap.m.DatePicker · sap.m.Input — 우측 끝에 조회·초기화 |
| 이벤트 | 모든 버튼이 onPAI 단일 진입점, fcCode 로 분기 |
| 추이 테이블 | sap.m.Table — 연월순 정렬 |
| 위험신호 | sap.m.ObjectStatus — 정상 / 주의 |
| 이동표 | 기초→설정→상각→기말 순서로 열 배치 |
설정률을 함께 보여 주는 이유
요설정액만 보면 채권이 늘어서 커진 것인지 위험이 높아져서 커진 것인지 모릅니다. 설정률이 함께 있으면 채권 규모와 무관하게 위험 수준의 변화가 드러납니다. 설정률이 계속 오르면 거래처 신용이 나빠지고 있다는 신호입니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.baddebt) · ko 로케일 |
view/Main.view.xml | 조회조건 · 월별 추이 · 이동표 |
controller/Main.controller.js | 조회 · 요설정액 산출 · 대사 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise) |
js/formatter.js | 금액 · 비율 · 상태 색 포맷터 |
localdata/allowancemovement.json | 이동표 16건 |
localdata/aritems.json | 채권 184건 |
localdata/customers.json | 고객 23건 |
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 기말잔액 = 기초잔액 + 당월설정 − 당월상각 | 통과 |
| 설정률 = 요설정액 ÷ 채권총액 × 100 | 통과 |
| 요설정액 = 연령분석 설정액 + 개별평가 설정액 | 통과 |
| D등급 거래처는 개별평가 대상으로 분류 | 통과 |
| 고객 코드가 있으면 명칭도 존재 | 통과 |
| XML · JSON 전체 파싱 | 오류 0건 |
| 화면 렌더링 — 실브라우저 조회 후 캡처 | 3/3 |
| 테마 런타임 확인 | sap_horizon |
자주 묻는 질문
설정률은 어떻게 정하나요?
과거 대손 실적을 근거로 산정합니다. 연령 구간별로 실제 회수되지 않은 비율을 계산해 설정률로 쓰고, 감사인과 협의해 확정합니다.
상각과 설정은 무엇이 다른가요?
설정은 미리 비용으로 잡는 것이고 상각은 회수 불가가 확정돼 채권 자체를 없애는 것입니다. 상각하면 충당금이 줄어듭니다.
기말잔액이 원장과 다르면요?
충당금 전기가 누락됐거나 산출 기준이 달라진 것입니다. 결산 전에 맞춰야 재무제표 주석과 본표가 어긋나지 않습니다.
SAP 표준 기능과 어떻게 이어지나요?
충당금 전기는 표준 F107 이 담당합니다. 이 화면은 연령분석과 개별평가로 요설정액을 산출하고 이동표와 원장 대사를 함께 보여 주는 확장입니다.