SAP 영업활동 현금흐름 직접법·간접법 대사 점검 — IFRS 18(K-IFRS 제1118호)에 따라 개정되는 IAS 7 기준, 영업손익에서 출발하는 간접법과 현금거래로 모은 직접법을 맞추고 이자·배당 분류 차이와 전환 영향을 가려 보는 결산 화면
영업손익 출발 간접법 조정표 · 직접법 5개 구성 · 예금 계정 → 상대 계정 2단계 추적(CDS) · 이자 지급은 재무, 이자·배당 수취는 투자 · 이자·배당 분류 차이 검출 · 종전 IAS 7 대비 전환 영향 · 15개 대사식 전수 검산 — 소개 영상과 실제 화면 8종, 그리고 CDS 코드까지
소개 영상1분 46초11개 장면음성 안내·자막표지 → 도입 포인트 → 실행 화면 → SAP 표준 기능 확장 포인트 → CDS 구성 → 자주 묻는 질문 → 정리
도입 포인트 — 이 앱을 사용해야 하는 이유
IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호)는 2027-01-01 이후 개시하는 회계연도부터 적용되고(조기적용 허용, 비교기간 재작성), 함께 개정되는 IAS 7 현금흐름표(K-IFRS 제1007호)는 두 가지를 바꿉니다. 간접법의 출발점이 당기순이익에서 영업손익(손익계산서 영업 범주 소계)으로 바뀌고, 주된 사업활동이 특정되지 않은 일반 회사는 이자 지급·배당 지급을 재무활동, 이자 수취·배당 수취를 투자활동으로 분류해야 합니다(종전의 정책 선택 폐지). 이 화면은 그 기준으로 영업활동 현금흐름을 직접법과 간접법으로 각각 산출해 같은지 맞춰 보고, 영업활동에 남아 있는 이자·배당 거래를 분류 차이로 가려 내며, 같은 자료로 종전 IAS 7 기준 금액과의 차이(전환 영향)까지 보여 줍니다. 예금 계정 라인은 CDS 로 상대 계정까지 최대 2단계 추적해, 활동 분류의 근거를 전표 라인 단위로 남깁니다. 화면은 분류·집계·대사를 돕는 점검 도구이며 최종 판단은 회사와 감사인이 합니다. 주된 사업이 금융(은행 등)인 회사의 다른 분류는 적용 범위 밖이며 확인 필요입니다.
핵심 포인트 7가지
| 핵심 포인트 | 고객이 얻는 것 | 지금 방식이라면 |
|---|---|---|
| ① IFRS 18 기준 두 방법 동시 산출 | 간접법(영업손익 + 비현금 항목 ± 운전자본 증감 − 법인세 납부)과 직접법(고객 수취 · 공급자 지급 · 종업원 지급 · 기타 영업 지급 · 법인세 납부)을 같은 회사 · 기간으로 함께 구합니다. | 간접법만 엑셀로 다시 짜고, 직접법은 요청이 올 때마다 따로 만듭니다. |
| ② 이자·배당 분류 차이 자동 검출 | 이자 지급 · 배당 지급은 재무활동, 이자 · 배당 수취는 투자활동으로 보고, 영업활동에 남은 이자 · 배당 거래를 T04 · K04 · R05 로 표시합니다. | 종전 정책대로 영업에 둔 이자 거래가 그대로 남아 새 기준 현금흐름표에 섞입니다. |
| ③ 종전 IAS 7 대비 전환 영향 | 같은 자료로 종전 기준 영업CF 를 함께 구해 IFRS 18 영업CF 와의 차이를 이자 지급 · 이자 수취 · 배당 수취로 나눠 보여 줍니다. 샘플 합계 +13.8 백만원입니다. | 비교기간 재작성 때 종전 숫자와 새 숫자의 차이를 손으로 다시 맞춥니다. |
| ④ 차이를 구성별 원인으로 분해 | 구성마다 손익 · 운전자본 유도액과 견주고, 차이를 미분류 거래 · 활동 혼입 · 구성 이동 · 이자·배당 분류 · 잔여 차이로 나눕니다. | 차이가 나면 전표를 처음부터 다시 훑어 원인을 찾습니다. |
| ⑤ 영업손익 출발 간접법 조정표 | 영업손익 · 비현금 항목 · 운전자본 증감 · 법인세 현금 네 구분으로 조정표를 만들고 합계가 영업활동 현금흐름과 같은지 확인합니다. | 당기순이익에서 출발하던 표에 이자 · 법인세 제거 줄을 손으로 고쳐 넣습니다. |
| ⑥ 예금 → 상대 계정 2단계 추적(CDS) | 예금 계정 라인마다 같은 전표의 상대 라인에 금액을 비례 배분하고, 상대가 은행 중간계정이면 반제 전표까지 따라가 최종 거래처 · 계정을 찾습니다(L1 · L2, 미결 L8 · 중단 L9). 추적 결과 활동을 전표 분류와 대조합니다. | 예금 전표의 상대 라인이 여럿이거나 정리 계정을 거치면 상대 계정을 손으로 따라가고, 표준 상대계정 한 칸만 믿습니다. |
| ⑦ 대사식 15종 전수 검산 | 영업손익 재계산, 손익 범주 소계, 구성별 차이 분해, 전환 비교에 예금 라인 배분 합계 · 2단계 배분 · 추적 기준 구성 대사까지 서비스가 매번 다시 계산합니다. | 현금흐름표가 기말현금과 맞는지만 보고 활동 분류는 확인하지 않습니다. |
사례로 보는 효과
같은 기간, 두 가지 원인 — 설비 대금과 이자 지급 — 검증용 샘플에서 회사 1000 · 8월은 간접법 200,400,000원, 직접법 170,400,000원으로 30,000,000원 차이가 났고 원인은 영업활동으로 처리된 설비 대금(활동 혼입)이었습니다. 회사 2000 · 8월은 3,100,000원 차이가 났는데, 이자 지급 1건이 기타 영업 지급으로 남아 있던 IFRS 18 이자·배당 분류 차이(R05)였습니다. 두 회사 6개 기간의 종전 IAS 7 영업CF 합계는 721,300,000원, IFRS 18 영업CF 합계는 735,100,000원으로 전환 영향은 +13,800,000원입니다.
도입하면 달라지는 것
- IFRS 18 기준 현금흐름표를 직접법과 간접법 두 방향에서 맞춰 보고 결산을 닫습니다
- 예금 전표마다 최종 상대 계정과 거래처를 근거로 남깁니다
- 영업활동에 남은 이자 · 배당 거래를 결산 전에 찾아 옮깁니다
- 종전 기준 대비 전환 영향을 비교기간 재작성 자료로 씁니다
- 차이의 원인이 구성 · 원인 단위로 남아 감사 대응 자료가 됩니다
이런 회사에 맞습니다
IFRS 18 도입을 준비하는 상장사 · 해외 모회사 보고 법인의 결산팀, 이자 · 배당을 영업활동으로 분류해 온 회사, 현금흐름표의 활동 분류를 감사 전에 스스로 점검하려는 재무팀에 맞습니다. 주된 사업이 금융인 회사는 적용 범위 밖입니다.
사용 방법
- 회계연도를 넣습니다(필수). 기간 · 회사 · 활동 구분 · 직접법 구성 · 거래처 · 전기일 · 점검 코드 · 점검 결과는 필요할 때만 고르며, 비워 두면 그 조건은 걸리지 않습니다.
- 조회 버튼은 조회조건 영역 입력 칸의 맨 오른쪽에 있습니다. 입력 칸에서 Enter 키를 눌러도 조회되며, 처음 열면 한 번 자동으로 조회합니다.
- 요약에서 점검한 회사·기간 · 간접법과 직접법 영업활동 현금흐름 합계 · 방법 간 차이 절댓값 · 일치하지 않는 회사·기간 · 종전 IAS 7 영업CF 와 전환 영향 · 점검·확인 현금거래 · 정합성 대사 차이를 먼저 봅니다.
- 탭은 방법 간 대사 → 직접법 구성별 차이 → 간접법 조정표 → 현금거래 명세 → 대사 결과 순서로 넘깁니다.
- 방법 간 대사에서 행을 누르면 그 회사·기간의 두 방법 금액과 구성별 차이가 상세 창으로 열립니다.
- CSV 내려받기를 누르면 지금 보는 탭의 조회 결과가 UTF-8 CSV 로 내려옵니다.
숫자를 믿을 수 있는가 — 검증 결과
검증용 샘플 데이터(가상 회사 두 곳, 2026년 7~9월, 회사·기간 6건 · 현금거래 140건)에 대사식과 판정 규칙을 전수로 다시 돌린 결과입니다.
| 대사식 | 검사 건수 | 차이 건수 | 최대 차이(원) |
|---|---|---|---|
| 간접법: 영업손익 + 조정 항목 = 간접법 영업CF | 6 | 0 | 0 |
| 간접법 구분 합계 = 화면 구분값 | 24 | 0 | 0 |
| 영업손익 = 매출 − 영업 범주 비용 | 6 | 0 | 0 |
| 당기순이익 = 영업손익 + 투자 범주 − 재무 범주 − 법인세 | 6 | 0 | 0 |
| 화면 영업손익 = 손익 원천 | 6 | 0 | 0 |
| 직접법 구성 = 영업 현금거래 재집계 | 30 | 0 | 0 |
| 직접법 영업CF = Σ 구성 | 6 | 0 | 0 |
| 유도액 = 관련 손익·현금 + 운전자본 조정 | 30 | 0 | 0 |
| Σ 유도액 = 간접법 영업CF | 6 | 0 | 0 |
| 구성 차이 = 직접 − 유도 | 30 | 0 | 0 |
| 구성 차이 = 미분류 + 활동 혼입 + 구성 이동 + 이자·배당 분류 + 잔여 | 30 | 0 | 0 |
| IFRS 18 분류: 이자 지급 → 재무 · 이자·배당 수취 → 투자 (예외 제외 재집계) | 17 | 0 | 0 |
| 전환 비교: 종전 IAS 7 영업CF − 이자 지급 · 수취 · 배당 수취 = IFRS 18 영업CF | 12 | 0 | 0 |
| 방법 간 차이 = 직접 − 간접 | 6 | 0 | 0 |
| 투자·재무·미분류 = 현금거래 재집계 | 18 | 0 | 0 |
| 기초현금 + 모든 현금거래 = 기말현금 | 6 | 0 | 0 |
| 당월 기초현금 = 전월 기말현금 | 4 | 0 | 0 |
| IFRS 18: 영업활동에 이자·배당 거래 없음(예외 T04 제외) | 1 | 0 | 0 |
| 예금 라인마다 추적 행 존재 | 140 | 0 | 0 |
| 전표별 Σ 배분금액 = 예금 라인 금액 | 140 | 0 | 0 |
| 추적 행 예금 금액 = 현금거래 금액 | 146 | 0 | 0 |
| 배분 금액 재계산(|상대 라인| 비례 · 반올림은 최대 라인) | 144 | 0 | 0 |
| 반올림 조정 재계산 | 144 | 0 | 0 |
| 상대 라인 부호가 예금 라인과 반대 | 146 | 0 | 0 |
| 2단계 배분 합 = 1단계 중간계정 금액 | 2 | 0 | 0 |
| 단계 규칙 — L2 는 반제 전표 있음 · L8 은 반제 없음 · L9 는 반제 후 중간계정 | 6 | 0 | 0 |
| 추적 기준 구성 + 차이 설명분 = 직접법 구성 | 30 | 0 | 0 |
| 추적 판정 재실행(전표 판정과 연결) | 146 | 0 | 0 |
| 추적 판정 = 전표 판정(L1·L2) | 144 | 0 | 0 |
| 판정 규칙 재실행 — 회사·기간 6 · 구성 30 · 현금거래 140 | 176 | 0 | - |
| 서비스 대사 결과(ReconSet) 차이 합계 | 15 | 0 | - |
검사 건수 합계 1,623건, 차이 0건입니다. 판정이 일부러 걸리도록 넣은 예외(활동 혼입 1 · 미분류 입금 1 · 구성 이동 1 · 잔여 차이 1 · IFRS 18 이자·배당 분류 차이 1)는 대사 차이와 따로 셉니다.
무엇으로 만들었나
| 자리 | 무엇 | 왜 그렇게 두었나 |
|---|---|---|
| 화면 컨트롤 | 대사 · 구성 · 거래 탭은 sap.ui.table.Table, 조정표 · 대사 결과 · 상세는 sap.m.Table | 컬럼이 많은 표는 고정 열과 가로 스크롤이 필요하고, 조정표는 원천 문장을 줄바꿈으로 보여 줍니다 |
| 산출·판정 로직 | 샘플 데이터 생성 단계와 서비스(service.js)의 함수 2종 | 판정을 데이터에 싣고 요약 합계는 서비스 함수가 계산해 화면 계산과 어긋날 자리를 없앴습니다 |
| OData 서비스 구성 | OData V2 · manifest 상대 경로 · 엔티티셋 5개(방법 간 대사 · 구성 · 간접법 조정 · 현금거래 · 대사) · 함수 3개(차이 절댓값 합계 · 불일치 회사·기간 수 · 전환 영향 합계) | 화면 블록마다 엔티티셋을 따로 두고 조회조건은 모두 $filter 로 보냅니다 |
| 요약 계산 | 컨트롤러 한 곳에 집계식을 모음 | 같은 값을 여러 곳에서 다르게 계산하지 않도록 |
| 테마 | sap_horizon | SAP 표준 Fiori 앱과 같은 색 · 글꼴 · 간격 |
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) — 결산 · 현금흐름표 |
| 관련 기준서 · 대상 영역 | IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호) 및 그에 따른 IAS 7 현금흐름표(K-IFRS 제1007호) 개정 — 간접법 영업손익 출발, 이자·배당 활동 분류, 직접법·간접법 대사 |
| SAP 표준 T-code | F.01 · FAGLB03 · FAGLL03 · FBL3N |
| Namespace | zui5.cfdual |
| 화면 성격 | 조회 · 점검 (결과 CSV 내려받기) |
| 데이터 연동 | OData V2 |
| 테마 | sap_horizon |
실행 화면
실제로 돌아가는 화면 8종을 사용 순서대로 싣습니다. 그림을 누르면 크게 볼 수 있습니다. 숫자는 모두 같은 검증용 샘플 데이터에서 나와 화면끼리 맞춰 보셔도 됩니다.
처음 열었을 때
회계연도 2026 이 기본값이라 열자마자 두 회사의 7~9월 대사 결과가 IFRS 18 기준으로 보입니다.

