SAP 내부거래 대사 — 관계사끼리 주고받은 금액이 맞는가
Trading Partner가 등록된 거래처의 매출·매입 전표를 모아 관계사별 차액을 먼저 보여 주는 화면입니다.
연결결산에서 가장 먼저 막히는 자리가 내부거래 금액 불일치입니다.
우리가 관계사에 100을 팔았다고 기록했는데 상대는 90을 샀다고 기록해 두면, 그 차이를 찾아야 제거분개를 할 수 있습니다. 그런데 전표를 하나씩 뒤지기 전에 알아야 할 것은 어느 관계사에서 얼마가 벌어졌는가입니다. 이 화면은 Trading Partner가 등록된 거래처의 매출·매입을 모아 관계사별 차액을 먼저 보여 주고, 그 줄을 누르면 해당 관계사 전표만 남깁니다.
SAP 표준 구조를 그대로 이어받은 부분
- 대상 판정 — 거래처(
KNA1·LFA1)에 Trading Partner가 등록된 코드만 - 매출 —
BSID·BSAD의 AR 자료 - 매입 —
BSIK·BSAK의 AP 자료 - 관계사 마스터 —
T880(Global Company Data) · 계정 텍스트SKAT
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 관계사 내부거래 |
| Namespace | zui5.icrecon |
| 셸 구조 | 조회조건 영역(우측 조회) + 관계사별 요약 + 전표 명세 |
| 화면 수 | 조회 화면 1개 (요약·명세 2단) |
| 데이터 | 전표 23건 (매출 12 · 매입 11) · 관계사 4곳 |
| 성격 | 조회형(Read-Only) |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 6종 둘러보기
조회하면 관계사별 차액이 먼저 보입니다 → 차액이 큰 줄을 눌러 명세로 내려가고 → 매출·매입을 갈라 원인을 좁힙니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- Posting Date 를 확인합니다. 기본값은 전월 1일부터 말일까지입니다.
- 위쪽 관계사별 요약에서 대사 차액을 먼저 봅니다. 차이가 있으면 붉게 표시됩니다.
- 차액이 큰 요약 라인을 클릭하면 그 관계사 전표만 아래에 남습니다.
- 구분을 매출 또는 매입으로 바꿔 어느 방향에서 차이가 났는지 좁힙니다.
- 외화 건은 거래통화 금액과 환율을 함께 확인합니다.
- 조건 해제로 전체 관계사로 돌아가 다음 곳을 확인합니다.
대상 판정과 집계 규칙
대상은 Trading Partner 등록 여부로 가르고, 집계는 관계사 단위로 묶습니다.
조회 대상
Vendor / Customer 마스터에 Trading Partner 가 등록된 코드만 검색
→ 등록되지 않은 일반 거래처는 내부거래가 아니므로 제외
구분별 조회 (사양서)
매출 선택 → 검색조건 기간에 발생된 AR 자료 (BSID / BSAD)
매입 선택 → 검색조건 기간에 발생된 AP 자료 (BSIK / BSAK)
전체 선택 → 매출 + 매입
관계사별 집계
매출액 = 해당 Trading Partner 의 AR 전표 원화금액 합계
매입액 = 해당 Trading Partner 의 AP 전표 원화금액 합계
대사 차액 = 매출액 − 매입액
미결 매출 / 미결 매입 = 반제되지 않은 금액| 항목 | 산식 · 규칙 |
|---|---|
| 대상 판정 | 거래처에 Trading Partner 등록 여부 |
| 매출 | 차변(S) · 채권 계정 · BSID/BSAD |
| 매입 | 대변(H) · 채무 계정 · BSIK/BSAK |
| 원화 환산 | 거래통화 금액 × 적용 환율 |
| 대사 차액 | 관계사별 매출액 − 매입액 |
| 미결 구분 | 반제전표가 없는 건 |
| 요약 연동 | 요약 라인 클릭 시 해당 관계사로 명세 필터 |
요약을 명세 위에 둔 이유
전표 수십 건을 먼저 보면 어디에 문제가 있는지 알 수 없습니다. 관계사별 차액을 먼저 보여 주면 볼 곳이 한두 곳으로 줄고, 그 줄을 눌러 명세로 내려가는 흐름이 만들어집니다. 차액이 있는 관계사를 붉게 표시한 것도 같은 이유입니다.
조회 구분 3종
무엇을 보느냐에 따라 읽는 테이블과 집계 방향이 달라집니다.
| 구분 | 대상 | 읽는 테이블 | 의미 |
|---|---|---|---|
| 매출 | AR | BSID · BSAD | 우리가 관계사에 청구한 금액 |
| 매입 | AP | BSIK · BSAK | 관계사가 우리에게 청구한 금액 |
| 전체 | AR + AP | 네 테이블 모두 | 관계사별로 양방향을 한 화면에서 대사 |
양방향을 한 화면에 두었기에 차액이 어느 쪽에서 났는지 바로 좁힐 수 있습니다.
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| Company code | 필수 | 변경 못함 |
| Posting Date | 필수 | 기본값 전월 1일 ~ 전월 말일 |
| Document Date | 선택 | 증빙일 기준 추가 제한 |
| Document type | 선택 | 전표유형 |
| Trading Partner | 선택 | 관계사. 요약 클릭으로도 채워짐 |
| 구분 | 필수 | 전체 / 매출 / 매입 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
| 구분 · Trading Partner | 매출/매입과 관계사 |
| vendor/Customer · 거래처구분 | 거래처 코드·명칭과 Customer/Vendor 구분 |
| 회계연도 · 전표번호 · Line 번호 | 전표 키 |
| Posting date · Doc. Date | 전기일과 증빙일 |
| 전표유형 | 전표 유형과 명칭 |
| 통화 · 금액 · 환율 · 금액(KRW) | 거래통화 금액과 원화 환산 |
| 계정코드 · 계정코드명 | 채권·채무 계정 |
| 반제여부 · 반제일자 | 미결 여부 판단 |
보조 기능
| 컬럼 | 의미 · 표시 |
|---|---|
| 매출 건수 · 매출액 | 관계사별 AR 집계 |
| 매입 건수 · 매입액 | 관계사별 AP 집계 |
| 대사 차액 | 매출액 − 매입액. 차이가 있으면 붉게 |
| 미결 매출 · 미결 매입 | 아직 반제되지 않은 금액 |
SAP 표준 기능 매핑
전표는 표준이 만들고, 이 화면은 관계사 단위로 모아 차액을 드러냅니다.
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
T880 | Global Company Data | Trading Partner 마스터 |
BSID · BSAD | 미결·반제 채권 | 매출 자료 원천 |
BSIK · BSAK | 미결·반제 채무 | 매입 자료 원천 |
KNA1 · LFA1 | 고객·공급업체 마스터 | Trading Partner 등록 여부 판정 |
FBL5N · FBL1N 관점 | 개별항목 조회 | 전표 단위 확인 |
| 연결결산 | 내부거래 제거 | 대사 차액이 제거분개의 출발점 |
운영 데이터 소스 매핑
| 항목 | SAP 원천 | 비고 |
|---|---|---|
| 채권 | BSID · BSAD | BUKRS · KUNNR · BELNR · DMBTR · AUGBL |
| 채무 | BSIK · BSAK | BUKRS · LIFNR · BELNR · DMBTR · AUGBL |
| 관계사 | T880 | RCOMP 와 명칭 |
| 거래처 | KNA1 · LFA1 | Trading Partner 등록 여부 |
| 계정 텍스트 | SKAT | 계정 명칭 |
도입 시 확인이 필요한 부분
Trading Partner를 거래처 마스터의 어느 필드로 관리하는지 먼저 확인해야 합니다. 또 회사코드가 여러 개인 그룹이면 상대 회사코드 쪽 장부도 같은 화면에서 봐야 대사가 끝나므로, 회사코드 범위와 권한 설계를 함께 잡아야 합니다. 제거분개 대상 계정 범위도 미리 정해 두면 좋습니다.
참고 CDS 뷰
내부거래를 조회할 때는 전표에 거래처와 관계사 정보를 붙인 뷰가 편합니다.
@AbapCatalog.sqlViewName: 'ZCICRECON'
@EndUserText.label: '내부거래 대사 (Z)'
define view Z_C_INTERCOMPANY_RECON
as select from bsid as Item
inner join kna1 as Customer on Item.kunnr = Customer.kunnr
left outer join t880 as Partner on Customer.vbund = Partner.rcomp
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,
key Item.buzei as Buzei,
'AR' as RecordType,
Customer.vbund as TradingPartner,
Partner.name1 as TradingPartnerName,
Item.kunnr as Partner,
Customer.name1 as PartnerName,
Item.budat as PostingDate,
Item.bldat as DocumentDate,
Item.blart as DocumentType,
Item.waers as Currency,
Item.wrbtr as AmountInCurrency,
Item.dmbtr as AmountInKrw,
Item.hkont as GlAccount,
AcctText.txt50 as GlAccountName,
Item.augbl as ClearingDoc,
Item.augdt as ClearingDate
}
where Customer.vbund <> ''매출 측 설계입니다. 매입은 BSIK·LFA1 로 같은 형태를 만들어 union 하고, 반제분은 BSAD·BSAK 를 더합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 요약 · 명세 2단 |
| 조회조건 | DatePicker · ComboBox · RadioButtonGroup |
| 요약 | sap.ui.table.Table — 차액 있으면 행 강조 |
| 명세 | sap.ui.table.Table — 구분·관계사·거래처 3컬럼 고정 |
| 요약-명세 연동 | cellClick → 조회조건의 Trading Partner 설정 후 재조회 |
| 미결 강조 | RowSettings.highlight + 반제여부 컬럼 |
| CSV | Blob + UTF-8 BOM — 사양서 컬럼 순서 |
미결 금액을 요약에 함께 둔 이유
차액을 보면 바로 '왜 다르지'부터 묻게 되는데, 상당수는 반제 시점 차이입니다. 미결 매출·매입을 옆에 두면 차액 중 얼마가 아직 정리되지 않은 건인지 가늠할 수 있어 전표를 열기 전에 한 단계 걸러집니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.icrecon) · ko 로케일 · sap_horizon |
Component.js | 조회조건 모델 · 결과 모델 초기화 |
view/Main.view.xml | 조회화면 + 관계사 요약 + 전표 명세 |
controller/Main.controller.js | 조회 · 구분 필터 · 요약 연동 · CSV |
model/ModelMock.js | AR/AP 분기 조회 · 관계사별 집계 · 차액 계산 |
model/formatter.js | 금액(△ 표기) · 환율 · 구분 · 반제 · 차액 포맷터 |
i18n/i18n_ko.properties | ko 로케일 리소스 |
localdata/icrecon.json | 내부거래 전표 시뮬레이션 데이터 |
검증 결과
화면 구성에 쓴 데이터는 관계사별 매출·매입이 섞인 내부거래 전표입니다.
| 데이터 | 규모 | 구성 |
|---|---|---|
| 전표 | 23건 | 매출 12 · 매입 11 · 미결 10 |
| 금액 | 매출 369,983,300원 | 매입 343,020,400 · 차액 26,962,900 |
| 관계사 | 4곳 | KRW·USD·EUR 거래 혼재 |
| 검증 항목 | 결과 |
|---|---|
| 모든 전표에 Trading Partner 가 등록됨 (T880 존재) | 통과 |
| 매출은 Customer, 매입은 Vendor 마스터에 존재 | 통과 |
| 거래처의 Trading Partner 가 전표와 일치 | 통과 |
| 매출은 차변·채권 계정, 매입은 대변·채무 계정 | 통과 |
| 원화금액 = 거래통화금액 × 환율 · KRW 는 환율 1 | 통과 |
| 전기일이 조회 기간 내 · 증빙일 ≤ 전기일 | 통과 |
| 반제 건만 반제전표·반제일자 보유 | 통과 |
| 반제일자는 전기일 이후 | 통과 |
| 전표번호 중복 없음 · 금액 > 0 | 통과 |
| 화면 렌더링 — 전체 → 매출 → 매입 → 관계사 필터 → 복귀 | 6/6 |
관계사·거래처·금액은 모두 검증용 데이터입니다.
자주 묻는 질문
Trading Partner가 등록된 거래처만 보는 이유는?
내부거래는 관계사끼리의 거래이고, SAP은 그 관계를 거래처 마스터의 Trading Partner로 표시합니다. 이 값이 없으면 일반 외부 거래이므로 대사 대상이 아닙니다. 반대로 관계사인데 이 값이 비어 있으면 목록에 나오지 않으니, 차액이 이상할 때는 마스터 등록부터 확인해야 합니다.
대사 차액이 0이 아니면 무조건 문제인가요?
그렇지는 않습니다. 매출과 매입은 인식 시점이 다를 수 있습니다. 우리가 이번 달에 출하해 청구했는데 상대는 다음 달에 입고 처리하면 기간 차이로 차액이 납니다. 미결 금액을 함께 보여 주는 것도 그래서입니다. 시점 차이인지 금액 자체가 다른지를 먼저 가려야 합니다.
매출만 따로 보는 기능은 언제 쓰나요?
차액이 어느 방향에서 났는지 좁힐 때 씁니다. 매출만 보면 우리가 청구한 금액이, 매입만 보면 상대가 청구한 금액이 정리됩니다. 관계사에서 받은 명세와 대조할 때는 한쪽만 놓고 보는 편이 빠릅니다.
외화 거래는 어떻게 대사하나요?
화면은 원화 환산액으로 집계합니다. 다만 거래통화 금액과 적용 환율도 함께 보여 줍니다. 양쪽이 서로 다른 환율을 썼다면 거래통화 금액은 같은데 원화만 다를 수 있어, 두 값을 모두 확인해야 원인이 잡힙니다.
SAP 표준 기능과 어떻게 이어지나요?
데이터는 BSID·BSAD·BSIK·BSAK 표준 구조 그대로이고 관계사는 T880을 참조합니다. 여기서 확인한 차액이 연결결산의 내부거래 제거분개로 이어지고, 전표 단위 확인은 표준 개별항목 조회 화면에서 계속할 수 있습니다.