SAP 신용블록 판매문서 현황 — 왜 이 주문이 막혔는지 숫자로 보기
여신한도를 넘겨 블록된 수주와 출고 문서가 쌓이면, 담당자는 매번 "얼마가 넘었고 언제부터 막혀 있나"를 다시 계산해야 합니다. 노출액 구성과 처리 이력을 한 화면에서 보여주는 화면입니다.
영업 담당자가 주문을 넣었는데 시스템이 막아버리면, 가장 먼저 나오는 질문은 늘 같습니다. "이게 왜 막혔죠?" 계정 담당자가 답하려면 여신한도와 지금까지 쌓인 노출액, 그리고 이 문서가 얼마를 더하는지를 한 번에 봐야 합니다. 그런데 이 숫자들은 서로 다른 화면과 마스터에 흩어져 있어 매번 다시 계산하게 됩니다.
SAP 표준 신용관리 데이터 구조를 그대로 이어받아, 블록된 문서마다 여신한도 · 기존 노출액 · 이 문서 순금액 · 총 노출액 · 한도소진율을 한 줄에 담고, 자동블록부터 해제·거부까지의 처리 이력을 상세에서 함께 보여주도록 OpenUI5 화면으로 확장했습니다. 실제 구동 화면 2종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 판매문서 원천 — 수주(
VBAK·VBAP)와 출고(LIKP) 헤더 구조를 그대로 사용 - 신용관리 마스터 — 여신한도와 노출액(
KNKK·KNKA) - 판매문서 상태 — 신용상태 코드(
VBUK-CMGST) - 체크규칙 — 정적/동적 한도체크, 최대미결기일 체크
- 릴리즈 실행 — 표준 트랜잭션 VKM1(리스트)·VKM3(수주 릴리즈)·VKM4(통합 릴리즈)
| 항목 | 내용 |
|---|---|
| 업무 영역 | 영업(SD) · 신용관리 |
| Namespace | zui5.creditblock |
| 셸 구조 | 조회조건 영역(우측 조회) + 신용블록 문서 목록, 노출액·이력 상세 Dialog |
| 화면 수 | 조회 화면 1개 + 상세 다이얼로그 |
| 대응 T-code | VKM1 · VKM3 · VKM4 (마스터 참조 FD32) |
| 성격 | 조회·검증형 — 블록 판정과 릴리즈 실행은 표준 트랜잭션이 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 2종 둘러보기
회사코드·기준일자·처리상태를 넣고 조회하면 블록 문서가 목록으로 뜹니다 → 문서를 골라 노출액 구성과 처리 이력을 확인합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드와 기준일자는 필수입니다. 기준일자는 블록경과일수를 계산하는 기준이 됩니다.
- 판매조직·고객·판매문서·문서유형·처리상태로 범위를 좁힙니다. 처리상태 기본값은 "블록중(미해제)"입니다.
- 조회조건 입력필드에서 Enter 를 눌러도 바로 재조회됩니다(한 번 조회한 뒤부터는 조건을 바꿀 때마다 자동 재조회). 조회·초기화 버튼은 조회조건 영역 오른쪽 끝에 있습니다.
- "한도초과 건만" 옵션을 켜면 총 노출액이 한도를 넘는 건만 남습니다.
- 목록의 행이나 상세 아이콘을 클릭하면 노출액 구성과 처리 이력을 담은 상세 다이얼로그가 열립니다.
- 목록과 상세 이력 모두 CSV 다운로드로 내려받습니다. UTF-8 BOM 이 붙어 엑셀에서 한글이 깨지지 않습니다.
노출액 산정 로직
SAP 신용관리는 문서 하나를 저장할 때마다 "이 문서가 반영되면 노출액이 얼마가 되는가"를 판단해 한도를 넘으면 그 문서를 블록합니다. 이 화면은 그 판정 결과를 사후에 재현해 담당자가 검토·릴리즈 우선순위를 잡을 수 있게 합니다.
| 산식 | 의미 |
|---|---|
총 노출액 = 기존 노출액 + 문서 순금액 | 이 문서가 반영되면 노출액이 얼마가 되는지 |
한도소진율 = 총 노출액 / 여신한도 × 100 | 한도를 몇 % 쓰고 있는지 |
한도초과금액 = max(0, 총 노출액 − 여신한도) | 한도를 넘긴 만큼 |
블록경과일수 = 기준일자 − 문서 생성일 | 블록중인 건만 계산, 해제·거부 건은 0 |
기존 노출액은 신용관리 마스터에 쌓이는 미결제 수주·미출고·미청구·미결제 금액의 누계입니다. 이 화면은 검증용 데이터로 문서별 스냅샷을 구성했고, 실제 서비스로 연결할 때는 참고 CDS 뷰(8절)의 노출액 항목으로 대체합니다.
블록 판정에서 해제까지, 처리 4단계
| 단계 | 내용 |
|---|---|
| ① 자동 블록 | 문서 저장 시점, 체크규칙(정적/동적/최대미결기일)에 따라 신용관리가 자동으로 문서를 잠급니다. |
| ② 여신 담당자 검토 | VKM1·VKM3 리스트에서 초과금액·경과일수·블록사유를 확인합니다. |
| ③ 릴리즈 판단 | 한도 상향, 선수금 확보 등으로 위험이 해소됐으면 해제, 그렇지 않으면 거부하여 영업담당에게 재협의를 요청합니다. |
| ④ 후속 처리 | 해제된 문서는 다음 단계(출고·청구)로 진행되고, 거부된 문서는 재작성되거나 취소됩니다. 두 결과 모두 처리 이력에 남습니다. |
이 네 단계 중 실제 판정과 릴리즈 실행은 표준 트랜잭션이 담당하고, 이 화면은 그 결과를 노출액 구성과 이력 관점으로 재구성해 보여줍니다.
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 회사코드 | 필수 | 대상 회사코드. 변경 시 판매조직 목록이 갱신됩니다. |
| 기준일자 | 필수 | 블록경과일수 계산 기준일 |
| 판매조직 | 선택 | 전체 또는 특정 조직 |
| 고객 | 선택 | 코드·명 부분일치 |
| 판매문서 | 선택 | 문서번호 부분일치 |
| 문서유형 | 선택 | 전체 · 표준수주 · 출고(배송) |
| 처리상태 | 선택 | 블록중(미해제) · 해제(승인) · 거부(반송) · 전체 |
| 한도초과 건만 | 선택 | 총 노출액이 한도를 넘는 건만 표시 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
| 판매문서 · 문서유형 | 블록된 수주 또는 출고문서 번호와 유형 |
| 고객 · 판매조직 | 거래처 코드·명, 판매조직명 |
| 생성일 · 작성자 | 문서 생성일과 작성자 |
| 문서 순금액 · 여신한도 | 우측정렬, 천단위 콤마 |
| 기존 노출액 · 총 노출액 | 이 문서 반영 전/후 노출액 |
| 한도소진율 · 한도초과금액 | 초과금액이 있으면 강조 표시 |
| 블록경과일 | 블록중인 건만 계산, 그 외 "-" |
| 신용그룹 · 블록사유 | 신용관리 그룹 구분과 블록 사유 텍스트 |
| 처리상태 · 정합성 | 블록중/해제/거부, 노출액 산식 검증 결과 |
SAP 표준 기능 매핑
표준 실행(VKM1·VKM3·VKM4)은 릴리즈 처리(승인·거부 액션)를 담당하고, 이 화면은 조회·검증 관점을 더해 확장합니다.
| 표준 기능 | 이 화면이 확장한 부분 |
|---|---|
| VKM1 (신용블록 문서 전체 리스트) | 회사·판매조직·고객·기준일자 조건을 조합해 조회하고, 한도소진율·초과금액을 자동 계산해 경과일수·초과금액 순으로 정렬 |
| VKM3 · VKM4 (수주/통합 릴리즈) | 릴리즈 화면은 아니지만, 릴리즈 담당자가 검토에 필요한 노출액 구성과 처리 이력을 한 다이얼로그에서 확인 |
| FD32 (고객 신용관리 마스터) | 여신한도를 조회 조건과 결과에 반영해 마스터 값을 벗어나지 않는지 즉시 대사 |
참고 CDS 뷰
운영 서비스로 연결할 때는 판매문서와 신용관리 마스터를 결합한 뷰로 서빙하는 구성을 제안합니다.
@AbapCatalog.sqlViewName: 'ZSDCREDITBLK'
define view Z_SD_CREDIT_BLOCK as select from vbak
association[0..1] to knkk as _Credit on _Credit.kunnr = vbak.kunnr
association[0..1] to vbuk as _Status on _Status.vbeln = vbak.vbeln
{
key vbak.vbeln,
vbak.kunnr,
vbak.netwr,
vbak.waerk,
_Credit.klimk,
_Credit.sauft as PriorExposure,
_Credit.sauft + vbak.netwr as TotalExposure,
_Status.cmgst as CreditStatus
}
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경의 신용관리 설정(체크규칙·신용그룹 범위)에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.f.DynamicPage — 조회조건 헤더 + 결과 그리드 |
| 조회조건 | sap.m.Select·Input·DatePicker·CheckBox — 우측 끝에 조회 버튼 |
| 결과 그리드 | sap.ui.table.Table — 컬럼 18개, 가상 스크롤 |
| 상세 | sap.m.Dialog + ObjectHeader + sap.m.Table(처리 이력) |
| 모델 | 업무데이터(mainModel)와 화면상태(viewModel)를 분리한 2-모델 구성 |
| 포맷 | 금액·비율·일자·처리상태·정합성 포맷터 |
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon · lodash · moment |
Component.js | 디바이스 모델 초기화 · 라우터 시작 |
manifest.json | 앱 디스크립터 — 앱 ID(zui5.creditblock) · ko 로케일 |
view/Main.view.xml · fragments/* | 조회조건 · 결과 그리드 · 상세 다이얼로그 |
controller/Main.controller.js | 노출액 집계 · 조회 · 상세 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise) |
model/formatter.js | 금액 · 비율 · 일자 · 상태 포맷 |
i18n/i18n_ko.properties | ko 로케일 리소스 |
localdata/*.json | 회사·판매조직 등 코드값, 블록 문서 42건, 처리 이력 67건 |
운영 전환 시에는 ModelMock 내부만 실제 서비스 호출로 바꾸면 화면과 집계 로직은 그대로 씁니다.
검증 결과
화면 구성에 쓴 데이터는 블록 문서 42건 · 처리 이력 67건이며, 총 노출액 합계 검증까지 포함해 전수 검증했습니다.
| 검증 항목 | 결과 |
|---|---|
| 총 노출액 = 기존 노출액 + 문서 순금액 (42건 전수) | 통과 |
| 블록경과일수는 처리상태가 블록중인 건만 0보다 큼 | 통과 |
| 해제·거부 이력의 처리일이 문서 생성일 이후 | 통과 |
| 조회 버튼이 조회조건 영역 오른쪽 끝에 위치 | 통과 |
| 적용 테마 sap_horizon 확인 | 통과 |
| Enter 키 입력으로 즉시 재조회 | 통과 |
| 화면 렌더링 — 실브라우저에서 조회 → 상세 실동작 후 캡처 | 2/2 |
거래처·금액·처리자는 모두 검증용 데이터입니다.
자주 묻는 질문
기존 노출액은 실제로 어디서 가져오나요?
표준에서는 고객 신용관리 마스터(KNKK)의 노출액 누계 항목입니다. 이 화면은 검증용 데이터로 문서별 스냅샷을 미리 구성했고, 실제 서비스로 연결할 때는 CDS 뷰로 그 값을 그대로 서빙합니다.
이 화면에서 블록을 직접 해제할 수 있나요?
아니요. 이 화면은 조회와 검증 전용입니다. 실제 해제·거부 액션은 표준 트랜잭션이 그대로 담당하고, 이 화면은 그 결과인 처리 이력을 보여줄 뿐입니다.
수주와 출고 블록을 왜 같은 화면에서 보나요?
신용관리는 문서 유형과 무관하게 노출액을 판단하기 때문에, 수주 단계에서 걸린 블록과 출고 단계에서 걸린 블록이 같은 고객 한도를 두고 경쟁합니다. 둘을 나눠 보면 그 고객의 전체 위험이 보이지 않아 하나의 화면에서 문서유형 조건으로만 구분합니다.
SAP 표준 기능과 어떻게 이어지나요?
블록 판정 자체는 표준 신용관리 로직이 하고, 릴리즈 실행도 표준 트랜잭션(VKM3·VKM4)이 담당합니다. 이 화면은 그 판정 결과를 노출액 구성과 처리 이력 관점으로 재구성해 담당자가 검토 우선순위를 빠르게 잡을 수 있도록 조회·검증 관점을 더한 것입니다.