회사·기간마다 간접법 영업CF · 직접법 영업CF · 방법 간 차이 옆에 종전 IAS 7 영업CF 와 전환 영향이 나란히 있습니다. 요약의 종전 IAS 7 영업CF 721.3 백만원과 IFRS 18 간접법 735.1 백만원의 차이 +13.8 백만원이 이자 지급을 재무로, 이자·배당 수취를 투자로 옮긴 영향입니다. 6개 기간 중 5곳이 정상이 아니며, 2000·8월은 IFRS 18 이자·배당 분류 차이(R05)입니다.
차이를 구성으로 나누기
두 방법이 같은지만 보면 원인을 모릅니다. 직접법 구성마다 손익과 운전자본에서 다시 구한 금액과 견줍니다.

기타 영업 지급에서 −3,100,000원 차이가 나고, 전액이 이자·배당 분류 열(K04)로 들어갑니다. 재무활동으로 분류해야 하는 이자 지급 1건이 영업에 남은 것이라 직접법만 작아지고 영업손익에서 출발한 간접법은 그대로입니다. 직접법 구성은 이제 고객 수취 · 공급자 지급 · 종업원 지급 · 기타 영업 지급 · 법인세 납부 다섯 개입니다.
간접법을 한 줄씩
간접법 조정표는 IFRS 18 공시 초안의 순서 그대로입니다.

영업손익 183,500,000원에서 감가상각비와 무형자산상각비를 더하고, 매출채권 · 재고자산 · 선급비용 증가는 빼고 매입채무 · 미지급급여 증가는 더한 뒤 법인세 납부를 뺍니다. 당기순이익에서 출발할 때 필요하던 이자·법인세 손익 제거 줄이 없어졌습니다. 모두 더하면 간접법 영업활동 현금흐름 200,400,000원입니다.
원인 거래 찾기
차이의 원인은 결국 현금거래 한 건입니다.

이자 지급은 재무, 예금 이자 수취는 투자로 분류되어 있고, 2000·8월 이자 지급 3,100,000원 1건만 활동 구분이 영업, 직접법 구성이 기타 영업 지급으로 남아 있습니다. 점검 코드 T04(IFRS 18 이자·배당 분류 차이)로 표시되며, 이 한 건이 2000·8월의 방법 간 차이 전부입니다.
예금 계정에서 상대 계정까지
예금 계정에 전기된 라인을 CDS 규칙대로 상대 계정까지 따라갑니다.

공급자 세 곳에 한 번에 지급한 268,100,000원은 같은 전표의 매입채무 3라인에 |금액| 비례로 나뉘고(L1), 276,200,000원 입금은 입금 정리계정을 거쳐 2단계(L2)로 추적됩니다. 배분 금액의 합은 언제나 예금 라인 금액과 같고, 반올림 차이가 나면 금액이 가장 큰 라인에 몰아 반올림 조정 열에 남깁니다. 표준 상대계정(GKONT)과 배분 결과 계정이 같은지도 함께 보여 줍니다.

