SAP 미결전표 결재 현황 — 어느 단계에서 멈춰 있는가
결재 대기 중인 전표를 결재자와 단계별로 모아, 상신부터 승인까지 어디서 멈췄는지 확인하는 화면입니다.
전표를 올렸는데 반영이 안 됐다는 문의가 오면 확인할 것은 하나입니다. 지금 누구 앞에 놓여 있는가.
결재함은 결재자 본인만 볼 수 있어서, 재무 담당자가 전체 흐름을 보려면 여러 곳을 뒤져야 합니다. 표준 임시 전표와 결재 구조를 그대로 이어받아 단계와 대기자를 한 화면에 모으도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면 2종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 전표 키 — 전표번호(
docNo)와 회계연도(fiscalYear) - 전표유형 —
docType와 텍스트로 매출전표 등 구분 - 상신 정보 — 상신일(
submitDate)과 상신자(submitter) - 결재 상태 — 대기·승인·반려(
status)와 승인일 · 반려사유 - 전표 라인 — 계정 · 차대 · 금액을 표준 구조 그대로
| 항목 | 내용 |
|---|---|
| 대응 T-code | FBV3 (임시 전표 조회) · SBWP |
| 업무 영역 | 재무회계(FI) · 전표 결재 |
| Namespace | zui5.approval |
| 셸 구조 | 조회조건 영역(우측 조회·초기화) + 결재 현황, 행 선택 시 라인과 결재 단계 |
| 화면 수 | 조회 화면 1개 + 상세 |
| 데이터 | 결재 대상 34건 (라인·결재단계 포함) |
| 성격 | 조회형(Read-Only) — 결재와 전기는 표준·워크플로가 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 2종 둘러보기
회사코드·상태·결재자로 조회하면 결재 중인 전표가 모입니다 → 대기 일수가 긴 건을 가려내고 → 행을 눌러 전표 라인과 결재 단계를 확인합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드를 고르고 필요하면 전표유형으로 좁힙니다.
- 상태로 대기·승인·반려를 나눕니다. 보통 대기 건부터 봅니다.
- 결재자로 특정 담당자 앞에 쌓인 건을 확인할 수 있습니다.
- 조회조건 입력필드에서 값을 바꾸거나 Enter 를 누르면 즉시 조회됩니다.
- 상신일이 오래된 건부터 처리합니다. 결재가 막힌 지점입니다.
- 반려 건은 사유를 확인하고 재작성 여부를 정합니다.
- 행을 선택하면 전표 라인과 결재 단계 이력이 열립니다.
- 결과는 CSV 다운로드로 내려받습니다.
결재 단계 판정
상태와 단계를 함께 봐야 어디서 멈췄는지 알 수 있습니다.
대기 일수 = 오늘 − 상신일(submitDate)
PENDING → 대기 — 현재 결재자 확인
APPROVED → 승인 완료 (승인일 존재) → 전기 대상
REJECTED → 반려 (반려사유 존재) → 재작성 또는 폐기
결재 단계(approvalSteps) — 단계별 결재자와 처리 시각 이력
대기 일수를 보는 이유
결재 건수만 세면 "대기 12건" 으로 끝납니다. 그런데 오늘 올라온 12건과 2주째 묶인 12건은 전혀 다른 상황입니다. 대기 일수로 정렬하면 병목이 되는 결재자와 반복적으로 늦어지는 전표 유형이 드러납니다.
결재 흐름 4단계
| 단계 | 내용 | 남는 기록 |
|---|---|---|
| ① 작성 | 담당자가 전표를 임시 저장 | 임시 전표 생성 |
| ② 상신 | 결재 요청 | 상신일 · 상신자 기록 |
| ③ 결재 | 단계별 승인 또는 반려 | 단계 이력 누적 |
| ④ 전기 | 최종 승인 후 원장 반영 | 정식 전표 번호 |
④ 전에는 원장에 반영되지 않으므로, 결재가 멈추면 재무제표에도 잡히지 않습니다.
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
회사코드 bukrs | 필수 | 대상 회사코드 |
전표유형 docType | 선택 | 매출전표 등 |
상태 status | 선택 | 대기 / 승인 / 반려 |
결재자 approver | 선택 | 특정 결재자 앞의 건 |
상신자 submitter | 선택 | 작성 담당자 |
상신일 submitDate | 선택 | 기간 From~To |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
전표번호 docNo · 회계연도 fiscalYear | 전표 식별 |
회사코드 bukrs · bukrsText | 귀속 법인 |
전표유형 docType · docTypeText | 코드와 명칭 |
금액 amount · 통화 currency | 전표 총액 |
상신일 submitDate · 상신자 submitter | 결재 요청 정보 |
결재자 approver | 현재 결재 담당 |
상태 status | 대기 / 승인 / 반려. 상태 색 |
승인일 approvedDate | 승인 완료 시각 |
반려사유 rejectReason | 반려 시 사유 |
전표 라인 lines · 결재 단계 approvalSteps | 상세에서 확인 |
SAP 표준 기능 매핑
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
FBV3 | 임시 전표 조회 | 결재 상태와 단계를 함께 표시 |
FBV0 | 임시 전표 전기 | 승인 완료 건을 전기 대상으로 구분 |
SBWP | 업무 수신함 | 결재자 개인함을 전체 현황으로 확장 |
VBKPF · VBSEGS | 임시 전표 헤더와 라인 | 조회 원천 |
| 워크플로 로그 | 결재 단계 이력 | 단계별 처리 시각 표시 |
도입 시 확인이 필요한 부분
결재 워크플로가 SAP 내부인지 외부 전자결재 시스템인지에 따라 상태 원천이 달라집니다. 외부 시스템이면 상태를 받아 오는 인터페이스가 필요하고, 전표번호와 결재 문서번호의 매핑이 정확해야 합니다. 결재선이 금액 구간별로 달라지는 경우도 많아 단계 구성을 함께 확인합니다.
참고 CDS 뷰
@AbapCatalog.sqlViewName: 'ZCAPPROVAL'
@EndUserText.label: '미결전표 결재 현황 (Z)'
define view Z_C_DOCUMENT_APPROVAL
as select from vbkpf as ParkedDoc
left outer join t003t as DocType on ParkedDoc.blart = DocType.blart
and DocType.spras = 'K'
left outer join t001 as Comp on ParkedDoc.bukrs = Comp.bukrs
{
key ParkedDoc.bukrs,
key ParkedDoc.belnr as DocNo,
key ParkedDoc.gjahr as FiscalYear,
Comp.butxt as BukrsText,
ParkedDoc.blart as DocType,
DocType.ltext as DocTypeText,
ParkedDoc.bldat, ParkedDoc.budat,
ParkedDoc.usnam as Submitter,
ParkedDoc.cpudt as SubmitDate,
ParkedDoc.waers as Currency
// 결재자·상태·단계 이력은 워크플로 로그 또는 외부 결재 시스템과
// 조인하는 연장 뷰에서 결합
}
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경 설정과 릴리즈에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 결재 현황 테이블 |
| 조회조건 | sap.m.Select · sap.m.DatePicker · sap.m.Input — 우측 끝에 조회·초기화 |
| 이벤트 | 모든 버튼이 onPAI 단일 진입점, fcCode 로 분기 |
| 현황 테이블 | sap.m.Table — 상신·결재 정보를 인접 배치 |
| 상태 표시 | sap.m.ObjectStatus — 대기 / 승인 / 반려 |
| 상세 화면 | sap.m.Dialog — 전표 라인과 결재 단계 이력 |
결재 단계를 이력으로 보여 주는 이유
현재 결재자만 알면 "왜 늦어지는가" 에 답할 수 없습니다. 1단계는 하루 만에 넘어갔는데 2단계에서 닷새째 멈춰 있다는 사실이 보이면 문제 지점이 특정됩니다. 단계별 처리 시각을 남기면 결재선 자체를 개선할 근거가 됩니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.approval) · ko 로케일 |
view/Main.view.xml | 조회조건과 결재 현황 테이블 |
controller/Main.controller.js | 조회 · 대기일수 계산 · 상세 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise) |
js/formatter.js | 금액 · 일자 · 상태 색 포맷터 |
localdata/approval.json | 결재 대상 34건 |
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 전표 라인 차변 합계 = 대변 합계 (전 건) | 통과 |
| 전표 금액 = 라인 차변 합계 | 통과 |
| 승인 건은 승인일 존재 · 반려 건은 반려사유 존재 | 통과 |
| 결재 단계 이력이 시간순으로 정렬 | 통과 |
| 전표유형·회사코드 코드가 있으면 명칭도 존재 | 통과 |
| XML · JSON 전체 파싱 | 오류 0건 |
| 화면 렌더링 — 실브라우저 조회 → 상세 실동작 후 캡처 | 2/2 |
| 테마 런타임 확인 | sap_horizon |
자주 묻는 질문
결재 중인 전표도 재무제표에 잡히나요?
잡히지 않습니다. 임시 저장 상태라 원장에 반영되지 않습니다. 그래서 결산 전에 대기 건을 정리하지 않으면 해당 월 손익이 실제보다 적게 나옵니다.
반려된 전표는 어떻게 하나요?
사유를 확인해 수정 후 다시 상신하거나 폐기합니다. 폐기하지 않고 두면 임시 전표가 계속 쌓여 나중에 정리 대상이 됩니다.
결재자 앞에 쌓인 건을 어떻게 파악하나요?
결재자 조건으로 묶으면 그 담당자 앞의 전체 건이 나옵니다. 휴가나 부재 중인 결재자가 있으면 대리 지정이 필요한 시점을 알 수 있습니다.
SAP 표준 기능과 어떻게 이어지나요?
임시 전표는 표준이 저장하고 결재는 워크플로가 담당합니다. 이 화면은 결재자 개인 수신함에 흩어진 정보를 재무 담당자 관점에서 한 화면에 모으고, 단계별 지연을 드러내는 확장입니다.