결산 · 통합 관리

SAP 시산표·재무제표 결산 통합 관리 — 조정 전표 승인부터 대사 예외, 계획 대비 차이 요인까지 한 앱에서 끝내는 월결산

결산 작업 · 조정 전표 승인과 전기 · 시뮬레이션 후 일괄 실행 · 대사 규칙 6개와 예외 조치 · 시산표 차대 검산 · 재무제표 연결 · 다차원 분석과 드릴스루 · 차이 요인분해 · 감시 에이전트 — 소개 영상과 실제 화면 33종, CDS 코드까지

소개 영상블로그 목차 순서대로 · 자막 포함

도입 포인트 — 이 앱을 사용해야 하는 이유

월결산이 가까워지면 질문은 해마다 같습니다. 시산표 차변과 대변은 맞는가, 재무제표에서 빠진 계정은 없는가, 계획과 차이가 나면 어디서 났는가. 지금은 이 답이 표준 화면 여러 개, 엑셀 대사표, 메일로 받은 승인에 흩어져 있어서 결산 담당자는 숫자를 맞추는 데 시간을 쓰고 승인자는 “지금 어디까지 왔나”를 되묻게 됩니다. 이 앱은 기준정보, 조정 전표, 승인과 전기, 일괄 실행, 대사 예외 조치, 시산표와 재무제표, 다차원 분석을 같은 회사 · 기간 조건 아래 한 흐름으로 묶어, 그 질문에 화면 하나로 답하게 합니다.

외화 평가처럼 기준서와 닿는 처리는 IAS 21 환율변동효과(K-IFRS 제1021호)의 관점으로 연결해 두었습니다. 평가 방법과 손익 분류는 회사 정책과 감사인의 판단 영역이므로, 이 앱은 시뮬레이션과 대사로 “준비 상태를 점검하는 자리”를 제공합니다.

한 줄 요약 — 결산 담당자가 표준 화면과 엑셀을 오가며 맞추던 일을, 서버가 검산하는 한 앱으로 옮겨 사람은 예외만 판단하게 합니다.

핵심 포인트 일곱 가지

핵심 포인트고객이 얻는 것지금 방식이라면
① 한 앱에서 끝나는 결산 흐름기준정보 · 조정 전표 · 승인 · 전기 · 일괄 실행 · 대사 · 분석이 같은 화면 틀과 같은 회사 · 기간 조건으로 이어집니다.표준 화면 여러 개와 엑셀 · 메일을 오가며 결산 체크리스트를 따로 관리합니다.
② 직무 분리를 서버가 판정작성자가 자기 전표를 승인하면 서버가 거절하고, 금액이 큰 전표(샘플 규칙: 5천만 원 이상)는 서로 다른 2인의 승인을 요구합니다.승인 규칙을 사람의 기억이나 별도 문서로 지킵니다.
③ 시뮬레이션 후 실행하는 일괄 처리미지급비용 발생 계상 · 선급비용 상각 · 외화 평가를 저장하기 전에 미리 보고, 같은 조건의 재실행은 거절됩니다.실행한 뒤에야 금액을 확인하고, 틀리면 역분개로 되돌립니다.
④ 대사 규칙과 예외 추적규칙 6개가 보조원장 · 환율 · 상각 · 발생 · 계정 연결 · 차대 일치를 점검하고, 예외는 미해결 → 조치 중 → 해소로 이어집니다.대사 결과를 엑셀로 모아 누가 처리했는지를 따로 적습니다.
⑤ 시산표 검산과 재무제표 연결기초 + 차변 − 대변 + 조정 = 기말과 이월을 매번 검산하고, 재무제표 라인에 연결되지 않은 계정을 예외로 올립니다.마감 직전에야 합계가 맞지 않는 것을 발견합니다.
⑥ 셀에서 원천 전표까지분석 칸의 금액을 누르면 그 금액을 만든 전표 라인이 열리고, 칸 금액과 라인 합계가 같은지 표시됩니다.리포트를 닫고 표준 화면을 다시 열어 조건을 손으로 맞춥니다.
⑦ 계획 대비 차이 · 요인분해 · 감시차이를 요인별로 가르고 요인 합이 총차이와 같은지 보여 주며, 감시 규칙에 걸리면 받을 역할 앞으로 보고가 올라갑니다.차이 원인을 엑셀로 쪼개고, 문제는 누군가 화면을 열어야 발견됩니다.

사례로 보는 효과

검증용 샘플 데이터(가상 회사 2곳, 2026년 1월~9월)로 실제 나온 숫자입니다. 시산표 차변 합계와 대변 합계는 모두 93,575,166,227원으로 같았고, 재무제표 라인에 연결되지 않은 계정 2개(절대 잔액 합계 250,551,930원)는 대사 규칙 R5 예외로 올라왔습니다. 판매비와관리비의 2026년 9월 기말 잔액이 계획보다 113,763,915원 컸던 경우, 총차이는 기초 이월 +188,000,114원 · 차변 발생 −67,520,046원 · 대변 발생 −58,925원 · 결산 조정 −6,657,228원으로 가려졌고 요인 합이 총차이와 같은지 매번 확인했습니다.

