SAP 청구서 회계전기 보류 현황 — 청구서는 만들어졌는데 왜 회계에는 안 잡히나
청구서는 이미 만들어졌는데, 회계 장부에는 아직 한 줄도 안 잡혀 있습니다. 계정결정 오류부터 여신초과, 환율 미고시까지 — 보류사유별로 얼마나 급한지를 가려 보여주는 화면입니다.
영업에서 청구서를 발행해도, 회계 장부에 그 금액이 바로 잡히는 것은 아닙니다. 계정결정 오류·여신한도 초과·환율 미고시·손익센터 미지정
같은 사유로 회계(FI) 전기가 자동으로 이루어지지 못하고 멈추는 경우가 있기 때문입니다. 이 상태에서는 매출채권과 매출이 장부에 반영되지 않으므로,
담당자가 VFX3에서 보류 건을 주기적으로 확인하고 원인을 해소해 재전기해야 합니다.
이미 다룬 "신용블록 판매문서 현황"이 수주·출고 단계에서 여신한도 초과로 막히는 문서를, "반품/크레딧메모 처리 현황"이 반품 접수부터 크레딧메모 발행까지의 흐름 지연을 다뤘다면, 이 화면은 그 두 지점을 지난 뒤 청구서는 이미 만들어졌는데 회계전표로 넘어가지 못하고 멈춘 세 번째 지점을 다룬다는 점에서 다릅니다. 같은 "보류"라는 말을 쓰지만 막히는 시점과 담당 부서가 다릅니다. SAP 표준 청구서 데이터 구조를 그대로 이어받아 보류사유별 임계일로 지연 여부를 가리고, 재전기 시도 이력까지 드릴다운하도록 OpenUI5 화면으로 확장했습니다. 실제 구동 화면 2종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 청구서 원천 — 헤더(
VBRK)와 품목(VBRP) 구조를 그대로 사용 - 전기상태 —
VBRK-RFBSK(회계전기 상태 코드)를 앱 표시용 4단계 상태로 재분류 - 재전기 실행 — 표준 트랜잭션
VFX3(전기보류 청구서 릴리스) - 고객 마스터 —
KNA1 - 회계문서 — 전기 성공 시
BKPF문서번호(BELNR) 생성
| 항목 | 내용 |
|---|---|
| 업무 영역 | 영업(SD) · 회계전기 보류 |
| Namespace | zui5.billrel |
| 셸 구조 | 조회조건 영역(우측 조회) + 청구서 목록, 품목·재전기이력 상세 Dialog |
| 화면 수 | 조회 화면 1개 + 상세 다이얼로그 |
| 대응 T-code | VFX3 (전기보류 청구서 릴리스/조회) |
| 성격 | 조회·판정형 — 보류 판단과 재전기 실행은 표준 트랜잭션이 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 2종 둘러보기
영업조직·보류사유·고객·청구일 범위를 넣고 조회하면 보류 청구서가 목록으로 뜹니다 → 청구서를 골라 품목 구성과 재전기 시도 이력을 확인합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 영업조직·보류사유·고객(코드/명)·청구일 범위·처리상태를 지정합니다. 아무 것도 입력하지 않으면 전체 대상으로 조회됩니다.
- 조회 버튼을 누르거나, 어느 입력 필드에서든 Enter 키를 누르면 바로 조회됩니다(콤보박스는 선택 즉시 재조회).
- 결과는 처리상태 우선순위(지연→보류중→취소→전기완료)와 청구일 순으로 정렬됩니다. 지연 건이 있으면 메시지스트립이 경고색으로 바뀝니다.
- 행의 상세 버튼을 누르면 품목 구성, 재전기 시도 이력, 산출근거를 담은 다이얼로그가 열립니다.
- 조회 결과는 CSV 다운로드로 내려받습니다. UTF-8 BOM 이 붙어 엑셀에서 한글이 깨지지 않습니다.
보류사유별 임계일 차등 판정 로직
보류사유마다 원인을 해소하는 데 걸리는 통상 기간이 다릅니다. 환율은 다음 영업일이면 대부분 고시되지만, 여신한도 초과는 담당자 승인까지 며칠이 걸립니다. 그래서 하나의 고정된 임계일을 쓰는 대신, 보류사유 마스터에 사유별 임계일을 정의해두고 경과일수가 그 임계일을 넘겼는지로 지연 여부를 가립니다.
| 보류사유 | 임계일 | 사유 |
|---|---|---|
| 환율 미고시 | 1일 | 환율은 익영업일이면 대부분 고시되므로 임계일이 가장 짧습니다 |
| 계정결정 오류 | 3일 | 계정결정 설정 보완은 회계팀 조치가 필요하나 비교적 단기간에 해결됩니다 |
| 손익센터/원가요소 미지정 | 3일 | 관리회계 담당의 원가귀속 확정이 필요해 계정결정과 비슷한 기간을 둡니다 |
| 여신한도 초과 | 5일 | 여신 담당자의 승인 프로세스를 거쳐야 해 더 긴 기간을 허용합니다 |
| 수동 보류 | 7일 | 담당자 검토 대기 사유로, 사유가 다양해 가장 긴 임계일을 둡니다 |
판정 결과는 지연·보류중·전기완료·취소 네 가지 상태로 표시되며, 취소 건은 지연 판정 대상에서 제외됩니다. 전기가 완료된 건도 청구일부터 전기일까지 걸린 기간이 임계일을 넘겼는지를 참고로 남겨, 어느 사유가 실제로 시간을 더 잡아먹는지 사후에 돌아볼 수 있습니다.
전기보류 처리 4단계
| 단계 | 내용 |
|---|---|
| ① 청구서 생성 및 전기 시도 | 청구서를 생성하면 시스템이 계정결정·여신·환율을 자동 점검합니다. 하나라도 실패하면 전기상태가 "오류"로 남고 회계문서는 생성되지 않습니다. |
| ② 보류 목록 확인 및 배정 | 회계/영업 담당자가 VFX3에서 보류 건을 사유별로 확인하고, 사유에 맞는 담당자에게 배정합니다. |
| ③ 원인 수정 및 재전기 시도 | 계정결정 재설정, 환율 고시, 여신 한도 승인 등으로 원인을 해소한 뒤 재전기를 시도합니다. 한 번에 해결되지 않으면 시도가 여러 차례 쌓입니다. |
| ④ 전기 완료 및 반영 | 재전기가 성공하면 회계문서가 생성되고, 그 시점부터 매출채권·매출이 장부에 반영됩니다. |
이 네 단계 중 실제 판정과 재전기 실행은 표준 트랜잭션이 담당하고, 이 화면은 그 결과를 사유별 임계일과 시도 이력 관점으로 재구성해 보여줍니다.
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 영업조직 | 선택 | 전체 또는 특정 조직 |
| 보류사유 | 선택 | 계정결정오류·여신초과·환율미고시·손익센터미지정·수동보류 중 선택 |
| 고객(코드/명) | 선택 | 코드 또는 명칭 부분일치 |
| 처리상태 | 선택 | 지연·보류중·전기완료·취소 — 파생 판정값 기준 필터 |
| 청구일(부터/까지) | 선택 | 범위 조회 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
| 청구서번호 · 유형 | F2 청구서, G2 크레딧메모, L2 차변메모 |
| 고객코드 · 고객명 · 영업조직 | |
| 청구일 · 청구금액(통화) | 수출영업소는 USD 비중이 높습니다 |
| 보류사유 | 사유 마스터 매핑 텍스트 |
| 경과일수 | 완료건은 전기일까지, 취소건은 취소일까지 계산 |
| 처리상태 | 지연·보류중·전기완료·취소 — 위 판정 로직 결과 |
| 회계문서번호 | 전기완료 건만 존재 |
SAP 표준 기능 매핑
표준 실행(원인 수정과 실제 재전기 트리거)은 여전히 VFX3가 담당하고, 이 화면은 조회·판정 관점을 더해 확장합니다.
| 표준 기능 | 이 화면이 확장한 부분 |
|---|---|
| VFX3 (보류 청구서 목록/릴리스) | 보류사유별 임계일 차등 판정으로 지연 건을 우선순위 자동 정렬 |
| VBRK-RFBSK (전기상태 코드) | 코드값을 지연·보류중·전기완료·취소 4단계 상태로 재분류해 표시 |
| 재전기 시도 로그 | 시도 이력을 시계열로 정리해 담당자별·사유별 반복 실패 패턴 파악 |
참고 CDS 뷰
운영 서비스로 연결할 때는 청구서 헤더와 품목을 결합한 뷰로 서빙하는 구성을 제안합니다.
@AbapCatalog.sqlViewName: 'ZCBILLRELHDR'
define view Z_C_Billing_Release_Header
as select from vbrk as Header
association[0..*] to vbrp as _Item on _Item.vbeln = Header.vbeln
{
key Header.vbeln as BillingDocument,
Header.fkart as BillingType,
Header.fkdat as BillingDate,
Header.kunrg as Customer,
Header.vkorg as SalesOrganization,
Header.netwr as NetAmount,
Header.waerk as Currency,
Header.rfbsk as PostingStatus,
_Item
}
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경의 계정결정 설정과 보류사유 판정 기준에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.f.DynamicPage — 조회조건 헤더 + 결과 그리드 |
| 조회조건 | sap.m.Select·Input·DatePicker — 우측 끝에 조회 버튼 |
| 결과 그리드 | sap.ui.table.Table — 지연/전기완료 상태에 따라 행 강조색 적용 |
| 상세 | sap.m.Dialog + 품목·재전기이력·산출근거 3단 sap.m.Table |
| 모델 | 업무데이터(mainModel)와 화면상태(viewModel)를 분리한 2-모델 구성 |
| 포맷 | 금액·일자·경과일수·상태·시도결과 포맷터 |
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon · lodash · moment |
Component.js | 디바이스 모델 초기화 · 라우터 시작 |
manifest.json | 앱 디스크립터 — 앱 ID(zui5.billrel) · ko 로케일 |
view/Main.view.xml · fragments/* | 조회조건 · 결과 그리드 · 상세 다이얼로그 |
controller/Main.controller.js | 보류사유별 임계일 판정 · 조회 · 상세 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise) |
js/formatter.js | 금액 · 일자 · 상태 · 시도결과 포맷 |
i18n/i18n_ko.properties | ko 로케일 리소스 |
localdata/*.json | 영업조직·보류사유 등 코드값, 청구서 헤더 190건 · 품목 558건 · 재전기 로그 228건 |
운영 전환 시에는 ModelMock 내부만 실제 서비스 호출로 바꾸면 화면과 판정 로직은 그대로 씁니다.
검증 결과
화면 구성에 쓴 데이터는 청구서 헤더 190건 · 품목 558건 · 재전기 시도 로그 228건이며, 헤더-품목 금액 정합성까지 포함해 전수 검증했습니다.
| 검증 항목 | 결과 |
|---|---|
| 청구금액(헤더) = 품목 순액 합계 (190건 전수) | 통과 |
| 전기완료 건은 회계문서번호·전기일 보유, 보류중 건은 미보유 | 통과 |
| 전기일이 청구일보다 앞서는 역전 케이스 없음 | 통과 |
| 재전기 시도 로그가 존재하지 않는 헤더(orphan) 없음 | 통과 |
| 조회 버튼이 조회조건 영역 오른쪽 끝에 위치 | 통과 |
| 적용 테마 sap_horizon 확인 | 통과 |
| Enter 키 입력으로 즉시 재조회 | 통과 |
| 화면 렌더링 — 실브라우저에서 조회 → 상세 실동작 후 캡처 | 2/2 |
거래처·금액·처리자는 모두 검증용 데이터입니다.
자주 묻는 질문
청구서가 보류 상태로 오래 방치되면 어떤 문제가 생기나요?
매출채권과 매출이 장부에 반영되지 않은 채로 남습니다. 재무제표가 실제 영업활동을 늦게 반영하게 되고, 고객 입장에서도 세금계산서나 명세서 발행이 늦어질 수 있습니다.
지연과 보류중은 어떻게 다른가요?
둘 다 아직 전기되지 않은 상태지만, 경과일수가 보류사유별 임계일을 넘었는지로 구분합니다. 환율 미고시는 1일, 여신초과는 5일처럼 사유마다 통상 해소 기간이 달라 임계일도 고정값이 아니라 사유 마스터에서 차등 관리합니다.
취소된 청구서도 지연 판정 대상인가요?
아닙니다. 취소된 청구서는 애초에 전기할 필요가 없으므로 지연 판정에서 제외하고, 경과일만 참고용으로 표시합니다.
SAP 표준 기능과 어떻게 이어지나요?
전기 시도와 원인 판단 자체는 표준 청구 전기 로직이 하고, 재전기 실행도 표준 트랜잭션 VFX3가 담당합니다. 이 화면은 보류 건을 사유별 임계일로 재분류하고 재전기 시도 이력을 시계열로 모아, 담당자가 검토 우선순위를 빠르게 잡을 수 있도록 조회·판정 관점을 더한 것입니다.