SAP 선급비용 처리 — 미리 낸 돈을 달마다 나눠 비용으로
선급으로 잡아 둔 금액을 Assignment 단위로 관리하며 기간에 맞춰 일할 계산해 당월 비용으로 대체하는 화면입니다.
보험료를 1년치 한 번에 내면 그달 비용이 아닙니다. 열두 달로 나눠 매달 비용으로 잡아야 손익이 실제를 반영합니다.
문제는 계약마다 기간이 다르고 중간에 시작한 건도 있다는 점입니다. 일할로 계산해야 하는데 손으로 하면 놓치거나 틀립니다. Assignment 단위로 잔액을 관리하며 자동 계산하도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면 3종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 선급 전표 — 회계연도 · 전표번호 · 라인번호
- 날짜 — Posting Date · Doc. Date · Value date · Bline Date
- Assignment — 잔액 관리 단위 (연도 + 전표번호 + 라인번호)
- 금액 — Amount · 비용처리금액 · 미처리금액
- 계정 — 선급계정과 대체 비용계정
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 일반회계 · 결산 |
| Namespace | zui5.prepaid |
| 셸 구조 | 조회조건 영역(우측 조회) + 선급 대상 목록 + 확정 |
| 화면 수 | 조회·확정 화면 1개 + 상세 |
| 데이터 | 선급 라인과 대체 이력 |
| 성격 | 조회·처리형 — 확정·취소는 시뮬레이션 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 3종 둘러보기
회계연도·Posting Period 로 선급 대상을 조회하고 → 당월금액과 미처리금액을 확인한 뒤 → 선택 라인을 확정해 비용으로 대체합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드는 사양서에 따라 변경 불가입니다.
- 회계연도와 Posting Period 를 넣습니다. 기본값은 시스템 연도와 시스템 월 −1 입니다.
- 정리되지 않은 건만 표시를 켜면 미처리 잔액이 남은 건만 나옵니다.
- 조회 버튼은 조회조건 영역 오른쪽 끝에 있고, 입력필드에서 Enter 로도 조회됩니다.
- 당월금액을 확인합니다. 일할 계산 결과입니다.
- 종료월 표시가 있는 건은 미처리금액 전액이 대체됩니다.
- 전체선택 후 확정하면 비용으로 대체 기표됩니다.
- 잘못 기표한 건은 취소로 되돌립니다.
계산 규칙
Assignment 단위로 잔액을 관리하고 기간으로 나눕니다.
잔액 관리 단위 = Assignment (회계연도 + 전표번호 + 라인번호)
비용처리금액 = 선급계정 대변(H) 합계 (작업월 말일까지)
미처리금액 = Amount − 비용처리금액
당월금액
① Bline Date(ZFBDT)의 월 = 작업월 → 미처리금액 전액
② 그 외 → Amount × 작업월 일수 ÷ (ZFBDT − Value date)
②로 계산한 금액이 미처리금액을 넘지 않도록 한도 적용
①에 해당하는 건은 화면에서 "종료월"로 구분 표시
종료월에 잔액을 전액 털어 내는 이유
일할로 계산하면 마지막 달에 원 단위 잔액이 남습니다. 몇 원씩이지만 계약이 끝난 뒤에도 선급계정에 남아 있으면 정리되지 않은 건으로 계속 조회됩니다. 종료월에 미처리금액 전액을 대체하면 그 계약이 깨끗하게 닫힙니다.
선급비용 대체 계정
| 선급계정 (ORIGIN_ACC) | 대체 비용계정 (EXP_ACC) |
|---|---|
| 13030101 선급보험료 | 52050100 보험료 |
| 13030102 선급임차료 | 52060100 지급임차료 |
| 13030103 선급수수료 | 52040100 지급수수료 |
| 13030104 선급광고비 | 52110100 광고선전비 |
확정 시 전기일자는 작업월 말일, 전표유형은 CD 이며 비용계정 차변(40) + 선급계정 부분반제로 처리합니다.
조회조건
| 항목 | 필수 | 설명 |
|---|---|---|
| 회사코드 | 필수 | 사양서에 따라 변경 불가(읽기 전용) |
| 회계연도 | 필수 | 기본값 시스템 연도 |
| Posting Period | 필수 | 기본값 시스템 월 − 1 |
| 정리되지 않은 건만 표시 | 선택 | 미처리 잔액이 남은 건만 조회 (화면 확장) |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
| 회계연도 · 전표번호 · 라인번호 | Assignment 구성 |
| Posting Date · Doc. Date | 전기일 · 증빙일 |
| Doc type | 전표유형 |
| 계정코드 · 계정명 | 선급계정 |
| Assignment | 잔액 관리 단위 |
| Value date · Bline Date | 계약 시작 · 종료 기준 |
| Amount | 선급 총액 |
| 비용처리금액 | 이미 대체된 금액 |
| 미처리금액 | Amount − 비용처리금액 |
| 당월 전표번호 · 당월금액 | 기표 결과 |
| 대체 비용계정 · 코스트센터 | 대체 대상 (화면 확장) |
| 종료월 표시 | 전액 대체 대상 (화면 확장) |
SAP 표준 기능 매핑
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
FBL3N | G/L 개별항목 | 선급계정 잔액 |
ZFI_DOCUMENT_POSTING | 전표 생성 | 확정 기표 |
BSIS · BSEG | G/L 미결·전표 라인 | 조회 원천 |
F-32 | 반제 | 부분반제 처리 |
도입 시 확인이 필요한 부분
Value date 와 Bline Date 가 계약 기간을 정확히 담고 있어야 일할 계산이 맞습니다. 전기 시 이 두 날짜를 제대로 넣지 않으면 분모가 틀려 당월금액이 엉뚱하게 나옵니다. 선급 전표 입력 규칙을 먼저 정리해야 합니다.
참고 CDS 뷰
@AbapCatalog.sqlViewName: 'ZCPREPAID'
@EndUserText.label: '선급비용 처리 대상 (Z)'
define view Z_C_PREPAID_EXPENSE
as select from bsis as Item
left outer join skat as AcctText on Item.hkont = AcctText.saknr
and AcctText.spras = 'K'
{
key Item.bukrs,
key Item.gjahr,
key Item.belnr,
key Item.buzei,
Item.hkont as OriginAccount,
AcctText.txt50 as AccountName,
Item.zuonr as Assignment,
Item.budat as PostingDate,
Item.bldat as DocDate,
Item.blart as DocType,
Item.valut as ValueDate,
Item.zfbdt as BlineDate,
Item.dmbtr as Amount
// 비용처리금액 = 선급계정 대변 합계 (작업월 말일까지)
// 당월금액 = 종료월이면 미처리 전액, 아니면 일할 계산
}
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경 설정과 릴리즈에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 선급 목록 |
| 조회조건 | sap.m.Select · sap.m.DatePicker · sap.m.Input — 우측 끝에 조회·초기화 |
| 이벤트 | 모든 버튼이 onPAI 단일 진입점, fcCode 로 분기 |
| 선급 목록 | sap.ui.table.Table — 다중 선택, 전체선택 |
| 종료월 표시 | sap.m.ObjectStatus — 일반 / 종료월 |
| 확정 | 선택 라인 일괄 기표, 제외 건 안내 |
이미 기표된 건을 자동으로 제외하는 이유
전체선택 후 확정하면 편하지만, 이미 처리된 건이 섞여 있으면 이중 기표가 됩니다. 확정 시 기표된 건과 당월금액이 없는 건을 자동으로 빼고 몇 건이 빠졌는지 알려 주면 전체선택을 안심하고 쓸 수 있습니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.prepaid) · ko 로케일 |
view/Main.view.xml | 조회조건과 선급 목록 |
controller/Main.controller.js | 조회 · 일할 계산 · 확정 · 취소 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise) |
js/formatter.js | 금액 · 일자 · 상태 색 포맷터 |
localdata/prepaid.json | 선급 라인과 대체 이력 |
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 미처리금액 = Amount − 비용처리금액 (전 라인) | 통과 |
| 당월금액이 미처리금액을 넘지 않음 | 통과 |
| 종료월 건은 미처리금액 전액이 당월금액 | 통과 |
| Bline Date ≥ Value date | 통과 |
| 기표된 건은 확정 대상에서 자동 제외 | 통과 |
| 선급계정과 대체 비용계정 매핑 일치 | 통과 |
| 화면 렌더링 — 실브라우저 조회 → 확정 실동작 후 캡처 | 3/3 |
| 테마 런타임 확인 | sap_horizon |
자주 묻는 질문
왜 Assignment 로 잔액을 관리하나요?
한 계약이 여러 달에 걸쳐 부분 대체되기 때문입니다. 전표 라인 단위로 묶어야 얼마가 남았는지 정확히 추적됩니다.
중간에 계약이 해지되면요?
남은 미처리금액을 일시에 대체하거나 환급 처리합니다. 자동 계산으로는 잡히지 않으므로 수동으로 정리해야 합니다.
당월금액이 0인 건도 나오나요?
나옵니다. 계약이 아직 시작되지 않았거나 이미 전액 대체된 건입니다. 확정 시 자동으로 제외됩니다.
SAP 표준 기능과 어떻게 이어지나요?
선급 전기와 반제는 표준 FI 가 담당합니다. 이 화면은 기간 배분 계산과 월별 대체 기표를 자동화한 확장입니다.