SAP 전산매체 신고파일 생성 — 사업장별로 파일을 만들어 내보내기
분기와 신고유형을 골라 해당 세금코드로 신고자료를 뽑고, 사업장별 전산매체 파일을 만드는 화면입니다.
전자신고 파일은 만들고 나면 내용을 고칠 수 없습니다. 홈택스에 올려 오류가 나면 처음부터 다시 만들어야 합니다.
기존 처리 방식은 결과 화면 없이 파일만 생성합니다. 무엇이 담기는지 모른 채 만들고 올려 봐야 아는 구조입니다. 생성 전에 사업장별 대상과 레코드를 확인할 수 있도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면 3종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 부가세 신고 자료 — 집계된 신고 라인(
ZTFIE0010) - 사업자단위과세 — 과세 단위 마스터(
ZTFIE0020) - 사업장 — 부가세 사업장 정보(
T001Z·J_1BBRANCH) - 주소 — 사업장 주소(
ADRC) - 전자세금계산서 — 스마트빌 연계 데이터(
ZDTI_HEADER·ZDTI_SAPK)
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 일반회계 · 전자신고 |
| Namespace | zui5.efile |
| 셸 구조 | 조회조건 영역(우측 조회) + 사업장별 파일 목록 + 레코드 미리보기 |
| 화면 수 | 조회·생성 화면 1개 + 미리보기 |
| 데이터 | 신고 자료와 사업장 정보 |
| 성격 | 생성형 — 사업장별 텍스트 파일 출력 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 3종 둘러보기
회계연도·분기·신고유형을 고르면 입력값이 점검되고 → 사업장별 생성 대상 파일 목록이 나옵니다 → 레코드를 미리 본 뒤 파일을 생성합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드·회계연도를 넣습니다. 회계연도 기본값은 시스템 연도입니다.
- 신고분기를 1~4분기 중에서 고릅니다.
- 신고유형을 고릅니다. 세금계산서·계산서·신용카드매출에 따라 적용 세금코드가 바뀝니다.
- 부가세사업장은 사업자단위과세가 아니면 반드시 지정해야 합니다.
- File path 를 넣습니다. 파일 저장 경로입니다.
- 조회하면 사업장별 생성 대상 파일 목록이 나옵니다.
- 파일을 선택해 신고 대상 라인과 레코드 미리보기를 확인합니다.
- 파일명을 누르면 개별 저장, 신고파일 생성을 누르면 사업장별 파일을 한 번에 저장합니다.
입력값 점검과 파일 구조
생성 전에 과세 단위를 확인하고, 파일은 세 종류 레코드로 구성됩니다.
입력값 점검
사업자단위과세 아님 + 부가세사업장 비어 있음 → 오류, 파일 생성 안 함
사업자단위과세 → 대표 사업장을 신고 BP 로 사용
파일 레코드 구조
H | 회사코드 | 사업장 | 사업자번호 | 사업장명 | 대표자 | 신고기간 | 신고유형 | 건수
D | 사업장 | 세금코드 | 매출입 | 건수 | 공급가액(15) | 세액(15) ← 세금코드별 누적
T | 사업장 | 총건수 | 공급가액 합 | 세액 합 | 합계
파일명 = 신고유형_회사코드_사업장_연도Q분기.txt
생성 전에 목록을 보여 주는 이유
원본은 결과 화면 없이 파일만 만듭니다. 무엇이 담겼는지는 홈택스에 올려 봐야 알 수 있고, 오류가 나면 원인을 찾기 어렵습니다. 사업장별 건수와 금액을 먼저 보여 주면 예상과 다른 사업장을 생성 전에 잡을 수 있습니다.
신고유형별 세금코드
| 신고유형 · 구분 | 대상 | 세금코드 |
|---|---|---|
| 세금계산서 · 매출 | 개인 매출 | AQ |
| 세금계산서 · 매출 | 사업자 매출 | AA / AB / AC / AD / AE / AH / AI |
| 세금계산서 · 매입 | 사업자 매입 | VF / VG / VI |
| 세금계산서 · 매입 | 사업자(전자계산서) 매입 | VA / VB / VC / VD / VK / VQ |
| 계산서 · 매입 | 종이계산서 / 전자계산서 | VJ / VE |
| 신용카드매출 · 매입 | 신용카드 / 현금영수증 | VL / VM |
선택한 신고유형의 세금코드로 신고 자료를 추출하며, 조건에 맞는 자료가 없으면 메시지로 알려 줍니다.
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 회사코드 / 회계연도 | 필수 | 회계연도 기본값은 시스템 연도 |
| 신고분기 | 필수 | 1~4분기 라디오 |
| 신고유형 | 필수 | 세금계산서 / 계산서 / 신용카드매출 |
| 부가세사업장 | 조건부 필수 | 사업자단위과세가 아니면 반드시 지정 |
| File path | 필수 | 파일 저장 경로 |
결과 컬럼
사업장별 파일 목록
| 컬럼 | 의미 |
|---|---|
| 사업장 | 신고 단위 |
| 사업자번호 | 사업장 사업자등록번호 |
| 파일명 | 신고유형_회사코드_사업장_연도Q분기.txt |
| 건수 | 신고 대상 라인 수 |
| 전자 건수 | 전자세금계산서 건수 |
| 공급가액 · 세액 | 사업장별 합계 |
신고 대상 라인
| 컬럼 | 의미 |
|---|---|
| 세금코드 | 적용 코드 |
| 매출입 구분 | 매출 / 매입 |
| 공급가액 · 세액 | 라인 금액 |
| 전자 여부 | 전자세금계산서 여부 |
SAP 표준 기능 매핑
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
ZTFIE0010 | 부가세 신고 자료 | 파일 생성 원천 |
ZTFIE0020 | 사업자단위과세 마스터 | 입력값 점검 |
T001Z · J_1BBRANCH | 사업장 정보 | 사업장·사업자번호 |
ADRC | 주소 마스터 | 사업장명·대표자 |
T007A | 세금코드 설정 | 신고유형별 코드 |
ZDTI_HEADER · ZDTI_SAPK | 전자세금계산서 연계 | 전자 건수 집계 |
도입 시 확인이 필요한 부분
파일 레코드 포맷은 국세청 규격을 따릅니다. 규격이 개정되면 자릿수와 항목이 바뀌므로 레코드 생성 로직을 함께 갱신해야 합니다. 또 사업장이 여러 개면 사업자번호 매핑이 정확해야 엉뚱한 사업장으로 신고되지 않습니다.
참고 CDS 뷰
@AbapCatalog.sqlViewName: 'ZCEFILE'
@EndUserText.label: '전산매체 신고 대상 (Z)'
define view Z_C_EFILE_TARGET
as select from ztfie0010 as VatData
left outer join t001z as Branch on VatData.bukrs = Branch.bukrs
and VatData.bupla = Branch.paval
{
key VatData.bukrs,
key VatData.gjahr,
key VatData.bupla as Bupla,
key VatData.mwskz as TaxCode,
Branch.paval as TaxNumber,
VatData.shkzg as DebitCredit,
count(*) as ItemCount,
sum( VatData.fwbas ) as SupplyAmount,
sum( VatData.fwste ) as TaxAmount
// 전자 건수는 ZDTI_HEADER 와 조인해 별도 집계
// H/D/T 레코드는 이 집계를 읽어 앱에서 생성
}
group by VatData.bukrs, VatData.gjahr, VatData.bupla,
VatData.mwskz, Branch.paval, VatData.shkzg
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경 설정과 릴리즈에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 파일 목록 · 미리보기 |
| 조회조건 | sap.m.RadioButtonGroup · sap.m.Select — 우측 끝에 조회 |
| 파일 목록 | sap.m.Table — 사업장별 건수와 금액 |
| 대상 라인 | 파일 선택 시 하단에 펼침 |
| 미리보기 | sap.m.Dialog — H/D/T 레코드 원문 |
| 저장 | 파일명 클릭으로 개별 저장 · 일괄 생성 버튼 |
레코드 원문을 그대로 보여 주는 이유
전산매체 파일은 자릿수까지 규격이 정해져 있습니다. 화면에서 금액만 맞는지 확인해도 자릿수가 어긋나면 업로드에서 거부됩니다. 실제 레코드 문자열을 보여 주면 규격 문제를 생성 전에 발견할 수 있습니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.efile) · ko 로케일 |
view/Main.view.xml | 조회조건 · 파일 목록 · 미리보기 |
controller/Main.controller.js | 입력값 점검 · 대상 추출 · 레코드 생성 · 저장 |
model/ModelMock.js | localdata JSON 읽기(Promise) |
js/formatter.js | 금액 · 건수 · 자릿수 포맷터 |
localdata/efile.json | 신고 대상 자료 |
localdata/branch.json | 사업장 정보 |
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 사업자단위과세가 아니고 사업장 미지정이면 생성 차단 | 통과 |
| T 레코드 합계 = D 레코드 합계 | 통과 |
| H 레코드 건수 = D 레코드 건수 합 | 통과 |
| 신고유형별 세금코드만 대상에 포함 | 통과 |
| 파일명 규칙 = 신고유형_회사코드_사업장_연도Q분기 | 통과 |
| XML · JSON 전체 파싱 | 오류 0건 |
| 화면 렌더링 — 실브라우저 조회 → 미리보기 후 캡처 | 3/3 |
| 테마 런타임 확인 | sap_horizon |
자주 묻는 질문
사업자단위과세면 사업장을 안 넣어도 되나요?
네. 사업자단위과세는 본점에서 통합 신고하므로 대표 사업장을 신고 BP 로 사용합니다. 사업자단위과세가 아닌데 사업장이 비어 있으면 오류로 처리해 파일을 만들지 않습니다.
전자 건수는 왜 따로 표시하나요?
전자세금계산서는 국세청에 이미 전송돼 있어 신고 방식이 다릅니다. 전체 건수와 전자 건수를 나눠 보면 종이 발행분이 얼마나 되는지 확인됩니다.
파일 규격이 바뀌면 어떻게 하나요?
레코드 생성 로직을 갱신해야 합니다. 자릿수와 항목 순서가 정해져 있어 규격 개정 때마다 확인이 필요합니다.
SAP 표준 기능과 어떻게 이어지나요?
신고 자료는 집계 프로그램이 만들고 이 화면은 그것을 읽어 파일로 변환합니다. 원본과 달리 생성 전에 사업장별 대상과 레코드를 확인할 수 있게 한 확장입니다.