재무회계 · IFRS 18 현금흐름표

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단계 추적해, 활동 분류의 근거를 전표 라인 단위로 남깁니다. 화면은 분류·집계·대사를 돕는 점검 도구이며 최종 판단은 회사와 감사인이 합니다. 주된 사업이 금융(은행 등)인 회사의 다른 분류는 적용 범위 밖이며 확인 필요입니다.

한 줄 요약 — 간접법을 영업손익에서 다시 세우는 것만으로는 새 분류가 지켜졌는지 알 수 없습니다. 이 화면은 현금거래로 직접법을 따로 세워 두 금액을 매번 맞추고, 차이를 구성별로 나눠 IFRS 18 이자·배당 분류 차이를 집어내며, 종전 기준 대비 전환 영향을 같은 화면에서 보여 줍니다.

핵심 포인트 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 도입을 준비하는 상장사 · 해외 모회사 보고 법인의 결산팀, 이자 · 배당을 영업활동으로 분류해 온 회사, 현금흐름표의 활동 분류를 감사 전에 스스로 점검하려는 재무팀에 맞습니다. 주된 사업이 금융인 회사는 적용 범위 밖입니다.

사용 방법

  1. 회계연도를 넣습니다(필수). 기간 · 회사 · 활동 구분 · 직접법 구성 · 거래처 · 전기일 · 점검 코드 · 점검 결과는 필요할 때만 고르며, 비워 두면 그 조건은 걸리지 않습니다.
  2. 조회 버튼은 조회조건 영역 입력 칸의 맨 오른쪽에 있습니다. 입력 칸에서 Enter 키를 눌러도 조회되며, 처음 열면 한 번 자동으로 조회합니다.
  3. 요약에서 점검한 회사·기간 · 간접법과 직접법 영업활동 현금흐름 합계 · 방법 간 차이 절댓값 · 일치하지 않는 회사·기간 · 종전 IAS 7 영업CF 와 전환 영향 · 점검·확인 현금거래 · 정합성 대사 차이를 먼저 봅니다.
  4. 탭은 방법 간 대사 → 직접법 구성별 차이 → 간접법 조정표 → 현금거래 명세 → 대사 결과 순서로 넘깁니다.
  5. 방법 간 대사에서 행을 누르면 그 회사·기간의 두 방법 금액과 구성별 차이가 상세 창으로 열립니다.
  6. CSV 내려받기를 누르면 지금 보는 탭의 조회 결과가 UTF-8 CSV 로 내려옵니다.

숫자를 믿을 수 있는가 — 검증 결과

검증용 샘플 데이터(가상 회사 두 곳, 2026년 7~9월, 회사·기간 6건 · 현금거래 140건)에 대사식과 판정 규칙을 전수로 다시 돌린 결과입니다.

대사식검사 건수차이 건수최대 차이(원)
간접법: 영업손익 + 조정 항목 = 간접법 영업CF600
간접법 구분 합계 = 화면 구분값2400
영업손익 = 매출 − 영업 범주 비용600
당기순이익 = 영업손익 + 투자 범주 − 재무 범주 − 법인세600
화면 영업손익 = 손익 원천600
직접법 구성 = 영업 현금거래 재집계3000
직접법 영업CF = Σ 구성600
유도액 = 관련 손익·현금 + 운전자본 조정3000
Σ 유도액 = 간접법 영업CF600
구성 차이 = 직접 − 유도3000
구성 차이 = 미분류 + 활동 혼입 + 구성 이동 + 이자·배당 분류 + 잔여3000
IFRS 18 분류: 이자 지급 → 재무 · 이자·배당 수취 → 투자 (예외 제외 재집계)1700
전환 비교: 종전 IAS 7 영업CF − 이자 지급 · 수취 · 배당 수취 = IFRS 18 영업CF1200
방법 간 차이 = 직접 − 간접600
투자·재무·미분류 = 현금거래 재집계1800
기초현금 + 모든 현금거래 = 기말현금600
당월 기초현금 = 전월 기말현금400
IFRS 18: 영업활동에 이자·배당 거래 없음(예외 T04 제외)100
예금 라인마다 추적 행 존재14000
전표별 Σ 배분금액 = 예금 라인 금액14000
추적 행 예금 금액 = 현금거래 금액14600
배분 금액 재계산(|상대 라인| 비례 · 반올림은 최대 라인)14400
반올림 조정 재계산14400
상대 라인 부호가 예금 라인과 반대14600
2단계 배분 합 = 1단계 중간계정 금액200
단계 규칙 — L2 는 반제 전표 있음 · L8 은 반제 없음 · L9 는 반제 후 중간계정600
추적 기준 구성 + 차이 설명분 = 직접법 구성3000
추적 판정 재실행(전표 판정과 연결)14600
추적 판정 = 전표 판정(L1·L2)14400
판정 규칙 재실행 — 회사·기간 6 · 구성 30 · 현금거래 1401760-
서비스 대사 결과(ReconSet) 차이 합계150-