이 숫자들이 믿을 만한지는 대사식 10종 3,134건을 전수 검사해 차이 0건이라는 결과로 확인했습니다(#sec-cds 의 “검증 결과” 표). 시간 절감률 같은 효과 수치는 샘플 데이터로는 알 수 없어 싣지 않았습니다.

도입하면 달라지는 것

  • 결산 담당자 — 조정 전표를 쓰고 검토 요청을 누르면 승인자 앞에 할 일이 생깁니다. 엑셀로 진행표를 따로 관리하지 않아도 개요 화면의 진행률이 현황입니다.
  • 승인자 — 메일 대신 승인 대기 목록에서 전표 분개를 보고 승인 · 반려합니다. 자기가 쓴 전표는 서버가 승인을 거절하므로 직무 분리가 사람의 주의에 달려 있지 않습니다.
  • 마감 회의 — “어느 숫자가 맞나”를 따지는 시간이 줄고 대사 예외 목록과 조치 상태를 보며 남은 일만 이야기합니다.
  • 감사 대응 — 모든 쓰기가 사용자 · 시각 · 이전 값 · 이후 값과 함께 남아, 누가 왜 바꿨는지를 되짚을 수 있습니다.
  • 마감 후 분석 — 계획과 차이가 나는 칸에서 요인분해와 원천 전표까지 내려가 사유를 적어 두면, 다음 달에도 같은 행에 따라옵니다.

이런 회사에 맞습니다

월 결산 조정 전표가 수십~수백 건이고 법인 · 사업장이 여럿이라 보조원장과 총계정원장, 환율, 재무제표 연결을 엑셀로 대사하는 회사에 맞습니다. 조정 전표에 작성자와 승인자를 구분해야 하고(금액 구간별로 승인 단계가 다른 경우 포함), 외화 자산 · 부채 평가와 발생 · 선급 계정 정리를 매달 반복하며, 결산 부서와 경영관리 부서가 같은 숫자를 서로 다른 화면에서 보고 있다면 도입 효과가 큽니다.

실행 화면

아래 화면은 모두 실제 브라우저에서 찍은 것이며 금액과 회사는 가상의 검증용 샘플 값입니다. 이미지를 누르면 크게 열립니다.

사용 방법

  1. 조회조건 입력 — 화면 위쪽에서 회사(비우면 전체)와 기간을 고릅니다. 모든 화면이 같은 조건을 쓰고 화면을 옮겨도 유지됩니다.
  2. 조회 — 개요 · 문서 · 일괄 실행 · 대사 · 시산표는 조건을 고르는 즉시 다시 조회합니다. 분석 화면은 조회 조건 패널의 조회 버튼이나 Enter 로 큐브를 읽습니다.
  3. 요약 확인 — 개요의 지표 타일에서 진행률 · 기한 경과 · 승인 대기 · 반려 · 미해결 예외를 보고, 타일이나 할 일 행을 눌러 해당 문서로 이동합니다.
  4. 탭 · 축 이동 — 왼쪽 메뉴를 위에서 아래로 따라가면 결산 순서(개요 → 기준정보 → 문서 → 일괄 실행 → 대사 → 시산표 → 분석)와 같습니다. 분석에서는 차원을 끌어다 행 · 열 축을 바꿉니다.
  5. 행 · 셀 클릭 상세 — 목록 행은 상세를, 분석 칸은 그 금액을 만든 원천 전표 라인을 엽니다.
  6. 내보내기 — 목록은 엑셀로, 분석은 표 CSV 와 보고서 파일로 내려받고, 기준정보 · 문서는 xlsx 일괄 업로드로 검증 결과를 미리 본 뒤 반영합니다.

무엇으로 만들었나

자리무엇왜 그렇게 두었나
화면 컨트롤OpenUI5 의 도구 페이지와 사이드 내비게이션, 문서 · 대사 목록은 반응형 표, 분석 표는 트리 테이블화면 틀을 모든 모듈이 공유해야 조건이 유지되고 학습 비용이 줄기 때문입니다.
분석 차트외부 차트 라이브러리 없이 SVG 로 직접 그림표와 같은 값을 쓰고 인쇄 · 보고서에도 같은 그림을 넣기 위해서입니다.
집계 · 판정 로직큐브 접기(피벗) 로직은 브라우저에, 상태 전이 · 직무 분리 · 대사 판정은 서비스에숫자를 접는 일은 사용자가 축을 바꿀 때마다 빨라야 하고, 허용 여부는 화면이 아니라 서버가 정해야 하기 때문입니다.
OData 구성V2 서비스 1개 · 엔티티셋 36개 · 펑션 12개. 목록 · 상세는 엔티티셋 바인딩, 승인 · 전기 · 실행은 펑션 호출읽기는 필터 · 정렬을 서버에 맡기고 쓰기는 서버가 판정한 응답을 그대로 보여 줍니다. 운영 연결 때 서비스 주소만 바꾸면 되도록 화면은 모델 경로에만 바인딩합니다.
테마sap_horizon표준 Fiori 와 같은 모습으로 보이도록 색 · 글꼴을 테마에 맡깁니다.
SAP 표준 기능을 그대로 이어받은 부분 — 회계 기간 열림 여부(OB52), 총계정 잔액과 계정 잔액의 구조(FAGLB03 · FS10N), 재무제표 출력의 계정 연결(F.01), 외화 평가의 환율 사용(FAGL_FCV)은 표준 데이터 구조를 그대로 이어받아 확장했습니다. 법정 신고와 공시용 출력은 표준 화면이 계속 맡습니다.

처음 열었을 때 — 결산 진행 현황이 먼저 보인다

개요 · 할 일 — 결산 진행 현황
개요 · 할 일 — 결산 진행 현황 — 지금 처리할 것을 타일로 먼저 보여 줍니다.

상단 타일은 결산 진행률, 기한 경과 과업, 승인 대기, 반려 문서, 시산표 차대 차이, 미해결 예외, 누적 당기순이익, 안 읽은 보고입니다. 숫자는 위에서 고른 회사 · 기간 기준이며 타일을 누르면 해당 목록으로 이동합니다. 아래에는 결산 단계별 진행과 내 할 일이 이어집니다.

할 일 목록에서 해당 문서로 이동
할 일 목록에서 해당 문서로 이동 — 반려 수정 · 승인 대기 · 예외 조치가 역할별로 나옵니다.

할 일은 서버가 문서 상태가 바뀔 때 만들고 닫습니다. 행을 누르면 해당 문서나 예외 화면이 바로 열려, 목록을 다시 찾을 필요가 없습니다. 보는 사람의 역할에 맞는 항목만 나옵니다.

기준정보 관리 — 계정과 재무제표 라인 연결을 한 곳에서

기준정보 관리 — 총계정 목록
기준정보 관리 — 총계정 목록 — 계정마다 재무제표 라인 연결과 사용 상태를 함께 봅니다.

계정 · 재무제표 라인 · 계정 그룹 · 통화 · 총계정 잔액과 보조원장 잔액이 한 줄에 있습니다. 위쪽 탭으로 결산 일정과 환율 같은 다른 기준정보로 이동합니다. 삭제 대신 사용 중지 표시를 쓰므로 과거 전표가 깨지지 않습니다.

기준정보 생성 입력창
기준정보 생성 입력창 — 필수값과 중복을 서버가 검사합니다.

새 계정은 회사 · 계정 번호 · 이름 · 계정 그룹 · 재무제표 라인을 입력합니다. 이미 있는 키이거나 재무제표 구분이 계정 그룹과 맞지 않으면 서버가 저장을 거절하고 이유를 메시지로 돌려줍니다.

xlsx 일괄 업로드 — 검증 결과 미리보기
xlsx 일괄 업로드 — 검증 결과 미리보기 — 여러 건을 올리면 반영 전에 행마다 검증 결과를 보여 줍니다.

엑셀로 만든 계정 목록을 올리면 행별로 통과 · 오류가 표시되고, 오류가 없는 행만 반영할 수 있습니다. 반영된 건은 감사 로그에 한 건씩 남습니다.

기준정보 변경 이력
기준정보 변경 이력 — 누가 · 언제 · 무엇을 바꿨는지 이전 값과 이후 값이 남습니다.

기준정보를 고치면 변경 전후 값이 요약되어 이력 탭에 쌓입니다. 계정의 재무제표 라인 연결을 바꾼 기록은 이후 대사 규칙의 결과를 설명할 때 근거가 됩니다.

문서 처리와 승인 — 승인 버튼은 승인자에게만, 직무 분리는 서버가 판정한다

문서 처리 — 결산 조정 문서 목록
문서 처리 — 결산 조정 문서 목록 — 상태별로 걸러 보고, 행을 눌러 상세로 들어갑니다.

문서 번호 · 유형 · 회사 · 기간 · 금액 · 상태 · 승인 단계가 한눈에 보입니다. 상태 필터로 승인 대기나 반려 문서만 볼 수 있습니다. 목록은 엑셀로 내려받을 수 있습니다.

문서 생성 입력창
문서 생성 입력창 — 미지급비용 · 선급비용 · 감가상각 · 외화 평가 · 재분류 문서를 직접 만듭니다.

문서 유형을 고르고 회사 · 기간 · 금액 · 분개 항목을 입력합니다. 저장하면 임시저장 상태가 되고, 차변과 대변 합계가 같아야 검토 요청으로 넘어갈 수 있습니다.

직무 분리 — 작성자의 승인 시도 거절
직무 분리 — 작성자의 승인 시도 거절 — 승인 버튼을 눌러도 서버가 직무 분리 원칙으로 막습니다.

화면의 버튼 노출은 서버가 알려 준 역할 값으로 정하지만, 판정은 서버가 다시 합니다. 이 화면은 작성자와 승인자가 같은 사용자일 때 서버가 돌려준 메시지를 그대로 보여 줍니다.

승인 완료
승인 완료 — 승인자가 승인하면 전기 대기 상태가 됩니다.

검토 중인 문서를 승인자가 승인하면 상태가 승인됨으로 바뀌고 상태 이력에 승인자와 시각이 남습니다. 금액이 큰 문서는 승인 단계가 둘이라 두 번째 승인이 있어야 승인됨이 됩니다.

전기 완료
전기 완료 — 열린 기간에만 전기되고, 전기하면 시산표에 바로 반영됩니다.

전기 때 서버가 차대 일치 · 기간 열림 · 필수값을 다시 검사합니다. 전기된 조정은 시산표의 조정 열과 수정 후 기말 잔액, 재무제표에 같은 값으로 나타납니다.

역처리 — 반대 문서 생성
역처리 — 반대 문서 생성 — 전기된 문서는 지우지 않고 반대 문서를 만들어 되돌립니다.

역처리는 사유를 입력해야 하고, 원문서와 연결된 반대 문서가 자동으로 생깁니다. 반대 문서 금액은 원문서 금액의 부호를 뒤집은 값이며 검증 대사식에 들어 있습니다.

일괄 실행 — 모의 실행의 합계와 실행 결과가 같다

일괄 실행 — 조건 입력
일괄 실행 — 조건 입력 — 유형 · 회사 · 기간을 정하고 먼저 모의 실행을 누릅니다.

일괄 실행 유형은 미지급비용 발생 계상, 선급비용 상각, 외화 자산 · 부채 평가입니다. 모의 실행을 거치지 않으면 실행 버튼이 열리지 않습니다.

일괄 실행 — 모의 실행 결과
일괄 실행 — 모의 실행 결과 — 저장하지 않은 상태로 대상과 금액을 미리 확인합니다.

이 예시는 2026년 9월 미지급비용 발생 계상으로, 대상 2건 합계 30,500,000원이 표로 나옵니다. 아래 실행 이력에는 이전 기간의 실행 번호 · 실행자 · 문서 수 · 금액이 남아 있습니다. 같은 대상 · 기간은 중복으로 만들어지지 않습니다.

일괄 실행 — 실행 결과와 로그
일괄 실행 — 실행 결과와 로그 — 실행하면 작성중 문서가 만들어지고 로그가 남습니다.

실행으로 만들어진 문서는 문서 처리 화면에 임시저장으로 나타나 승인 흐름을 그대로 탑니다. 실행 로그에는 단계별 시각과 메시지가 쌓입니다.

대사와 예외 조치 — 규칙 여섯 개, 예외는 조치 상태를 따라간다

대사 · 예외 — 규칙별 결과와 예외 목록
대사 · 예외 — 규칙별 결과와 예외 목록 — 규칙 6개의 점검 건수 · 차이 건수 · 최대 차이를 보여 줍니다.

규칙은 보조원장과 총계정, 장부환율과 고시환율, 선급비용 상각 누계, 발생비용 인식액, 계정과 재무제표 라인 연결, 시산표 차변과 대변입니다. 허용 범위를 넘는 차이는 아래 예외 목록에 올라가고, 의도적으로 넣은 예외 9건이 규칙별로 분포합니다.

예외 조치 — 조정 전표 생성
예외 조치 — 조정 전표 생성 — 예외마다 조정 전표 · 보류 · 수용 중 하나로 조치합니다.

조정 전표를 선택하면 사유를 적고 조정 문서를 만들며, 예외는 조치 중 상태가 됩니다. 환율 예외처럼 조정 전표를 만들 수 없는 규칙은 서버가 이를 막고 보류나 수용만 허용합니다.

재대사 — 해소 확인
재대사 — 해소 확인 — 조정 전표를 전기한 뒤 대사를 다시 실행하면 해소 여부가 자동으로 판정됩니다.

차이가 허용 범위 안으로 들어오면 예외가 해소로 바뀌고, 조정 전표가 취소되면 다시 미해결로 돌아갑니다. 결산 과업 완료도 이 예외가 남아 있으면 서버가 막습니다.

시산표와 재무제표 — 차변과 대변이 같은지 매번 검산한다

시산표 — 점검 결과와 계정별 잔액
시산표 — 점검 결과와 계정별 잔액 — 차변 합계와 대변 합계가 같은지 점검 줄이 먼저 보입니다.

위쪽 점검 줄은 시산표 차변 합계와 대변 합계가 모두 93,575,166,227원으로 같고, 결산 조정 합계 0, 기초 + 차변 − 대변 + 조정 = 기말이 46개 계정에서 일치함을 보여 줍니다. 재무제표 라인에 연결되지 않은 계정 2개는 빨간 표시로 남아 대사 R5 예외로 이어집니다.

재무제표 — 재무상태표와 손익계산서
재무제표 — 재무상태표와 손익계산서 — 계정을 재무제표 라인에 연결해 같은 값으로 만듭니다.

재무상태표는 자산 = 부채 + 자본 + 당기손익 등식을, 손익계산서는 라인별 금액을 보여 줍니다. 조정 전표를 전기하면 시산표와 재무제표가 같은 값으로 다시 만들어집니다.

다차원 분석 — 축을 바꿔도 합계가 변하지 않는다

다차원 분석 — 피벗과 차트
다차원 분석 — 피벗과 차트 — 재무제표 구분 › 재무제표 라인이 행, 지표가 열인 기본 배치입니다.

조회 조건 패널은 접힌 채 요약 한 줄만 남기고, 아래에 지표 합계 타일과 피벗 표가 있습니다. 이 예시는 2026년 7월부터 9월까지이며 차변 발생과 대변 발생이 각각 32,899,362,020원으로 같습니다. 오른쪽 SVG 차트는 같은 값을 막대로 그립니다.

축 전환 — 서버 재호출 없이 다시 묶기
축 전환 — 서버 재호출 없이 다시 묶기 — 차원을 끌어 행 축 · 열 축을 바꾸면 표와 차트가 함께 바뀝니다.

쓰지 않는 차원, 행 축, 열 축 세 칸에서 차원을 끌어다 놓습니다. 행은 최대 3단계, 열은 최대 2단계이며 축을 바꿔도 서버를 다시 부르지 않고 브라우저에 있는 큐브를 다시 묶습니다.

드릴스루 — 금액을 만든 원천 전표 라인
드릴스루 — 금액을 만든 원천 전표 라인 — 칸을 누르면 그 금액을 만든 전표 라인이 열립니다.

행 경로와 열 조합이 조건이 되어 원천 전표 라인이 나옵니다. 머리에는 질의 조건과 함께 칸 금액과 라인 합계가 같은지 표시되며, 전표 번호를 누르면 문서 상세로 이동합니다.

계획 대비 차이 모드
계획 대비 차이 모드 — 비교 기준을 켜면 칸마다 실적 · 기준 · 차이 · 증감률이 나옵니다.

색은 금액 기준과 비율 기준(10퍼센트)을 둘 다 넘을 때만 칠하고, 붉은색은 나쁜 방향 초록색은 좋은 방향입니다. 비율과 계산 항목은 칸의 합계를 먼저 더한 뒤 계산합니다.

차이 워터폴 · 요인분해
차이 워터폴 · 요인분해 — 총차이를 기초 이월 · 차변 발생 · 대변 발생 · 결산 조정 효과로 가릅니다.

판매비와관리비의 2026년 9월 기말 잔액이 계획보다 113,763,915원 큰 경우를 예로, 기초 이월 효과 188,000,114원, 차변 발생 효과 −67,520,046원, 대변 발생 효과 −58,925원, 결산 조정 효과 −6,657,228원으로 나뉩니다. 요인 합이 총차이와 같은지 검산 줄이 매번 확인합니다.

변동 사유 기록
변동 사유 기록 — 차이 난 행에 사유 구분과 내용을 적습니다.

사유는 조회 범위와 행 경로를 키로 저장되어 축을 바꾸거나 다음 기간에 열어도 따라옵니다. 적힌 사유는 CSV와 AI 해설의 근거에 함께 실립니다.

영역 간 연계와 AI 분석 · 에이전트

영역 간 연계 — 문서 흐름
영역 간 연계 — 문서 흐름 — 결산 조정 문서가 다른 영역 문서와 어떻게 이어지는지 따라갑니다.

앞 문서에서 뒤 문서로 이어지는 흐름을 영역별로 보여 주고, 연계 문서를 누르면 상세로 이동합니다. 결산 문서가 자금 · 구매 · 영업 쪽 원천과 닿는 자리를 한 화면에서 확인합니다.

분석 해설 — 규칙 기반
분석 해설 — 규칙 기반 — 현재 범위를 읽어 요약과 핵심 발견을 씁니다.

기본값은 규칙 기반 해설이며 모델 연결은 서비스 안 설정으로만 켜고 기본은 꺼져 있습니다. 해설이 쓴 금액은 서비스가 큐브에서 계산한 값이고, 근거 표를 펼쳐 확인할 수 있습니다.

에이전트 보고 대기함
에이전트 보고 대기함 — 감시 규칙에 걸리면 받을 역할 앞으로 보고가 올라갑니다.

규칙은 기한 경과 결산 과업, 미처리 대사 예외, 결산 조정의 손익 영향, 승인 대기 적체입니다. 실행은 하루 한 번만 허용되며 이 제한은 서버가 판정하고, 걸린 것이 없어도 실행 기록은 남습니다.

이력 · 감사 · 역할 · 레이아웃과 좁은 화면

감사 로그
감사 로그 — 모든 쓰기 · 상태 전이 · 실행이 사용자 · 시각 · 이전 값 · 이후 값과 함께 남습니다.

문서 상세에서도 같은 로그를 조회할 수 있습니다. 기준정보 생성이나 사유 기록처럼 문서가 아닌 쓰기도 한 줄 요약으로 남습니다.

조회자 역할 — 읽기 전용
조회자 역할 — 읽기 전용 — 역할에 따라 버튼과 기능이 달라집니다.

조회자는 쓰기 버튼이 보이지 않고, 서버도 쓰기 요청을 거절합니다. 이 사용자 전환은 데모용이며 운영에서는 SAP 권한 객체와 역할로 바꿉니다.

저장한 레이아웃 — 열 때 자동 조회
저장한 레이아웃 — 열 때 자동 조회 — 기본 레이아웃에 자동 조회를 지정하면 조회된 채로 시작합니다.

축 · 조회조건 · 측정값 · 접힘 상태를 이름 붙여 저장하고 기본 레이아웃으로 지정할 수 있습니다. 자동 조회를 켜 두면 분석 화면이 열릴 때 바로 큐브를 읽습니다.

좁은 화면 — 조합 상한 안내
좁은 화면 — 조합 상한 안내 — 행 · 열 조합이 상한을 넘으면 범위를 좁히라는 안내가 나옵니다.

휴대폰 폭에서는 왼쪽 메뉴가 접히고 차트가 표 아래로 내려갑니다. 조합이 너무 많으면 반쯤 그린 표 대신 범위를 좁히라는 안내를 띄웁니다.

화면 뒤에서 일어나는 일

화면은 요청을 보내고 서버 응답을 그대로 보여 줍니다. 상태 전이, 승인 가능 여부, 대사 판정은 모두 서비스가 정하고, 허용되지 않는 동작은 사유와 함께 거절됩니다. 판정 조건과 결과를 표로 정리하면 다음과 같습니다.

대사 규칙 여섯 가지의 판정

규칙판정 조건결과 상태사용자 조치
R1 보조원장–총계정 잔액 일치보조원장 잔액 − 총계정 잔액이 허용 오차(0원)를 넘음예외 · 미해결조정 전표 생성 · 보류 · 수용
R2 외화 장부환율–고시환율 일치(장부환율 − 고시환율) ÷ 고시환율 × 100 이 0.01퍼센트를 넘음예외 · 미해결환율 확인 후 보류 · 수용 (조정 전표는 만들지 않음)
R3 선급비용 상각 누계 점검기상각액 − 총액 × 경과월 ÷ 총월수가 1,000원을 넘음예외 · 미해결조정 전표 생성 · 보류 · 수용
R4 발생비용 인식액–대상액 일치전기된 발생 전표 합계 − 대상 금액이 1,000원을 넘음예외 · 미해결조정 전표 생성 · 보류 · 수용
R5 계정–재무제표 라인 연결 점검잔액 − 올바른 재무제표 라인에 연결된 잔액이 0이 아님예외 · 미해결기준정보에서 라인 연결을 고친 뒤 재대사
R6 시산표 차변·대변 합계 일치차변 잔액 합계 − 대변 잔액 합계가 1원을 넘음예외 · 미해결원인 점검 필요 — 조정 전표 또는 기준정보 확인

예외는 미해결 → 조치 중 → 해소로 이어지고 보류는 별도 상태입니다. 허용 오차는 샘플 가정값이며 운영에서는 회사 정책으로 정합니다. 원인을 단정하지 않고 “차이 발생 · 점검 필요”로 표시합니다.

문서 상태 전이와 승인 조건

현재 상태동작결과 상태필요 역할 · 조건
임시저장검토 요청검토 중처리자(작성자) · 관리자. 차대 일치 · 필수값 · 계정 사용 가능 여부를 확인
검토 중승인승인됨승인자 · 관리자. 작성자는 승인 불가, 5천만 원 이상은 서로 다른 2인
검토 중반려반려됨승인자 · 관리자. 사유 필수
반려됨검토 요청검토 중고친 뒤 다시 요청
승인됨전기전기됨열린 기간에만
전기됨역처리역처리됨승인자 · 관리자. 반대 문서 자동 생성, 사유 필수

표에 없는 전이는 서버가 400 오류로 거절합니다. 승인 금액 구간(5천만 원)과 허용 오차는 모두 샘플 규칙이며, 운영 값은 회사가 정합니다.

일괄 실행은 이렇게 진행된다

  1. 1단계 조건 — 유형(발생 계상 · 상각 · 외화 평가), 회사, 기간을 정합니다.
  2. 2단계 모의 실행 — 서버가 대상과 금액을 계산해 돌려주지만 저장하지 않습니다. 모의 실행을 거치지 않으면 실행 버튼이 열리지 않습니다.
  3. 3단계 실행 — 같은 유형 · 회사 · 기간으로 이미 실행한 이력이 있으면 거절하고, 아니면 작성중 문서를 만들어 문서 처리의 승인 흐름에 올립니다.
  4. 4단계 로그 — 실행 번호 · 실행자 · 문서 수 · 금액과 단계별 메시지가 남습니다.

산출식은 기말 잔액 = 기초 잔액 + 차변 발생 − 대변 발생 + 결산 조정 (차변 +, 대변 −), 이월은 이번 기간 기초 = 직전 기간 기말, 시산표는 기말 차변 합계 = 대변 합계입니다. 계획 시산표 합계는 0, 큐브 합계는 원천 전표 라인 합계와 같아야 합니다.

조회조건

조건필수기본값설명 · 질의 방식
회사선택전체비우면 필터를 보내지 않습니다. 고르면 회사 조건으로 서버에 전달합니다.
기간(시작 · 끝)필수열린 기간분석은 기간 범위, 그 밖의 화면은 기준 기간 하나를 씁니다. 기간 범위는 기간 값의 이상 · 이하 조건입니다.
차원 다중 선택선택전체시간 외 차원마다 값을 여러 개 고릅니다(차원 안은 또는, 차원 사이는 그리고). 큐브에 실제로 있는 값만 올라옵니다.
비교 기준선택없음계획을 켜면 칸마다 실적 · 기준 · 차이 · 증감률이 나옵니다.
측정값선택기초 · 차변 · 대변 · 조정 · 기말계산항목(순증감 · 조정 비율 · 마감 검증 차이 · 기말 ÷ 기초)을 더할 수 있습니다.

결과 컬럼

컬럼의미산출식
기초 잔액기간 시작 시점의 계정 잔액직전 기간 기말 잔액 (첫 기간은 이월 기준정보)
차변 발생 · 대변 발생기간 중 전기된 전표 라인 합계전기된 문서의 차변 · 대변 라인 금액 합
결산 조정결산 조정 문서(전기됨)가 만든 금액조정 문서 라인 합 (차변 +, 대변 −)
기말 잔액조정까지 반영한 기간 말 잔액기초 + 차변 − 대변 + 조정
순증감기간 중 순수한 움직임차변 발생 − 대변 발생
조정 비율(%)발생 대비 조정의 크기결산 조정 ÷ (차변 + 대변) × 100 — 칸의 합계를 먼저 더한 뒤 계산
마감 검증 차이산식이 어긋난 칸을 찾는 열기초 + 차변 − 대변 + 조정 − 기말 (0이 아니면 점검 필요)
차이 · 증감률비교 기준을 켰을 때의 실적 − 기준(실적 − 기준) ÷ |기준| × 100, 금액 임계와 10퍼센트 임계를 둘 다 넘을 때만 색 표시

좁은 화면에서 달라지는 것

휴대폰 폭에서는 왼쪽 메뉴가 접히고 조회 조건이 위로 쌓이며, 분석 차트는 표 아래로 내려갑니다. 행 · 열 조합이 상한(열 36개)을 넘으면 반쯤 그린 표 대신 범위를 좁히라는 안내를 띄우고, 승인 · 반려 같은 버튼은 가로로 넘치지 않도록 줄바꿈됩니다.

파일 구성

(앱 폴더)/
  index.html · Component.js · manifest.json
  controller/   Home · Master · Docs · Batch · Recon · Tb · Analysis · Flow · Audit
  view/         모듈별 화면 정의 (XML)
  fragment/     문서 상세 창
  model/        서비스 호출 · 큐브 접기 · SVG 차트 · 보고서 생성 · 오류 처리
  css/ · i18n/
  odata/        서비스 정의(메타데이터) · 서비스 로직

SAP 표준 기능 확장 포인트 — 표준 T-code 와 어떻게 연계되는지

표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회 · 검증 관점을 더해 확장합니다. 아래는 표준으로 충분한 일과 이 앱이 더하는 관점을 나란히 놓은 것입니다.

표준으로 되는 것과 안 되는 것

하고 싶은 일표준 화면으로 되는 것이 앱이 더하는 관점
계정 잔액 확인계정 · 기간별 잔액 조회 (FAGLB03 · FS10N)보조원장 잔액과 총계정 잔액을 한 줄에 놓고 차이를 대사 예외로 올립니다.
재무제표 출력재무제표 버전 기준 출력 (F.01)계정이 재무제표 라인에 연결되지 않은 경우를 마감 전에 예외로 잡습니다.
외화 평가평가 실행 (FAGL_FCV)실행 전 시뮬레이션과 같은 조건의 재실행 거절, 장부환율과 고시환율의 대사를 더합니다.
조정 전표 승인전표 입력 · 전기와 기간 관리 (OB52)검토 요청 → 승인 → 전기의 단계와 직무 분리, 금액 구간별 2인 승인, 역처리를 한 화면에서 봅니다.
계획 대비 차이 분석표준 리포트의 합계 조회다차원 피벗, 셀에서 원천 전표로의 드릴스루, 요인분해와 변동 사유 기록을 더합니다.
법정 · 공시 · 세무 신고표준 화면이 맡음이 앱은 신고 문서를 만들지 않습니다. 결산 점검까지만 돕습니다.

T-code 별 연계 지점

T-code이름연계
FAGLB03총계정 잔액 조회시산표 · 분석의 기초 · 발생 · 기말 잔액이 같은 총계정원장 라인에서 나옵니다. 두 화면의 계정별 기말을 맞춰 보는 것이 대사 지점이고, 이 앱 결과에서 의심 계정을 찾으면 FAGLB03 에서 원천을 확인합니다.
FS10N계정 잔액 조회기준정보의 총계정 잔액 · 보조원장 잔액 비교(R1)와 맞닿습니다. 표준 화면 값을 이 앱의 계정 목록에서 다시 볼 수 있습니다.
F.01재무제표 출력계정 → 재무제표 라인 연결을 같은 구조로 읽습니다(R5). 법정 제출용 출력은 표준에 남기고, 이 앱은 연결 누락과 차대 일치를 마감 전에 점검합니다.
FAGL_FCV외화 평가외화 평가 일괄 실행의 시뮬레이션 · 실행 대상과 환율이 이어집니다. 실제 평가 전표 생성은 표준 실행과 맞춰 정하며, 환율 대사(R2)가 두 화면의 환율 차이를 보여 줍니다.
FAGLGVTR이월(잔액 이월)이월 대사식(직전 기간 기말 = 이번 기간 기초)이 표준 이월 결과와 같은지 확인하는 지점입니다.
OB52회계 기간 열기 · 닫기문서 전기는 열린 기간에만 가능합니다. 기간 열림 정보는 표준 설정을 따릅니다.
F.13총계정 자동 반제미결 항목 정리와의 연계는 확인 필요입니다.
AFAB감가상각 실행감가상각 계상 과업과의 연계는 확인 필요입니다.

운영 전환 시 “기존 리포트를 없애야 하나”에 대한 답은 아니오입니다. 법정 · 감사 · 세무 대응용 표준 리포트는 그대로 두고, 이 앱은 그 앞 단계인 결산 점검과 승인 · 일괄 실행 · 분석에 쓰는 것이 안전합니다.

S/4HANA 분석 스택과의 자리

S/4HANA 의 표준 CDS 분석 쿼리와 Fiori 분석 앱, Analysis for Office 는 총계정원장 잔액을 정해진 틀로 보여 주는 데 강합니다. 이 앱은 같은 원천(총계정원장 라인)을 쓰되 결산 흐름 안에서 승인 · 대사 · 분석을 이어 보는 자리입니다. 표준 분석 스택에 이미 있는 쿼리는 그대로 두고, 이 앱의 큐브 · 쿼리 뷰(#sec-cds)와 같은 구조로 겹치는 부분만 점검하면 됩니다. 확인하지 못한 표준 앱 이름은 이 글에 적지 않았습니다.

요구사항 매핑표 — IAS 21 환율변동효과(K-IFRS 제1021호)

기준서요구사항대응 기능원천 데이터비고
IAS 21 환율변동효과(K-IFRS 제1021호)외화 화폐성 항목의 보고기간말 환율 환산외화 평가 시뮬레이션 · 실행외화 대상 항목 · 고시환율(TCURR)적용 환율 종류는 회사 정책 — 확인 필요
IAS 21 환율변동효과(K-IFRS 제1021호)환산에서 생긴 차이의 손익 반영평가 문서의 승인 · 전기전표 항목(BSEG) · 총계정원장 라인(ACDOCA)손익 분류는 회사와 감사인이 판단
IAS 21 환율변동효과(K-IFRS 제1021호)장부 환율과 고시환율의 일치대사 규칙 R2고시환율 · 장부환율허용 오차는 샘플 가정값(0.01퍼센트)

분석 지표 정의표

지표산식 · 판정 기준대응 기능원천 데이터비고
기말 잔액기초 + 차변 − 대변 + 결산 조정피벗 · 시산표총계정원장 라인 집계차변 +, 대변 −
순증감차변 발생 − 대변 발생계산항목큐브-
조정 비율(%)결산 조정 ÷ (차변 + 대변) × 100계산항목큐브감시 규칙의 손익 영향 점검과 연결
마감 검증 차이기초 + 차변 − 대변 + 조정 − 기말계산항목큐브0이 아니면 점검 필요
계획 대비 차이실적 − 계획, 증감률차이 모드 · 요인분해큐브 · 계획요인 합 = 총차이 검산 줄 표시

확장 포인트 — 운영에서 실제로 손대는 자리

자리손대는 내용비고
계정 → 재무제표 라인 매핑재무제표 버전별 계정 연결표. 새 계정 개설 때 라인을 함께 지정하도록 절차화연결 누락은 R5 로 잡힙니다.
환율 유형 · 환산 시점평가에 쓸 환율 유형(고시 · 평균 등)과 기준일회사 정책과 감사인 합의 사항입니다.
대사 규칙 · 허용 오차규칙 추가 · 오차 조정, 규칙별 조정 전표 허용 여부샘플 값은 가정입니다.
승인 단계 · 금액 구간문서 유형별 단계 수와 구간 금액구간이 바뀌면 직무 분리 검사도 함께 점검합니다.
확장 필드 · 차원원가센터 · 이익센터 같은 차원을 큐브에 추가차원이 늘면 조합 상한을 다시 정합니다.
권한데모 사용자 전환을 PFCG 역할로 교체회사코드 · 활동 권한 객체로 조회 범위와 쓰기 권한을 나눕니다.
감시 규칙임계값 · 받을 역할 · 실행 주기배치 잡으로 등록하면 사람이 열지 않아도 점검됩니다.

CDS 구성

데모에서는 서비스가 읽는 데이터를 운영에서는 CDS 뷰가 대신 줍니다. 아래는 이 앱의 모델을 S/4HANA 위에 올릴 때의 구조와 코드 전문입니다. 필드와 어노테이션 일부는 설치 버전에 따라 확인이 필요하다고 코드 안에 표시했습니다.

뷰 레이어 구성

레이어뷰하는 일왜 나누나
기준ZFSC_ACCT_MAP · ZI_GlLine계정 → 재무제표 라인 매핑 테이블, 전기 완료된 총계정원장 라인매핑은 변경 이력과 권한이 따로 필요하고, 라인 집합은 큐브와 드릴스루가 함께 읽어야 합니다.
차원ZI_FsAccount계정 번호를 이름 · 계정 그룹 · 재무제표 라인으로 풀어 줌계정이 늘어도 큐브를 고치지 않기 위해서입니다.
큐브ZI_TbCube회사 · 기간 · 계정별 차변 · 대변 · 순증감 집계시산표와 분석이 같은 숫자 원천을 읽도록 한 곳에서 부호 규칙을 정합니다.
쿼리ZC_TbQuery행 · 열 · 필터의 기본 배치와 필수 조건화면마다 기본 축이 달라 큐브와 분리합니다.
권한ZI_TbCube (DCL)회사코드 · 활동 권한 객체로 조회 범위 제한어느 앱이 읽어도 같은 범위가 보이게 데이터 계층에서 막습니다.
서비스ZUI_FsClose · ZR_CloseDoc읽기 뷰 노출과 승인 · 전기 · 역처리 액션데모의 서비스 로직이 하던 상태 전이를 RAP 액션으로 옮깁니다.

① 계정 → 재무제표 라인 매핑 테이블

재무제표에 어느 계정이 모이는지가 이 한 테이블에서 정해집니다. 운영에서 가장 먼저 채우고, 대사 규칙 R5 가 이 표의 빈칸을 찾아냅니다.

"  ─────────────────────────────────────────────────────────────
"  ZFSC_ACCT_MAP  계정 → 재무제표 라인 매핑 테이블
"  역할 : 어느 총계정이 어느 재무제표 라인으로 모이는지를 한 곳에 둔다.
"  나눈 이유 : 연결 누락(대사 규칙 R5)을 뷰가 아니라 데이터로 점검하려면
"            매핑이 테이블이어야 변경 이력과 권한을 따로 줄 수 있다.
"  ─────────────────────────────────────────────────────────────
@EndUserText.label : '계정 - 재무제표 라인 매핑'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #RESTRICTED
define table zfsc_acct_map {
  key client    : abap.clnt not null;
  key ktopl     : ktopl not null;          " 계정과목표
  key saknr     : saknr not null;          " 총계정 번호
  key fsvers    : abap.char(4) not null;   " 재무제표 버전
  fs_line       : abap.char(10);           " 재무제표 라인 (비어 있으면 미연결)
  stmt_type     : abap.char(1);            " B 재무상태표 / P 손익계산서
  valid_from    : abap.dats;
  valid_to      : abap.dats;
  changed_by    : syuname;
  changed_at    : timestampl;
}

② 차원 뷰 — 총계정

계정 마스터와 텍스트, 매핑을 묶어 큐브가 계정을 이름과 라인으로 풀어 쓰게 합니다. 미연결 계정은 표시 열로 드러납니다.

"  ─────────────────────────────────────────────────────────────
"  ZI_FsAccount  차원 뷰 : 총계정 + 이름 + 재무제표 라인
"  역할 : 큐브가 계정 번호를 이름과 라인으로 풀어 쓸 때 이 뷰만 본다.
"  나눈 이유 : 계정 마스터(SKA1 · SKAT)와 매핑을 큐브에 직접 섞으면
"            계정이 늘 때마다 큐브를 고쳐야 한다.
"  ─────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #NOT_REQUIRED
@EndUserText.label : '총계정 차원'
@ObjectModel.representativeKey : 'GLAccount'
@Analytics.dataCategory : #DIMENSION
define view entity ZI_FsAccount
  as select from ska1
    inner join   skat on  skat.ktopl = ska1.ktopl
                      and skat.saknr = ska1.saknr
                      and skat.spras = $session.system_language
    left outer join zfsc_acct_map as map
                      on  map.ktopl  = ska1.ktopl
                      and map.saknr  = ska1.saknr
                      and map.fsvers = 'KR01'
{
  key ska1.ktopl                       as ChartOfAccounts,
  key ska1.saknr                       as GLAccount,
      @Semantics.text: true
      skat.txt50                       as GLAccountName,
      ska1.ktoks                       as AccountGroup,
      map.fs_line                      as FsLine,
      map.stmt_type                    as StatementType,
      case when map.fs_line is null then 'X' else '' end as IsUnmapped
}

③ 기준 뷰 — 총계정원장 라인

큐브 합계와 드릴스루 합계가 같으려면 두 곳이 같은 라인 집합을 읽어야 합니다. 이 뷰가 그 약속입니다.

"  ─────────────────────────────────────────────────────────────
"  ZI_GlLine  기준 뷰 : 총계정원장 라인 (전기 완료분만)
"  역할 : 모든 집계와 드릴스루가 같은 라인 집합을 보게 한다.
"  나눈 이유 : 큐브의 합계와 드릴스루의 합계가 어긋나지 않으려면
"            두 곳이 같은 뷰를 읽어야 한다.
"  ─────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '총계정원장 라인'
define view entity ZI_GlLine
  as select from acdoca
{
  key rldnr                            as Ledger,
  key rbukrs                           as CompanyCode,
  key gjahr                            as FiscalYear,
  key belnr                            as AccountingDocument,
  key docln                            as LedgerGLLineItem,
      racct                            as GLAccount,
      poper                            as FiscalPeriod,
      budat                            as PostingDate,
      drcrk                            as DebitCreditCode,
      rhcur                            as CompanyCodeCurrency,
      @Semantics.amount.currencyCode : 'CompanyCodeCurrency'
      hsl                              as AmountInCompanyCodeCurrency
}
where rldnr = '0L'          " 리딩 원장 (회사 정책에 따라 확인 필요)

④ 큐브 뷰 — 시산표 집계

회사 · 기간 · 계정별로 차변과 대변을 따로 더하고 순증감을 만듭니다. 통화 단위는 금액 필드마다 지정합니다.

"  ─────────────────────────────────────────────────────────────
"  ZI_TbCube  큐브 뷰 : 계정 · 기간 · 회사별 차변 / 대변 / 조정 집계
"  역할 : 시산표와 분석이 읽는 유일한 숫자 원천.
"  나눈 이유 : 기초 잔액과 기말 잔액은 집계가 아니라 이월 규칙이라
"            큐브가 측정값을 만들 때 부호 규칙을 한 번만 정한다.
"  ─────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '시산표 큐브'
@Analytics.dataCategory : #CUBE
@ObjectModel.modelingPattern : #ANALYTICAL_CUBE
@ObjectModel.supportedCapabilities : [ #ANALYTICAL_PROVIDER, #SQL_DATA_SOURCE, #CDS_MODELING_DATA_SOURCE ]
define view entity ZI_TbCube
  as select from ZI_GlLine as L
  association [1..1] to ZI_FsAccount as _Account
    on  $projection.GLAccount = _Account.GLAccount
{
  key L.CompanyCode,
  key L.FiscalYear,
  key L.FiscalPeriod,
  key L.GLAccount,
      L.CompanyCodeCurrency,

      @Semantics.amount.currencyCode : 'CompanyCodeCurrency'
      @Aggregation.default : #SUM
      sum( case L.DebitCreditCode when 'S'
             then L.AmountInCompanyCodeCurrency else 0 end )      as DebitAmount,

      @Semantics.amount.currencyCode : 'CompanyCodeCurrency'
      @Aggregation.default : #SUM
      sum( case L.DebitCreditCode when 'H'
             then L.AmountInCompanyCodeCurrency else 0 end )      as CreditAmount,

      @Semantics.amount.currencyCode : 'CompanyCodeCurrency'
      @Aggregation.default : #SUM
      cast( sum( case L.DebitCreditCode when 'S'
             then L.AmountInCompanyCodeCurrency
             else L.AmountInCompanyCodeCurrency * -1 end )
        as abap.curr(23,2) )                                     as NetMovement,

      _Account
}
group by L.CompanyCode, L.FiscalYear, L.FiscalPeriod, L.GLAccount, L.CompanyCodeCurrency

⑤ 분석 쿼리 — 시산표

행 · 열 · 필터의 기본 배치와 필수 조건을 정합니다. 사용자는 이 위에서 축을 바꿔 분석합니다.

"  ─────────────────────────────────────────────────────────────
"  ZC_TbQuery  소비 뷰(분석 쿼리) : 행 · 열 · 필터의 기본 배치
"  역할 : 사용자가 처음 열었을 때 보는 시산표 배치를 정한다.
"  나눈 이유 : 화면마다 기본 축이 다르므로 쿼리를 큐브와 나눠 둔다.
"  ─────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '시산표 쿼리'
@Analytics.query : true
@OData.publish : false
define view entity ZC_TbQuery
  as select from ZI_TbCube
{
  @AnalyticsDetails.query.axis : #ROWS
  @AnalyticsDetails.query.displayHierarchy : #ON
  @Consumption.filter : { selectionType : #SINGLE, multipleSelections : false, mandatory : true }
  CompanyCode,

  @AnalyticsDetails.query.axis : #COLUMNS
  @Consumption.filter : { selectionType : #INTERVAL, mandatory : true }
  FiscalPeriod,

  @AnalyticsDetails.query.axis : #ROWS
  GLAccount,

  @AnalyticsDetails.query.axis : #FREE
  _Account.FsLine,

  @AnalyticsDetails.query.decimals : 0
  DebitAmount,
  @AnalyticsDetails.query.decimals : 0
  CreditAmount,
  @AnalyticsDetails.query.decimals : 0
  NetMovement
}

⑥ 권한 — 회사코드 DCL

데모의 사용자 전환이 하던 일을 데이터 계층의 권한 규칙으로 옮깁니다.

"  ─────────────────────────────────────────────────────────────
"  ZI_TbCube  권한(DCL) : 회사코드 · 활동 권한으로 조회 범위를 자른다
"  역할 : 데모의 사용자 전환을 PFCG 역할로 바꾸는 자리.
"  나눈 이유 : 화면이 아니라 데이터 계층에서 막아야 어느 앱이 읽어도 같다.
"  ─────────────────────────────────────────────────────────────
@EndUserText.label : '시산표 큐브 권한'
@MappingRole : true
define role ZI_TbCube {
  grant select on ZI_TbCube
    where ( CompanyCode ) = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' );
}

⑦ 서비스 정의와 RAP 동작 정의

읽기 뷰와 쓰기 동작을 하나의 서비스로 노출합니다. 승인 시 작성자와 승인자가 같은지는 액션 구현에서 검사합니다.

"  ─────────────────────────────────────────────────────────────
"  ZUI_FsClose  서비스 정의 + ZR_CloseDoc 동작 정의(RAP)
"  역할 : 읽기 뷰와 결산 조정 문서의 쓰기 동작(승인 · 전기 · 역처리)을 노출한다.
"  나눈 이유 : 데모에서는 서비스 로직이 하던 상태 전이를
"            운영에서는 RAP 액션과 권한 검사로 옮긴다.
"  ─────────────────────────────────────────────────────────────
@EndUserText.label : '결산 통합 관리 서비스'
define service ZUI_FsClose {
  expose ZC_TbQuery   as TrialBalance;
  expose ZI_FsAccount as Account;
  expose ZR_CloseDoc  as CloseDocument;
}

managed implementation in class zbp_r_closedoc unique;
strict ( 2 );
define behavior for ZR_CloseDoc alias CloseDocument
persistent table zfsc_close_doc
lock master
authorization master ( instance )
{
  create; update;
  field ( readonly ) DocStatus, Approver, PostedAt;
  action ( features : instance ) submit  result [1] $self;   " 검토 요청
  action ( features : instance ) approve result [1] $self;   " 승인 : 작성자 = 승인자이면 거절
  action ( features : instance ) reject  parameter ZA_Reason result [1] $self;
  action ( features : instance ) post    result [1] $self;   " 열린 기간 · 차대 일치 검사
  action ( features : instance ) reverse parameter ZA_Reason result [1] $self;
  validation checkBalanced on save { create; update; }
}

운영 시점에 해야 할 일

개발보다 정하는 일이 많습니다. 아래는 운영 전환 전에 합의해 두어야 할 항목입니다.

해야 할 일무엇을 정하나정하지 않으면누가
상태 흐름 · 승인 단계 · 금액 구간문서 유형별 단계 수, 2인 승인 기준 금액승인 규칙이 사람마다 달라지고 감사에서 근거를 설명하기 어렵습니다.경영지원팀 · 내부통제
직무 분리 · 역할데모 사용자 전환을 SAP 권한 객체 · PFCG 역할로 교체누구나 승인할 수 있는 상태로 운영됩니다.IT 보안 · 경영지원팀
처리 펑션 연결일괄 실행을 표준 BAPI · RAP 액션 · 표준 일괄 처리(FAGL_FCV 등)와 연결이 앱의 모의 결과와 실제 전기 결과가 어긋납니다.IT 부서 · 회계팀
문서 번호 범위결산 조정 문서의 번호 체계표준 전표 번호와 추적이 끊깁니다.회계팀
대사 규칙 · 허용 오차규칙별 오차와 조정 전표 허용 여부사소한 차이가 예외로 쏟아지거나 큰 차이가 묻힙니다.회계팀 · 감사 대응
환율 유형 · 환산 시점평가에 쓸 환율 유형과 기준일평가 금액이 표준 실행과 달라집니다.회계팀 · 감사인 협의
부호 규칙차변 + / 대변 −, 계정 유형별 표시 방향시산표와 재무제표의 부호가 서로 다르게 읽힙니다.회계팀
원천 확정실적 · 계획 · 예측의 원천과 확정 시점차이 분석의 기준이 매달 바뀝니다.경영관리팀
차원 범위큐브에 둘 차원(원가센터 · 이익센터 등)조합 폭발로 응답이 느려지거나 필요한 축이 없습니다.경영관리팀 · IT 부서
권한 설계회사코드 · 활동 권한, 조회자 · 처리자 · 승인자 · 관리자조회 범위가 과하거나 부족합니다.IT 보안
성능 기준응답 시간 목표와 집계 위치대용량에서 화면이 멈춥니다.IT 부서
대사 체계표준 T-code 결과와 맞출 항목 · 주기두 화면의 숫자가 다를 때 어디를 고쳐야 하는지 모릅니다.회계팀
전송(TR) 순서테이블 → 뷰 → 권한 → 서비스 순서활성화 오류로 서비스가 열리지 않습니다.IT 부서
서비스 활성화 · 서비스 주소서비스 게시(/IWFND/MAINT_SERVICE 또는 바인딩 게시)와 앱 설정의 서비스 주소 교체앱이 샘플 서비스를 계속 바라봅니다.IT 부서
배치 등록감시 규칙 · 일괄 실행을 정해진 주기로 돌릴 잡(SM36)사람이 열어야만 점검됩니다.IT 부서 · 회계팀

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

검증용 샘플 데이터를 대상으로 대사식 10종을 전수 검사했습니다. 도입 포인트의 사례와 같은 결과입니다.

대사식검사 건수차이 건수
원장 전표 차변=대변(전기 라인)8670
문서 항목 차변=대변1800
시산표 기말 차변합=대변합(회사·기간)180
기초+차변−대변+조정=기말(계정·기간)4320
이월(전기 기말=당기 기초)3840
계획 시산표 합=0180
큐브 합 = 원천 라인 합470
상태 이력 마지막=문서 현재 상태3200
역처리 문서 금액 = 원문서 × (−1)40
원장 라인 합=큐브 차변·대변8640
합계3,1340

의도적으로 넣은 대사 예외 9건(R1 2 · R2 2 · R3 1 · R4 2 · R5 2)은 위 차이 건수와 별도로 집계했습니다. 화면에 나온 값과 스크립트로 구한 값도 일치했습니다 — 시산표 차변 · 대변 합계 93,575백만 원, 누적 당기순이익 7,130백만 원, 분석 차변 발생 32,899,362,020원.

운영 데이터로 갈 때

전표 · 문서 흐름이 수천만 건이 되면 집계는 브라우저가 아니라 CDS 큐브 쪽에서 해야 합니다. 분석 쿼리는 회사와 기간을 필수 파라미터로 두고, 읽는 라인 수가 상한을 넘으면 범위를 좁히도록 안내해야 합니다. 큐브에서 자주 쓰는 조합은 인덱스나 집계 테이블을 고려하고, 드릴스루는 큐브 조건 그대로 원천 라인을 페이지 단위로 읽게 합니다. 응답 시간 기준(예: 첫 조회 수 초 이내)은 운영 전에 고객사와 함께 정해 두는 것을 권합니다.

자주 묻는 질문

결산 담당자와 승인자, 도입을 검토하는 분들이 자주 묻는 24가지를 숫자와 산식 · 화면과 조작 · 분석 기능 · 도입과 운영으로 묶었습니다.

숫자와 산식

시산표의 기말 잔액은 어떻게 계산하나요?

기초 잔액 + 차변 발생 − 대변 발생 + 결산 조정입니다(차변 +, 대변 −). 기초 잔액은 직전 기간의 기말 잔액을 이월한 값이라 기간이 이어져도 끊기지 않습니다. 산식이 어긋난 칸은 마감 검증 차이 열에 0이 아닌 값으로 나타납니다. 샘플 데이터에서는 46개 계정이 모두 일치했습니다.

차변과 대변이 같은지는 어떻게 확인하나요?

시산표 위쪽 점검 줄이 매번 차변 합계와 대변 합계를 비교해 보여 줍니다. 샘플 데이터에서는 두 합계가 93,575,166,227원으로 같았습니다. 같지 않으면 대사 규칙 R6 이 예외로 올리고, 원인은 단정하지 않고 “점검 필요”로 표시합니다.

재무제표 라인에 연결되지 않은 계정은 어떻게 되나요?

시산표에는 나오지만 재무제표 어느 라인에도 모이지 않으므로 재무상태표와 손익계산서가 시산표와 어긋납니다. 대사 규칙 R5 가 이를 예외로 올립니다. 샘플에서는 2개 계정(절대 잔액 합계 250,551,930원)이 걸렸고, 기준정보에서 라인 연결을 고친 뒤 재대사하면 해소됩니다.

외화 평가와 환율은 어떻게 다루나요?

외화 평가는 일괄 실행에서 시뮬레이션으로 대상과 금액을 먼저 보고, 확인한 뒤에만 실행합니다. 장부환율과 고시환율의 차이가 0.01퍼센트를 넘으면 대사 규칙 R2 가 예외로 올립니다. 이 처리는 IAS 21 환율변동효과(K-IFRS 제1021호)와 연결해 설명할 수 있지만, 적용 환율 종류와 손익 분류는 회사와 감사인이 정합니다.

요인분해의 합이 총차이와 같다는 것은 어떻게 알 수 있나요?

워터폴 아래 검산 줄이 요인 합과 총차이를 비교해 같은지 매번 표시합니다. 판매비와관리비 2026년 9월 사례에서 총차이 +113,763,915원은 기초 이월 +188,000,114원, 차변 발생 −67,520,046원, 대변 발생 −58,925원, 결산 조정 −6,657,228원으로 나뉘었습니다. 요인은 잔액 산식의 구성 항목이라 합이 항상 총차이와 같아집니다.

차이 색은 어떤 기준으로 칠하나요?

금액 임계와 비율 임계(10퍼센트)를 둘 다 넘을 때만 칠합니다. 붉은색은 손익에 나쁜 방향, 초록색은 좋은 방향이며 원인은 단정하지 않습니다. 비율과 계산항목은 칸의 합계를 먼저 더한 뒤 계산해서, 상위 행에서도 하위 행의 평균이 아닌 값이 나옵니다.

화면과 조작

처음 열면 무엇부터 보나요?

개요 화면의 지표 타일이 먼저 보입니다. 결산 진행률, 기한 경과 과업, 승인 대기, 반려 문서, 시산표 차대 차이, 미해결 예외, 누적 당기순이익, 안 읽은 보고입니다. 타일이나 아래 할 일을 누르면 해당 문서나 예외 화면으로 이동합니다.

직무 분리는 어떻게 지켜지나요?

작성자가 자기 전표를 승인하려 하면 서버가 거절하고 사유를 메시지로 돌려줍니다. 화면은 서버가 알려 준 역할 값으로 버튼을 보이거나 숨기지만, 판정은 서버가 다시 합니다. 그래서 화면을 우회해 요청해도 같은 결과입니다.

금액이 큰 전표는 다르게 처리되나요?

샘플 규칙은 5천만 원 이상이면 서로 다른 2인의 승인을 요구합니다. 첫 번째 승인으로는 승인됨이 되지 않고 두 번째 승인자가 승인해야 전기할 수 있습니다. 구간 금액과 단계 수는 회사가 정할 값입니다.

일괄 실행은 왜 시뮬레이션을 거쳐야 하나요?

미지급비용 발생 계상, 선급비용 상각, 외화 평가는 한 번에 여러 문서를 만들기 때문에 실행 뒤 되돌리는 비용이 큽니다. 모의 실행을 하지 않으면 실행 버튼이 열리지 않고, 같은 유형 · 회사 · 기간으로 이미 실행했다면 서버가 거절합니다. 샘플 사례는 대상 2건 합계 30,500,000원이었습니다.

전기한 문서를 잘못 만들었으면 어떻게 하나요?

지우지 않고 역처리합니다. 사유를 적으면 원문서와 연결된 반대 문서가 자동으로 생기고 금액은 원문서의 부호를 뒤집은 값입니다. 이 관계는 검증 대사식에 들어 있어 4건 모두 차이가 없었습니다.

분석 기능

축을 바꾸면 서버를 다시 부르나요?

아닙니다. 조회할 때 큐브를 한 번 읽고, 이후 차원을 끌어 행 · 열 축을 바꾸면 브라우저가 그 큐브를 다시 묶습니다. 행은 최대 3단계, 열은 최대 2단계이고 조합이 상한을 넘으면 범위를 좁히라는 안내가 나옵니다.

칸을 눌렀을 때 나오는 전표 라인은 믿을 수 있나요?

행 경로와 열 조합이 그대로 조건이 되어 그 칸의 금액을 만든 원천 전표 라인이 열립니다. 머리에 칸 금액과 라인 합계가 같은지 표시되며, 큐브 합계와 원천 라인 합계의 일치는 검증 대사식에 들어 있습니다.

AI 해설은 숫자를 직접 계산하나요?

아닙니다. 금액과 비율은 서비스가 큐브에서 계산해 근거로 넘기고 해설은 그 숫자를 읽어 설명만 합니다. 기본은 규칙 기반 해설이고 모델 연결은 서비스 설정으로만 켜며 기본은 꺼져 있습니다. 근거 표를 펼쳐 해설이 쓴 값을 확인할 수 있습니다.

에이전트는 무엇을 감시하나요?

기한 경과 결산 과업, 미처리 대사 예외, 결산 조정의 손익 영향 과다, 승인 대기 적체 네 가지입니다. 걸리면 받을 역할 앞으로 보고가 올라가며, 실행은 하루 한 번만 허용됩니다. 이 제한도 서버가 판정하고 걸린 것이 없어도 실행 기록이 남습니다.

변동 사유는 어디에 저장되나요?

조회 범위와 행 경로를 키로 서비스에 저장됩니다. 그래서 축을 바꾸거나 다음 기간에 같은 행을 열어도 사유가 따라옵니다. 적힌 사유는 CSV 와 AI 해설의 근거에 함께 실립니다.

도입과 운영

어떤 사용자와 부서가 쓰나요?

조정 전표를 쓰는 결산 담당자, 승인하는 팀장 · 본부장, 예외를 조치하는 회계팀, 분석을 보는 경영관리팀이 같은 화면 틀을 씁니다. 역할은 조회자 · 처리자 · 승인자 · 관리자로 나뉘며 역할에 따라 버튼과 기능이 달라집니다. 이 글의 효과는 샘플 데이터 기준이며 도입 효과 수치는 고객사 데이터로 확인해야 합니다.

적용 시기와 범위는 어떻게 잡나요?

월결산 주기에 맞춰 한 법인의 한 기간으로 시작하는 것이 안전합니다. 기준정보와 매핑을 먼저 채우고, 대사 규칙을 읽기 전용으로 돌려 본 뒤, 문서 승인과 일괄 실행을 단계적으로 켭니다. 샘플은 가상 회사 2곳의 9개 기간입니다.

표준 T-code 와는 어떤 관계인가요?

표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회 · 검증 관점을 더해 확장합니다. 총계정 잔액(FAGLB03 · FS10N), 재무제표 출력(F.01), 외화 평가(FAGL_FCV), 기간 관리(OB52)는 그대로 쓰고 이 앱이 맞닿은 지점에서 숫자를 대조합니다. 기존 리포트를 없앨 필요는 없습니다.

운영 데이터는 어떻게 연결하나요?

화면은 서비스 모델 경로에만 바인딩하므로 서비스 주소를 운영 서비스로 바꾸는 것이 연결의 핵심입니다. 운영에서는 CDS 뷰와 RAP 서비스를 만들고 서비스를 게시한 뒤 앱 설정의 주소를 교체합니다. 매핑 · 승인 규칙 · 권한을 정하는 일이 개발보다 오래 걸립니다.

권한과 보안은 어떻게 하나요?

데모의 사용자 전환은 시험용이며 운영에서는 SAP 권한 객체와 PFCG 역할로 바꿉니다. 회사코드 조회 권한은 CDS 의 권한 규칙에서, 쓰기 권한은 서비스 액션에서 검사합니다. 모든 쓰기는 사용자 · 시각 · 이전 값 · 이후 값과 함께 감사 로그에 남습니다.

데이터가 매우 많아도 쓸 수 있나요?

전표 라인이 수천만 건이면 브라우저에서 피벗을 접을 수 없으므로 집계는 CDS 큐브에서 해야 합니다. 회사와 기간을 필수 조건으로 두고 읽는 라인 수에 상한을 두며, 드릴스루는 페이지 단위로 읽습니다. 샘플은 원천 라인 1,734행을 큐브 1,933행으로 묶은 규모이므로 운영 성능은 별도로 확인해야 합니다.

계정 체계나 재무제표 매핑이 바뀌면 어떻게 하나요?

매핑 테이블의 유효 기간과 재무제표 버전으로 관리합니다. 새 계정을 열면 라인을 함께 지정하는 절차를 두고, 빠뜨린 경우는 대사 규칙 R5 가 다음 대사에서 잡습니다. 과거 기간의 연결은 유효 기간으로 보존하는 것을 권합니다.

이 앱의 결과를 그대로 신고나 공시에 써도 되나요?

이 앱은 점검 도구이며 최종 판단은 회사와 감사인이 합니다. 외화 평가의 환율 종류와 손익 분류, 허용 오차, 승인 금액 구간은 모두 샘플 가정이거나 회사 정책의 영역입니다. 법정 신고와 공시용 출력은 SAP 표준 화면에서 하고, 이 앱은 그 앞 단계의 결산 점검에 씁니다.