SAP 은행 자금 포지션 점검 — 은행 잔고가 원장 현금계정과 맞는지부터 본다
회사·은행·통화·기간별로 입출금을 모아 기말잔고를 계산하고, 총계정원장 현금계정 잔액과 자동으로 대사하는 화면을 OpenUI5로 구현했습니다
은행 계좌는 계좌별로는 잘 관리되어도, "은행 거래로 계산한 잔고가 장부(총계정원장 현금계정)와 실제로 맞는가"를 회사·은행·통화·기간 단위로 한눈에 모아 보는 화면은 따로 없는 경우가 많습니다. 그래서 은행 거래 명세(입금·출금)를 회사코드·은행·통화·회계연도·기간 단위로 모아 기초잔고 + 입금액 − 출금액 = 기말잔고 를 계산하고, 이를 총계정원장 현금계정 잔액과 자동으로 대사하는 화면을 OpenUI5로 구현했습니다.
기말잔고와 원장 현금계정 잔액의 차이가 허용오차 이상이면 "확인필요"로 자동 표시합니다. 계좌·차입금 잔액 조회는 표준 자금 관리 기능이 담당하고, 이 화면은 그 위에 회사·은행·통화·기간 단위 대사와 자동 판정을 더한 층입니다. 실제 구동 화면 3종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 자금 포지션 조회 — 계좌별 잔고를 모아 보는 표준 자금 관리 조회 관점을 은행·통화·기간별 포지션 구성에 이어받습니다
- 총계정원장 라인아이템 조회 — 현금계정 잔액을 라인아이템 단위로 확인하는 표준 조회 방식을 원장 대사의 원천으로 그대로 씁니다
| 항목 | 내용 |
|---|---|
| 업무 영역 | 자금(Treasury) · 자금 분석 |
| Namespace | zui5.bankpos |
| 셸 구조 | 조회조건 영역(우측 조회) + 요약 KPI 3종 + 회사·은행·통화·기간별 요약 테이블, 행 클릭 상세 Dialog |
| 화면 수 | 조회 화면 1개 + 상세 다이얼로그 |
| SAP 표준 T-code | - |
| 데이터 연동 방식 | OData V2 — 화면 블록마다 엔티티셋에 직접 바인딩 |
| 성격 | 조회·점검형 — 최종 판단은 회사와 감사인이 수행 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 3종 둘러보기
기본 조건으로 조회하면 회사·은행·통화·기간별 요약과 요약 KPI 가 뜹니다 → 통화 조건을 좁혀 확인필요 건을 가려보고 → 행을 클릭해 거래 명세를 봅니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
사용 방법
- 화면에 들어오면 기본 조건(전체 회사·통화, 당해연도 001~009기)으로 자동 조회가 1회 실행되어 요약 KPI와 요약 목록이 함께 채워집니다.
- 조회조건 영역에서 회사코드(선택, 비우면 전체)·통화(선택, 비우면 전체)·회계연도·기간(부터/까지)을 입력합니다.
- 조회 버튼은 조회조건 입력 필드 줄의 가장 오른쪽에 있습니다. 조회조건 영역 어디서든 Enter 키를 눌러도 같은 조회가 실행됩니다. 초기화 버튼은 조회 버튼 바로 왼쪽에 있습니다.
- 상단 카드에서 조회 건수 · 확인필요 건수 · 기말잔고 합계를 먼저 확인합니다.
- 목록에서 행을 클릭하면 해당 은행·통화·기간의 거래 명세가 팝업으로 열립니다.
- 목록 위 CSV 내려받기(UTF-8 BOM)로 현재 조회된 결과 전체를 저장합니다.
포지션 판정 기준
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 기말잔고(계산값)와 원장 현금계정 잔액의 차이 절대값이 허용오차(0.01) 미만 | 정상 | 조치 없음 |
| 차이 절대값이 허용오차 이상 | 확인필요 | 은행 거래 명세와 원장 전표를 대조해 미기표·중복기표·환산차이 등 원인을 점검 |
위 기준은 조회·점검을 돕기 위한 것이며, 차이의 최종 원인 판정과 회계처리는 화면이 단정하지 않고 회사와 감사인이 확인합니다.
포지션 산출·대사 절차
| 단계 | 내용 |
|---|---|
| 1단계 | 은행·통화·회계연도·기간별로 거래 명세(입금/출금)를 집계해 입금액·출금액을 산출 |
| 2단계 | 정합성 검증: 거래 명세 합계 = 기간별 입금액·출금액(전수 일치 확인) |
| 3단계 | 기초잔고 + 입금액 − 출금액 = 기말잔고 산출(전기 기말잔고가 당기 기초잔고로 이월) |
| 4단계 | 기말잔고를 총계정원장 현금계정 잔액과 대사해 차이를 산출 |
| 5단계 | 차이가 허용오차 이내면 "정상", 아니면 "확인필요"로 점검결과 부여 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 회사코드 | 선택 | 전체면 조건 제외 |
| 통화 | 선택 | 전체면 조건 제외 |
| 회계연도 | 필수 | 4자리 회계연도 |
| 기간(부터/까지) | 필수 | 3자리 기간 범위(이상·이하) |
결과 컬럼
| 컬럼 | 설명 |
|---|---|
| 회사코드 · 회사명 · 은행ID · 은행명 · 통화 · 연도 · 기간 | 대상 회사·은행·통화·기간 |
| 기초잔고 · 입금액 · 출금액 · 기말잔고 | 포지션 대사식의 각 구성요소 |
| 원장 현금계정 잔액 · 차이 | 대사 대상과 그 차이 |
| 거래건수 · 점검결과 | 해당 기간 거래 건수, 정상/확인필요 |
| 거래ID · 전기일 · 구분 · 금액 · 전표번호 · 적요 | 거래 명세 팝업 컬럼 |
SAP 표준 기능 매핑
표준 실행은 SAP 표준 기능이 담당하고, 이 화면은 그 데이터에 회사·은행·통화·기간 단위 대사와 자동 판정 관점을 더해 확장합니다.
| 표준 기능 | 표준 기능 설명 | 이 화면이 더한 것 |
|---|---|---|
| 자금 포지션 조회 | 계좌별 잔고를 모아 보는 표준 자금 관리 조회 | 은행·통화·기간 단위로 입출금을 모아 기말잔고를 계산합니다 |
| 총계정원장 라인아이템 조회 | 현금계정 잔액을 라인아이템 단위로 확인하는 표준 조회 | 산출된 기말잔고를 원장 현금계정 잔액과 자동으로 대사·판정합니다 |
분석 지표 정의표
| 대상 영역 | 지표 | 정의 | 원천 데이터 |
|---|---|---|---|
| 자금 분석 | 기말잔고(CloseBal) | 기초잔고 + 입금액 − 출금액 | 은행 거래 명세 |
| 자금 분석 | 차이(Diff) | 기말잔고 − 원장 현금계정 잔액 | 은행 거래 명세, 총계정원장 현금계정 |
참고 CDS 뷰
| 원천 테이블 | 주요 필드 | 쓰임 |
|---|---|---|
BSEG | BUKRS · GJAHR · HKONT · DMBTR | 현금계정 라인아이템 — 원장 현금계정 잔액 산출 원천(표준 원장 테이블 기준) |
BKPF | BUKRS · BELNR · BUDAT | 전표 헤더 — 전기일자·전표번호 |
define view entity I_BankPositionSketch
as select from bseg as Ledger
{
key Ledger.bukrs as Bukrs,
key Ledger.gjahr as Gjahr,
key Ledger.monat as Period,
sum(Ledger.dmbtr) as GlBalance // 현금계정 한정, 회사·연도·기간 집계
}
group by Ledger.bukrs, Ledger.gjahr, Ledger.monat
필드 매핑은 가상 데이터 기준 스케치이며, 은행별 입출금 명세는 별도 거래 데이터에서 집계합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 · 구성 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 패널 · 요약 KPI · 포지션 요약 목록 |
| 데이터 연동 | manifest.json dataSources.mainService(OData V2, 상대 경로)로 기본 모델을 만들고 defaultCountMode:"Inline" · useBatch:false 로 구성합니다. 화면 블록마다 해당 엔티티셋에 직접 바인딩합니다 |
| 포지션 요약 | sap.ui.table.Table(컬럼 15개) — 셀 클릭으로 상세 다이얼로그를 엽니다 |
| 거래 명세 | sap.m.Table 1개 — 다이얼로그 안에서 growing 방식으로 표시 |
| 조회조건 | sap.ui.model.Filter 로 조립해 바인딩에 적용합니다. 기간(부터·종료) 조건은 하나의 AND 복합 Filter 로 묶어 전달합니다. 회사코드·통화를 "전체"로 두면 필터를 만들지 않습니다 |
| 예외 메시지 | 메타데이터 실패·요청 실패를 구분해 안내하는 전용 처리기 |
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon, OData 서비스에 연결 |
Component.js | 모델 초기화, 예외 메시지 처리기 연결 |
manifest.json | 앱 디스크립터 — zui5.bankpos · ko 로케일, OData 서비스와 모델 선언 |
view/Main.view.xml | 조회조건 · 요약 KPI · 포지션 요약 목록 |
view/DetailDialog.fragment.xml | 거래 명세 다이얼로그 |
controller/Main.controller.js | 조회조건 조립 · 바인딩 · 다이얼로그 · CSV |
controller/BaseController.js | CSV 다운로드 공통 처리 |
model/formatter.js · model/ErrorHandler.js | 표시 서식 · 예외 메시지 처리 |
i18n/i18n_ko.properties | 화면 문구 |
검증 결과
검증용 샘플 데이터(포지션 63건, 거래 명세 370건)를 기준으로 대사식을 전수 검증했습니다. 판정 로직 시연을 위해 기말잔고와 원장 현금계정 잔액이 일치하지 않도록 의도적으로 편성한 예외 3건을 포함했습니다.
| 검증 항목 | 결과 |
|---|---|
| 거래 명세 합계 = 기간별 입금액·출금액(63건 전수) | 통과(불일치 0건) |
| 기초잔고 + 입금액 − 출금액 = 기말잔고 항등식 | 통과(전수 일치) |
| 전기 기말잔고 → 당기 기초잔고 이월 연속성 | 통과(전수 일치) |
| 기말잔고 vs 원장 현금계정 잔액 차이 판정(정상/확인필요) | 통과(의도적 예외 3건 정확히 검출, 미설명 차이 0건) |
| 조회 조건 전달 — 회사코드·통화·회계연도·기간 필터 · 정렬 · 총건수 표시 | 확인 |
| 표시 금지 검사 — 커스텀 프로그램ID·앱 식별자·출처 표현 | 0건 |
화면 렌더링 — 조회 버튼 위치 · sap_horizon 테마 · Enter 키 조회 · 서비스 미연결 시 안내 메시지 | 확인 |
모든 데이터는 검증용으로 구성한 가상 데이터입니다.
자주 묻는 질문
은행 자금 포지션 화면은 언제부터, 어떤 데이터에 쓸 수 있나요?
특정 기준서 시행일과 무관한 자금 관리 조회·점검 화면입니다. 조회조건에 지정한 회계연도·기간의 은행 거래·원장 데이터가 있으면 바로 조회할 수 있습니다.
화면의 "확인필요" 표시는 어떤 의미인가요?
은행 거래로 계산한 기말잔고와 총계정원장 현금계정 잔액이 허용오차 이상 차이가 날 때 표시됩니다. 미기표 항목, 중복 기표, 환산 차이 등 여러 원인이 있을 수 있어 화면은 차이를 표시할 뿐 원인을 단정하지 않습니다.
화면에 표시되는 점검 결과가 회사의 공식 결론인가요?
아닙니다. 이 화면은 분류·집계·대사를 돕는 조회·점검 도구이며, 차이의 최종 원인 판정과 회계처리 여부는 회사와 감사인이 확인해 결정합니다.
여러 통화의 은행 계좌도 함께 볼 수 있나요?
예. 통화별로 조회조건을 좁혀 볼 수 있고, 통화가 달라도 같은 대사 로직(기초+입금−출금=기말, 기말과 원장 현금계정 잔액 대사)이 그대로 적용됩니다.