입금 정리계정(10109100)에 들어간 276,200,000원을 반제 전표 1500000001 에서 따라가 고객 두 곳에 165,700,000원과 110,500,000원으로 나눴습니다. 추적한 활동이 전표에 기록된 활동과 다르면 T02 · T04 로 연결되고, 정리 계정이 아직 반제되지 않으면 L8, 반제 전표에도 정리 계정만 있으면 L9 로 남깁니다.
숫자를 스스로 맞춰 본다
대사 결과 탭은 서비스가 계산한 대사식 15종입니다.

영업손익이 매출에서 영업 범주 비용을 뺀 값과 같은지(③), 영업손익에 투자·재무 범주와 법인세를 반영하면 당기순이익이 되는지(④), 종전 IAS 7 영업CF 에 이자·배당 이동분을 반영하면 IFRS 18 영업CF 가 되는지(⑫), 전표별 배분 합계가 예금 라인 금액과 같은지(⑬), 추적 기준 구성이 직접법 구성과 설명분까지 맞는지(⑮)까지 봅니다. 검증용 샘플에서는 모두 차이 0 입니다.
회사·기간 하나를 끝까지
방법 간 대사 행을 누르면 판단 재료가 한 창에 모입니다.

머리에는 직접법 영업활동 현금흐름과 점검 결과, 그 아래에 간접법 금액과 차이, 종전 기준 금액과 전환 영향, 이자 지급 · 이자 수취 · 배당 수취가 붙습니다. 아래 표에서 차이가 난 구성과 원인 문장을 바로 읽을 수 있습니다.
업무 점검 — IFRS 18 기준 현금흐름 분류 점검표
결산 담당자가 IFRS 18 에 따라 개정되는 IAS 7 기준으로 현금흐름표를 닫기 전에 확인할 항목을, 이 화면의 어디서 보는지와 검증용 샘플 결과로 정리했습니다. 주된 사업이 금융인 회사의 분류는 적용 범위 밖이며 확인 필요입니다.
| 점검 항목 | 기준 | 이 화면에서 보는 곳 | 샘플 결과 |
|---|---|---|---|
| 간접법 출발점 | 영업손익(영업 범주 소계)에서 시작 | 간접법 조정표 I00 · 대사식 ③ | 6개 기간 모두 영업손익 출발 — 차이 0 |
| 이자 지급 | 재무활동 | 현금거래 명세 T04 · 구성 K04 | 1건 영업 분류(2000·8월) — 점검 필요 |
| 이자 수취 · 배당 수취 | 투자활동 | 현금거래 명세 · 전환 비교 | 영업 분류 0건 |
| 배당 지급 | 재무활동 | 현금거래 명세 | 영업 분류 0건 |
| 법인세 납부 | 원칙적으로 영업활동 | 직접법 구성 · 간접법 TX | 영업 유지 |
| 두 방법 일치 | 직접법 = 간접법 | 방법 간 대사 R00 ~ R05 | 6개 기간 중 1곳 R00 |
| 전환 영향 | 종전 IAS 7 대비 차이 설명 | 전환 비교 · 대사식 ⑫ | +13,800,000원 — 차이 0 으로 설명됨 |
| 예금 상대 계정 | 예금 라인 → 최종 상대(최대 2단계) | 예금 → 상대 추적 · 대사식 ⑬ ~ ⑮ | L1 140 · L2 4 · L8 1 · L9 1, 배분 합계 차이 0 |
| 적용 범위 | 주된 사업이 금융인 회사 | - | 적용 범위 밖, 확인 필요 |
화면 뒤에서 일어나는 일
조회를 누르면 화면은 대사 · 구성 · 조정표 · 거래 · 대사 결과 다섯 엔티티셋을 각각 조건과 함께 부르고, 요약의 차이 절댓값 · 불일치 회사·기간 수 · 전환 영향은 서비스 함수로 받습니다. 두 방법의 산출과 판정은 서비스 쪽 데이터에 이미 계산되어 있습니다.
- 간접법 영업CF = 영업손익(영업 범주 소계) + 비현금 항목 ± 운전자본 증감 − 법인세 납부
- 직접법 영업CF = 영업활동으로 분류된 현금거래를 5개 구성으로 모은 합계 — 이자 지급·배당 지급은 재무, 이자·배당 수취는 투자
- 구성별 유도액 — 고객 수취 = 매출 − 매출채권 증가, 공급자 지급 = −(매출원가 + 재고자산 증가 − 매입채무 증가), 종업원 지급 = −(급여 − 미지급급여 증가), 기타 영업 지급 = −(판관비 + 선급비용 증가), 법인세 = 납부액
- Σ 유도액 = 간접법 영업CF (두 방법이 같은 숫자로 만나는 자리)
- 구성별 차이 = 직접 − 유도 = 미분류 거래 + 활동 혼입 + 구성 이동 + 이자·배당 분류 + 잔여
- 방법 간 차이 = 직접법 − 간접법 = Σ 구성별 차이 → 판정 R00 ~ R05
- 전환 영향 = IFRS 18 영업CF − 종전 IAS 7 영업CF = 이자 지급 − 이자 수취 − 배당 수취 (부호 그대로)
- 기초현금 + 영업(직접) + 투자 + 재무 + 미분류 = 기말현금
방법 간 판정 — 조건과 조치
| 코드 | 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|---|
| R00 | 직접법 = 간접법, 모든 구성 일치 | 정상 | 조치 없음 |
| R01 | 총액은 같고 구성이 다름 | 확인 필요 | 영업활동 안 구성 분류 확인 |
| R02 | 차이 원인이 미분류 거래 | 점검 필요 | 미분류 현금거래의 활동을 정함 |
| R03 | 차이에 투자·재무 거래 혼입 | 점검 필요 | 거래 활동 분류를 고침 |
| R04 | 설명되지 않는 잔여 차이 | 점검 필요 | 대응 손익·운전자본이 없는 거래를 찾음 |
| R05 | IFRS 18 이자·배당 분류 차이 — 이자·배당이 영업에 있음 | 점검 필요 | 투자·재무활동으로 옮김 |
구성 · 거래 판정 — 조건과 조치
| 코드 | 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|---|
| K00 | 직접법 금액 = 유도액 | 정상 | 조치 없음 |
| K01 | 미분류 현금거래가 빠져 차이 | 확인 필요 | 활동 구분 확인 |
| K02 | 다른 활동 거래가 섞여 차이 | 점검 필요 | 분류 점검 |
| K03 | 영업활동 안 다른 구성으로 이동 | 확인 필요 | 구성 분류 확인 |
| K04 | 투자·재무로 분류하는 이자·배당이 영업에 섞임(IFRS 18) | 점검 필요 | IFRS 18 분류 점검 |
| K09 | 위 원인으로 설명되지 않음 | 점검 필요 | 원인 확인 |
| T01 · T02 · T03 · T04 | 현금거래 — 활동 미분류 · 활동이 상대계정 기준과 다름 · 영업 안 구성이 다름 · 이자·배당이 영업에 있음 | 확인 필요 · 점검 필요 · 점검 필요 · 점검 필요 | 거래 단위로 분류를 고침 |
조회조건
| 조회조건 | 필수 | 기본값 | $filter |
|---|---|---|---|
| 회계연도 | 필수 | 2026 | Gjahr eq '2026' |
| 기간(월) | 선택 | 전체 | Monat eq '08' |
| 회사 | 선택 | 전체 | Bukrs eq '1000' |
| 활동 구분 | 선택 | 전체 | Activity eq 'OP' |
| 직접법 구성 | 선택 | 전체 | CompId eq '20' · DirectCat eq '20' |
| 거래처·내용 | 선택 | 비어 있음 | substringof('이자', Partner) |
| 전기일 시작 · 종료 | 선택 | 비어 있음 | PostDate ge · le · 구간 |
| 점검 코드 | 선택 | 전체 | CheckCode eq 'R05' |
| 점검 결과 | 선택 | 전체 | CheckStatus eq 'CHECK' |
결과 컬럼
| 컬럼 | 의미 | 산출식 |
|---|---|---|
| 간접법 영업CF | 영업손익에서 출발한 영업활동 현금흐름(IFRS 18) | Σ 간접법 조정 항목 |
| 종전 IAS 7 영업CF · 전환 영향 | 이자·배당을 영업에 두던 종전 정책 기준 금액과 그 차이 | 간접법 − 이자 지급 + 이자·배당 수취 · IFRS 18 − 종전 |
| 직접법 영업CF | 현금거래로 모은 영업활동 현금흐름 | Σ 직접법 구성 |
| 방법 간 차이 | 두 방법의 차이 | 직접 − 간접 |
| 손익·운전자본 유도액 | 구성별로 손익과 운전자본에서 다시 구한 현금 | 관련 손익 + 운전자본 조정 |
| 미분류 거래 · 활동 혼입 · 구성 이동 · 이자·배당 분류 · 잔여 | 구성 차이의 원인 분해 | 차이 = 다섯 칸의 합 |
| 투자활동 · 재무활동 · 미분류 | 영업 밖 현금흐름 | 현금거래 활동별 합계 |
| 기초현금 · 기말현금 | 현금 증감 대사 | 기초 + 모든 현금거래 = 기말 |
좁은 화면에서 달라지는 것
조회조건은 폭에 맞춰 줄을 바꿔 쌓이고, 조회 버튼은 언제나 입력 칸 묶음의 맨 끝에 붙습니다. 표는 회사 · 기간 두 열을 고정한 채 가로로 넘기며, 상세 창은 휴대폰 폭에서 화면 전체를 씁니다.
파일 구성
앱 폴더/
├─ index.html · manifest.json · Component.js
├─ controller/ BaseController · Main.controller
├─ view/ Main.view.xml · DetailDialog.fragment.xml
├─ model/ formatter · ErrorHandler
├─ css/ · i18n/
├─ odata/ 서비스 정의 · 서비스 로직 · 엔티티셋별 데이터
└─ media/ 소개 영상
SAP 표준 기능 확장 포인트
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회 · 검증 관점을 더해 확장합니다. 표준에서 만든 현금흐름표를 없애지 않고, 같은 원장 데이터로 IFRS 18 기준 두 방법을 다시 구해 맞춰 보고 이자 · 배당 분류를 점검하는 자리를 더합니다.
표준으로 되는 것과 안 되는 것
| 하고 싶은 일 | SAP 표준 | 표준에서는 | 이 화면이 더하는 것 |
|---|---|---|---|
| 재무제표 숫자 | F.01 재무제표 | 손익 · 재무상태표를 정확히 냅니다 | 영업손익(영업 범주 소계)과 운전자본 증감을 간접법 출발점으로 이어받습니다 |
| 계정 잔액 증감 | FAGLB03 | 월별 잔액과 증감을 보여 줍니다 | 운전자본 증감을 구성별 유도액으로 바꿉니다 |
| 현금 계정 명세 | FAGLL03 · FBL3N | 거래 명세를 보여 줍니다 | 상대계정 기준 활동과 실제 분류를 견줍니다 |
| 직접법 현금흐름 | 없음 | 표준 보고서 구성에 따라 다르며 직접법 구성별 집계는 회사가 따로 만듭니다(확인 필요) | 현금거래를 7개 구성으로 모읍니다 |
| 두 방법의 대사 | 없음 | 표준 화면에 두 방법을 맞추는 자리가 없습니다 | 직접 − 간접 차이와 구성별 원인을 냅니다 |
| IFRS 18 이자·배당 분류 점검 | 없음 | 분류가 새 기준을 따르는지 묻는 화면이 없습니다 | 영업에 남은 이자·배당을 T04 로 표시하고 전환 영향을 냅니다 |
| 활동 분류 점검 | 없음 | 분류가 맞는지 묻는 화면이 없습니다 | 상대계정 기준과 다른 거래를 표시합니다 |
T-code 별 연계 지점
| T-code | 이름 | 연계 |
|---|---|---|
| F.01 | 재무제표 | 영업손익 · 당기순이익과 운전자본 계정의 기초 · 기말 잔액을 이어받습니다. 이 화면의 영업손익이 IFRS 18 손익계산서의 영업 범주 소계와 같은지가 첫 대사 지점입니다(재무제표 구성은 IFRS 18 범주 반영 여부 확인 필요). |
| FAGLB03 | 총계정원장 잔액 조회 | 매출채권 · 재고자산 · 매입채무 · 선급비용 · 미지급급여 계정의 월별 증감을 확인하고, 간접법 조정표의 운전자본 증감과 맞춥니다. |
| FAGLL03 | 총계정원장 개별 항목 조회 | 현금 계정의 거래 명세와 상대계정을 확인합니다. 점검 필요로 나온 현금거래가 어떤 전표였는지 여기서 봅니다. |
| FBL3N | G/L 계정 개별 항목 | 활동 혼입 · 미분류로 나온 전표를 열어 상대계정을 고치거나 활동 매핑을 보완합니다. |
운영으로 옮길 때 기존 현금흐름표 작성 절차를 없앨 필요는 없습니다. 법정 공시와 감사 대응은 표준과 기존 절차에 두고, 이 화면은 결산 마감 전 검증 단계로 씁니다.
S/4HANA 분석 스택과의 자리
현금 계정 거래 큐브와 간접법 조정 큐브를 분석 쿼리로 만들어 두면 표준 Fiori 분석 앱과 Analysis for Office 가 같은 숫자를 띄웁니다. 재무제표 표준 보고서 위에 IFRS 18 기준 두 방법의 대사와 이자 · 배당 분류 점검, 전환 영향을 얹는 자리입니다.
확장 포인트 — 운영에서 실제로 손대는 자리
| 자리 | 무엇을 | 어디서 | 누가 |
|---|---|---|---|
| 상대계정 → 활동 · 구성 매핑 | 계정별 영업 · 투자 · 재무와 직접법 구성 | 매핑 테이블(유지보수 뷰) | 결산팀 |
| 손익 범주 매핑(IFRS 18) | 손익 계정의 영업 · 투자 · 재무 · 법인세 범주 | 매핑 테이블 | 결산팀 |
| 이자 · 배당 활동 | 이자 지급·배당 지급 재무, 이자·배당 수취 투자(일반 회사) | 매핑 테이블 | 결산팀 · 감사인 협의 |
| 운전자본 계정 범위 | 어느 계정을 운전자본으로 볼지 | CDS 뷰의 계정 범위 | 결산팀 |
| 비현금 항목 범위 | 상각 · 환산손익 · 충당금 전입 등 | 매핑 테이블 | 결산팀 |
| 권한 | 회사코드 | DCL(pfcg_auth) | 보안 |
요구사항 매핑표
| 기준서 | 요구사항 | 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| IFRS 18(K-IFRS 제1118호)에 따른 IAS 7 개정 | 간접법 출발점 — 영업손익(영업 범주 소계) | 간접법 조정표 | 손익 범주 · 운전자본 계정 | 4개 구분 |
| IFRS 18(K-IFRS 제1118호)에 따른 IAS 7 개정 | 이자 지급 · 배당 지급은 재무활동, 이자 수취 · 배당 수취는 투자활동(주된 사업활동이 특정되지 않은 회사) | 현금거래 명세 · 이자·배당 분류 판정 | 상대계정 활동 매핑 | T04 · K04 · R05 |
| IAS 7 현금흐름표(K-IFRS 제1007호) | 영업활동 현금흐름의 직접법 표시 | 직접법 구성별 차이 | 현금 계정 거래 + 상대계정 | 5개 구성 |
| IAS 7 현금흐름표(K-IFRS 제1007호) | 영업 · 투자 · 재무활동 구분, 법인세 현금흐름은 원칙적으로 영업활동 | 활동 혼입 판정 · 법인세 납부 구성 | 상대계정 활동 매핑 | T02 · K02 · R03 |
| IFRS 18(K-IFRS 제1118호) 경과 규정 | 2027-01-01 이후 개시 회계연도 적용, 비교기간 재작성 | 전환 비교 — 종전 IAS 7 영업CF · 전환 영향 | 현금거래 · 손익 | 대사식 ⑫ |
| 적용 범위 밖 | 주된 사업이 금융(은행 등)인 회사의 이자 · 배당 분류 | - | - | 확인 필요 |
CDS 구성
검증 화면은 회사 · 기간 6건을 서비스 데이터로 들고 있지만, 운영에서는 현금 계정 라인과 손익 · 운전자본 집계를 CDS 로 내립니다. 코드는 스케치이며 표준 필드명은 릴리스에 따라 다르므로 주석에 확인할 자리를 적었습니다.
뷰 레이어 구성
| 레이어 | 뷰 | 하는 일 | 왜 나누나 |
|---|---|---|---|
| 기준 | ZCF_ACCTMAP | 계정 → 현금 여부 · 활동 · 직접법 구성 · 간접법 구분 | 분류 정책은 회사마다 다르고 바뀝니다 |
| 차원 | ZI_CfAccount | 계정 한 행 + 매핑 + 텍스트 | 큐브가 같은 계정 정의를 보게 합니다 |
| 큐브(거래) | ZI_CfCashLine | 현금 계정 라인 + 상대계정 활동 | 직접법과 활동 점검의 원천 |
| 큐브(조정) | ZI_CfIndirect | 손익 · 운전자본 계정의 기간 금액과 증감 | 간접법과 구성별 유도액의 원천 |
| 쿼리 | ZC_CfDualQuery | 회사 · 기간별 두 방법과 차이 | 표준 분석 도구가 그대로 띄웁니다 |
| 권한 | ZI_CFCASHLINE (DCL) | 회사코드 권한 | 집계를 읽는 자리에 겁니다 |
| 추적(기본) | ZI_CFD_BankLine | 예금 계정 라인(ACDOCA 0L, T012K-HKONT) | 추적의 출발점을 한 곳에서 정합니다 |
| 추적(1단계) | ZI_CFD_OffsetLine · ZI_CFD_OffsetSum | 같은 전표 상대 라인과 비례 배분 | 분모를 따로 집계해야 배분이 맞습니다 |
| 추적(2단계) | ZI_CFD_ClearingTrace | 은행 중간계정 → 반제 전표 → 최종 상대 | 정리 계정을 거친 거래를 거래처까지 |
| 추적(소비) | ZC_CFD_BankOffsetTrace | 최종 상대 · 단계 · 배분 · IFRS 18 활동 | 전표 분류와 대조하는 자리 |
| 서비스 | ZUI_CFDUAL | Service Definition | 화면이 부르는 엔티티셋을 묶습니다 |
① 계정 매핑 테이블
두 방법의 모든 숫자가 이 표에서 갈립니다. 계정마다 현금 계정인지, 상대계정이라면 어느 활동 · 어느 직접법 구성인지, 손익 · 운전자본 계정이라면 간접법의 어느 구분인지를 적습니다. 운영 전환에서 가장 먼저 합의할 항목입니다.
" ────────────────────────────────────────────────────────────────
" ZCF_ACCTMAP — 계정 → 현금흐름 분류 매핑 (투명 테이블)
" 역할 : 현금 계정 여부 · 활동(OP/INV/FIN) · 직접법 구성 · 간접법 구분
" 나눈 이유 : IFRS 18 손익 범주와 이자·배당 활동 분류를 코드가 아니라 표로 관리한다.
" ────────────────────────────────────────────────────────────────
@EndUserText.label : '현금흐름 계정 매핑'
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zcf_acctmap {
key mandt : mandt not null;
key ktopl : ktopl not null;
key saknr : saknr not null;
is_cash : abap.char(1); " X = 현금및현금성자산 계정
activity : abap.char(3); " OP · INV · FIN (상대계정일 때)
direct_cat : abap.char(2); " 10 수취 · 20 공급자 · 30 종업원 · 40 기타 · 70 법인세 (이자·배당은 투자·재무)
pl_category : abap.char(3); " IFRS 18 손익 범주 OPR 영업 · INV 투자 · FIN 재무 · TAX 법인세
ind_section : abap.char(2); " OP 영업손익 · NC 비현금 · WC 운전자본 · TX 법인세
wc_sign : abap.char(1); " + 부채성(증가 가산) · - 자산성(증가 차감)
}
② 계정 차원 뷰
계정 마스터에 매핑을 붙인 한 행입니다. 거래 큐브와 조정 큐브가 같은 정의를 봅니다.
" ────────────────────────────────────────────────────────────────
" ZI_CfAccount — 계정 차원 (SKA1 + 매핑)
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '현금흐름 — 계정 차원'
@Analytics.dataCategory: #DIMENSION
define view entity ZI_CfAccount
as select from ska1 as s
left outer join zcf_acctmap as m on m.ktopl = s.ktopl and m.saknr = s.saknr
{
key s.ktopl as ChartOfAccounts,
key s.saknr as GLAccount,
m.is_cash as IsCash,
m.activity as Activity,
m.direct_cat as DirectCat,
m.pl_category as PlCategory,
m.ind_section as IndSection,
m.wc_sign as WcSign
}
③ 현금 계정 거래 큐브
현금 계정 라인마다 같은 전표의 상대 라인 계정을 붙여 활동과 직접법 구성을 정합니다. 상대 라인이 여러 개인 전표의 배분 규칙은 운영에서 정해야 합니다(확인 필요).
" ────────────────────────────────────────────────────────────────
" ZI_CfCashLine — 현금 계정 라인 + 상대계정 분류
" 주의 : 상대 라인이 여럿인 전표의 금액 배분은 확인 필요
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '현금흐름 — 현금 계정 거래'
@Analytics.dataCategory: #CUBE
define view entity ZI_CfCashLine
as select from acdoca as c
inner join ZI_CfAccount as ca on ca.GLAccount = c.racct and ca.IsCash = 'X'
inner join acdoca as o on o.rldnr = c.rldnr and o.rbukrs = c.rbukrs
and o.gjahr = c.gjahr and o.belnr = c.belnr
and o.docln <> c.docln
left outer join ZI_CfAccount as oa on oa.GLAccount = o.racct
{
key c.rbukrs as CompanyCode,
key c.gjahr as FiscalYear,
key c.belnr as DocNo,
key c.docln as DocLine,
c.poper as Period,
c.budat as PostDate,
@Semantics.amount.currencyCode: 'Currency'
c.hsl as Amount,
c.rhcur as Currency,
coalesce( oa.Activity, 'UNK' ) as Activity,
oa.DirectCat as DirectCat
}
where c.rldnr = '0L'
④ 간접법 조정 큐브
IFRS 18 영업 범주 손익 계정만 출발점(영업손익)으로 모으고, 운전자본 계정은 기말 − 기초 증감을 냅니다. 투자 · 재무 범주 손익(이자 · 배당수익, 이자비용)은 간접법에 들어오지 않습니다.
" ────────────────────────────────────────────────────────────────
" ZI_CfIndirect — 간접법 조정 항목 (영업손익 · 비현금 · 운전자본)
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '현금흐름 — 간접법 조정'
@Analytics.dataCategory: #CUBE
define view entity ZI_CfIndirect
as select from acdoca as a
inner join ZI_CfAccount as m on m.GLAccount = a.racct
{
key a.rbukrs as CompanyCode,
key a.gjahr as FiscalYear,
key a.poper as Period,
key m.IndSection as Section,
// 손익 계정은 기간 금액(부호 반전), 운전자본은 증감 × 부호
sum( case when m.IndSection = 'WC' and m.WcSign = '-' then - a.hsl
when m.IndSection = 'WC' then a.hsl
else - a.hsl end ) as Amount
}
where a.rldnr = '0L'
and ( m.IndSection <> 'OP' or m.PlCategory = 'OPR' ) // 출발점은 영업 범주만
group by a.rbukrs, a.gjahr, a.poper, m.IndSection
⑤ 분석 쿼리
회사 · 기간별 두 방법을 나란히 두는 쿼리입니다. 직접법은 영업활동 현금거래 합계, 간접법은 조정 큐브 합계입니다.
" ────────────────────────────────────────────────────────────────
" ZC_CfDualQuery — 두 방법 대사 쿼리
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '영업활동 현금흐름 직접법·간접법 대사'
@Analytics.query: true
define transient view entity ZC_CfDualQuery
provider contract analytical_query
as projection on ZI_CfCashLine
{
@Consumption.filter: { selectionType: #SINGLE, mandatory: true }
@AnalyticsDetails.query.axis: #ROWS
CompanyCode,
@Consumption.filter: { selectionType: #SINGLE, mandatory: true }
FiscalYear,
@AnalyticsDetails.query.axis: #ROWS
Period,
@AnalyticsDetails.query.axis: #COLUMNS
Activity,
Amount
}
⑥ 권한(DCL)
회사코드 권한을 거래 큐브에 겁니다.
" ────────────────────────────────────────────────────────────────
" DCL — 회사코드 권한
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '현금흐름 거래 권한'
@MappingRole: true
define role ZI_CFCASHLINE {
grant select on ZI_CfCashLine
where ( CompanyCode ) = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' );
}
⑦ 서비스 정의
화면이 부르는 엔티티셋을 묶습니다. 운영 전환 시 서비스 바인딩을 게시하고 manifest 의 서비스 주소만 바꿉니다.
" ────────────────────────────────────────────────────────────────
" ZUI_CFDUAL — Service Definition
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '현금흐름 직접법·간접법 대사 서비스'
define service ZUI_CFDUAL {
expose ZI_CfCashLine as TxSet;
expose ZI_CfIndirect as IndirectSet;
}
예금 계정 → 상대 계정 추적 — 데이터 흐름
예금 계정에 전기된 라인을 상대 계정까지 추적하는 뷰 5벌입니다. 종전에 확인 필요로 남겼던 "상대 라인이 여럿인 현금 전표의 배분 규칙" 은 아래 규칙으로 해소했고, 실제 회사 규칙 합의만 확인 필요로 남깁니다.
예금 계정 라인 (ZI_CFD_BankLine: ACDOCA 0L, T012K-HKONT / ZCFD_BANKACCT)
│ 같은 전표 · 부호 반대 · 비예금 라인
▼
1단계 상대 라인 (ZI_CFD_OffsetLine ← 분모 ZI_CFD_OffsetSum)
│ 배분 = 예금 HSL × |상대 HSL| ÷ Σ|상대 HSL| (반올림 차이 → 최대 라인)
├── 상대가 은행 중간계정이 아님 ─────────────► L1 확정
└── 상대가 은행 중간계정(ZCFD_BANKCLR)
│ AUGBL · AUGDT 로 반제 전표
▼
2단계 (ZI_CFD_ClearingTrace)
├── 반제 전표의 비중간계정 라인(D · K · S) ──► L2 확정 (같은 비례 배분)
├── 미반제(AUGBL 없음) ───────────────────► L8 미결
└── 반제 전표에도 중간계정만 ─────────────► L9 추적 중단
▼
소비 뷰 (ZC_CFD_BankOffsetTrace) + ZCFD_ACCTMAP → IFRS 18 활동 · 직접법 구성 → 전표 판정(T02 · T04)과 대조
배분 규칙과 단계 코드
- 분모 = 같은 전표에서 예금 라인과 부호가 반대인 비예금 라인의 |HSL| 합계 (같은 부호 라인 — 매입할인 등 — 은 빠짐)
- 배분 금액 = 예금 라인 HSL × 상대 라인 |HSL| ÷ 분모, 원 단위 반올림
- 반올림 차이(예금 라인 − Σ 배분)는 |HSL| 가 가장 큰 라인(같으면 앞 라인)에 더함 — 서비스 또는 AMDP 처리
- 상대가 은행 중간계정이면 그 라인의 AUGBL · AUGDT 로 반제 전표를 찾아 중간계정이 아닌 라인에 같은 규칙으로 다시 배분(최대 2단계)
- 표준 상대계정(GKONT · GKOAR)은 참고 열 — 배분 결과 계정과 같은지 플래그만 둠(결정 로직 · FINS_MIG_GKONT 확인 필요)
- 이 규칙으로 종전 "상대 라인이 여럿인 현금 전표의 배분 규칙(확인 필요)" 을 해소했다 — 실제 회사 규칙 합의는 확인 필요
| 코드 | 이름 | 조건 | 처리 |
|---|---|---|---|
| L1 | 1단계 확정 | 같은 전표의 반대 부호 비예금 라인이 최종 상대 | 배분 금액으로 활동 · 구성 판정 |
| L2 | 2단계 확정 | 1단계 상대가 은행 중간계정이고, 반제 전표의 비중간계정 라인이 최종 상대 | 반제 전표 기준으로 판정 |
| L8 | 미결 | 1단계 상대가 은행 중간계정인데 아직 반제되지 않음 | 정리 후 다시 추적 — 확인 필요 |
| L9 | 추적 중단 | 반제 전표에도 은행 중간계정만 있어 2단계를 넘음 | 정리 계정 흐름 확인 — 확인 필요 |
⑧ ZI_CFD_BankLine — 예금 계정 라인 (기본)
총계정원장 0L 원장에서 예금 계정에 전기된 라인만 고릅니다. 예금 계정 판별은 하우스뱅크 계정(T012K-HKONT)을 우선 쓰고, 그것으로 정할 수 없는 계정은 고객 매핑 테이블(ZCFD_BANKACCT)로 보충합니다. 실제 판별 기준(SKB1 의 은행 계정 표시 사용 여부 포함)은 확인 필요입니다.
" ────────────────────────────────────────────────────────────────
" ZI_CFD_BankLine — 예금 계정 라인
" 원천 : ACDOCA (RLDNR = '0L')
" 판별 : T012K-HKONT(하우스뱅크 계정) 우선, ZCFD_BANKACCT(고객 매핑) 보충
" SKB1 은행 계정 표시 사용 여부는 확인 필요
" ────────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '예금 계정 라인'
@Analytics.dataCategory: #FACT
@VDM.viewType: #BASIC
define view entity ZI_CFD_BankLine
as select from acdoca as a
left outer join t012k as h on h.bukrs = a.rbukrs
and h.hkont = a.racct
left outer join zcfd_bankacct as z on z.bukrs = a.rbukrs
and z.saknr = a.racct
{
key a.rbukrs as CompanyCode,
key a.gjahr as FiscalYear,
key a.belnr as DocNo,
key a.docln as DocLine,
a.racct as BankAccount,
a.budat as PostingDate,
a.blart as DocumentType,
a.poper as Period,
@Semantics.amount.currencyCode: 'Currency'
a.hsl as Amount,
a.rhcur as Currency,
a.augbl as ClearingDoc,
a.augdt as ClearingDate,
a.gkont as GkontStd, // 표준 상대계정 — 결정 로직 · FINS_MIG_GKONT 확인 필요
a.gkoar as GkoarStd,
case when h.hkont is not null then 'H' else 'Z' end as BankSource // H 하우스뱅크 · Z 고객 매핑
}
where a.rldnr = '0L'
and ( h.hkont is not null or z.saknr is not null )
⑨ ZI_CFD_OffsetSum — 같은 전표 반대 부호 비예금 라인 합계 (보조 집계)
배분 분모입니다. 예금 라인과 부호가 반대인 비예금 라인의 |HSL| 를 전표별로 더합니다. 같은 부호 라인(매입할인 등)은 분모에서 빠집니다.
" ────────────────────────────────────────────────────────────────
" ZI_CFD_OffsetSum — 배분 분모(전표 · 부호별 비예금 라인 |HSL| 합계)
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '상대 라인 합계(배분 분모)'
define view entity ZI_CFD_OffsetSum
as select from acdoca as o
left outer join ZI_CFD_BankLine as b on b.CompanyCode = o.rbukrs
and b.FiscalYear = o.gjahr
and b.DocNo = o.belnr
and b.DocLine = o.docln
{
key o.rbukrs as CompanyCode,
key o.gjahr as FiscalYear,
key o.belnr as DocNo,
key case when o.hsl < 0 then 'H' else 'S' end as Side, // 상대 라인의 차대
sum( abs( o.hsl ) ) as OffsetAbsTotal
}
where o.rldnr = '0L'
and b.DocLine is null // 비예금 라인만
group by o.rbukrs, o.gjahr, o.belnr, case when o.hsl < 0 then 'H' else 'S' end
⑩ ZI_CFD_OffsetLine — 같은 전표 1단계 상대 라인
예금 라인마다 같은 전표의 반대 부호 비예금 라인을 붙이고, 배분 금액 = 예금 라인 HSL × 상대 라인 |HSL| ÷ 분모로 구합니다. 표준 상대계정(GKONT · GKOAR)을 참고 열로 두고 배분 결과 계정과 같은지 플래그를 답니다. 표준 GKONT 결정 로직과 마이그레이션 여부(FINS_MIG_GKONT)는 확인 필요입니다. 반올림 차이는 CDS 에서 순위 함수를 쓰기 어려워 소비 뷰 아래 서비스(또는 AMDP)에서 금액이 가장 큰 라인에 몰아 줍니다.
" ────────────────────────────────────────────────────────────────
" ZI_CFD_OffsetLine — 1단계 상대 라인과 비례 배분
" 배분 : 예금 HSL × |상대 HSL| ÷ ZI_CFD_OffsetSum.OffsetAbsTotal
" 반올림 차이 : 서비스(AMDP 대안)에서 |상대 HSL| 최대 라인에 가산
" GKONT/GKOAR : 표준 상대계정 — 결정 로직 · FINS_MIG_GKONT 는 확인 필요
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '예금 상대 라인(1단계)'
@Analytics.dataCategory: #FACT
define view entity ZI_CFD_OffsetLine
as select from ZI_CFD_BankLine as b
inner join acdoca as o on o.rldnr = '0L'
and o.rbukrs = b.CompanyCode
and o.gjahr = b.FiscalYear
and o.belnr = b.DocNo
and o.docln <> b.DocLine
and ( ( b.Amount > 0 and o.hsl < 0 ) or ( b.Amount < 0 and o.hsl > 0 ) )
left outer join ZI_CFD_BankLine as ob on ob.CompanyCode = o.rbukrs and ob.FiscalYear = o.gjahr
and ob.DocNo = o.belnr and ob.DocLine = o.docln
inner join ZI_CFD_OffsetSum as s on s.CompanyCode = b.CompanyCode
and s.FiscalYear = b.FiscalYear
and s.DocNo = b.DocNo
and s.Side = case when b.Amount > 0 then 'H' else 'S' end
association [0..1] to zcfd_bankclr as _Mid on _Mid.saknr = o.racct // 은행 중간계정 목록
{
key b.CompanyCode,
key b.FiscalYear,
key b.DocNo,
key b.DocLine,
key o.docln as OffsetLine,
b.BankAccount,
b.Amount as BankAmount,
b.Currency,
o.racct as OffsetAccount,
o.koart as OffsetAccountType, // D 고객 · K 공급업체 · S 총계정 · A 자산
o.kunnr as Customer,
o.lifnr as Supplier,
o.hsl as OffsetAmount,
o.augbl as OffsetClearingDoc,
o.augdt as OffsetClearingDate,
cast( b.Amount as abap.dec(23,2) )
* cast( abs( o.hsl ) as abap.dec(23,2) )
/ cast( s.OffsetAbsTotal as abap.dec(23,2) ) as AllocRaw, // 반올림 전 배분
b.GkontStd,
b.GkoarStd,
case when b.GkontStd = o.racct then 'X' else '' end as GkontMatch,
case when _Mid.saknr is not null then 'X' else '' end as IsBankClearing,
_Mid
}
where ob.DocLine is null
⑪ ZI_CFD_ClearingTrace — 반제 2단계 추적
1단계 상대가 은행 중간계정(정리 계정, 미결관리)이면 그 라인의 AUGBL · AUGDT 로 반제 전표를 찾고, 반제 전표 안의 중간계정이 아닌 라인(KOART D · K · S, KUNNR · LIFNR)을 최종 상대로 잡아 같은 방식으로 비례 배분합니다. 미반제는 L8, 반제 전표에도 중간계정만 있으면 L9(추적 중단)입니다. 단계는 최대 2단계입니다.
" ────────────────────────────────────────────────────────────────
" ZI_CFD_ClearingTrace — 은행 중간계정 반제 전표 추적(2단계)
" L2 반제 전표의 비중간계정 라인으로 확정 · L8 미반제 · L9 반제 후에도 중간계정
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '예금 상대 추적(2단계 · 반제)'
@Analytics.dataCategory: #FACT
define view entity ZI_CFD_ClearingTrace
as select from ZI_CFD_OffsetLine as l
left outer join acdoca as c on c.rldnr = '0L'
and c.rbukrs = l.CompanyCode
and c.belnr = l.OffsetClearingDoc
and c.gjahr = left( l.OffsetClearingDate, 4 ) // 반제 연도 — 회계연도 변형이 있으면 확인 필요
and c.racct <> l.OffsetAccount
left outer join zcfd_bankclr as m on m.saknr = c.racct
{
key l.CompanyCode,
key l.FiscalYear,
key l.DocNo,
key l.DocLine,
key l.OffsetLine,
key coalesce( c.docln, '000000' ) as ClearLine,
l.BankAmount,
l.AllocRaw as MidAlloc, // 1단계에서 중간계정에 배분된 금액
l.OffsetAccount as MidAccount,
l.OffsetClearingDoc as ClearingDoc,
l.OffsetClearingDate as ClearingDate,
c.racct as FinalAccount,
c.koart as FinalAccountType,
c.kunnr as Customer,
c.lifnr as Supplier,
c.hsl as FinalAmount,
case when l.OffsetClearingDoc = '' then 'L8'
when m.saknr is not null then 'L9'
else 'L2' end as TraceLevel
}
where l.IsBankClearing = 'X'
⑫ ZC_CFD_BankOffsetTrace — 소비 뷰 — 예금 라인 → 최종 상대
1단계 확정(L1)과 2단계 결과(L2 · L8 · L9)를 합쳐 예금 라인마다 최종 상대 계정 · 계정 유형 · 거래처 · 단계 · 배분 금액을 냅니다. 상대 계정은 매핑 테이블(ZCFD_ACCTMAP)로 IFRS 18 활동과 직접법 구성을 붙이고, 추적 활동이 전표에 기록된 활동과 다르면 현금거래 판정 T02 · T04 와 연결합니다.
" ────────────────────────────────────────────────────────────────
" ZC_CFD_BankOffsetTrace — 소비 뷰(서비스 정의에서 TraceSet 으로 노출)
" 단계 : L1 1단계 확정 · L2 2단계 확정 · L8 미결 · L9 추적 중단
" 활동 : ZCFD_ACCTMAP — IFRS 18 에 따른 IAS 7 개정 기준(이자 지급 재무 · 이자·배당 수취 투자)
" ────────────────────────────────────────────────────────────────
@EndUserText.label: '예금 → 상대 계정 추적'
@Analytics.dataCategory: #CUBE
@Metadata.allowExtensions: true
@UI.headerInfo: { typeName: '예금 상대 추적', typeNamePlural: '예금 상대 추적' }
define view entity ZC_CFD_BankOffsetTrace
as select from ZI_CFD_OffsetLine as l
association [0..1] to zcfd_acctmap as _Map on _Map.saknr = $projection.FinalAccount
{
@Consumption.filter: { selectionType: #SINGLE, mandatory: true }
@UI.selectionField: [{ position: 10 }]
key l.CompanyCode,
@Consumption.filter: { selectionType: #SINGLE, mandatory: true }
key l.FiscalYear,
@UI.lineItem: [{ position: 10 }]
key l.DocNo,
key l.DocLine,
key l.OffsetLine,
@UI.lineItem: [{ position: 20 }]
'L1' as TraceLevel,
l.BankAccount,
@UI.lineItem: [{ position: 30 }]
l.BankAmount,
@UI.lineItem: [{ position: 40 }]
l.OffsetAccount as FinalAccount,
l.OffsetAccountType as FinalAccountType,
coalesce( l.Customer, l.Supplier ) as Partner,
@UI.lineItem: [{ position: 50 }]
l.AllocRaw as AllocAmount, // 반올림 · 최대 라인 가산은 서비스에서
l.GkontStd,
l.GkontMatch,
@UI.lineItem: [{ position: 60 }]
_Map.activity as TraceActivity, // OP · INV · FIN
_Map.direct_cat as TraceCat,
_Map
}
where l.IsBankClearing = ''
// 2단계 결과(L2 · L8 · L9)는 ZI_CFD_ClearingTrace 를 같은 모양으로 projection 해 union all 로 붙인다(구문 길이상 생략, 서비스에서 합침)
" Service Definition 에서 노출
" @EndUserText.label: '현금흐름 직접법·간접법 대사 서비스'
" define service ZUI_CFDUAL {
" expose ZC_CFD_BankOffsetTrace as TraceSet;
" }
운영 시점에 해야 할 일
개발보다 정하는 일이 많습니다.
| 해야 할 일 | 무엇을 정하나 | 정하지 않으면 | 누가 |
|---|---|---|---|
| 계정 매핑 확정 | 계정별 현금 여부 · 활동 · 직접법 구성 · IFRS 18 손익 범주 | 두 방법이 처음부터 맞지 않습니다 | 결산팀 |
| 이자 · 배당 활동 확정 | 이자 지급·배당 지급 재무, 이자·배당 수취 투자(금융회사는 별도 검토) | 새 기준 분류 차이가 남습니다 | 결산팀 · 감사인 |
| 운전자본 계정 범위 | 어느 계정의 증감을 조정할지 | 간접법 금액이 흔들립니다 | 결산팀 |
| 상대 라인 배분 규칙 | |금액| 비례 배분 · 반올림 최대 라인 · 2단계까지(회사 규칙 합의는 확인 필요) | 직접법 구성이 왜곡됩니다 | 결산팀 · CO |
| 은행 중간계정 목록 | 정리 계정(미결관리) 범위 — ZCFD_BANKCLR | 2단계 추적이 걸리지 않습니다 | 자금팀 |
| 권한 설계 | 회사코드 | 다른 법인 현금이 보입니다 | 보안 |
| 대사 체계 | F.01 영업손익 · FAGLB03 증감과 맞출 항목 | 숫자를 믿지 못합니다 | 결산팀 |
| 비교기간 재작성 | 종전 IAS 7 기준 금액과 전환 영향 보관 | 비교기간 공시를 다시 만듭니다 | 결산팀 |
| 전송(TR) 순서 | 테이블 → 차원 → 큐브 → 쿼리 → DCL → 서비스 | 활성화 오류로 이송이 멈춥니다 | Basis |
| 서비스 활성화 | 서비스 바인딩 게시 또는 /IWFND/MAINT_SERVICE, manifest 서비스 주소 교체 | 화면이 서비스를 찾지 못합니다 | Basis |
| 배치 등록 | 결산 마감 후 자동 실행 여부 | 사람이 열 때만 대사합니다 | Basis · 결산팀 |
운영 데이터로 갈 때
직접법은 현금 계정 라인만 읽고 상대 라인은 같은 전표 안에서 찾으므로 전체 전표를 훑지 않습니다. 간접법은 영업 범주 손익 계정과 운전자본 계정의 기간 합계 · 잔액 증감만 쓰므로 집계 테이블을 읽으면 충분합니다. 회사 · 연도를 필수 조건으로 두고 기간 집계는 DB 에서 하며, 원인 거래만 상세로 내려가도록 나눕니다. 응답 시간 목표는 조회 2초 이내입니다.
자주 묻는 질문
도입 검토에서 나올 질문을 네 묶음으로 정리했습니다.
숫자와 산식
두 방법의 영업활동 현금흐름은 왜 같아야 합니까?
직접법은 영업 현금거래를 모은 것이고, 간접법은 같은 거래가 영업손익과 운전자본에 남긴 흔적에서 현금을 거꾸로 구한 것입니다. 같은 회사 같은 기간이라면 두 금액은 같아야 하고, 다르면 분류나 집계 어딘가에 확인할 거래가 있다는 뜻입니다.
구성별 유도액은 무엇입니까?
직접법 구성마다 관련 손익과 운전자본 증감으로 다시 구한 현금입니다. 예를 들어 고객으로부터 수취는 매출에서 매출채권 증가를 뺀 값입니다. 유도액을 모두 더하면 간접법 영업활동 현금흐름과 정확히 같아집니다.
차이 원인 다섯 가지는 어떻게 다릅니까?
미분류 거래는 활동이 정해지지 않아 직접법에서 빠진 거래, 활동 혼입은 투자 · 재무 거래가 영업에 들어간 경우, 구성 이동은 영업활동 안에서 다른 구성으로 분류된 경우, 이자·배당 분류는 IFRS 18 에서 투자 · 재무로 분류하는 이자 · 배당이 영업에 남은 경우, 잔여 차이는 그 밖의 나머지입니다. 다섯 칸의 합은 언제나 구성 차이와 같습니다.
전환 영향은 어떻게 계산합니까?
같은 자료로 이자 지급 · 이자 수취 · 배당 수취를 영업활동에 두던 종전 정책 기준 영업CF 를 함께 구하고, IFRS 18 영업CF 에서 뺍니다. 샘플 6개 기간 합계는 +13,800,000원이며, 대사식 ⑫ 가 이 차이를 이자 · 배당 이동분으로 빠짐없이 설명하는지 확인합니다.
총액이 같은데 왜 확인 필요입니까?
영업활동 총액은 같아도 직접법으로 표시하면 구성별 금액이 달라집니다. 직접법을 공시하거나 내부 보고에 쓴다면 구성 분류를 확인해야 하므로 확인 필요로 둡니다.
잔여 차이는 무엇을 뜻합니까?
손익이나 운전자본에 대응하는 기록이 없는 현금거래가 영업활동에 있을 때 생깁니다. 선급금을 비용 계정 없이 지급했거나 계정 매핑이 빠진 경우가 많습니다. 원인을 단정하지 않고 원천 확인 대상으로 표시합니다.
대사식은 몇 가지를 검산합니까?
간접법 산출, 조정표 합계, 영업손익 재계산, 손익 범주 소계, 직접법 구성 합계, 직접법 = 영업 현금거래, 구성별 차이 분해, 유도 직접법 = 간접법, 방법 간 차이 = 구성 차이 합계, 현금 증감, 현금 이월, 전환 비교 12종입니다. 검증용 샘플에서 판정 재실행까지 432건을 전수 검산해 차이 0 이었습니다.
화면과 조작
조회 버튼은 어디에 있습니까?
조회조건 영역 입력 칸의 맨 오른쪽입니다. 화면 아래 바에 두지 않았고 입력 칸에서 Enter 키를 눌러도 조회됩니다. 처음 열면 한 번 자동으로 조회합니다.
점검 코드는 어느 탭에 걸립니까?
R 로 시작하면 방법 간 대사, K 는 직접법 구성별 차이, T 는 현금거래 명세 탭에 걸립니다. 활동 구분과 전기일은 현금거래 탭에만 걸립니다.
원인 거래는 어떻게 찾습니까?
구성별 차이에서 원인 칸을 보고, 현금거래 명세에서 같은 회사 · 기간과 점검 코드로 거르면 해당 거래가 남습니다. 거래처나 전기일로도 좁힐 수 있습니다.
CSV 에는 무엇이 담깁니까?
지금 보고 있는 탭의 조회 결과가 화면 열 순서대로 UTF-8 CSV 로 내려옵니다.
좁은 화면에서도 쓸 수 있습니까?
조회조건은 줄을 바꿔 쌓이고, 대사 · 구성 · 거래 표는 회사 · 기간 열을 고정한 채 가로로 넘깁니다. 상세 창은 휴대폰 폭에서 화면을 가득 채웁니다.
기준서와 판정
어떤 기준서와 관련이 있습니까?
IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호)와 그에 따라 개정되는 IAS 7 현금흐름표(K-IFRS 제1007호)입니다. 간접법 출발점(영업손익)과 이자 · 배당의 활동 분류를 개정 기준으로 반영했고, 직접법 · 간접법 표시와 활동 구분은 IAS 7 을 따릅니다.
IFRS 18 시행일은 언제입니까?
2027-01-01 이후 개시하는 회계연도부터 적용되며 조기적용이 허용되고, 비교기간은 재작성합니다. 그래서 같은 자료로 종전 IAS 7 기준 금액을 함께 구해 두는 전환 영향 열을 두었습니다.
종전 IAS 7 과 무엇이 달라집니까?
두 가지입니다. 간접법이 당기순이익이 아니라 영업손익(손익계산서 영업 범주 소계)에서 시작하고, 주된 사업활동이 특정되지 않은 일반 회사는 이자 지급 · 배당 지급을 재무활동, 이자 수취 · 배당 수취를 투자활동으로 분류해야 합니다. 종전에 허용되던 회사의 정책 선택은 없어집니다. 법인세 납부는 원칙적으로 영업활동에 남습니다.
금융회사는 어떻게 됩니까?
주된 사업이 금융(은행 등)인 회사는 이자 · 배당을 다르게 분류할 수 있으며, 이 화면의 적용 범위 밖입니다. 해당 회사는 분류 기준을 따로 확인해야 합니다(확인 필요).
이자 지급이 영업활동에 남아 있으면 어떻게 표시됩니까?
현금거래 명세에서 T04, 해당 직접법 구성에서 K04, 회사 · 기간에서 R05 로 표시됩니다. 직접법만 작아지고 영업손익에서 출발하는 간접법은 그대로라 두 방법의 차이로도 드러납니다.
점검 필요가 나오면 현금흐름표가 틀린 것입니까?
아닙니다. 다시 볼 대상을 가리는 표시입니다. 이 화면은 점검 도구이며 현금흐름표 작성과 분류의 최종 판단은 회사와 감사인이 합니다.
표준 현금흐름표 기능과 무엇이 다릅니까?
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 두 방법을 맞춰 보고 IFRS 18 분류를 점검하는 검증 관점을 더해 확장합니다. 출발점 전환이나 이자 · 배당 재분류만 따로 보는 화면과 달리, 직접법 · 간접법 대사 안에서 분류 차이를 함께 찾습니다.
예금 상대 계정 추적
예금 계정의 상대 계정은 어떻게 찾습니까?
같은 전표에서 예금 라인과 부호가 반대인 비예금 라인을 상대로 보고, 예금 라인 금액을 상대 라인 |금액| 비례로 나눕니다. 상대가 은행 중간계정이면 그 라인의 반제 전표에서 중간계정이 아닌 라인으로 한 번 더 나눕니다. 단계는 최대 2단계이고, 미반제는 L8, 2단계를 넘으면 L9 로 남깁니다.
표준 상대계정(GKONT)만 쓰면 안 됩니까?
GKONT 는 라인마다 한 계정만 담으므로 상대 라인이 여럿이거나 정리 계정을 거치는 전표에서는 최종 상대와 금액을 나눠 보여 주지 못합니다. 이 화면은 GKONT 를 참고 열로 두고 배분 결과 계정과 같은지 플래그만 답니다. 표준 GKONT 결정 로직과 마이그레이션 여부는 확인 필요입니다.
반올림 차이는 어떻게 처리합니까?
원 단위로 반올림한 배분 합계가 예금 라인 금액과 다르면, 그 차이를 |금액| 이 가장 큰 상대 라인에 더해 반올림 조정 열에 남깁니다. 검증용 샘플에는 1원 조정 사례가 1건 있으며, 전표별 배분 합계 = 예금 라인 금액 대사(⑬)가 차이 0 입니다.
도입과 운영
데이터 원천은 무엇입니까?
총계정원장 전표 항목(현금 계정 라인과 상대 라인), 손익 · 운전자본 계정 금액, 그리고 회사가 정하는 계정 매핑입니다.
운영 연결에는 무엇이 필요합니까?
계정 매핑 테이블과 CDS 뷰를 만들어 이송하고, 서비스 바인딩을 게시한 뒤 화면의 서비스 주소만 바꾸면 됩니다. 개발보다 매핑과 분류 정책 합의에 시간이 더 듭니다.
권한은 어떻게 막습니까?
회사코드 표준 권한 객체를 거래 큐브에 겁니다. 집계 단계에 걸어야 합계로 다른 법인 숫자가 드러나지 않습니다.
전표가 많아도 됩니까?
현금 계정 라인만 읽고 상대 라인은 같은 전표 안에서 찾으므로 전체 전표를 훑지 않습니다. 회사 · 연도를 필수 조건으로 두고 기간별 집계를 DB 에서 하면 응답 시간을 지킬 수 있습니다.
화면의 숫자는 실제 회사 자료입니까?
아닙니다. 가상 회사 두 곳과 가상 거래처로 만든 검증용 샘플 데이터입니다.