SAP 매출합산 처리 — 청구 전표 여러 건을 세금계산서 한 장으로
영업에서 넘어온 채권 전표를 고객 단위로 묶어 세금계산서 발행용 합산 전표를 만들고, 필요하면 되돌리는 화면입니다.
영업에서 출하가 나갈 때마다 청구 전표가 하나씩 생깁니다. 그런데 세금계산서는 건별로 끊지 않습니다.
한 고객에게 이번 달 열 번 출하했어도 세금계산서는 한 장으로 묶는 것이 보통입니다. 그래서 흩어진 채권 전표를 고객 단위로 모아 하나의 재무 전표로 다시 세워야 합니다. 이 화면은 그 작업을 합니다. 대상 전표를 골라 합산하면 원 전표들이 clearing 되면서 세금계산서용 채권 전표가 새로 생기고, 잘못 묶었으면 역분개해 되돌릴 수 있습니다.
SAP 표준 구조를 그대로 이어받은 부분
- 전표 조회 —
BSID(미결) ·BSAD(반제)에서AUGBL공란 조건 - 대상 한정 — 세금코드
A0· 통화KRW인 채권 전표 - 합산 처리 —
ZFI_DOCUMENT_POSTING으로 clearing + 신규 채권전표 생성 - 마스터 — 고객(
KNA1) · 사업장(J_1BBRANCH) · Billing(VBRK·VBRP)
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI-AR) · 세금계산서 발행 준비 |
| Namespace | zui5.salesagg |
| 셸 구조 | 조회조건 영역(우측 조회) + 전표 목록, 합산처리 팝업 |
| 화면 수 | 조회 화면 1개 + 합산 전표 생성 팝업 |
| 데이터 | 채권 전표 32건 (대상 24 · 완료 8) · 합산전표 3건 |
| 성격 | 조회·처리형 — 전기는 표준 펑션이 수행 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 10종 둘러보기
대상 전표를 조회해 같은 고객끼리 고르면 → 팝업에서 세금코드와 세액을 정하고 → 합산처리로 전표 한 장을 만듭니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회계연도와 기간을 확인하고 필요하면 고객·영업소로 범위를 좁혀 조회합니다.
- 합산 대상전표에서 묶을 전표를 고릅니다. 상단 요약이 고객 일치 여부를 색으로 알려 줍니다.
- 합산처리를 누르면 팝업이 열립니다. 세금계산서 일자와 세금코드를 정합니다.
- 세액은 자동 계산되며 필요하면 직접 고쳐 단수를 맞춥니다. 합계가 바로 따라 바뀝니다.
- 확인하면 원 전표가 clearing 되면서 합산 전표가 생성됩니다.
- 되돌리려면 합산 완료전표로 바꿔 조회한 뒤 합산취소로 역분개합니다.
합산 규칙과 세액 계산
합산은 고객 단위로만 가능하고, 세액은 세금코드에 따라 자동으로 계산됩니다.
합산처리 흐름
1) 선택 점검
선택 라인 없음 → 에러
고객번호가 서로 다름 → 에러 (동일 고객만 합산)
이미 합산된 전표 포함 → 에러
2) 합산 전표 정보 입력 (팝업)
세금계산서 일자 : Document date
세금코드 : 10% 과세 / 영세 중 선택
세액 : 세금코드에 따라 자동계산, 수기 단수 조정 가능
3) 확인
ZFI_DOCUMENT_POSTING
→ 선택된 채권 전표를 clearing
→ 신규 채권전표(합산 전표) 생성
합산취소
선택 라인의 합산 전표를 역분개
→ 원 전표가 다시 합산 대상으로 복귀| 항목 | 산식 · 규칙 |
|---|---|
| 대상 조회 | AUGBL 공란 · 세금코드 A0 · 통화 KRW |
| 동일 고객 제약 | 선택 전표의 고객번호가 모두 같아야 합산 가능 |
| 공급가액 | 선택한 채권 전표 금액의 합계 |
| 세액 | 공급가액 × 세율. 10% 과세면 자동계산, 영세면 0 |
| 단수 조정 | 세액을 수기로 고쳐 원 단위 차이를 맞출 수 있음 |
| 합계 | 공급가액 + 세액 |
| 합산취소 | 합산 전표 역분개 후 원 전표의 clearing 정보 해제 |
고객 일치를 선택 단계에서 알려 주는 이유
합산처리를 누른 뒤에 막으면 무엇이 문제인지 다시 확인해야 합니다. 선택할 때마다 상단 요약이 고객 일치 여부를 색으로 바꾸면, 전표를 고르는 동안 이미 판단이 끝납니다. 고객이 섞인 순간 바로 보이므로 되돌리기도 쉽습니다.
조회 구분 2종
같은 목록이지만 무엇을 보느냐에 따라 쓸 수 있는 조건과 버튼이 달라집니다.
| 조회 구분 | 대상 | 합산전표 검색조건 | 할 수 있는 일 |
|---|---|---|---|
| 합산 대상전표 | AUGBL 이 공란인 채권 전표 | 비활성 | 선택 후 합산처리로 묶음 |
| 합산 완료전표 | 합산 전표가 연결된 채권 전표 | 활성 | 합산 전표번호로 조회, 필요 시 합산취소 |
구분에 따라 버튼도 바뀌므로 지금 할 수 있는 동작만 화면에 남습니다.
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 회사코드 | 필수 | 변경 못함 |
| 회계연도 | 필수 | 기본값 시스템 연도 |
| Document date · Posting Date | 선택 | 기본값 당월 1일 ~ 말일 |
| 전표번호 · Customer · Sales Office | 선택 | 대상 범위를 좁히는 조건 |
| 조회 구분 | 필수 | 합산 대상전표 / 합산 완료전표 |
| 합산전표 검색조건 | 조건부 | 합산 완료전표를 골랐을 때만 작동 (사양서) |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
| 합산상태 | 대상 / 합산완료 — 색으로 구분 |
| Customer · 전표번호 · 회계연도 | 채권 전표 키 |
| Posting Date · Doc. Date · 금액 | 전기일·증빙일과 채권 금액 |
| G/L Account | 외상매출금 계정 |
| Sales Office · Business Place | 영업소와 사업장 |
| Billing Doc. · Billing type · Material | 영업 청구 문서 정보 |
| 합산 전표 · clearing date | 합산 후 채워지는 전표번호와 반제일 |
보조 기능
| 컬럼 | 의미 · 표시 |
|---|---|
| 전체선택 · 전체해제 | 목록 전체를 한 번에 고르거나 풀기 |
| 선택 요약 | 선택 건수·금액과 고객 일치 여부를 색으로 표시 |
| 합산처리 / 합산취소 | 조회 구분에 따라 버튼이 바뀜 |
SAP 표준 기능 매핑
전기는 표준 펑션이 수행합니다. 이 화면은 묶을 대상을 고르고 결과를 되짚는 역할을 합니다.
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
ZFI_DOCUMENT_POSTING | 전표 전기 펑션 | clearing 과 신규 채권전표 생성을 한 번에 |
BSID · BSAD | 미결·반제 채권 | 합산 대상과 완료 전표의 원천 |
FB08 관점 | 전표 역분개 | 합산취소가 대응하는 표준 동작 |
VBRK · VBRP | Billing 문서 | 영업소·자재 등 청구 정보 제공 |
T007S | 세금코드 텍스트 | 10% 과세·영세 선택 목록 |
J_1BBRANCH | 사업장 | 세금계산서 발행 단위 |
운영 데이터 소스 매핑
| 항목 | SAP 원천 | 비고 |
|---|---|---|
| 채권 전표 | BSID · BSAD | BUKRS · KUNNR · GJAHR · BELNR · DMBTR · AUGBL |
| 고객 | KNA1 · KNB1 | 고객번호와 명칭 |
| Billing | VBRK · VBRP | Billing 문서·유형·자재·영업소 |
| 계정 텍스트 | SKAT | G/L 계정 명칭 |
| 세금코드 | T007S | 10% 과세 · 영세만 사용 (사양서) |
도입 시 확인이 필요한 부분
합산 전표의 전표유형과 번호범위, 세금계산서 발행 단위(사업장별인지 회사코드별인지)를 먼저 정해야 합니다. 또 세금코드를 10% 과세와 영세로 제한한 것은 사양서 기준이므로, 면세나 불공제 거래가 있으면 선택 목록과 세액 계산 규칙을 함께 확장해야 합니다.
참고 CDS 뷰
합산 대상과 결과를 함께 볼 때는 채권 전표에 Billing 정보를 붙인 뷰가 편합니다.
@AbapCatalog.sqlViewName: 'ZCSALESAGG'
@EndUserText.label: '매출합산 대상·결과 (Z)'
define view Z_C_SALES_AGGREGATION
as select from bsid as Item
left outer join kna1 as Customer on Item.kunnr = Customer.kunnr
left outer join vbrk as Billing on Item.vbeln = Billing.vbeln
left outer join vbrp as BillItem on Billing.vbeln = BillItem.vbeln
left outer join skat as AcctText on Item.hkont = AcctText.saknr
and AcctText.spras = 'K'
{
key Item.bukrs as Bukrs,
key Item.gjahr as Gjahr,
key Item.belnr as Belnr,
Item.kunnr as Customer,
Customer.name1 as CustomerName,
Item.budat as PostingDate,
Item.bldat as DocumentDate,
Item.dmbtr as Amount,
Item.waers as Currency,
Item.mwskz as TaxCode,
Item.hkont as GlAccount,
AcctText.txt50 as GlAccountName,
Item.bupla as BusinessPlace,
Item.vbeln as BillingDoc,
Billing.fkart as BillingType,
BillItem.vkbur as SalesOffice,
BillItem.matnr as Material,
Item.augbl as ClearingDoc,
Item.augdt as ClearingDate,
// 합산 여부 — AUGBL 공란이면 대상
case when Item.augbl = '' then 'O' else 'C' end as AggStatus
}합산 대상과 결과를 한 뷰에서 확인할 때 쓰는 참고용 설계입니다. 반제 전표는 BSAD 를 union 해 함께 봅니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 전표 목록 |
| 조회조건 | sap.m.Input · DatePicker · ComboBox · RadioButtonGroup |
| 조건부 활성 | 합산전표 검색조건을 조회 구분에 바인딩해 잠금 |
| 전표 목록 | sap.ui.table.Table — 다중선택, 합산상태·고객·전표번호 3컬럼 고정 |
| 선택 요약 | sap.m.ObjectStatus — 고객 일치 여부를 색으로 |
| 합산 팝업 | sap.ui.core.Fragment + sap.m.Dialog — 세금코드 전환 시 세액 재계산 |
| CSV | Blob + UTF-8 BOM |
합산처리와 합산취소 버튼을 바꿔 다는 이유
대상 전표 화면에서는 취소할 것이 없고, 완료 전표 화면에서는 다시 합산할 것이 없습니다. 두 버튼을 항상 함께 두면 상황에 맞지 않는 쪽을 누르게 됩니다. 조회 구분에 따라 하나만 보이게 하면 지금 할 수 있는 동작이 분명해집니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.salesagg) · ko 로케일 · sap_horizon |
Component.js | 조회조건 모델 · 결과 모델 초기화 |
view/Main.view.xml | 조회화면 + 채권 전표 목록 |
view/AggDialog.fragment.xml | 합산 전표 생성 팝업 |
controller/Main.controller.js | 조회 · 선택 점검 · 합산 · 역분개 · CSV |
model/ModelMock.js | 대상·완료 조회 · 동일 고객 점검 · 합산·역분개 시뮬레이션 |
model/formatter.js | 합산상태 · 금액 · 일자 · 세율 포맷터 |
i18n/i18n_ko.properties | ko 로케일 리소스 |
localdata/salesagg.json | 채권 전표·합산 전표 시뮬레이션 데이터 |
검증 결과
화면 구성에 쓴 데이터는 미합산 채권 전표와 이미 묶인 합산 전표입니다.
| 데이터 | 규모 | 구성 |
|---|---|---|
| 채권 전표 | 32건 | 합산 대상 24 · 합산 완료 8 |
| 고객 · 합산전표 | 5곳 · 3건 | 과세·영세 혼재 |
| 대상 금액 | 66,300,000원 | 세금코드 A0 · 통화 KRW |
| 검증 항목 | 결과 |
|---|---|
| 모든 전표의 세금코드 A0 · 통화 KRW · 차변 | 통과 |
| 고객·영업소·사업장·Billing 유형이 마스터에 존재 | 통과 |
| 전기일·증빙일이 조회 기간 내 | 통과 |
| 미합산 전표는 합산전표·clearing date 가 공란 (AUGBL = SPACE) | 통과 |
| 합산 완료 전표는 합산전표 번호·연도·clearing date 보유 | 통과 |
| 합산전표의 고객이 단일 (동일 고객만 합산) | 통과 |
| 합산전표 공급가액 = 구성 전표 합계 · 건수 일치 | 통과 |
| 세액 = 공급가액 × 세율 · 합계 = 공급가액 + 세액 | 통과 |
| 세금코드는 10% 과세 또는 영세만 · 영세는 세액 0 | 통과 |
| 화면 렌더링 — 대상 → 혼재 차단 → 합산 → 완료 조회 → 역분개 | 10/10 |
고객·금액은 모두 검증용 데이터입니다.
자주 묻는 질문
왜 고객이 다르면 합산이 안 되나요?
세금계산서는 공급받는 자별로 발행하기 때문입니다. 고객이 다른 전표를 한 장으로 묶으면 누구에게 발행할지 정할 수 없습니다. 그래서 선택 단계에서 고객이 섞이면 상단 요약이 붉게 바뀌고, 합산처리를 눌러도 어느 고객들이 섞였는지 알려 주며 막습니다.
세액을 수기로 고칠 수 있게 한 이유는?
자동계산은 공급가액 × 세율이라 원 단위에서 실제 세금계산서와 1~2원 차이가 날 수 있습니다. 사양서에 단수 조정을 허용하도록 돼 있고, 실무에서도 발행 문서와 장부를 맞추려면 필요한 기능입니다. 세액을 고치면 합계가 바로 따라 바뀝니다.
합산취소하면 원 전표는 어떻게 되나요?
합산 전표가 역분개되고 원 전표의 clearing 정보가 지워집니다. 즉 다시 합산 대상으로 돌아갑니다. 잘못 묶었거나 세금코드를 잘못 골랐을 때 되돌린 뒤 다시 묶으면 됩니다.
합산전표 검색조건은 왜 평소에 잠겨 있나요?
합산 대상전표는 아직 합산 전표가 없기 때문입니다. 없는 값으로 검색하면 결과가 항상 비어 혼란만 생깁니다. 사양서대로 합산 완료전표를 골랐을 때만 활성화해 그 조건이 의미를 갖는 상황에서만 쓰이게 했습니다.
SAP 표준 기능과 어떻게 이어지나요?
채권 전표는 영업 Billing 이 만들고 데이터는 BSID·BSAD 표준 구조 그대로입니다. 합산은 ZFI_DOCUMENT_POSTING 으로 원 전표를 clearing 하면서 새 채권 전표를 전기하므로, 결과 전표는 표준 조회 화면에서 그대로 보입니다. 역분개도 표준 전표 역분개와 같은 결과입니다.