SAP 지급보증서 관리 현황 — 수취와 발행, 두 방향의 보증을 한 화면에서
매입처로부터 받은 보증과 매출처에 내준 보증을 특별원장 G 기준으로 합쳐, 만기·실행·해지 상태를 기준일 하나로 판정합니다.
지급보증서는 SAP에서 특별원장 지시자(Special G/L Indicator) G로 관리되는 통계적 전기(Noted Item)입니다.
매입처(협력업체)가 계약이행·하자보수 의무를 다하지 못할 경우를 대비해 당사가 수취하는 보증(F-33)과,
당사가 발주처(고객)와의 계약이행을 보장하기 위해 발행 의뢰하는 보증(F-40)이 함께 존재하지만,
표준 FBL1N/FBL5N 특별원장 조회는 이 둘을 각각 거래처원장 단위로만 보여줄 뿐 만기·실행·해지 상태를 교차 비교하지는 않습니다.
여신한도 관리나 채권채무 잔액확인서, 받을어음 관리 화면과 인접해 보이지만, 그 화면들은 매출채권 자체의 회수 리스크를 다룹니다. 반면 이 화면은 담보 목적으로 수취·제공된 우발채무성 보증서의 만기 리스크를 다루므로 판정 대상과 산출 로직이 다릅니다. SAP 표준 특별원장 데이터 구조를 그대로 이어받아, 두 방향(수취/발행)의 보증을 하나의 목록으로 합치고 조회 기준일 대비 잔여일수를 계산해 만료임박·실행·해지 상태를 자동 판정하도록 OpenUI5 화면으로 확장한 것이 ZLFIA0075입니다. 실제 구동 화면 4종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 보증 등록 — 매입처(
F-33) · 매출처(F-40) 특별원장 통계적 전기 - 원천 데이터 — 매입처 라인아이템(
BSIK) · 매출처 라인아이템(BSID), 특별원장 지시자G - 조정계정 —
OBXR설정에 따른 특별원장 계정(HKONT) - 거래처 마스터 — 매입처(
LFA1) · 매출처(KNA1) - 조회 — 운영에서는
FBL1N/FBL5N으로 특별원장 G 건을 개별 조회
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 자금/여신 · 지급보증 관리 |
| Namespace | zui5.payguar |
| 셸 구조 | 조회조건 영역(우측 조회) + 요약 카드 + 지급보증 목록, 상세 Dialog |
| 화면 수 | 조회 화면 1개 + 상세 다이얼로그 |
| 기준 사양 | 620-1 프로그램 사양서 (지급보증서 관리) |
| 상세 추출 | ZFIA_GET_GUARANTEE_INFO |
| 성격 | 조회·검증형 — 보증 등록·실행·해지 전기는 표준 트랜잭션이 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 4종 둘러보기
조회조건 없이 초기 화면을 열고 → 회사코드·구분·기준일을 지정해 조회하면 요약 카드와 목록이 채워지고 → 거래처명 필드에서 Enter 키로도 즉시 조회되며 → 목록 행을 클릭하면 상세 다이얼로그가 열립니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드 · 구분(매입처/매출처) · 보증용도 · 상태 · 기준일 · 거래처명 중 필요한 조건을 지정합니다. 모두 비워두면(전체) 전체 보증서가 조회됩니다.
- [조회] 버튼을 클릭하거나, 기준일 또는 거래처명 필드에서 Enter 키를 누르면 즉시 조회됩니다. 조회·초기화 버튼은 조회조건 영역 오른쪽 끝에 있습니다.
- 목록은 잔여일수(D-day) 오름차순으로 정렬되어, 만료가 임박하거나 이미 지난 건이 최상단에 노출됩니다.
- 목록의 행을 클릭하면 해당 지급보증서의 상세 정보를 다이얼로그로 확인할 수 있습니다.
- [CSV 다운로드]로 현재 조회 결과를 UTF-8 BOM CSV 파일로 내려받습니다. 엑셀에서 한글이 깨지지 않습니다.
- [초기화]는 조회조건과 결과 목록을 모두 초기 상태로 되돌립니다.
지급보증 상태 판정 로직 — 해지·실행·만료·만료임박을 가르는 5단계 우선순위
표준 FBL1N/FBL5N은 특별원장 잔액과 전기일만 보여줄 뿐, "이 보증서가 지금 유효한지"는 사용자가 매번 직접 따져야 합니다. 이 화면은 조회조건의 기준일을 기준으로 아래 5단계 우선순위를 순서대로 평가해 상태를 자동 판정합니다. 여러 조건이 동시에 해당하는 경우(예: 해지된 건인데 마침 만료일도 지난 경우) 실무에서 가장 의미 있는 상태 하나만 남겨야 목록이 헷갈리지 않기 때문에 우선순위를 두었습니다.
1) 해지일이 존재하고 기준일 이전/당일이면 → [해지]
2) 그 외, 실행(청구)여부가 참이면 → [실행(청구)]
(실행된 보증은 만기 도래 여부와 무관하게 최우선 표시)
3) 그 외, 만료일이 기준일보다 이전이면 → [만료]
4) 그 외, 만료일까지 잔여일수가 30일 이내이면 → [만료임박]
5) 그 외(잔여일수 30일 초과) → [유효]
잔여일수 = 만료일 − 기준일 (일 단위, 음수 = 이미 경과)
요약 카드의 "매입처/매출처 보증잔액"은 해지·만료를 제외한 유효 + 만료임박 + 실행 상태 금액의 합계로, 아직 종결되지 않은 우발채무 노출액을 의미합니다. 이 판정 로직과 집계값은 검증용 데이터 80건을 별도 스크립트로 독립 재계산해 화면 표시값과 1건도 틀림없이 일치함을 확인했습니다(11절 참고).
조회 데이터 처리 4단계 — 조회부터 CSV 다운로드까지
- 원천 로드 — 매입처(BSIK) · 매출처(BSID) 특별원장 G 데이터와 보증마스터를 결합한 원천을 읽어옵니다.
- 필터링 — 회사코드/구분/보증용도/거래처명 조건으로 1차 필터링합니다. 거래처명은 거래처코드·거래처명 양쪽에 대해 부분일치로 검색합니다.
- 상태 판정 및 2차 필터링 — 1차 필터를 통과한 각 건에 3절의 판정 로직을 적용해 상태·잔여일수를 계산한 뒤, 상태 조건이 지정되어 있으면 2차로 필터링하고 잔여일수 오름차순으로 정렬합니다.
- 집계 및 다운로드 — 필터링된 목록으로 요약 카드(건수·금액·만료임박/실행/만료 카운트)를 재계산해 화면에 반영하고, 필요 시 같은 목록을 UTF-8 BOM CSV로 내려받습니다.
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 회사코드 | 선택 | 전체 / 1000 / 2000 |
| 구분 | 선택 | 전체 / 매입처(수취, F-33) / 매출처(발행, F-40) |
| 보증용도 | 선택 | 전체 / 선급금 지급보증 / 계약이행보증(구매·수주) / 하자보수보증(구매·수주) / 입찰보증(금대체)(구매·수주) / 선수금환급보증 |
| 상태 | 선택 | 전체 / 유효 / 만료임박(30일 이내) / 만료 / 실행(청구) / 해지 |
| 기준일 | 필수 | 상태·잔여일수 판정 기준일. 변경 시 Enter 키로도 즉시 조회됩니다. |
| 거래처명 | 선택 | 거래처명 또는 거래처코드 부분일치 검색. Enter 키로 즉시 조회됩니다. |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
| 보증관리번호 | 화면 관리번호(연도+일련번호) |
| 구분 | 매입처(수취) / 매출처(발행) |
| 회사코드 | 1000 / 2000 |
| 거래처 | 거래처명(거래처코드) |
| 보증금액 | 보증서 액면금액, 우측정렬 천단위 콤마 |
| 보증기관 | 보증서 발행은행 |
| 보증용도 | 계약이행/하자보수/선급금/입찰/선수금환급 등 |
| 발행일 · 만료일 | YYYY.MM.DD 형식 |
| 잔여일수(D-day) | 만료일 − 기준일(파생값), 음수면 경과 표시 |
| 은행보증서번호 | 발행은행이 부여한 보증서 고유번호 |
| 상태 | 3절 판정 로직 결과(유효/만료임박/만료/실행/해지 신호등) |
결과 컬럼이 10개를 넘어 스크롤·컬럼폭 고정을 지원하는 sap.ui.table.Table을 사용했습니다.
상세 다이얼로그처럼 소량 항목만 보여줄 때는 sap.m.Table을 그대로 사용했습니다.
SAP 표준 기능 매핑
이 화면은 보증 등록이나 전기를 대체하지 않습니다. 보증은 표준 트랜잭션(F-33/F-40)이 전기하고, 운영에서는 FBL1N/FBL5N으로 특별원장을 조회합니다. 이 화면은 그 데이터를 만기 리스크 관점에서 재배열해 조회·검증하는 확장 구성입니다.
| T-code · 테이블 | 역할 |
|---|---|
F-33 | 매입처 지급보증 등록(특별원장 G, 통계적 전기) |
F-40 | 매출처 지급보증 등록(특별원장 G, 통계적 전기) |
FBL1N · FBL5N | 특별원장 G 라인아이템 조회(매입처/매출처) |
OBXR | 특별원장 지시자별 조정계정(HKONT) 설정 |
BSIK · BSID | 매입처/매출처 라인아이템 — 회사코드·조정계정·전표번호·금액 |
LFA1 · KNA1 | 매입처/매출처 마스터 |
도입 시 확인이 필요한 부분
보증기관명·은행보증서번호·보증용도·만료일 같은 보증서 고유 속성은 표준 특별원장 라인아이템에 없으므로, 전표번호(BELNR/GJAHR)로 연결되는 별도 보증마스터 테이블이 필요합니다. 만료임박 기준일수(30일)와 보증용도 분류 체계는 회사 내규에 맞춰 조정합니다.
참고 CDS 뷰
운영 서비스로 연결할 때는 특별원장 라인아이템과 보증마스터를 전표번호로 묶은 뷰로 서빙하는 구성을 제안합니다.
@AbapCatalog.sqlViewName: 'ZFICPAYGUARV'
@EndUserText.label: '지급보증서 통합 조회 (특별원장 G + 보증마스터)'
define view ZFIC_I_PayGuarantee
as select from bsik as VendorGl
inner join zfit_guarantee as Guar
on VendorGl.belnr = Guar.belnr
and VendorGl.gjahr = Guar.gjahr
and VendorGl.bukrs = Guar.bukrs
{
key VendorGl.bukrs,
key VendorGl.belnr,
key VendorGl.gjahr,
'VENDOR' as GuarType,
VendorGl.lifnr as PartnerId,
VendorGl.hkont as ReconAccount,
VendorGl.umskz as SpGlIndicator, // 'G' 지급보증
VendorGl.dmbtr as Amount,
Guar.bank_name,
Guar.guar_no,
Guar.purpose,
Guar.issue_date,
Guar.expiry_date,
Guar.util_flag,
Guar.cancel_date
}
union all
select from bsid as CustomerGl
inner join zfit_guarantee as Guar
on CustomerGl.belnr = Guar.belnr
and CustomerGl.gjahr = Guar.gjahr
and CustomerGl.bukrs = Guar.bukrs
{
key CustomerGl.bukrs,
key CustomerGl.belnr,
key CustomerGl.gjahr,
'CUSTOMER' as GuarType,
CustomerGl.kunnr as PartnerId,
CustomerGl.hkont as ReconAccount,
CustomerGl.umskz as SpGlIndicator,
CustomerGl.dmbtr as Amount,
Guar.bank_name,
Guar.guar_no,
Guar.purpose,
Guar.issue_date,
Guar.expiry_date,
Guar.util_flag,
Guar.cancel_date
}
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경의 보증마스터 테이블 구조와 만료임박 기준일수에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.f.DynamicPage — title + header(검색폼 + 메시지스트립) + content(요약카드 + 결과표), footer 미사용 |
| 조회조건 | sap.ui.layout.form.Form + Select/DatePicker/Input — 조회조건 영역 오른쪽 끝에 조회 버튼 |
| 결과 표 | sap.ui.table.Table — 12컬럼, visibleRowCountMode=Auto |
| 요약 카드 | sap.m.FlexBox + ObjectNumber/ObjectStatus |
| 상세보기 | sap.m.Dialog + 3단 SimpleForm, Fragment.load 로 지연 생성 |
| CSV 다운로드 | BaseController 공통 함수(UTF-8 BOM) |
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon · lodash · moment |
Component.js | 디바이스 모델 · ErrorHandler 초기화 |
manifest.json | 앱 디스크립터 — zui5.payguar · ko 로케일 |
view/Main.view.xml | 조회 화면(DynamicPage) 골격 |
view/fragments/ | 타이틀 · 메시지스트립 · 조회조건 · 결과표 · 상세다이얼로그 |
controller/Main.controller.js | 조회 · 상태 판정 · 집계 · CSV · 상세다이얼로그 |
model/ModelMock.js | localdata JSON 읽기(Promise) |
js/formatter.js | 상태 · 일자 · 잔여일수 포맷 |
i18n/i18n_ko.properties | ko 로케일 리소스 |
localdata/guarantees.json | 지급보증 검증용 데이터 80건 |
검증 결과
화면 구성에 쓴 데이터는 지급보증 80건(매입처 42건 · 매출처 38건)이며, 만료임박 11건 · 실행(청구) 13건 · 만료 15건 · 해지 8건 · 유효 33건으로 상태 합계가 정확히 80건과 일치합니다.
| 검증 항목 | 결과 |
|---|---|
| XML/JSON 전체 파싱 (8개 뷰/프래그먼트, 2개 JSON) | 통과 |
| 앱 폴더 전 리소스 HTTP 200 (23개 파일) | 통과 |
| i18n 키 누락 0건 (사용 68 / 정의 81) | 통과 |
| 이벤트 핸들러(조회·초기화·다운로드·상세·닫기) 실동작 | 통과 |
| 집계로직 독립 재계산 — 매입처잔액 4,880,000,000 / 매출처잔액 4,590,000,000 / 만료임박 11 / 실행 13 / 만료 15, 화면 표시값과 일치 | 통과 |
| 조회 버튼 위치 — 조회조건 영역 오른쪽 끝(하단 Bar/Footer 미사용) | 통과 |
| Enter 키 조회 — 거래처명/기준일 필드 | 통과 |
| 적용 테마 — sap_horizon (부트스트랩 지정 및 런타임 값 일치) | 통과 |
| CSV 다운로드 — UTF-8 BOM, 81줄(헤더+80건) | 통과 |
| 화면 렌더링 — 실브라우저에서 조회 → 상세다이얼로그 실동작 후 캡처 | 4/4 |
거래처 · 금액 · 보증기관은 모두 검증용 데이터입니다.
자주 묻는 질문
매입처 보증과 매출처 보증을 왜 한 화면에서 같이 보나요?
둘 다 특별원장 지시자 G로 관리되는 우발채무성 보증이라는 점은 같지만, 표준 FBL1N/FBL5N은 거래처원장 단위로만 조회되어 두 방향을 나란히 비교하기 어렵습니다. 실무에서는 만기가 임박한 보증이 매입처 쪽인지 매출처 쪽인지를 한 번에 파악해야 하므로, 이 화면은 두 방향을 하나의 목록으로 합치고 잔여일수 기준으로 정렬합니다.
잔여일수(D-day)가 음수로 나오는 것은 오류인가요?
아닙니다. 만료일이 기준일보다 이전이면 잔여일수는 음수로 표시되며, 이는 이미 만료되어 경과한 일수를 의미하는 정상적인 표시입니다.
실행(청구)된 보증서인데 만료일이 남아 있으면 상태가 어떻게 표시되나요?
만기 도래 여부와 무관하게 [실행(청구)] 상태로 표시됩니다. 실행된 보증은 이미 우발채무가 현실화된 것이므로, 판정 우선순위에서 만료·만료임박보다 앞에 둡니다.
SAP 표준 기능과 어떻게 이어지나요?
보증 등록(F-33/F-40)과 특별원장 조회(FBL1N/FBL5N)는 표준 트랜잭션이 그대로 담당합니다. 이 화면은 그 데이터를 만기 리스크 관점에서 재배열해 조회·검증하는 확장 화면이며, 표준 전기·회계처리 로직을 대체하지 않습니다.