검사 건수 합계 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_horizonSAP 표준 Fiori 앱과 같은 색 · 글꼴 · 간격
항목내용
업무 영역재무회계(FI) — 결산 · 현금흐름표
관련 기준서 · 대상 영역IFRS 18 재무제표 표시와 공시(K-IFRS 제1118호) 및 그에 따른 IAS 7 현금흐름표(K-IFRS 제1007호) 개정 — 간접법 영업손익 출발, 이자·배당 활동 분류, 직접법·간접법 대사
SAP 표준 T-codeF.01 · FAGLB03 · FAGLL03 · FBL3N
Namespacezui5.cfdual
화면 성격조회 · 점검 (결과 CSV 내려받기)
데이터 연동OData V2
테마sap_horizon
SAP 표준 기능을 그대로 이어받은 부분 — 영업손익 · 당기순이익과 운전자본은 표준 재무제표(F.01)와 총계정원장 잔액(FAGLB03)이 쓰는 같은 원장 데이터를, 현금거래는 총계정원장 개별 항목(FAGLL03)의 현금 계정 라인과 상대계정을 그대로 씁니다. 표준 데이터 구조를 그대로 이어받아 확장합니다.

실행 화면

실제로 돌아가는 화면 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)입니다.

차이를 구성으로 나누기

두 방법이 같은지만 보면 원인을 모릅니다. 직접법 구성마다 손익과 운전자본에서 다시 구한 금액과 견줍니다.

직접법 구성별 차이 — 2000 · 8월
직접법 구성별 차이 — 2000 · 8월 — 구성마다 직접법 금액 · 손익·운전자본 유도액 · 차이와 그 원인 분해입니다.

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

간접법을 한 줄씩

간접법 조정표는 IFRS 18 공시 초안의 순서 그대로입니다.

간접법 조정표 — 1000 · 8월
간접법 조정표 — 1000 · 8월 — 출발점(영업손익) · 비현금 항목 · 운전자본 증감 · 법인세 현금 네 구분입니다.

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

원인 거래 찾기

차이의 원인은 결국 현금거래 한 건입니다.

현금거래 명세 — 이자
현금거래 명세 — 이자 — 상대계정 기준 활동과 실제 분류를 나란히 둡니다. 거래처 "이자" 로 걸렀습니다.

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

예금 계정에서 상대 계정까지

예금 계정에 전기된 라인을 CDS 규칙대로 상대 계정까지 따라갑니다.

예금 → 상대 계정 추적 — 1000 · 7월
예금 → 상대 계정 추적 — 1000 · 7월 — 예금 라인마다 최종 상대 계정 · 거래처 · 단계 · 배분 금액입니다.

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

추적 팝업 — 2단계
추적 팝업 — 2단계 — 현금거래 명세나 추적 탭의 행을 누르면 그 예금 전표의 추적이 열립니다.

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

숫자를 스스로 맞춰 본다

대사 결과 탭은 서비스가 계산한 대사식 15종입니다.

