SAP 매출채권 회수기간(DSO) 점검 — 거래처별 회수기간을 목표와 나란히 놓고 본다
거래처별 채권잔액과 매출을 대사해 회수기간을 산출하고, 거래처그룹별 목표와 전기 대비 증감을 함께 놓고 점검 대상을 가려냅니다
매출채권 잔액과 회수 현황은 거래처 라인아이템·잔액 조회 화면에서 확인할 수 있지만, "거래처마다 회수기간이 목표 대비 얼마나 벌어져 있는지"를 한 번에 모아 보는 화면은 따로 없는 경우가 많습니다. 그래서 거래처별 채권잔액과 당기 매출을 대사해 회수기간(DSO, Days Sales Outstanding)을 산출하고, 거래처그룹별 목표 DSO·전기 대비 증감과 비교하는 화면을 OpenUI5로 구현했습니다. 대상 영역은 자금분석(매출채권 회수기간 관리)입니다.
DSO가 목표 DSO의 1.2배를 넘거나 전기 대비 10일 넘게 늘어나면 "점검필요"로 자동 판정합니다. 표준 채권 라인아이템·잔액 조회 기능이 담당하는 데이터 위에, 거래처그룹별 목표 대비 편차를 한 번에 훑어보는 층을 더한 셈입니다. 실제 구동 화면 3종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 고객 라인아이템 조회 — 고객別 라인아이템 조회(
FBL5N)에서 다루는 미결 채권 데이터 구조를 그대로 이어받습니다 - 고객 잔액 조회 — 고객 잔액 조회(
FD10N)의 기간별 잔액 조회 관점을 채권잔액 컬럼에 옮겨 왔습니다
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 자금분석 |
| Namespace | zui5.collectdso |
| 셸 구조 | 조회조건 영역(우측 조회) + 요약 KPI 6종 + 탭 2개, 행 클릭 상세 Dialog |
| 화면 수 | 조회 화면 1개(탭 2개) + 상세 다이얼로그 |
| SAP 표준 T-code | FBL5N · FD10N |
| 데이터 연동 방식 | OData V2 — 화면 블록마다 엔티티셋에 직접 바인딩 |
| 성격 | 조회·점검형 — 회수 지연 사유 확인과 최종 판단은 회사와 감사인이 수행 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 3종 둘러보기
기본 조건으로 조회하면 요약 KPI와 거래처별 DSO 명세 탭이 뜹니다 → 월별 추이 탭에서 흐름을 보고 → 행을 클릭해 채권잔액 증감 상세를 봅니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
사용 방법
- 화면에 들어오면 기본 조건(최신 기간)으로 자동 조회가 1회 실행되어 요약 KPI와 거래처별 DSO 명세가 함께 채워집니다.
- 조회조건 영역에서 회계연도(필수)를 확인하고, 기간·거래처그룹·점검결과는 선택적으로 지정합니다(비워두면 전체). 거래처명 또는 코드로 검색할 수 있습니다.
- 조회 버튼은 조회조건 입력 필드 줄의 가장 오른쪽에 있습니다. 거래처 검색 입력란에서 Enter 키를 눌러도 같은 조회가 실행됩니다. 초기화 버튼은 조회 버튼 바로 왼쪽에 있습니다.
- 상단 카드에서 전사 DSO · 목표 DSO · 전기 DSO · 채권잔액 합계 · 당기매출 합계 · 점검필요 건수를 먼저 확인합니다.
- 탭을 옮겨 거래처별 DSO 명세 → 월별 추이 순으로 봅니다.
- 명세 탭에서 행을 클릭하면 해당 거래처의 채권잔액 증감명세가 다이얼로그로 열립니다.
- 명세 탭 우측 상단의 CSV 내려받기(UTF-8 BOM)로 현재 조회 결과를 저장합니다.
DSO 판정 기준
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| DSO > 목표 DSO × 1.2 또는 전기 대비 증감 > 10일 | 점검 필요 | 회수 지연 사유 확인, 회수 계획 재점검 |
| 그 외(목표 범위 내이고 증감이 크지 않음) | 정상 | 조치 없음 |
위 기준은 조회·점검을 돕기 위한 것이며, 실제 회수 지연의 원인 판단과 최종 조치는 화면이 단정하지 않고 회사와 감사인이 확인합니다.
DSO 산출·대사 절차
| 단계 | 내용 |
|---|---|
| 1단계 | 거래처별 채권잔액 증감 집계: 기초잔액 + 당기매출증가 − 당기회수 − 대손상각 = 기말잔액 |
| 2단계 | DSO(일) = 기말채권잔액 ÷ 당기매출 × 30 산출 |
| 3단계 | 전기 대비 증감(DSO증감) = 당기DSO − 전기DSO 계산 |
| 4단계 | 거래처그룹별 목표 DSO와 비교해 점검결과(정상/점검필요) 판정 |
| 5단계 | 거래처별 채권잔액·매출 합계를 근거로 전사 DSO 재계산, 거래처별 합계와 대사 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 회계연도 | 필수 | 4자리 연도 |
| 기간 | 선택 | 월(001~009), 전체면 조건 제외 |
| 거래처그룹 | 선택 | 국내대형·국내중소·해외, 전체면 조건 제외 |
| 점검결과 | 선택 | 정상·점검필요, 전체면 조건 제외 |
| 거래처 검색 | 선택 | 거래처명 또는 코드 일부 일치 |
결과 컬럼
| 컬럼 | 설명 |
|---|---|
| 거래처코드 · 거래처명 · 거래처그룹 | 거래처 식별 정보 |
| 채권잔액 · 당기매출 | 기간말 매출채권 잔액, 당기 매출액 |
| DSO(일) · 전기DSO(일) · 증감 | 당기 회수기간, 전기 회수기간, 차이 |
| 목표DSO(일) · 점검결과 | 거래처그룹별 목표 회수기간, 정상/점검필요 |
SAP 표준 기능 매핑
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 그 데이터에 회수기간 산출·목표 대비 점검 관점을 더해 확장합니다.
| 표준 T-code | 표준 기능 | 이 화면이 더한 것 |
|---|---|---|
FBL5N | 고객別 라인아이템 조회 | 미결 채권 데이터 위에 회수기간(DSO) 산출과 목표 대비 판정을 더합니다 |
FD10N | 고객 잔액 조회 | 기간별 잔액 조회 관점을 거래처그룹별 집계·추이로 확장합니다 |
분석 지표 정의표
| 대상 영역 | 지표 | 정의 | 원천 데이터 |
|---|---|---|---|
| 자금분석 | DSO(회수기간) | 기말채권잔액 ÷ 당기매출 × 30 | 매출채권 잔액, 매출 발생액 |
| 자금분석 | DSO증감 | 당기DSO − 전기DSO | DSO 산출값(당기·전기) |
참고 CDS 뷰
| 원천 테이블 | 주요 필드 | 쓰임 |
|---|---|---|
BSID | KUNNR · DMBTR | 미결 고객 항목 — 채권잔액 산출 원천 |
ACDOCA | HSL · RACCT | 범용원장 — 매출 발생액 집계 원천 |
KNA1 / KNB1 | KUNNR · KUKLA | 고객 마스터 — 거래처그룹 속성 |
define view entity I_CustomerDsoSummary
as select from bsid as Item
association[1] to kna1 as _Customer on _Customer.kunnr = Item.kunnr
{
key Item.bukrs as CompanyCode,
key Item.kunnr as CustomerId,
_Customer.name1 as CustomerName,
sum(Item.dmbtr) as ArBalance
}
group by Item.bukrs, Item.kunnr, _Customer.name1
필드 매핑은 가상 데이터 기준 스케치이며, 매출 발생액은 범용원장 집계를 별도 파생값으로 계산합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 · 구성 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 패널 · 요약 KPI · IconTabBar 2개 탭 |
| 데이터 연동 | manifest.json dataSources.mainService(OData V2, 상대 경로)로 기본 모델을 만들고 defaultCountMode:"Inline" · useBatch:false 로 구성합니다. 화면 블록마다 해당 엔티티셋에 직접 바인딩합니다 |
| 명세 탭 | sap.ui.table.Table(컬럼 10개) — 셀 클릭으로 상세 다이얼로그를 엽니다 |
| 추이 탭 | sap.m.Table — 거래처 선택 Select와 목표 대비 진행률 표시 |
| 조회조건 | sap.ui.model.Filter 로 조립해 바인딩에 적용합니다. 거래처 검색은 이름·코드 조건을 OR 로 묶은 복합 Filter 로 전달합니다. 전체를 고른 조건은 필터를 만들지 않습니다 |
| 예외 메시지 | 메타데이터 실패·요청 실패를 구분해 안내하는 전용 처리기 |
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon, OData 서비스에 연결 |
Component.js | 모델 초기화, 예외 메시지 처리기 연결 |
manifest.json | 앱 디스크립터 — zui5.collectdso · ko 로케일, OData 서비스와 모델 선언 |
view/Main.view.xml | 조회조건 · 요약 KPI · 2개 탭 |
view/DetailDialog.fragment.xml | 채권잔액 증감명세 다이얼로그 |
controller/Main.controller.js | 조회조건 조립 · 바인딩 · 다이얼로그 · CSV |
controller/BaseController.js | CSV 다운로드 공통 처리 |
model/formatter.js · model/ErrorHandler.js | 표시 서식 · 예외 메시지 처리 |
i18n/i18n_ko.properties | 화면 문구 |
검증 결과
검증용 샘플 데이터(거래처 15곳, 9개 기간)를 기준으로 대사식을 전수 검증했습니다.
| 검증 항목 | 결과 |
|---|---|
| 채권잔액 증감표 대사(기초+매출−회수−대손=기말, 135건 전수) | 통과(불일치 0건) |
| 기간간 연속성(전기말=당기초, 120건 전수) | 통과(불일치 0건) |
| 요약(KPI) 합계 대사(거래처별 합계=전사 합계, 9개 기간) | 통과(차이 0) |
| 조회 조건 전달 — 회계연도·기간·거래처그룹·점검결과·검색 필터 · 정렬 · 총건수 표시 | 확인 |
| 표시 금지 검사 — 커스텀 프로그램ID·앱 식별자·출처 표현 | 0건 |
화면 렌더링 — 조회 버튼 위치 · sap_horizon 테마 · Enter 키 조회 · 서비스 미연결 시 안내 메시지 | 확인 |
모든 데이터는 검증용으로 구성한 가상 데이터입니다.
자주 묻는 질문
이 화면은 언제부터, 어떤 범위에 적용할 수 있나요?
매출채권 잔액과 매출 데이터가 원장에 기록되는 시점부터 바로 적용할 수 있으며, 별도의 기준서 시행일이나 경과규정과는 무관한 관리 목적의 조회·점검 도구입니다. 적용 범위는 매출채권을 운용하는 모든 거래처 및 기간입니다.
DSO 계산에 사용하는 기간일수 30일은 고정값인가요?
월별 조회 기준으로 30일을 사용합니다. 분기·연간 등 다른 기준일수가 필요하면 산출식 파라미터 조정이 필요하며, 이는 구현 옵션에 따라 달라질 수 있습니다.
목표 DSO 기준값은 어떻게 정해지나요?
거래처그룹(국내대형·국내중소·해외)별로 예시 기준값을 두었습니다. 실제 목표치는 회사의 여신정책과 산업 특성에 따라 조정되어야 하며, 화면의 기준값은 참고용입니다.
"점검필요"로 표시되면 바로 문제가 있다는 뜻인가요?
아닙니다. 이 화면은 회수기간 조회·점검 도구이며, "점검필요"는 목표 대비 편차가 기준을 넘었다는 신호일 뿐 회계적 판단이 아닙니다. 실제 회수 지연 사유 확인과 최종 판단은 회사와 감사인이 수행합니다.