SAP 매출세금계산서 발행 — 전표에서 계산서까지 한 번에
매출 전표에서 세금계산서 발행 대상을 뽑아 공급받는자 정보와 세액을 채우고, 발행 상태를 사업장별로 관리하는 화면입니다.
세금계산서는 회계 전표와 별개의 문서처럼 보이지만 근거는 같습니다. 매출 전표에 붙은 세금코드와 금액이 그대로 계산서가 됩니다.
문제는 공급받는자 정보입니다. 사업자번호·대표자·주소·업태·종목은 전표에 없고 고객 마스터에 있습니다. 표준 매출 전표와 세금코드 구조를 그대로 이어받아 두 곳을 합쳐 발행 대상을 구성하도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면 2종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 전표 키 — 회사코드 · 회계연도 · 전표번호(
belnr)와 증빙일 · 전기일 - 사업장 — 사업장(
bupla)과 명칭으로 발행 주체 구분 - 세금코드 —
mwskz와 세율(rate)로 과세 유형 판정 - 금액 — 공급가액(
fwbas)과 세액(fwste) - 고객 마스터 — 고객 코드(
kunnr)와 사업자번호 · 대표자 · 주소 · 업태 · 종목
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 세무 · 전자세금계산서 |
| Namespace | zui5.taxinv |
| 셸 구조 | 조회조건 영역(우측 조회·초기화) + 발행 대상 테이블 |
| 화면 수 | 조회 화면 1개 |
| 데이터 | 발행 대상 46건 |
| 성격 | 조회·발행 지원형 — 전표 전기는 표준이 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 2종 둘러보기
회사코드·사업장·기간으로 조회하면 발행 대상 전표가 나옵니다 → 공급받는자 정보와 세액을 확인하고 → 발행 상태를 관리합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드와 사업장을 고릅니다. 사업장이 발행 주체가 됩니다.
- 기간을 지정합니다. 증빙일 기준으로 발행 대상이 정해집니다.
- 고객으로 좁혀 특정 거래처 건만 볼 수 있습니다.
- 조회조건 입력필드에서 값을 바꾸거나 Enter 를 누르면 즉시 조회됩니다.
- 사업자번호가 비어 있는 건을 먼저 확인합니다. 고객 마스터 보완이 필요합니다.
- 공급가액과 세액이 세율과 맞는지 확인합니다.
- 결과는 CSV 다운로드로 내려받아 전자세금계산서 시스템에 전달합니다.
세액 산식과 대상 판정
계산은 단순하지만 대상 선별이 중요합니다.
세액(fwste) = 공급가액(fwbas) × 세율(rate)
세금코드로 과세 유형 판정
과세 매출 → 세금계산서 발행 대상
영세율 → 영세율 세금계산서
면세 → 계산서 (세액 없음)
비과세 → 발행 대상 아님
발행 필수 항목 사업자번호 · 대표자 · 주소 · 업태 · 종목
필수 항목을 목록에서 보여 주는 이유
세금계산서는 필수 기재사항이 하나라도 비면 발행이 거부됩니다. 발행 단계에서 오류로 알게 되면 그때 고객 마스터를 고치고 다시 돌려야 합니다. 목록에서 미리 비어 있는 항목이 보이면 발행 전에 한 번에 정리할 수 있습니다.
발행 처리 4단계
| 단계 | 내용 | 결과물 |
|---|---|---|
| ① 대상 추출 | 기간 내 과세 매출 전표 수집 | 발행 대상 목록 |
| ② 정보 보완 | 공급받는자 필수 항목 확인 | 누락 건 정리 |
| ③ 발행 | 전자세금계산서 생성·전송 | 승인번호 수신 |
| ④ 신고 반영 | 부가세 신고자료에 집계 | 신고서 작성 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
회사코드 bukrs | 필수 | 대상 회사코드 |
사업장 bupla | 필수 | 발행 주체 사업장 |
기간 bldat | 필수 | 증빙일 From~To |
고객 kunnr | 선택 | 고객 코드·명칭 |
세금코드 mwskz | 선택 | 과세 · 영세 · 면세 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
회사코드 bukrs · 사업장 bupla | 발행 주체 |
전표번호 belnr · 회계연도 gjahr | 근거 전표 |
증빙일 bldat · 전기일 budat | 작성일과 전기일 |
고객 kunnr · kunnrTx | 공급받는자 코드와 상호 |
사업자번호 custRegno | 필수 기재사항 |
대표자 custCeo · 주소 custAddr | 필수 기재사항 |
업태 custBiz · 종목 custItem | 필수 기재사항 |
세금코드 mwskz · mwskzTx · 세율 rate | 과세 유형 |
공급가액 fwbas | 과세 표준 |
세액 fwste | 공급가액 × 세율 |
적요 sgtxt | 거래 내용 |
SAP 표준 기능 매핑
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
FB03 | 전표 조회 | 세금계산서 관점으로 필요한 항목만 재구성 |
F.12 · 부가세 리포트 | 세액 집계 | 발행 단계 정보를 앞에 배치 |
BKPF · BSEG | 전표 헤더와 라인 | 공급가액·세액 원천 |
BSET | 전표 세금 라인 | 세금코드별 과세표준과 세액 |
KNA1 | 고객 마스터 | 사업자번호 · 대표자 · 주소 · 업태 · 종목 |
T001W 관점 | 사업장 | 발행 주체 구분 |
도입 시 확인이 필요한 부분
전자세금계산서는 외부 시스템(ASP)과 연계하는 경우가 대부분입니다. 이 화면에서 대상을 만들고 실제 발행과 승인번호 수신은 연계 인터페이스가 담당하므로, 전송 포맷과 상태 회신 방식을 함께 설계해야 합니다. 사업장이 여러 개면 사업장별 사업자번호도 정확히 매핑돼야 합니다.
참고 CDS 뷰
@AbapCatalog.sqlViewName: 'ZCTAXINV'
@EndUserText.label: '매출세금계산서 발행 대상 (Z)'
define view Z_C_TAX_INVOICE
as select from bkpf as Header
inner join bset as TaxLine on Header.bukrs = TaxLine.bukrs
and Header.belnr = TaxLine.belnr
and Header.gjahr = TaxLine.gjahr
left outer join bseg as Line on Header.bukrs = Line.bukrs
and Header.belnr = Line.belnr
and Header.gjahr = Line.gjahr
left outer join kna1 as Customer on Line.kunnr = Customer.kunnr
{
key Header.bukrs,
key Header.gjahr,
key Header.belnr,
key TaxLine.mwskz,
Header.bldat, Header.budat,
Line.bupla,
Line.kunnr,
Customer.name1 as KunnrTx,
Customer.stcd2 as CustRegno,
Customer.stras as CustAddr,
TaxLine.hwbas as Fwbas,
TaxLine.hwste as Fwste,
TaxLine.kbetr as Rate
}
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경 설정과 릴리즈에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 발행 대상 테이블 |
| 조회조건 | sap.m.Select · sap.m.DatePicker · sap.m.Input — 우측 끝에 조회·초기화 |
| 이벤트 | 모든 버튼이 onPAI 단일 진입점, fcCode 로 분기 |
| 대상 테이블 | sap.m.Table — 열이 많아 popin 반응형 |
| 필수 항목 | 누락 시 sap.m.ObjectStatus 로 표시 |
| 금액 | sap.m.ObjectNumber — 우측정렬, 천단위 콤마 |
공급받는자 정보를 펼쳐 둔 이유
사업자번호만 보여 주면 나머지 기재사항이 채워졌는지 알 수 없습니다. 대표자·주소·업태·종목을 모두 열로 두면 발행 전에 빈 칸이 한눈에 보이고, 고객 마스터에서 무엇을 보완해야 하는지가 바로 정해집니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.taxinv) · ko 로케일 |
view/Main.view.xml | 조회조건과 발행 대상 테이블 |
controller/Main.controller.js | 조회 · 세액 검증 · 필수항목 점검 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise) |
model/formatter.js | 금액 · 일자 · 세율 · 상태 포맷터 |
localdata/taxinv.json | 발행 대상 46건 |
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 세액 = 공급가액 × 세율 (전 건) | 통과 |
| 과세 건은 세금코드와 세율이 정합 | 통과 |
| 고객 코드가 있으면 상호·사업자번호도 존재 | 통과 |
| 사업장 코드가 있으면 명칭도 존재 | 통과 |
| 전표 키(회사코드+연도+전표번호) 중복 없음 | 통과 |
| XML · JSON 전체 파싱 | 오류 0건 |
| 화면 렌더링 — 실브라우저 조회 후 캡처 | 2/2 |
| 테마 런타임 확인 | sap_horizon |
자주 묻는 질문
사업자번호가 비어 있으면 어떻게 하나요?
고객 마스터에서 보완해야 합니다. 발행 단계에서 거부되기 때문에 목록에서 미리 확인해 한 번에 정리하는 것이 효율적입니다.
영세율이나 면세 건도 나오나요?
나옵니다. 영세율은 세액 0의 세금계산서, 면세는 계산서로 발행 서식이 다릅니다. 세금코드로 구분되므로 조회조건에서 나눠 뽑아 각각 처리합니다.
사업장이 여러 개면 어떻게 관리하나요?
사업장이 발행 주체이므로 사업장별로 나눠 조회합니다. 사업장마다 사업자번호가 다르면 그 매핑이 정확해야 발행 오류가 나지 않습니다.
SAP 표준 기능과 어떻게 이어지나요?
매출 전표와 세금 라인은 표준 전기가 만듭니다. 이 화면은 그 전표에 고객 마스터의 공급받는자 정보를 합쳐 발행에 필요한 형태로 구성하고, 필수 기재사항 누락을 미리 잡아 주는 확장입니다.