대사 결과
대사 결과 — 간접법 산출부터 추적 기준 구성 대사까지 15개 대사식의 검사 건수와 차이 건수입니다.

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

회사·기간 하나를 끝까지

방법 간 대사 행을 누르면 판단 재료가 한 창에 모입니다.

회사·기간 상세
회사·기간 상세 — 두 방법의 금액 · 영업손익과 당기순이익 · 종전 IAS 7 영업CF 와 전환 영향 · 이자·배당 현금 · 구성별 차이입니다.

머리에는 직접법 영업활동 현금흐름과 점검 결과, 그 아래에 간접법 금액과 차이, 종전 기준 금액과 전환 영향, 이자 지급 · 이자 수취 · 배당 수취가 붙습니다. 아래 표에서 차이가 난 구성과 원인 문장을 바로 읽을 수 있습니다.

업무 점검 — IFRS 18 기준 현금흐름 분류 점검표

결산 담당자가 IFRS 18 에 따라 개정되는 IAS 7 기준으로 현금흐름표를 닫기 전에 확인할 항목을, 이 화면의 어디서 보는지와 검증용 샘플 결과로 정리했습니다. 주된 사업이 금융인 회사의 분류는 적용 범위 밖이며 확인 필요입니다.

점검 항목기준이 화면에서 보는 곳샘플 결과
간접법 출발점영업손익(영업 범주 소계)에서 시작간접법 조정표 I00 · 대사식 ③6개 기간 모두 영업손익 출발 — 차이 0
이자 지급재무활동현금거래 명세 T04 · 구성 K041건 영업 분류(2000·8월) — 점검 필요
이자 수취 · 배당 수취투자활동현금거래 명세 · 전환 비교영업 분류 0건
배당 지급재무활동현금거래 명세영업 분류 0건
법인세 납부원칙적으로 영업활동직접법 구성 · 간접법 TX영업 유지
두 방법 일치직접법 = 간접법방법 간 대사 R00 ~ R056개 기간 중 1곳 R00
전환 영향종전 IAS 7 대비 차이 설명전환 비교 · 대사식 ⑫+13,800,000원 — 차이 0 으로 설명됨
예금 상대 계정예금 라인 → 최종 상대(최대 2단계)예금 → 상대 추적 · 대사식 ⑬ ~ ⑮L1 140 · L2 4 · L8 1 · L9 1, 배분 합계 차이 0
적용 범위주된 사업이 금융인 회사-적용 범위 밖, 확인 필요

화면 뒤에서 일어나는 일

조회를 누르면 화면은 대사 · 구성 · 조정표 · 거래 · 대사 결과 다섯 엔티티셋을 각각 조건과 함께 부르고, 요약의 차이 절댓값 · 불일치 회사·기간 수 · 전환 영향은 서비스 함수로 받습니다. 두 방법의 산출과 판정은 서비스 쪽 데이터에 이미 계산되어 있습니다.

  1. 간접법 영업CF = 영업손익(영업 범주 소계) + 비현금 항목 ± 운전자본 증감 − 법인세 납부
  2. 직접법 영업CF = 영업활동으로 분류된 현금거래를 5개 구성으로 모은 합계 — 이자 지급·배당 지급은 재무, 이자·배당 수취는 투자
  3. 구성별 유도액 — 고객 수취 = 매출 − 매출채권 증가, 공급자 지급 = −(매출원가 + 재고자산 증가 − 매입채무 증가), 종업원 지급 = −(급여 − 미지급급여 증가), 기타 영업 지급 = −(판관비 + 선급비용 증가), 법인세 = 납부액
  4. Σ 유도액 = 간접법 영업CF (두 방법이 같은 숫자로 만나는 자리)
  5. 구성별 차이 = 직접 − 유도 = 미분류 거래 + 활동 혼입 + 구성 이동 + 이자·배당 분류 + 잔여
  6. 방법 간 차이 = 직접법 − 간접법 = Σ 구성별 차이 → 판정 R00 ~ R05
  7. 전환 영향 = IFRS 18 영업CF − 종전 IAS 7 영업CF = 이자 지급 − 이자 수취 − 배당 수취 (부호 그대로)
  8. 기초현금 + 영업(직접) + 투자 + 재무 + 미분류 = 기말현금

