SAP 부가세 신고서 작성 — 집계에서 서식까지 이어 붙이기
신고 기간의 매출·매입 자료를 집계해 신고서 항목에 채우고, 거래처 건수와 함께 제출 자료를 만드는 화면입니다.
부가세 신고서는 칸이 정해진 서식입니다. 그런데 그 칸을 채우는 숫자는 여러 집계를 거쳐야 나옵니다. 매출과 매입을 세금코드별로 나누고, 거래처별로 건수를 세고, 영세율과 면세를 따로 뽑아야 합니다.
엑셀로 옮기며 정리하면 옮기는 과정에서 오류가 납니다. 표준 세금 라인 구조를 그대로 이어받아 집계와 서식 항목을 바로 잇도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 전표 키 — 회사코드(
BUKRS) · 전표번호(BELNR) - 사업장 — 신고 단위 사업장 정보
- 세금 라인 — 세금코드별 과세표준과 세액
- 거래처 건수 — 유형별 거래처 수(
BP_CNT) - 주소 — 신고 주체 정보(
ADDR)
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 세무 신고 |
| Namespace | fi089_vatreturn |
| 셸 구조 | 조회조건 영역 + 신고서 항목 + 거래처 집계 |
| 화면 수 | 조회·작성 화면 1개 |
| 데이터 | 신고 집계와 거래처 건수 등 다중 엔티티 |
| 성격 | 조회·작성형 — 실제 신고는 외부 시스템 |
| 산출물 | 신고서 항목값과 합계표 근거 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 1종 둘러보기
회사코드·사업장·신고 기간으로 집계하면 신고서 항목이 채워집니다 → 거래처 건수와 세액을 확인하고 → 제출 자료로 내려받습니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드와 사업장을 고릅니다. 사업장이 신고 단위입니다.
- 신고 기간을 지정합니다. 예정·확정 구분에 맞춥니다.
- 집계하면 신고서 항목이 채워집니다.
- 과세·영세율·면세가 구분돼 있는지 확인합니다.
- 거래처 건수를 확인합니다. 세금계산서 합계표 매수와 맞아야 합니다.
- 납부세액이 매출세액 − 매입세액과 일치하는지 봅니다.
- 결과는 다운로드로 내려받아 신고 시스템에 전달합니다.
집계 규칙
세금코드로 유형을 나누고, 유형마다 과세표준과 세액을 모읍니다.
매출 집계 과세 · 영세율 · 면세로 구분
매입 집계 일반 매입 · 고정자산 매입 · 불공제로 구분
매출세액 = Σ(과세 매출 과세표준 × 세율)
매입세액 = Σ(공제 가능 매입 세액)
납부세액 = 매출세액 − 매입세액
거래처 건수 유형별 거래처 수 → 세금계산서 합계표 근거
거래처 건수를 함께 세는 이유
신고서에는 금액만 들어가지만 세금계산서 합계표에는 거래처 수와 매수가 들어갑니다. 금액 집계와 건수 집계를 따로 하면 기준이 어긋나 두 서식이 맞지 않습니다. 같은 집계에서 함께 세면 그런 불일치가 생기지 않습니다.
신고서 작성 4단계
| 단계 | 내용 | 산출물 |
|---|---|---|
| ① 자료 집계 | 기간 내 세금 라인 수집 | 유형별 금액 |
| ② 항목 배정 | 신고서 칸에 배치 | 신고서 항목값 |
| ③ 건수 집계 | 거래처 수와 매수 | 합계표 근거 |
| ④ 제출 | 신고 시스템 전송 | 신고 완료 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
회사코드 BUKRS | 필수 | 신고 주체 |
| 사업장 | 필수 | 신고 단위 사업장 |
| 신고 기간 | 필수 | 예정 · 확정 구분 |
| 세금코드 | 선택 | 특정 유형만 확인 |
| 전기일 | 선택 | 기간 세부 조정 |
결과 컬럼
신고서 항목
| 항목 | 내용 |
|---|---|
| 매출 — 과세 | 과세표준과 세액 |
| 매출 — 영세율 | 과세표준 (세액 0) |
| 매출 — 면세 | 면세 공급가액 |
| 매입 — 일반 | 공급가액과 세액 |
| 매입 — 고정자산 | 별도 항목 |
| 매입 — 불공제 | 공제되지 않는 매입 |
| 납부세액 | 매출세액 − 매입세액 |
거래처 집계
| 항목 | 내용 |
|---|---|
거래처 건수 BP_CNT | 유형별 거래처 수 |
| 매수 | 세금계산서 발행·수취 매수 |
| 금액 합계 | 유형별 합계 |
SAP 표준 기능 매핑
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
S_ALR_87012357 | 부가세 신고 리포트 | 신고서 항목 배치와 건수 집계 추가 |
F.12 | 세금 명세 | 유형별 상세 확인 |
BSET | 전표 세금 라인 | 집계 원천 |
BKPF · BSEG | 전표 헤더와 라인 | 거래처 정보 |
T007A | 세금코드 설정 | 유형 구분 |
도입 시 확인이 필요한 부분
신고서 서식은 법령 개정에 따라 바뀝니다. 항목 구성이 화면에 고정돼 있으면 개정 때마다 개발이 필요합니다. 세금코드와 신고서 항목의 매핑을 설정으로 관리하면 서식 변경에 대응하기 쉽습니다.
참고 CDS 뷰
@AbapCatalog.sqlViewName: 'ZCVATRETURN'
@EndUserText.label: '부가세 신고서 집계 (Z)'
define view Z_C_VAT_RETURN_FORM
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
{
key TaxLine.bukrs,
key TaxLine.gjahr,
key Line.bupla as Bupla,
key TaxLine.mwskz as TaxCode,
sum( TaxLine.hwbas ) as TaxBase,
sum( TaxLine.hwste ) as TaxAmount,
count( distinct coalesce( Line.kunnr, Line.lifnr ) ) as PartnerCount,
count( distinct TaxLine.belnr ) as DocCount
// 세금코드 → 신고서 항목 매핑은 설정 테이블로 관리
}
group by TaxLine.bukrs, TaxLine.gjahr, Line.bupla, TaxLine.mwskz
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경 설정과 릴리즈에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 신고서 항목 · 거래처 집계 |
| 조회조건 | sap.m.Select · sap.m.DatePicker · sap.m.Input — 우측 끝에 조회·초기화 |
| 이벤트 | 모든 버튼이 onPAI 단일 진입점, fcCode 로 분기 |
| 신고서 항목 | sap.m.Table — 서식 순서대로 배치 |
| 거래처 집계 | sap.m.Table — 유형별 건수와 금액 |
| 금액 | sap.m.ObjectNumber — 우측정렬 |
서식 순서대로 배치한 이유
신고서에 옮겨 적을 때 화면 순서와 서식 순서가 다르면 칸을 찾아가며 옮기게 됩니다. 그 과정에서 줄을 착각하는 실수가 나옵니다. 화면을 서식과 같은 순서로 두면 위에서 아래로 그대로 옮길 수 있습니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — ko 로케일 · sap_horizon |
view/Main.view.xml | 조회조건 · 신고서 항목 · 거래처 집계 |
controller/Main.controller.js | 집계 · 항목 배정 · 건수 산출 · 다운로드 |
model/ModelMock.js | localdata JSON 읽기(Promise) |
js/formatter.js | 금액 · 건수 포맷터 |
localdata/HeadsDraft.json | 신고 집계 데이터 |
localdata/ZFCMC_F07_C002*.json | 신고 관련 엔티티 |
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 납부세액 = 매출세액 − 매입세액 | 통과 |
| 세액 = 과세표준 × 세율 (유형별) | 통과 |
| 영세율 건은 세액 0 | 통과 |
| 거래처 건수 = 중복 제거한 거래처 수 | 통과 |
| 신고서 항목 합계 = 원천 세금 라인 합계 | 통과 |
| XML · JSON 전체 파싱 | 오류 0건 |
| 화면 렌더링 — 실브라우저 집계 실동작 후 캡처 | 통과 |
| 테마 런타임 확인 | sap_horizon |
자주 묻는 질문
서식이 바뀌면 화면을 고쳐야 하나요?
매핑을 설정으로 관리하면 개발 없이 대응할 수 있습니다. 세금코드와 신고서 항목의 연결을 테이블로 두면 항목이 추가돼도 설정만 바꾸면 됩니다.
불공제 매입은 왜 따로 잡나요?
세액을 공제받지 못하는 매입이기 때문입니다. 접대비나 비영업용 승용차 관련 매입이 여기 들어가며, 신고서에도 별도 칸이 있습니다.
거래처 건수가 합계표와 다르면요?
집계 기준이 다른 것입니다. 한 거래처와 여러 건을 거래했을 때 거래처 수로 셀지 매수로 셀지에 따라 숫자가 달라지므로 기준을 맞춰야 합니다.
SAP 표준 기능과 어떻게 이어지나요?
세금 라인과 집계는 표준이 제공합니다. 이 화면은 그 집계를 신고서 서식 순서로 배치하고 거래처 건수까지 함께 산출해, 옮겨 적는 과정을 줄이는 확장입니다.