SAP 채권 독촉현황 조회 — 연체일수만큼 독촉이 올라갔는가
연체 채권의 독촉 레벨이 연체일수에 맞게 상향됐는지 점검하고, 독촉이 멈춘 건과 법적조치 대상을 가려내는 화면입니다.
독촉은 보냈다는 사실보다 제때 단계가 올라갔는가가 중요합니다. 90일이 지났는데 아직 1차 독촉에 머물러 있으면, 절차는 돌았지만 압박은 없었던 셈입니다.
독촉이 멈추는 이유는 대개 독촉 차단이 걸려 있거나 실행이 누락됐기 때문입니다. SAP 표준 독촉 구조를 그대로 이어받아 연체일수와 독촉레벨을 나란히 놓아 어긋난 건을 찾도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면 3종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 독촉 레벨 — 표준 독촉 절차의 레벨(
RawDunningLevel)을 그대로 사용 - 최종 독촉일 — 마지막 독촉 실행일(
LastDunningDate) - 독촉 차단 — 차단 사유(
DunningBlockReason)로 실행 제외 건 식별 - 청구 문서 — 청구번호 · 청구일 · 만기일 · 금액 · 지급조건
- 고객 마스터 — 고객 코드 · 명칭 · 고객그룹
| 항목 | 내용 |
|---|---|
| 대응 T-code | F150 (Dunning Run) |
| 업무 영역 | 재무회계(FI-AR) · 채권 독촉 |
| Namespace | zui5.dunning |
| 셸 구조 | 조회조건 영역(우측 조회·초기화) + 독촉 현황 목록 |
| 화면 수 | 조회 화면 1개 + 상세 |
| 데이터 | 독촉 대상 29건 · 고객 20건 |
| 성격 | 조회형(Read-Only) — 독촉 실행은 표준 Dunning Run 이 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 3종 둘러보기
회사코드·고객·독촉레벨로 조회하면 연체 채권이 레벨과 함께 나옵니다 → 연체일수 대비 레벨이 낮은 건을 가려내고 → 독촉 차단 사유와 최종 독촉일로 왜 멈췄는지 확인합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드를 고르고 필요하면 고객·고객그룹으로 좁힙니다.
- 독촉레벨로 특정 단계에 머무는 건만 볼 수 있습니다.
- 조회조건 입력필드에서 값을 바꾸거나 Enter 를 누르면 즉시 조회됩니다.
- 연체일수와 독촉레벨을 나란히 보며 어긋난 건을 찾습니다.
- 독촉 차단 사유가 있는 건은 차단이 타당한지 확인합니다.
- 연체일수가 큰 건은 법적조치 검토 대상으로 따로 뽑습니다.
- 결과는 CSV 다운로드로 내려받습니다.
레벨 미상향 판정
판정은 두 숫자를 비교하는 일입니다. 연체일수에 맞는 레벨과 실제 레벨이 같은지 봅니다.
연체일수 = 기준일 − 만기일(DueDate)
연체일수 구간별 기대 독촉레벨과 실제 레벨(RawDunningLevel)을 비교
실제 레벨 = 기대 레벨 → 정상
실제 레벨 < 기대 레벨 → 미상향 — 독촉 누락 또는 차단 확인
독촉 차단 사유 있음 → 차단 — 사유 타당성 검토
건수가 아니라 상태를 보는 이유
독촉 건수는 Dunning Run 을 돌리면 늘어납니다. 그런데 늘어난 건수가 압박으로 이어졌는지는 다른 문제입니다. 연체일수와 레벨을 나란히 두면 "돌긴 돌았는데 단계가 안 올라간" 건이 보이고, 그게 실제로 수금이 막힌 지점입니다.
독촉 단계와 대응
| 단계 | 상황 | 통상 대응 |
|---|---|---|
| 0단계 | 만기 전 또는 독촉 미실행 | 조치 없음 |
| 1차 독촉 | 연체 초기 | 안내 · 담당자 연락 |
| 2차 독촉 | 지연 지속 | 공식 문서 발송 |
| 3차 이상 | 장기 연체 | 거래 중단 검토 · 법적조치 준비 |
구간 경계와 단계 수는 회사 독촉 절차 설정을 따릅니다.
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
회사코드 Bukrs | 필수 | 대상 회사코드 |
고객 CustomerId | 선택 | 고객 코드·명칭 |
고객그룹 CustomerGroup | 선택 | 국내출하처 등 그룹 단위 |
독촉레벨 RawDunningLevel | 선택 | 0~3단계 |
| 기준일 | 선택 | 연체일수 계산 기준일 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
고객 CustomerId · CustomerName | 코드와 명칭 |
고객그룹 CustomerGroup | 그룹 구분 |
청구번호 InvoiceDocNo | 독촉 대상 전표 |
청구일 InvoiceDate · 만기일 DueDate | 발행일과 결제 기한 |
금액 Amount · 통화 Currency | 연체 금액 |
지급조건 PaymentTerms | NET30 등 |
| 연체일수 | 기준일 − 만기일. 구간별 상태 색 |
독촉레벨 RawDunningLevel | 현재 단계. 연체일수 대비 미상향이면 경고 |
최종 독촉일 LastDunningDate | 마지막 독촉 실행일 |
독촉차단 DunningBlockReason | 차단 사유 |
비고 Remark | 담당자 메모 |
SAP 표준 기능 매핑
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
F150 | Dunning Run 실행 | 실행 결과를 연체일수 대비 레벨 관점으로 점검 |
FBL5N | 고객 개별항목 | 연체 건을 독촉 정보와 함께 표시 |
BSID | 고객 미결 항목 | 연체 채권 원천 |
KNB5 | 고객 독촉 데이터 — 레벨 · 최종 독촉일 | 레벨 판정 근거 |
KNA1 | 고객 마스터 | 고객명 · 고객그룹 |
도입 시 확인이 필요한 부분
독촉 절차와 레벨별 연체일수 경계는 독촉 프로시저 설정에 정의돼 있습니다. 기대 레벨을 계산하려면 그 설정을 읽어야 하므로, 화면에 고정값으로 두지 말고 설정을 참조하도록 연결해야 합니다. 독촉 차단 사유 코드 체계도 회사별로 정리가 필요합니다.
참고 CDS 뷰
@AbapCatalog.sqlViewName: 'ZCDUNNING'
@EndUserText.label: '채권 독촉 현황 (Z)'
define view Z_C_DUNNING_STATUS
with parameters p_keydate : dats
as select from bsid as Item
inner join kna1 as Customer on Item.kunnr = Customer.kunnr
left outer join knb5 as Dunn on Item.kunnr = Dunn.kunnr
and Item.bukrs = Dunn.bukrs
{
key Item.bukrs, key Item.belnr, key Item.gjahr, key Item.buzei,
Item.kunnr, Customer.name1 as CustomerName,
Item.bldat as InvoiceDate,
Item.zfbdt as DueDate,
Item.dmbtr as Amount,
Item.zterm as PaymentTerms,
Dunn.mahns as DunningLevel,
Dunn.madat as LastDunningDate,
Dunn.mansp as DunningBlockReason,
dats_days_between( Item.zfbdt, :p_keydate ) as DaysOverdue
// 기대 레벨은 독촉 프로시저 설정(T047A 계열)을 참조해 소비 뷰에서 판정
}
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경 설정과 릴리즈에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 독촉 현황 테이블 |
| 조회조건 | sap.m.Select · sap.m.DatePicker · sap.m.Input — 우측 끝에 조회·초기화 |
| 이벤트 | 모든 버튼이 onPAI 단일 진입점, fcCode 로 분기 |
| 현황 테이블 | sap.m.Table — 연체일수와 레벨을 인접 배치 |
| 상태 표시 | sap.m.ObjectStatus — 연체 구간과 레벨 미상향 |
| 상세 화면 | sap.m.Dialog — 독촉 이력과 차단 사유 |
두 열을 붙여 놓은 이유
연체일수와 독촉레벨이 표 양끝에 있으면 눈이 오가며 비교해야 합니다. 두 열을 나란히 두면 숫자 쌍으로 읽혀, "151일인데 1단계" 같은 어긋남이 훑는 것만으로 걸립니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.dunning) · ko 로케일 |
view/Main.view.xml | 조회조건과 독촉 현황 테이블 |
controller/Main.controller.js | 조회 · 연체일수 계산 · 레벨 판정 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise) |
js/formatter.js | 금액 · 일자 · 레벨 · 상태 색 포맷터 |
localdata/dunning.json | 독촉 대상 29건 |
localdata/customers.json | 고객 20건 |
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 연체일수 = 기준일 − 만기일 (전 건 재계산) | 통과 |
| 독촉레벨이 있으면 최종 독촉일도 존재 | 통과 |
| 차단 건은 차단 사유 존재 | 통과 |
| 만기 전 건은 독촉레벨 0 | 통과 |
| 고객 코드와 명칭 정합 | 통과 |
| XML · JSON 전체 파싱 | 오류 0건 |
| 화면 렌더링 — 실브라우저 조회 → 상세 실동작 후 캡처 | 3/3 |
| 테마 런타임 확인 | sap_horizon |
자주 묻는 질문
독촉 차단은 왜 걸리나요?
거래처와 협상 중이거나 분쟁이 있어 독촉을 잠시 멈출 때 씁니다. 정당한 차단도 많지만, 한 번 걸고 해제를 잊는 경우가 있어 차단 사유와 기간을 함께 확인하는 것이 좋습니다.
기대 레벨은 어떻게 정하나요?
독촉 프로시저 설정에 레벨별 연체일수 경계가 정의돼 있습니다. 그 설정을 읽어 연체일수에 맞는 레벨을 계산하고 실제 레벨과 비교합니다. 화면에 고정값으로 두면 설정 변경 시 어긋나므로 참조 방식이 안전합니다.
법적조치 대상은 어떻게 뽑나요?
연체일수가 크고 최고 단계 독촉까지 진행된 건이 후보입니다. 금액 기준을 함께 걸어 실익이 있는 건만 추리는 것이 보통입니다.
SAP 표준 기능과 어떻게 이어지나요?
독촉 실행은 F150 이 담당하고 레벨과 실행일은 표준 고객 독촉 데이터에 남습니다. 이 화면은 그 결과를 연체일수와 나란히 놓아 단계가 제때 올라갔는지 점검하게 하는 확장입니다.