방법 간 판정 — 조건과 조치

코드판정 조건결과 상태사용자 조치
R00직접법 = 간접법, 모든 구성 일치정상조치 없음
R01총액은 같고 구성이 다름확인 필요영업활동 안 구성 분류 확인
R02차이 원인이 미분류 거래점검 필요미분류 현금거래의 활동을 정함
R03차이에 투자·재무 거래 혼입점검 필요거래 활동 분류를 고침
R04설명되지 않는 잔여 차이점검 필요대응 손익·운전자본이 없는 거래를 찾음
R05IFRS 18 이자·배당 분류 차이 — 이자·배당이 영업에 있음점검 필요투자·재무활동으로 옮김

구성 · 거래 판정 — 조건과 조치

코드판정 조건결과 상태사용자 조치
K00직접법 금액 = 유도액정상조치 없음
K01미분류 현금거래가 빠져 차이확인 필요활동 구분 확인
K02다른 활동 거래가 섞여 차이점검 필요분류 점검
K03영업활동 안 다른 구성으로 이동확인 필요구성 분류 확인
K04투자·재무로 분류하는 이자·배당이 영업에 섞임(IFRS 18)점검 필요IFRS 18 분류 점검
K09위 원인으로 설명되지 않음점검 필요원인 확인
T01 · T02 · T03 · T04현금거래 — 활동 미분류 · 활동이 상대계정 기준과 다름 · 영업 안 구성이 다름 · 이자·배당이 영업에 있음확인 필요 · 점검 필요 · 점검 필요 · 점검 필요거래 단위로 분류를 고침

조회조건

조회조건필수기본값$filter
회계연도필수2026Gjahr 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총계정원장 개별 항목 조회현금 계정의 거래 명세와 상대계정을 확인합니다. 점검 필요로 나온 현금거래가 어떤 전표였는지 여기서 봅니다.
FBL3NG/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_CFDUALService 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)과 대조

배분 규칙과 단계 코드

  1. 분모 = 같은 전표에서 예금 라인과 부호가 반대인 비예금 라인의 |HSL| 합계 (같은 부호 라인 — 매입할인 등 — 은 빠짐)
  2. 배분 금액 = 예금 라인 HSL × 상대 라인 |HSL| ÷ 분모, 원 단위 반올림
  3. 반올림 차이(예금 라인 − Σ 배분)는 |HSL| 가 가장 큰 라인(같으면 앞 라인)에 더함 — 서비스 또는 AMDP 처리
  4. 상대가 은행 중간계정이면 그 라인의 AUGBL · AUGDT 로 반제 전표를 찾아 중간계정이 아닌 라인에 같은 규칙으로 다시 배분(최대 2단계)
  5. 표준 상대계정(GKONT · GKOAR)은 참고 열 — 배분 결과 계정과 같은지 플래그만 둠(결정 로직 · FINS_MIG_GKONT 확인 필요)
  6. 이 규칙으로 종전 "상대 라인이 여럿인 현금 전표의 배분 규칙(확인 필요)" 을 해소했다 — 실제 회사 규칙 합의는 확인 필요
코드이름조건처리
L11단계 확정같은 전표의 반대 부호 비예금 라인이 최종 상대배분 금액으로 활동 · 구성 판정
L22단계 확정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_BANKCLR2단계 추적이 걸리지 않습니다자금팀
권한 설계회사코드다른 법인 현금이 보입니다보안
대사 체계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 에서 하면 응답 시간을 지킬 수 있습니다.

화면의 숫자는 실제 회사 자료입니까?

아닙니다. 가상 회사 두 곳과 가상 거래처로 만든 검증용 샘플 데이터입니다.