SAP 채권채무 잔액확인서 — 보냈는가, 회신이 왔는가, 금액은 맞는가
거래처에 보낸 잔액확인서의 발송·회신 상태를 추적하고, 회신 잔액과 장부 잔액의 차이를 금액으로 확인하는 결산 지원 화면입니다.
결산 감사에서 잔액확인서는 증빙이 아니라 절차의 기록입니다. 보냈다는 사실, 회신이 왔다는 사실, 그리고 금액이 맞았다는 사실이 각각 남아야 합니다.
세 가지 중 하나라도 비면 감사에서 되돌아옵니다. SAP 표준 잔액확인서 구조를 그대로 이어받아 발송·회신·차이를 한 줄에 담아 진행 상태를 추적하도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면 3종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 계정유형 — 고객(D) · 공급업체(K) 구분(
KontoType)을 표준 분류대로 유지 - 기준일 — 잔액확인 기준일(
KeyDate)로 장부 잔액을 확정하는 표준 관점 - 장부 잔액 — 미결항목 합계로 산출한
BookBalance - 미결항목 — 전표번호 · 전기일 · 만기일 · 금액을 표준 필드 그대로
- 회사코드 마스터 —
T001기준 회사코드와 명칭
| 항목 | 내용 |
|---|---|
| 대응 T-code | F.17 (고객) · F.18 (공급업체) |
| 업무 영역 | 재무회계(FI) · 결산 · 감사 지원 |
| Namespace | zui5.balconfirm |
| 셸 구조 | 조회조건 영역(우측 조회·초기화) + 발송·회신 현황, 행 선택 시 미결항목 상세 |
| 화면 수 | 조회 화면 1개 + 미결항목 상세 |
| 데이터 | 확인서 58건 · 미결항목 191건 |
| 성격 | 조회형(Read-Only) — 발송과 전기는 표준 절차가 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 3종 둘러보기
회사코드·기준일·계정유형으로 조회하면 거래처별 발송·회신 상태가 나옵니다 → 미회신과 차이 발생 건을 먼저 가려내고 → 행을 눌러 장부 잔액을 만든 미결항목을 확인합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드와 기준일을 넣습니다. 기준일이 장부 잔액 확정 시점입니다.
- 계정유형으로 고객(채권)과 공급업체(채무)를 나눠 봅니다.
- 조회조건 입력필드에서 값을 바꾸거나 Enter 를 누르면 즉시 조회됩니다.
- 회신상태가 미회신인 건부터 봅니다. 재발송 대상이 여기서 나옵니다.
- 차이가 0이 아닌 건은 원인 확인 대상입니다. 분쟁 사유가 함께 표시됩니다.
- 행을 선택하면 미결항목 상세가 열려 장부 잔액의 근거를 확인할 수 있습니다.
- 결과는 CSV 다운로드로 내려받아 감사 조서에 첨부합니다.
차이 판정 규칙
확인서의 결론은 숫자 하나로 요약됩니다.
차이(Difference) = 회신잔액(ReplyBalance) − 장부잔액(BookBalance)
차이 = 0 → 일치 — 절차 종료
차이 ≠ 0 → 불일치 — 분쟁 사유 확인 후 조정
회신 없음 → 미회신 — 재발송 또는 대체 절차
차이를 금액으로 남기는 이유
일치·불일치만 표시하면 얼마나 벌어졌는지 모릅니다. 1천원 차이와 1억 차이는 같은 불일치라도 대응이 다릅니다. 금액을 그대로 두면 중요성 기준으로 걸러 낼 수 있어 감사에서 설명할 건이 줄어듭니다.
확인 절차 4단계
각 단계가 끝나야 다음으로 넘어갑니다. 어느 단계에서 멈췄는지가 곧 진행 상태입니다.
| 단계 | 내용 | 남는 기록 |
|---|---|---|
| ① 대상 선정 | 기준일 기준 미결 잔액이 있는 거래처 | 장부잔액 확정 |
| ② 발송 | EMAIL · 우편 등 발송 방법 기록 | 발송일 기록 |
| ③ 회신 | 거래처가 잔액을 확인해 회신 | 회신일 · 회신잔액 기록 |
| ④ 대사 | 회신잔액과 장부잔액 비교 | 차이 0 또는 분쟁 사유 기록 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
회사코드 Bukrs | 필수 | 대상 회사코드 |
기준일 KeyDate | 필수 | 잔액 확인 기준일 |
계정유형 KontoType | 필수 | D 고객 / K 공급업체 |
거래처 Konto | 선택 | 특정 거래처만 |
회신상태 ReplyStatus | 선택 | 미회신 / 회신완료 / 분쟁 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
| 회사코드 · 기준일 | 확인서 발송 단위 |
거래처 Konto · KontoText | 코드와 명칭 |
장부잔액 BookBalance | 기준일 기준 미결 합계 |
| 미결건수 · 연체건수 | 구성 건수와 그중 만기 경과 건수 |
발송방법 SendMethod · 발송일 SentDate | EMAIL · 우편 등 |
회신상태 ReplyStatus · 회신일 ReplyDate | 미회신 / 회신완료 / 분쟁 |
회신잔액 ReplyBalance | 거래처가 확인해 준 금액 |
차이 Difference | 회신잔액 − 장부잔액. 0이 아니면 경고 색 |
분쟁사유 DisputeReason | 차이 원인 |
담당자 ResponsibleUser | 확인 절차 담당 |
SAP 표준 기능 매핑
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
F.17 | 고객 잔액확인서 인쇄 | 발송 이후의 회신·차이까지 같은 화면에서 추적 |
F.18 | 공급업체 잔액확인서 인쇄 | 고객과 공급업체를 한 구조로 통합 |
BSID · BSIK | 고객 · 공급업체 미결 항목 | 장부잔액 산출 원천 |
KNA1 · LFA1 | 거래처 마스터 | 거래처 명칭 |
T001 | 회사코드 마스터 | 회사코드와 명칭 |
도입 시 확인이 필요한 부분
표준은 확인서를 인쇄하는 데까지가 범위이고, 회신 관리는 대개 별도 엑셀로 합니다. 회신 상태·회신잔액·분쟁사유를 어디에 저장할지(커스텀 테이블 또는 문서 관리 연계)를 먼저 정해야 이 화면이 실제 데이터로 돌아갑니다.
참고 CDS 뷰
@AbapCatalog.sqlViewName: 'ZCBALCONF'
@EndUserText.label: '잔액확인서 발송·회신 현황 (Z)'
define view Z_C_BALANCE_CONFIRM
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 Konto,
'D' as KontoType,
Customer.name1 as KontoText,
Item.waers,
// 장부잔액 = 기준일 기준 미결 합계
sum( Item.dmbtr ) as BookBalance,
count(*) as OpenItemCount,
sum( case when Item.zfbdt < :p_keydate then 1 else 0 end ) as OverdueItemCount
// 발송·회신 정보는 회신 관리 테이블과 조인하는 연장 뷰에서
}
group by Item.bukrs, Item.kunnr, Customer.name1, Item.waers
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경 설정과 릴리즈에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 현황 테이블 |
| 조회조건 | sap.m.Select · sap.m.DatePicker · sap.m.Input — 우측 끝에 조회·초기화 |
| 이벤트 | 모든 버튼이 onPAI 단일 진입점, fcCode 로 분기 |
| 현황 테이블 | sap.m.Table — 금액 우측정렬, popin 반응형 |
| 상태 표시 | sap.m.ObjectStatus — 회신상태와 차이 발생 |
| 상세 화면 | sap.m.Dialog — 미결항목 목록 |
미결건수와 연체건수를 함께 둔 이유
같은 잔액이라도 한 건으로 남은 것과 열 건이 쌓인 것은 회신 난이도가 다릅니다. 연체건수까지 보이면 회신이 늦어질 거래처를 미리 짐작할 수 있어, 발송 순서를 조정하는 데 씁니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.balconfirm) · ko 로케일 |
view/Main.view.xml | 조회조건과 현황 테이블 |
controller/Main.controller.js | 조회 · 차이 계산 · 상세 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise) |
js/formatter.js | 금액 · 일자 · 상태 색 포맷터 |
localdata/balconfirm.json | 확인서 58건 |
localdata/openitems.json | 미결항목 191건 |
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 차이 = 회신잔액 − 장부잔액 (전 건 재계산) | 통과 |
| 장부잔액 = 미결항목 금액 합계 | 통과 |
| 미결건수 · 연체건수 = 상세 재집계값 | 통과 |
| 회신완료 건은 회신일·회신잔액 존재 | 통과 |
| XML · JSON 전체 파싱 | 오류 0건 |
| 화면 렌더링 — 실브라우저 조회 → 상세 실동작 후 캡처 | 3/3 |
| 테마 런타임 확인 | sap_horizon |
자주 묻는 질문
회신이 오지 않으면 어떻게 하나요?
재발송이 기본이고, 그래도 회신이 없으면 대체 절차(거래 내역 대사, 후속 입금 확인)로 넘어갑니다. 미회신 상태와 발송일이 기록으로 남아 있어야 대체 절차의 근거가 됩니다.
차이가 나면 누가 맞나요?
대개 기준일 전후의 인식 시점 차이입니다. 우리는 12월 31일에 인식했는데 거래처는 1월 2일 입고로 잡은 경우가 흔합니다. 미결항목 상세에서 전표별 날짜를 대조하면 원인이 빠르게 잡힙니다.
고객과 공급업체를 한 화면에서 보나요?
계정유형으로 전환합니다. 구조가 같아 화면은 하나지만, 채권과 채무는 감사 관점이 달라 보통 따로 뽑아 조서에 넣습니다.
SAP 표준 기능과 어떻게 이어지나요?
확인서 인쇄는 F.17·F.18 이 담당합니다. 이 화면은 그 이후 단계인 회신 접수와 차이 대사를 같은 구조로 이어 붙여, 절차 전체가 한 화면에서 추적되게 하는 확장입니다.