SAP 재무제표 핵심 항목 다기간 추세 점검 — 석 달 연속 내려간 항목부터 먼저 본다
매출·이익·자산·부채·자본 핵심 항목의 월별 증감을 12개월 구간으로 추적하고, 구간 증감 합계를 최종−최초 금액과 대사합니다
재무제표의 핵심 항목이 한두 달 줄어드는 것은 흔한 일입니다. 문제는 그 하락이 몇 달째 이어지고 있는지가 월별 보고서만 봐서는 잘 드러나지 않는다는 점입니다. 이번 달 숫자만 보면 여전히 "소폭 감소" 수준이라, 계절적 변동인지 추세적 하락인지 판단하기가 쉽지 않습니다.
매출·매출총이익·영업이익·총자산·총부채·자기자본 6개 핵심 항목을 법인별로 12개월 연속 추적해 전월 대비 증감을 계산하고, 하락이 3개월 이상 이어지면 자동으로 표시하는 화면을 OpenUI5로 구현했습니다. 구간 전체의 증감액 합계를 최종기−최초기 금액과 대사해 데이터 정합성까지 함께 확인합니다. 실제 구동 화면 4종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 재무제표 조회 — 재무제표 버전(FSV) 구조와 표준 재무제표 조회(S_ALR_87012284)의 항목 체계를 그대로 사용
- 표준 화면 — 계정별 월별잔액 조회(FS10N) · 총계정원장 라인아이템 표시(FAGLL03)
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 재무 분석 |
| 관련 기준서 | - (대상 영역: 재무 분석 - 핵심 항목 다기간 추세 점검) |
| Namespace | zui5.fstrend |
| 셸 구조 | 조회조건 영역(우측 조회) + 탭(추세 조회/법인별 집계), 상세 Dialog |
| 화면 수 | 조회 화면 1개(탭 2개) + 상세 다이얼로그 |
| SAP 표준 T-code | S_ALR_87012284 · FS10N · FAGLL03 (§7 참고) |
| 성격 | 조회·집계·대사형 — 추세 원인 판단과 회계적 결론은 회사·감사인 몫 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 4종 둘러보기
법인·기간·항목분류를 골라 조회하면 12개월 추세 목록이 뜹니다 → 추세판정을 "점검 필요"로 좁혀 연속 하락 항목만 추려보고 → 법인별 집계 탭에서 법인 단위 요약을 확인 → 행을 클릭하면 구간 증감 대사 상세가 다이얼로그로 열립니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 법인 · 시작기간 · 종료기간 · 항목분류 · 추세판정을 지정합니다.
- 입력 필드에서 Enter 키를 누르거나 조회조건 영역 오른쪽 끝의 조회 버튼을 누르면 재조회됩니다. 초기화 버튼은 조건을 기본값(최근 12개월)으로 되돌립니다.
- 항목분류·추세판정을 "전체"로 두면 해당 조건 없이 조회합니다.
- 추세 조회 탭의 행을 클릭하면 구간 증감 대사 상세 다이얼로그가 열립니다.
- 추세 조회 탭 우측 상단의 CSV 내려받기 버튼으로 현재 조회된 목록을 내려받을 수 있습니다.
연속 감소 추세 판정 로직
항목별로 전월 대비 증감액을 계산해 연속 하락 개월 수를 누적하고, 3개월 이상 이어지면 점검 대상으로 표시합니다.
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 전월 대비 증감액 ≥ 0 | 정상 | 연속감소 카운트 0으로 초기화, 별도 조치 불필요 |
| 전월 대비 증감액 < 0, 연속 1~2개월 | 정상(관찰 구간) | 다음 달 추이 관찰 |
| 전월 대비 증감액 < 0, 연속 3개월 이상 | 점검 필요 | 하락 사유를 원천 데이터·사업 현황과 함께 확인 |
이 화면이 대신 정하지 않는 것
연속 하락의 사업적 원인(수요 감소, 일회성 비용, 환율 변동 등)은 이 화면이 판단하지 않습니다. 이 화면은 항목별 다기간 증감을 조회·점검하는 도구이며, 추세의 원인 판단과 회계적 결론은 회사와 감사인이 수행합니다.
추세·대사 산출 처리 단계
| 단계 | 내용 |
|---|---|
| 1단계 | 법인×항목×기간 조합별 당기금액을 확보 |
| 2단계 | 전기금액과 비교해 증감액·증감율을 계산 |
| 3단계 | 증감액이 음수면 연속감소 카운트를 +1, 아니면 0으로 초기화 |
| 4단계 | 연속감소 ≥ 3이면 "점검 필요", 아니면 "정상"으로 추세판정 |
| 5단계 | 2기~N기 증감액 합계를 (최종기금액−최초기금액)과 대사 |
구간증감 합계(2기~N기) = 최종기 금액 - 최초기 금액
증감율(%) = 증감액 ÷ 전기금액 × 100
연속감소개월수(N기) = 증감액(N기) < 0 ? 연속감소개월수(N-1기) + 1 : 0
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 법인 | 선택 | 법인 코드 일치 검색(미입력 시 전체) |
| 시작기간 · 종료기간 | 선택 | YYYYMM, 기본값 최근 12개월 |
| 항목분류 | 선택 | 전체/수익성/자산/부채/자본(전체 선택 시 조건 미전달) |
| 추세판정 | 선택 | 전체/정상/점검 필요, Enter 키로 바로 조회 |
결과 컬럼
| 컬럼 | 설명 |
|---|---|
| 법인 · 법인명 · 항목명 · 항목분류 | 조회 대상 법인과 재무 항목 |
| 회계기간 | YYYY-MM 표시 |
| 금액 · 증감액 · 증감율 | 당기금액과 전기 대비 증감액·증감율(%) |
| 연속감소 · 추세판정 | 직전 하락이 이어진 개월 수와 정상/점검 필요 판정 |
SAP 표준 기능 매핑
| SAP 표준 T-code | 연관 기능 |
|---|---|
S_ALR_87012284 | 재무제표 버전 조회 — 항목 체계·계층 구조 참고 |
FS10N | 계정별 월별잔액 조회 — 항목별 월별 잔액 원천 참고 |
FAGLL03 | 총계정원장 라인아이템 표시 — 증감 근거 전표 확인 시 참고 |
분석 지표 정의표
| 지표명 | 산출식 | 판정 기준 | 원천 데이터 |
|---|---|---|---|
| 증감율 | (당기금액−전기금액)÷전기금액×100 | 참고용 표시 지표 | 법인×항목×기간별 잔액 |
| 연속감소개월수 | 직전월 대비 하락이 끊기지 않고 이어진 개월 수 | 3개월 이상 → 점검 필요 | 법인×항목×기간별 잔액 |
| 구간 대사차이 | Σ(2기~N기 증감액) − (최종기금액−최초기금액) | 0이 아니면 정합성 확인 필요 | 법인×항목별 최초기·최종기 잔액 |
도입 시 확인이 필요한 부분
연속감소 판정의 기준 개월 수(현재 3개월)와 대상 항목 범위는 회사의 관리 목적에 맞춰 조정해야 합니다.
참고 CDS 뷰
운영 서비스로 연결할 때를 가정해 새로 스케치한 집계 뷰 예시입니다(운영 반영 시 권한 체크를 추가해야 합니다).
@AbapCatalog.sqlViewName: 'ZIFSTRENDBAL'
define view Z_I_FsTrendBalance
as select from glt0 as Balance
association [1..1] to ska1 as _Account on _Account.saknr = Balance.saknr
association [1..1] to t001 as _Company on _Company.bukrs = Balance.bukrs
{
key Balance.bukrs as CompCode,
key Balance.saknr as GlAccount,
key Balance.rprct as FiscalPeriod,
Balance.hslvt as Amount,
_Account.txt20 as ItemNameRaw,
_Company.butxt as CompName
}
// 항목분류(수익성/자산/부채/자본)는 계정 그룹 매핑 테이블로 별도 관리
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 Toolbar + IconTabBar(2탭) |
| 조회조건 | sap.m.Input · sap.m.Select — 우측 끝에 조회 버튼, Enter 키로 즉시 재조회 |
| 추세 조회 · 법인별 집계 | sap.ui.table.Table / sap.m.Table(각 엔티티셋에 개별 바인딩) — 추세 조회 행 클릭 시 상세 다이얼로그 |
| 상세 | sap.m.Dialog — 선택 행의 바인딩 컨텍스트와 구간 대사 엔티티를 함께 표시 |
| 공통 처리 | 전역 오류 처리기(ErrorHandler) — 메타데이터·요청 실패를 메시지로 표시 |
서비스 경로는 manifest.json 의 dataSources 에 상대 경로로 선언한 OData V2 모델을
그대로 바인딩하며, 조회조건은 sap.ui.model.Filter 로 조립해 $filter 로만 전달합니다.
기간 범위는 FiscalPeriod 에 대한 이상·이하 조건으로 처리하고, 조건을 "전체"로 둘 때는
필터를 아예 생성하지 않습니다.
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon |
Component.js | 컴포넌트 초기화, 전역 오류 처리기 연결 |
manifest.json | 앱 디스크립터 — zui5.fstrend · OData dataSources · ko 로케일 |
view/Main.view.xml | 조회조건 + 탭(추세 조회/법인별 집계) |
view/DetailDialog.fragment.xml | 추세 상세·구간 증감 대사 다이얼로그 |
controller/Main.controller.js | 조회·필터 조립·다이얼로그 로직 |
controller/BaseController.js | 공통 처리(CSV 내려받기 등) |
model/ErrorHandler.js | 전역 오류 처리 |
model/formatter.js | 금액·증감율·판정상태 서식 |
i18n/i18n_ko.properties | ko 로케일 리소스 |
검증 환경 구성 상세는 이 글에서 다루지 않습니다. 운영 전환 시에는 화면과 판정 로직은 그대로 두고 데이터 계층만 실제 서비스 호출에 맞추면 됩니다.
검증 결과
화면 구성에 쓴 데이터는 구간 증감 합계와 최종−최초 금액 관계가 항상 검증되도록 구성했습니다.
| 검증 항목 | 결과 |
|---|---|
| 대사식 전수 검증(구간 증감 합계=최종−최초 금액, 12개 법인×항목 조합) | 통과(차이 0건, 의도적 연속감소 표본 2건 별도 표시) |
| 표시 금지 검사 — 커스텀 프로그램ID·앱 식별자·출처 표현 검출 | 0건 |
| 화면 렌더링 — 실브라우저에서 조회 → 필터 → 탭 전환 → 행 클릭 상세까지 실동작 후 캡처 | 4/4 |
| 조회 버튼 위치 · sap_horizon 테마 적용 · Enter 키 조회 | 확인 |
| OData 계약 — 동사 경로 미사용, $filter·$orderby·$top·$inlinecount 로만 조회조건·페이징 전달 | 확인 |
화면 수치는 모두 검증용으로 구성한 가상 데이터입니다.
자주 묻는 질문
이 화면은 언제부터, 어떤 범위에 사용할 수 있나요?
별도의 법정 시행일은 없습니다. 재무제표 핵심 항목이 월별로 집계되는 법인이라면 범위 제한 없이 바로 사용할 수 있는 관리 목적의 조회·점검 화면입니다.
"점검 필요" 표시는 회계상 오류가 확정되었다는 뜻인가요?
아니요. 3개월 이상 연속 감소했다는 사실만을 표시하는 조회·점검 도구이며, 하락의 원인 판단과 회계적 결론은 회사와 감사인이 수행합니다.
화면에서 보이는 데이터는 실제 운영 데이터인가요?
아니요. 이 글과 화면 캡처에 쓰인 수치는 화면 동작과 대사 로직을 확인하기 위해 구성한 검증용 샘플 데이터이며, 실제 재무 데이터가 아닙니다.
구간 증감 대사는 어떻게 계산되나요?
조회 구간의 2번째 기간부터 마지막 기간까지 전월 대비 증감액을 모두 더한 값과, (최종기 금액 − 최초기 금액)을 비교합니다. 두 값이 같으면 "일치", 다르면 "확인 필요"로 표시됩니다.