SAP 현금할인 실현율 분석 — 놓친 할인은 얼마인가
지급조건별 현금할인 가능액과 실제 실현액을 비교해, 할인 기한을 넘겨 사라진 금액과 실현율을 계산하는 화면입니다.
현금할인은 놓쳐도 아무 일이 일어나지 않습니다. 전표에 오류가 뜨지도 않고 결산이 막히지도 않습니다. 그저 받을 수 있었던 돈이 조용히 사라질 뿐입니다.
그래서 이 금액은 따로 세어 보지 않으면 보이지 않습니다. SAP 표준 지급조건 구조를 그대로 이어받아 할인 가능액과 실제 실현액을 비교해 상실액과 실현율로 보여 주도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면 2종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 지급조건 — 조건 코드(
ZtermCode)와 텍스트, 할인율(DiscRatePct) - 할인 기한 — 할인 마감일(
SkontoFristD)과 순지급기일(FaelD) - 할인 기준액 — 할인 대상 금액(
Skfbt) - 실현액 — 실제로 적용된 할인액(
Wskto)과 반제일(Augdt) - 벤더 · 전표 — 공급업체 코드·명칭과 전표번호·회계연도·전기일
| 항목 | 내용 |
|---|---|
| 기반 T-code | FBL1N (공급업체 개별항목) |
| 업무 영역 | 재무회계(FI-AP) · 지급 효율 관리 |
| Namespace | zui5.cashdisc |
| 셸 구조 | 조회조건 영역(우측 조회·초기화) + 할인 분석 테이블 |
| 화면 수 | 조회 화면 1개 |
| 데이터 | 할인 분석 169건 · 지급조건 5건 |
| 성격 | 조회형(Read-Only) — 지급과 반제는 표준 트랜잭션이 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 2종 둘러보기
회사코드·벤더·지급조건으로 조회하면 전표별 할인 가능액과 실현액이 나옵니다 → 상실액이 큰 건과 조건을 추려 보고 → 실현율로 지급 프로세스가 제때 돌고 있는지 판단합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드와 조회 기간을 넣습니다.
- 벤더와 지급조건으로 좁힙니다. 조건별로 실현율이 크게 갈리는 경우가 많습니다.
- 조회조건 입력필드에서 값을 바꾸거나 Enter 를 누르면 즉시 조회됩니다.
- 상실액이 있는 건을 먼저 봅니다. 할인 기한과 반제일을 비교하면 며칠 늦었는지 드러납니다.
- 실현율로 전체 상황을 봅니다. 낮으면 지급 프로세스 자체를 점검할 시점입니다.
- 결과는 CSV 다운로드로 내려받습니다.
실현율과 상실액 산식
세 숫자로 정리됩니다. 받을 수 있었던 것, 실제로 받은 것, 그 차이입니다.
할인 가능액(DiscAvail) = 할인 기준액(Skfbt) × 할인율(DiscRatePct)
실현액(Wskto) = 실제 적용된 할인액
상실액 = 할인 가능액 − 실현액
실현율 = 실현액 ÷ 할인 가능액 × 100
반제일(Augdt) ≤ 할인 마감일(SkontoFristD) → 실현
반제일 > 할인 마감일 또는 미반제 → 상실
상실액을 금액으로 환산하는 이유
"할인 기한을 자주 놓친다" 는 말로는 개선이 시작되지 않습니다. 3% 할인 조건에서 며칠 늦어 놓친 금액을 합산하면 연간 수천만 원이 되기도 합니다. 금액으로 보이면 지급 승인 일정을 앞당기는 논의가 구체적으로 됩니다.
할인을 놓치는 세 가지 경로
| 경로 | 상황 | 개선 방향 |
|---|---|---|
| 송장 등록 지연 | 송장이 늦게 들어와 할인 기한이 이미 지남 | 구매·검수 리드타임 단축 |
| 승인 지연 | 지급 승인이 기한 안에 끝나지 않음 | 승인 일정을 할인 기한에 맞춤 |
| 지급 주기 불일치 | 지급 실행일이 주 1회라 기한을 넘김 | 할인 건은 별도 지급 회차로 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
회사코드 Bukrs | 필수 | 대상 회사코드 |
기간 Budat | 필수 | 전기일 From~To |
벤더 Lifnr | 선택 | 공급업체 코드·명칭 |
지급조건 ZtermCode | 선택 | ZB01 즉시현금 · ZB04 10일 3% / 45일 순지급 등 |
| 상태 | 선택 | 전체 / 실현 / 상실 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
벤더 Lifnr · LifnrName | 코드와 명칭 |
전표번호 Belnr · 연도 Gjahr | 대상 전표 |
전기일 Budat | 채무 인식일 |
지급조건 ZtermCode · ZtermText | 조건 코드와 설명 |
할인율 DiscRatePct | 조건에 정의된 할인율 |
할인 마감일 SkontoFristD | 이 날까지 지급해야 할인 적용 |
순지급기일 FaelD | 할인 없이 지급해야 하는 기한 |
금액 Wrbtr · 할인기준액 Skfbt | 전표 금액과 할인 대상액 |
할인 가능액 DiscAvail | 기준액 × 할인율 |
실현액 Wskto | 실제 적용된 할인 |
| 상실액 | 가능액 − 실현액. 0이 아니면 경고 색 |
반제일 Augdt · 상태 Status | 지급 완료일과 처리 상태 |
SAP 표준 기능 매핑
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
FBL1N | 공급업체 개별항목 조회 | 할인 가능액·실현액·상실액을 계산해 열로 추가 |
OBB8 | 지급조건 설정 | 조건별 할인율과 기한을 읽어 가능액 산출 |
F110 | 자동 지급 | 지급 실행 결과가 실현 여부로 반영 |
BSIK · BSAK | 공급업체 미결 · 반제 항목 | 분석 원천 |
LFA1 | 공급업체 마스터 | 벤더 명칭 |
도입 시 확인이 필요한 부분
할인 기준액이 총액인지 순액인지가 회사마다 다릅니다. 세액을 제외한 공급가액 기준으로 계산하는 곳이 많고, 이 설정에 따라 가능액이 달라집니다. 또 다단계 할인 조건(10일 3% · 20일 2% · 45일 순지급)을 쓰면 어느 단계를 기준으로 상실을 판정할지 정해야 합니다.
참고 CDS 뷰
@AbapCatalog.sqlViewName: 'ZCCASHDISC'
@EndUserText.label: '현금할인 실현 분석 (Z)'
define view Z_C_CASH_DISCOUNT
as select from bsak as Item
inner join lfa1 as Vendor on Item.lifnr = Vendor.lifnr
left outer join t052 as Terms on Item.zterm = Terms.zterm
{
key Item.bukrs, key Item.belnr, key Item.gjahr, key Item.buzei,
Item.lifnr, Vendor.name1 as LifnrName,
Item.budat,
Item.zterm as ZtermCode,
Terms.zprz1 as DiscRatePct,
Item.skfbt as Skfbt,
Item.wrbtr as Wrbtr,
Item.wskto as Wskto,
Item.augdt as Augdt,
// 할인 가능액 = 할인 기준액 × 할인율
cast( Item.skfbt * Terms.zprz1 / 100 as abap.curr(15,2) ) as DiscAvail,
// 상실액 = 가능액 − 실현액 (소비 뷰에서 계산)
Item.zbd1t as DiscDays
}
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경 설정과 릴리즈에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 할인 분석 테이블 |
| 조회조건 | sap.m.Select · sap.m.DatePicker · sap.m.Input — 우측 끝에 조회·초기화 |
| 이벤트 | 모든 버튼이 onPAI 단일 진입점, fcCode 로 분기 |
| 분석 테이블 | sap.m.Table — 금액 우측정렬, popin 반응형 |
| 상태 표시 | sap.m.ObjectStatus — 실현 / 상실 |
| 요약 | 실현율과 상실액 합계를 상단에 표시 |
기한과 반제일을 인접 배치한 이유
상실 여부는 두 날짜의 비교입니다. 할인 마감일과 반제일이 멀리 떨어져 있으면 왜 상실됐는지 확인하려고 눈이 오갑니다. 붙여 두면 "3일 늦었다" 가 한눈에 보이고, 며칠만 앞당기면 되는지도 바로 나옵니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.cashdisc) · ko 로케일 |
view/Main.view.xml | 조회조건과 할인 분석 테이블 |
controller/Main.controller.js | 조회 · 가능액·실현율 계산 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise) |
js/formatter.js | 금액 · 일자 · 비율 · 상태 색 포맷터 |
localdata/cashdiscdata.json | 할인 분석 169건 |
localdata/termsdata.json | 지급조건 5건 |
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 할인 가능액 = 할인 기준액 × 할인율 (전 건) | 통과 |
| 상실액 = 가능액 − 실현액 | 통과 |
| 실현율 = 실현액 ÷ 가능액 × 100 | 통과 |
| 반제일 ≤ 할인 마감일인 건만 실현으로 판정 | 통과 |
| 지급조건 코드와 할인율·기한 정합 | 통과 |
| XML · JSON 전체 파싱 | 오류 0건 |
| 화면 렌더링 — 실브라우저 조회 후 캡처 | 2/2 |
| 테마 런타임 확인 | sap_horizon |
자주 묻는 질문
할인 기준액은 총액인가요 공급가액인가요?
설정에 따라 다릅니다. 세액을 제외한 공급가액 기준이 일반적이며, 이 설정이 가능액 계산을 좌우하므로 도입 시 먼저 확인해야 합니다.
다단계 할인 조건은 어떻게 처리하나요?
10일 3% · 20일 2% 처럼 여러 단계가 있으면 지급 시점에 해당하는 단계가 적용됩니다. 상실 판정은 최상위 단계(가장 높은 할인율)를 기준으로 볼지, 실제 적용 가능했던 단계로 볼지 정해야 합니다.
실현율이 낮으면 무엇을 봐야 하나요?
송장이 늦게 들어오는지, 승인이 늦는지, 지급 주기가 기한과 안 맞는지 세 가지를 순서대로 봅니다. 대개 하나가 병목이고, 그 지점만 며칠 당겨도 실현율이 크게 올라갑니다.
SAP 표준 기능과 어떻게 이어지나요?
지급조건과 할인은 표준 설정에 정의돼 있고 실현 여부는 반제 결과로 남습니다. 이 화면은 두 정보를 맞춰 받을 수 있었던 금액과 실제 받은 금액의 차이를 금액으로 보여 주는 확장입니다.