SAP 부가세 신고자료 집계 — 전표 한 줄까지 근거를 남기기
신고 세액을 만든 전표를 세금코드·사업장·거래처 단위로 집계해, 신고 금액의 근거를 전표 라인까지 따라갈 수 있게 하는 화면입니다.
신고서에 적히는 것은 합계 금액 몇 줄입니다. 그런데 세무조사에서 묻는 것은 그 합계가 어느 전표들로 이뤄졌는가입니다.
합계만 남기면 몇 년 뒤에 다시 만들어야 하고, 그 사이 데이터가 달라져 있으면 재현되지 않습니다. 표준 전표 세금 라인 구조를 그대로 이어받아 집계와 근거를 함께 남기도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 전표 키 — 회사코드 · 회계연도 · 전표번호(
belnr) · 라인(buzei) - 세금 정보 — 세금코드(
mwskz) · 세목(mwart) · 세율(taxRate) - 금액 — 과세표준(
hwbas)과 세액(hwste) - 사업장 —
bupla와 명칭으로 신고 단위 구분 - 거래처 — 고객(
kunnr) · 공급업체(lifnr)와 사업자번호
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 세무 신고 근거 |
| Namespace | zui5.vatagg |
| 셸 구조 | 조회조건 영역(우측 조회·초기화) + 집계 테이블 |
| 화면 수 | 조회 화면 1개 |
| 데이터 | 세금 라인 90건 |
| 성격 | 조회형(Read-Only) — 전기와 신고는 표준 절차가 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 1종 둘러보기
회사코드·사업장·기간으로 조회하면 세금 라인이 집계와 함께 나옵니다 → 세금코드별 합계를 신고서와 대조하고 → 전표 단위로 근거를 확인합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드와 사업장을 고릅니다. 사업장이 신고 단위입니다.
- 기간을 신고 기간에 맞춰 지정합니다.
- 세금코드로 과세·영세·면세를 나눠 볼 수 있습니다.
- 조회조건 입력필드에서 값을 바꾸거나 Enter 를 누르면 즉시 조회됩니다.
- 세금코드별 소계를 신고서 항목과 대조합니다.
- 거래처와 사업자번호로 세금계산서 합계표 작성 근거를 확인합니다.
- 결과는 CSV 다운로드로 내려받아 신고 근거 자료로 보관합니다.
집계 기준
같은 세금 라인을 세 축으로 접어 봅니다.
세액 = 과세표준(hwbas) × 세율(taxRate)
집계 축
세금코드별 → 신고서 항목과 대조
사업장별 → 신고 단위별 합계
거래처별 → 세금계산서 합계표 근거
세목 구분 A 매출세
V 매입세
거래처별 집계가 따로 필요한 이유
신고서에는 합계만 들어가지만 세금계산서 합계표에는 거래처별 금액과 매수가 들어갑니다. 같은 원천 데이터를 거래처 축으로 접을 수 있어야 두 서식을 한 번의 집계로 만들 수 있습니다. 사업자번호까지 함께 두는 이유도 여기 있습니다.
신고 근거 4단계
| 단계 | 내용 | 산출물 |
|---|---|---|
| ① 전표 수집 | 기간 내 세금 라인 추출 | 원천 라인 |
| ② 세금코드별 집계 | 과세·영세·면세 구분 합계 | 신고서 항목 |
| ③ 거래처별 집계 | 거래처·사업자번호별 합계 | 합계표 근거 |
| ④ 보관 | 집계와 원천 라인을 함께 저장 | 조사 대응 자료 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
회사코드 bukrs | 필수 | 대상 회사코드 |
사업장 bupla | 필수 | 신고 단위 사업장 |
기간 budat | 필수 | 전기일 From~To |
세금코드 mwskz | 선택 | 과세 · 영세 · 면세 |
세목 mwart | 선택 | 매출세 / 매입세 |
| 거래처 | 선택 | 고객 또는 공급업체 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
전표번호 belnr · 라인 buzei | 근거 전표 |
전표유형 blart · blartTx | 매출전표 등 |
전기일 budat · 증빙일 bldat | 날짜 정보 |
사업장 bupla · buplaTx | 신고 단위 |
세금코드 mwskz · mwskzTx | 매출 영세율 등 |
세목 mwart · mwartTx | 매출세 / 매입세 |
세율 taxRate | 적용 세율 |
과세표준 hwbas | 세액 계산 기준 |
세액 hwste | 과세표준 × 세율 |
거래처 kunnr · lifnr · klName | 고객 또는 공급업체 |
| 사업자번호 | 합계표 작성용 |
SAP 표준 기능 매핑
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
S_ALR_87012357 | 부가세 신고 리포트 | 전표 라인까지 근거를 남기는 형태로 집계 |
F.12 | 세금 명세 | 사업장·거래처 축 집계를 추가 |
BSET | 전표 세금 라인 | 집계 원천 |
BKPF · BSEG | 전표 헤더와 라인 | 전표유형·거래처 정보 |
KNA1 · LFA1 | 거래처 마스터 | 상호와 사업자번호 |
T007S | 세금코드 텍스트 | 세목 명칭 |
도입 시 확인이 필요한 부분
사업장 단위 신고인지 총괄 납부인지에 따라 집계 단위가 달라집니다. 총괄 납부라면 사업장별 집계는 내부 관리용이 되고 신고는 본점 기준으로 합칩니다. 또 세금계산서 합계표는 매수도 필요하므로 전표 건수와 계산서 매수가 일치하는지 확인해야 합니다.
참고 CDS 뷰
@AbapCatalog.sqlViewName: 'ZCVATAGG'
@EndUserText.label: '부가세 신고자료 집계 (Z)'
define view Z_C_VAT_AGGREGATION
as select from bset as TaxLine
inner join bkpf as Header on TaxLine.bukrs = Header.bukrs
and TaxLine.belnr = Header.belnr
and TaxLine.gjahr = Header.gjahr
left outer join bseg as Line on TaxLine.bukrs = Line.bukrs
and TaxLine.belnr = Line.belnr
and TaxLine.gjahr = Line.gjahr
left outer join kna1 as Customer on Line.kunnr = Customer.kunnr
{
key TaxLine.bukrs,
key TaxLine.gjahr,
key TaxLine.belnr,
key TaxLine.buzei,
Header.blart, Header.budat, Header.bldat,
Line.bupla,
TaxLine.mwskz, TaxLine.ktosl as Mwart,
TaxLine.kbetr as TaxRate,
TaxLine.hwbas as Hwbas,
TaxLine.hwste as Hwste,
Line.kunnr, Line.lifnr,
Customer.name1 as KlName,
Customer.stcd2 as KlStcd
}
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경 설정과 릴리즈에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 집계 테이블 |
| 조회조건 | sap.m.Select · sap.m.DatePicker · sap.m.Input — 우측 끝에 조회·초기화 |
| 이벤트 | 모든 버튼이 onPAI 단일 진입점, fcCode 로 분기 |
| 집계 테이블 | sap.m.Table — 세금코드별 소계 행 포함 |
| 금액 | sap.m.ObjectNumber — 우측정렬, 천단위 콤마 |
| 그룹 | 세금코드·사업장 기준 그룹 헤더 |
소계를 본문에 끼워 넣은 이유
합계를 표 맨 아래에만 두면 신고서 항목과 맞추려고 스크롤을 오갑니다. 세금코드가 바뀌는 지점마다 소계를 넣으면 그 자리에서 신고서 한 줄과 대조되고, 어느 전표가 그 소계에 들어갔는지도 바로 위에 있습니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.vatagg) · ko 로케일 |
view/Main.view.xml | 조회조건과 집계 테이블 |
controller/Main.controller.js | 조회 · 축별 집계 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise) |
model/formatter.js | 금액 · 세율 · 소계 포맷터 |
localdata/vatagg.json | 세금 라인 90건 |
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 세액 = 과세표준 × 세율 (전 건) | 통과 |
| 세금코드별 소계 = 라인 금액 합계 | 통과 |
| 세목 구분과 전표유형 정합 (매출세↔매출전표) | 통과 |
| 거래처 코드가 있으면 상호·사업자번호도 존재 | 통과 |
| 영세율 건은 세액 0 | 통과 |
| XML · JSON 전체 파싱 | 오류 0건 |
| 화면 렌더링 — 실브라우저 조회 후 캡처 | 통과 |
| 테마 런타임 확인 | sap_horizon |
자주 묻는 질문
영세율은 왜 세액이 0인가요?
세율이 0%이기 때문입니다. 과세 대상이지만 세액이 없어 매입세액은 공제받을 수 있습니다. 면세와 달리 신고 대상이므로 과세표준은 반드시 집계해야 합니다.
세금계산서 합계표도 이 자료로 만드나요?
거래처별로 접으면 됩니다. 사업자번호와 거래처별 금액이 이미 라인에 있어, 집계 축만 바꾸면 합계표 근거가 나옵니다. 다만 매수는 전표 건수와 계산서 매수를 대조해 확인해야 합니다.
몇 년치를 보관해야 하나요?
세무조사 대응을 고려하면 최소 5년입니다. 집계 결과만이 아니라 원천 라인까지 함께 남겨야 나중에 재현이 가능합니다.
SAP 표준 기능과 어떻게 이어지나요?
세금 라인은 전기 시 표준이 만들고 신고 리포트도 표준이 제공합니다. 이 화면은 그 라인을 세금코드·사업장·거래처 세 축으로 접어 신고서와 합계표 근거를 한 번에 만들고, 전표까지 추적되게 하는 확장입니다.