자금 솔루션 · 자금 회계

은행 미결 항목 경과 정리 점검 — 남은 항목이 얼마나 오래됐는지 기한 초과 · 정리 누락 후보 · 장기 미결까지 가려내는 월마감 자금 회계(자금 솔루션)

장부와 은행 잔액 사이의 미결 항목을 경과일수와 정리 기한으로 가려내고, 정리 누락 후보 · 장기 미결 · 중복으로 보이는 항목과 계좌별 조정 후 잔액 대사까지 한 화면에서 봅니다. 소개 영상과 실제 화면 7종, CDS 코드까지 공개합니다.

소개 영상1분 47초9개 장면음성 안내·자막조회 → 경과 구간 → 정리 기한 → 계좌 대사 → 상세 → 대사 결과

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

월마감이 가까워지면 자금 담당자는 같은 질문에 다시 답해야 합니다. 은행 잔액과 장부 잔액이 다른데, 그 차이를 이루는 항목이 무엇이고 얼마나 오래 남아 있나. 입금했다고 적었지만 은행에는 아직 없는 돈, 지급했다고 기표했지만 상대가 아직 현금화하지 않은 수표, 은행에는 찍혔는데 장부에는 없는 입금과 출금 — 이 네 가지가 은행 계좌 대사의 “남은 항목”입니다. 합계는 맞춰 볼 수 있어도, 항목마다 언제부터 남아 있는지는 어느 화면에도 한눈에 나오지 않습니다.

지금 방식은 은행 명세, 계정 라인 아이템, 엑셀 대사표를 번갈아 열어 항목마다 발생일을 찾고 기준일에서 빼는 일입니다. 항목 유형마다 정리 기한이 다르고(입금은 며칠, 지급 수표는 몇 주), 반대편에 같은 금액의 항목이 이미 올라와 있어 정리만 빠진 경우도 있습니다. 이 앱은 그 계산과 대조를 한 화면에 올려, 조정 후 잔액이 맞는지와 오래 남은 항목이 무엇인지를 함께 보여 줍니다.

관련 기준서가 따로 있는 화면은 아닙니다. 자금 회계의 월마감 업무를 돕는 분석 화면이며, 대상 영역은 자금 회계입니다. 화면은 항목을 “점검 필요”나 “확인 필요”로 가려 보일 뿐, 회계 처리나 세무 판단을 대신하지 않습니다.

한 줄 요약 — 잔액 대사는 합계가 맞으면 끝난 것처럼 보입니다. 이 앱의 값은 그 다음에 있습니다: 남은 항목마다 경과일수와 정리 기한을 계산해 기한을 넘긴 것을 찾고, 반대편에 같은 금액의 항목이 있어 정리만 빠졌을 수 있는 것과 오래 남았거나 중복으로 보이는 것을 따로 가려 보여 줍니다.

조정 후 잔액이 맞아도 오래 남은 항목은 그대로 남는다

은행 잔액에 미달 입금을 더하고 미결제 지급을 빼면 조정 후 은행 잔액이 나오고, 장부 잔액에 은행 입금 미기표를 더하고 출금 미기표를 빼면 조정 후 장부 잔액이 나옵니다. 두 값이 같으면 대사는 맞습니다. 그런데 그 안에 150일 된 수표가 들어 있어도 합계는 똑같이 맞습니다. 샘플에서 여섯 계좌의 조정 후 잔액은 모두 차이가 0이지만, 미결 항목 72건 가운데 25건이 정리 기한을 넘겼고 4건은 90일을 넘겼습니다. 잔액만 보면 보이지 않는 이야기입니다.

정리 기한은 항목 유형마다 다르다

입금이 은행에 반영되기까지 걸리는 시간과 수표가 현금화되기까지 걸리는 시간은 같지 않습니다. 이 앱은 유형마다 회사가 정하는 정리 기한을 두고(샘플은 미달 입금 5일, 미결제 지급 30일, 은행 입금·출금 미기표 각 3일), 경과일수가 기한을 넘으면 그 초과 일수를 계산합니다. 기한 숫자는 코드가 아니라 정책 표에 있어 회사 사정에 맞게 바꿀 수 있습니다.

반대편에 같은 금액이 이미 있는데 정리만 빠졌을 수 있다

장부에는 “미달 입금”으로 남아 있는데 은행 명세에는 같은 금액의 입금이 이미 들어와 있다면, 그 두 줄은 같은 거래일 가능성이 큽니다. 한쪽에서만 정리하고 다른 쪽을 놓친 것입니다. 앱은 장부 측 항목과 은행 측 항목의 금액·통화·시기를 맞대어 일치 후보를 찾고, 기한을 넘긴 항목에 후보가 있으면 “정리 누락 후보”로 올립니다. 샘플에서는 5건입니다. 같은 거래가 맞는지는 사람이 확인합니다.

같은 항목이 두 번 올라오면 잔액이 맞아도 문제가 숨는다

같은 계좌에서 같은 참조 번호와 같은 금액이 둘 이상 남아 있으면 중복 입력이나 중복 수신일 수 있습니다. 이 경우에도 양쪽이 같은 만큼 틀려 조정 후 잔액은 맞아 보입니다. 앱은 계좌·금액·참조가 같은 항목 묶음을 “확인 필요”로 표시합니다. 정상 거래일 수도 있으므로 단정하지 않습니다.

사용 방법

  1. 조회조건 입력 — 회계연도와 기간(월)은 필수, 회사·계좌·항목 유형·경과 구간·발생일·점검 코드·점검 결과는 선택입니다. 처음 열면 2026년 09월이 채워져 자동으로 한 번 조회됩니다.
  2. 조회 — 조회 버튼은 조회조건 영역 안 가장 오른쪽에 있고, 입력란에서 Enter 키를 눌러도 조회됩니다. 초기화 버튼은 조회 버튼 바로 옆에 있습니다.
  3. 요약 확인 — 점검한 미결 항목, 미결 원화 합계, 기한 초과 건수와 금액, 정리 누락 후보, 확인 필요·점검 필요 건수, 정합성 대사 차이 건수가 한 줄로 보입니다.
  4. 탭 이동 — 미결 명세 → 경과 구간 → 정리 기한 → 계좌별 대사 → 대사 결과 순서로 봅니다.
  5. 행 클릭 상세 — 미결 명세의 행을 누르면 경과일수·정리 기한·초과 일수·일치 후보와 같은 계좌의 다른 미결 항목이 열립니다.
  6. CSV 내려받기 — 지금 보고 있는 탭의 조회 결과를 UTF-8 CSV 로 내려받습니다.

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

점검 도구에서 가장 비싼 질문은 “이 숫자가 맞나”입니다. 그래서 화면이 보여 주는 숫자들이 서로 맞는지를 식으로 세우고 전수로 돌렸습니다. 검사 건수 합계 158건에 차이는 0건입니다. 점검 코드가 붙은 항목은 화면이 보여 주려고 일부러 넣은 예외이므로 대사 차이와 섞지 않고 따로 적었습니다.

대사식검사 건수차이 건수
원화 계좌 조정 후 잔액 대사30
외화(USD) 계좌 조정 후 잔액 대사10
외화(EUR) 계좌 조정 후 잔액 대사10
외화(JPY) 계좌 조정 후 잔액 대사10
정리 기한 표의 유형별 건수 합계 = 미결 명세 건수20
경과 구간 표의 건수 합계 = 미결 명세 건수20
경과 구간 표의 원화 금액 합계 = 미결 명세 원화 합계20
기준일 − 발생일 = 경과일수 (항목마다)720
max(0, 경과일수 − 정리 기한) = 기한 초과 일수 (항목마다)720
미결 명세의 기한 초과 건수 = 정리 기한 표의 기한 초과 건수 합계10
계좌별 대사 표의 미결 건수 합계 = 미결 명세 건수10

의도적으로 넣은 점검 대상은 미결 항목 72건 가운데 28건입니다 — 기한 초과 15건(점검 필요), 정리 누락 후보 5건(점검 필요), 장기 미결 4건(확인 필요), 중복으로 보이는 4건(확인 필요). 나머지 44건은 기한 안에 있는 정상 대기 항목입니다. 외화 계좌는 통화별로 따로 대사했고, 금액 합계는 원화 환산 금액으로만 더했습니다. 환율은 모두 가정값입니다.

무엇으로 만들었나

자리무엇왜 그렇게 두었나
화면 컨트롤OpenUI5 표준 컨트롤(필터 막대 · 탭 · 표 · 대화상자). 외부 차트 라이브러리는 쓰지 않았습니다.사내망 반입 심사를 가볍게 하고, 표준 화면과 같은 조작감을 유지하려는 선택입니다.
판정 로직경과일수 · 정리 기한 초과 · 구간 · 일치 후보 · 장기 미결 · 중복 판정을 서비스 쪽에 모았습니다.화면마다 계산하면 탭 사이 숫자가 어긋납니다. 계산이 한 곳에 있어야 대사식이 의미를 가집니다.
데이터 연동OData V2 서비스를 화면의 기본 모델로 연결했습니다. 탭마다 서로 다른 집합을 읽고, 조회조건은 필터로 서비스에 보냅니다.운영에서는 서비스 주소만 실제 서비스로 바꾸면 화면은 그대로 씁니다. 날짜 조건은 서비스가 직접 해석합니다.
요약 지표건수와 금액은 조회 결과에서, 기한 초과 건수·금액은 서비스의 집계 함수로 가져옵니다.같은 숫자를 두 번 계산하지 않도록 정의를 한 곳에 두었습니다.
테마sap_horizon표준 Fiori 화면과 나란히 놓여도 어색하지 않도록 같은 테마를 씁니다.
앱 정보표
솔루션자금 솔루션
업무 영역자금 회계 (은행 미결 항목 정리)
관련 기준서·대상 영역- (대상 영역: 자금 회계)
SAP 표준 T-codeFF67 · FEBAN · FBL3N · FS10N · F-03
화면 성격조회·점검 (경과 판정 · 정리 기한 · 대사)
데이터 연동OData V2
테마sap_horizon
SAP 표준 기능을 그대로 이어받은 부분 — 은행 명세 항목, 계정 라인 아이템, 계좌 장부 잔액은 표준 데이터 구조를 그대로 읽습니다. 표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회·검증 관점을 더해 확장합니다.

실행 화면

처음 열었을 때

처음 열면 2026년 09월 기준으로 자동 조회가 한 번 돌고, 미결 항목 72건이 미결 명세 탭에 올라옵니다. 화면 위쪽 안내문이 이 화면의 역할 — 정리 제안은 후보일 뿐이고 실제 정리와 기표는 회사가 판단한다는 점 — 을 먼저 말해 줍니다.

처음 연 화면
처음 연 화면 — 조회조건 · 요약 · 미결 명세 탭

조회 버튼은 조회조건 영역 안 가장 오른쪽에 있고 초기화 버튼이 바로 옆에 있습니다. 요약에는 점검한 미결 항목 72건, 원화 합계 1,047.1백만원, 기한 초과 25건과 296.8백만원, 정리 누락 후보 5건, 확인 필요 8건, 점검 필요 20건, 정합성 대사 차이 0건이 한 줄로 나옵니다. 금액 단위는 원이며 외화 항목은 기준일 가정 환율로 환산한 원화입니다. 열 이름 옆의 숫자(72)는 지금 조건에 걸린 행 수입니다.

확인 필요만 모아 보기

점검 결과를 “확인 필요”로 고르면 오래 남았거나 중복으로 보이는 항목만 남습니다. 조회조건은 “전체”로 두면 서비스에 보내지 않고, 값을 고른 조건만 필터로 나갑니다.

확인 필요만 모아 보기
확인 필요만 모아 보기 — 점검 결과 필터를 확인 필요로 고른 조회

장기 미결(M03) 4건과 중복으로 보이는 항목(M04) 4건이 모입니다. 점검 코드와 점검 결과는 함께 걸 수 있어, 예를 들어 “점검 필요”이면서 특정 계좌인 항목만 좁혀 볼 수도 있습니다. 코드의 첫 글자(M · G · K · A)에 따라 해당하는 탭에만 적용됩니다.

경과 구간과 정리 기한 — 같은 항목을 집계로 보기

미결 명세가 항목 한 줄씩이라면, 경과 구간 탭과 정리 기한 탭은 같은 항목을 집계한 것입니다. 경과 구간은 항목 유형과 30일 단위 구간(0~30일, 31~60일, 61~90일, 91일 이상)의 교차, 정리 기한은 유형별 기한과 초과 현황입니다.

경과 구간 탭
경과 구간 탭 — 항목 유형 × 30일 단위 구간별 건수 · 금액 · 기한 초과

회사 1000 의 미결제 지급이 구간별로 어떻게 쌓여 있는지 보입니다. 91일 이상 구간에 4건(86.0백만원)이 있고 최장 경과는 150일입니다. 구간 행의 점검 결과는 기한을 넘긴 항목이 있으면 “점검 필요”, 장기 미결이나 중복이 섞여 있으면 “확인 필요”로 표시됩니다. 기한 안에 있는 항목만 있는 구간은 “정상”입니다.

정리 기한 탭
정리 기한 탭 — 유형별 정리 기한 · 평균·최장 경과 · 기한 초과 현황

입금 유형은 5일, 지급 유형은 30일, 미기표 유형은 3일처럼 유형마다 다른 기한과 장기 미결 기준(90일)이 한 표에 있습니다. 평균 경과와 최장 경과, 기한 초과 건수·금액, 유형마다 권하는 기본 정리 방법이 함께 나와 어느 유형부터 정리해야 하는지 정할 수 있습니다. 이번 기간에 항목이 없는 유형은 “정상”으로 두고 점검 내용에 항목이 없다고 적습니다.

계좌별 대사 — 조정 후 잔액이 같은가

계좌마다 은행 잔액에 미달 입금을 더하고 미결제 지급을 뺀 조정 후 은행 잔액과, 장부 잔액에 은행 입금 미기표를 더하고 출금 미기표를 뺀 조정 후 장부 잔액을 나란히 놓습니다. 외화 계좌는 해당 통화 그대로 대사하고, 원화로 합치지 않습니다.

계좌별 대사 탭
계좌별 대사 탭 — 은행 잔액 + 미달 입금 − 미결제 지급 = 장부 잔액 + 은행 입금 미기표 − 은행 출금 미기표

여섯 계좌 모두 조정 후 은행 잔액과 조정 후 장부 잔액이 같습니다(차이 0). 그래도 점검 결과는 “정상”이 아닙니다 — 잔액은 맞지만 기한을 넘기거나 장기 미결·중복으로 보이는 항목이 그 안에 있기 때문입니다. 통화가 USD · JPY 인 계좌는 해당 통화 단위로 표시됩니다.

행을 눌러 상세까지

미결 명세에서 행을 누르면 대화상자가 열려 그 항목의 계좌·유형·출처·참조, 발생일에서 기준일까지의 경과, 정리 기한과 초과 일수, 일치 후보, 정리 제안이 나옵니다. 아래에는 같은 계좌의 다른 미결 항목이 이어져, 한 계좌의 사정을 한 번에 훑을 수 있습니다.

미결 항목 상세 창
미결 항목 상세 창 — 경과 · 정리 기한 · 일치 후보 · 정리 제안과 같은 계좌의 다른 항목

경과 1일에 정리 기한 5일이라 기한 안에 있는 정상 대기 항목입니다. 같은 계좌의 다른 항목 표에서 118일 된 수표(초과 88일, 확인 필요)나 일치 후보가 있는 입금 미기표(점검 필요)처럼 같이 봐야 할 항목이 보입니다. 정리 제안 문구는 후보이며, 실제 반제와 기표는 표준 화면에서 회사가 합니다.

대사 결과 — 화면의 숫자가 서로 맞는가

마지막 탭은 이 화면의 숫자들을 서로 맞춰 보는 열한 가지 식입니다. 좌변과 우변, 검사 건수, 차이 건수가 나오고, 차이가 생기면 요약의 “정합성 대사 차이 건” 숫자가 0 이 아니게 됩니다.

대사 결과 탭
대사 결과 탭 — 열한 가지 정합성 대사식의 좌변 · 우변 · 차이

통화별 조정 후 잔액 대사 4건, 탭 사이 건수·금액 합계 대사 3건, 경과일수·기한 초과 일수를 항목마다 다시 계산한 대사 2건, 기한 초과 건수와 계좌별 건수의 대사 2건이 있습니다. 모든 식의 차이는 0 입니다. 통화가 다른 금액은 원화로 섞어 더하지 않고, 통화 단위별로 따로 견줍니다.

화면 뒤에서 일어나는 일

항목 하나가 “정상”에서 “점검 필요”나 “확인 필요”가 되기까지의 순서는 다음과 같습니다.

  1. 경과일수 — 기준일(조회 기간 말일)에서 발생일을 뺍니다.
  2. 정리 기한 — 항목 유형별 기한과 견주어, 넘으면 초과 일수를 구합니다(경과일수 − 기한).
  3. 경과 구간 — 0~30일 · 31~60일 · 61~90일 · 91일 이상으로 나눕니다.
  4. 일치 후보 — 반대편 항목과 금액·통화가 맞고 시기가 가까우면 후보로 붙입니다.
  5. 장기·중복 — 경과 90일 초과는 장기 미결, 계좌·금액·참조가 같은 항목이 둘 이상이면 중복으로 보이는 항목입니다.
  6. 점검 코드 — 위 결과를 코드 하나로 모아 결과 상태(정상 · 점검 필요 · 확인 필요)와 사용자 조치를 정합니다.

판정 조건 → 결과 상태 → 사용자 조치

코드판정 조건결과 상태사용자 조치
M00경과일수가 정리 기한 안에 있다정상다음 마감에서 다시 확인
M01경과일수가 정리 기한을 넘었다점검 필요넘은 원인을 확인하고 정리 일정을 정한다
M02기한을 넘겼고 반대편에 일치 후보가 있다점검 필요일치 후보와 정리(반제)가 빠졌는지 확인한다
M03경과일수가 90일을 넘었다확인 필요장기 미결 사유를 확인하고 정리 방향을 정한다
M04같은 계좌·금액·참조 항목이 둘 이상이다확인 필요중복 입력·중복 수신 여부를 확인한다
G00 · G01 · G02경과 구간 행 기준 — 기한 안 · 기한 초과 포함 · 장기 또는 중복 포함정상 · 점검 필요 · 확인 필요해당 구간의 항목을 연다
K00 · K01 · K02 · K03정리 기한 행 기준 — 전부 기한 안 · 초과 있음 · 이번 기간 항목 없음 · 장기 또는 중복 있음정상 · 점검 필요 · 정상 · 확인 필요유형별 기한과 정리 절차를 점검한다
A00 · A01 · A02계좌 기준 — 모두 기한 안 · 초과 또는 누락 의심 · 장기 또는 중복 포함정상 · 점검 필요 · 확인 필요조정 후 잔액이 같아도 항목을 확인한다

조회조건

조회조건필수기본값서비스로 가는 방식
회계연도필수2026필터(같음)
기간(월)필수09필터(같음)
회사선택전체전체이면 필터를 만들지 않는다
계좌선택전체필터(같음) — 미결 명세 · 계좌별 대사 탭
항목 유형선택전체필터(같음) — 미결 명세 · 경과 구간 · 정리 기한 탭
경과 구간선택전체필터(같음) — 미결 명세 · 경과 구간 탭
발생일 시작 · 종료선택전체범위 필터 — 미결 명세 탭. 둘 다 있으면 하나의 범위로 묶어 보낸다
점검 코드선택전체M · G · K · A 첫 글자에 따라 해당 탭에만 적용
점검 결과선택전체필터(같음)

발생일의 시작과 종료를 각각 필터로 따로 걸면 같은 칸의 두 조건이 “또는”으로 묶여 모든 기간이 통과합니다. 그래서 둘 다 있을 때는 하나의 범위 조건으로 보냅니다.

결과 컬럼

컬럼의미산출식
발생일 · 기준일항목이 생긴 날과 점검 기준일기준일은 조회 기간 말일(샘플은 2026-09-30)
경과일발생일부터 기준일까지의 일수기준일 − 발생일
정리 기한유형별 정리 기한(일)정책 표의 값(샘플은 가정값)
초과일기한을 넘은 일수max(0, 경과일 − 정리 기한)
경과 구간30일 단위 구간0~30 · 31~60 · 61~90 · 91 이상
원화 환산(원)외화 항목의 원화 환산 금액금액 × 기준일 가정 환율(원 미만 반올림)
일치 후보반대편에서 찾은 같은 금액의 항목 참조금액·통화 일치 + 시기 근접
점검 코드 · 점검 결과판정 코드와 결과 상태판정 조건 표 참조

좁은 화면에서 달라지는 것

조회조건은 화면 폭에 맞춰 줄을 바꾸도록 구성했습니다. 이번 공개분에는 좁은 화면 캡처가 없어 휴대폰 폭에서의 표 모양은 확인 필요로 남깁니다.

파일 구성

index.html · Component.js · manifest.json
controller/ (BaseController · Main.controller)
view/ (Main.view · DetailDialog.fragment)
model/ (formatter · ErrorHandler)
css/ · i18n/
서비스 정의 폴더 (메타데이터 · 서비스 로직 · 엔티티셋별 데이터)
media/ (소개 영상 · 첫 장면)
설명서(readme.html)

SAP 표준 기능 확장 포인트

표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회·검증 관점을 더해 확장합니다. 아래는 어디까지가 표준이고 어디서부터가 이 앱인지, 표준 화면과 숫자를 어떻게 맞춰 보는지를 정리한 것입니다.

표준으로 되는 것과 이 앱이 더하는 것

하고 싶은 일표준 화면으로 되는 것이 앱이 더하는 관점
은행 명세 올리기와 후처리FF67 로 명세를 입력하고 FEBAN 으로 자동 처리되지 않은 항목을 후처리합니다후처리 대상 가운데 얼마나 오래 남았는지를 경과일수와 기한 초과로 보여 줍니다
장부 측 미결 항목 보기FBL3N 으로 은행 계정의 열린 항목을 조회합니다발생일 기준 경과일수와 유형별 정리 기한을 한 표에 붙이고, 반대편의 일치 후보를 함께 보여 줍니다
항목 정리(반제)F-03 으로 G/L 계정 항목을 반제합니다정리 누락 후보를 모아 보여 주되, 반제 자체는 표준 화면에서 합니다
계좌 잔액 확인FS10N 으로 은행 계정의 장부 잔액을 봅니다은행 잔액과 장부 잔액에 미결 항목을 반영한 조정 후 잔액을 계좌마다 나란히 대사합니다
오래 남은 항목 찾기항목마다 조회해 날짜를 보고 직접 계산합니다경과 구간·기한 초과·장기 미결·중복으로 보이는 항목을 점검 코드로 한 번에 가립니다

T-code 별 연계 지점

T-code이름연계 지점
FF67수작업 은행 명세은행 측 미기표 항목의 원천입니다. 이 앱의 “은행 입금 미기표 · 은행 출금 미기표” 항목은 명세 항목 중 아직 장부에 반영되지 않은 것을 읽습니다. 이 앱의 결과에서 해당 명세를 확인할 때는 FF67 로 명세 한 줄을 봅니다. 명세 입력과 보관은 표준에 남깁니다.
FEBAN은행 명세 후처리후처리 대기 항목과 이 앱의 은행 측 미결 항목을 같은 기준으로 맞춰 봅니다(미기표 판정 조건의 대응은 확인 필요). 이 앱의 정리 제안을 보고 FEBAN 에서 실제 후처리를 진행하며, 기표는 표준에 남깁니다.
FBL3NG/L 계정 라인 아이템장부 측 미결 항목(미달 입금 · 미결제 지급)의 원천입니다. 이 앱의 항목 한 줄은 FBL3N 의 열린 항목 한 줄과 증빙일·금액이 같아야 하며, 두 화면의 건수와 합계가 맞는지 운영 대사로 둡니다. 법정·감사 대응용 원장 조회는 표준에 남깁니다.
FS10NG/L 계정 잔액계좌별 대사 탭의 장부 잔액과 FS10N 의 은행 계정 잔액을 견주어 봅니다. 두 숫자가 다르면 조회 범위(회사 · 기간)부터 확인합니다.
F-03G/L 계정 반제정리 누락 후보를 확인한 뒤 반제를 진행하는 표준 화면입니다. 이 앱은 후보를 보여 줄 뿐 반제하지 않으며, 반제 결과는 다음 조회에서 미결 항목이 줄어든 모습으로 확인합니다(표준 반제와의 대응은 확인 필요).

운영 전환 때 “기존 화면을 없애야 하느냐”는 질문이 자주 나옵니다. 없애지 않습니다. 명세 입력, 후처리, 반제, 기표는 표준 화면에 두고, 이 앱은 그 앞뒤에서 얼마나 오래 남았는지를 보는 조회·검증 화면으로 둡니다.

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

S/4HANA 에는 표준 CDS 분석 쿼리와 Fiori 분석 앱, Analysis for Office 같은 분석 도구가 있습니다. 이 앱은 그 도구들을 대체하지 않고, 같은 CDS 계층에 자금 회계 전용 경과·기한 판정을 얹는 방식을 택했습니다. 표준 분석 도구에서 이미 쓰는 뷰가 있으면 이 앱의 큐브가 그 뷰를 읽도록 바꾸면 됩니다. 어떤 표준 뷰와 앱이 있는지는 설치 환경과 버전에 따라 달라 확인이 필요합니다.

이 앱이 하지 않는 일

  • 전표를 만들거나 반제하지 않습니다. 정리 제안은 후보이며, 실제 반제와 기표는 표준 T-code 에서 회사가 합니다.
  • 회계·세무 판단을 대신하지 않습니다. “점검 필요”와 “확인 필요”는 사람이 볼 항목을 가리는 표시이며, 처리 방법의 옳고 그름을 말하지 않습니다.
  • 정리 기한을 정하지 않습니다. 샘플의 기한은 가정값이고, 운영에서는 회사가 정책 표에 정합니다.
  • 외화 금액을 섞어 더하지 않습니다. 통화가 다르면 원화 환산 금액으로만 합산합니다.

분석 지표 정의표

지표산식·판정 기준대응 기능원천 데이터비고
경과일수기준일 − 발생일미결 명세 · 경과 구간증빙일(BKPF) · 명세 일자(FEBEP)기준일은 조회 기간 말일
기한 초과max(0, 경과일수 − 정리 기한)M01 · 요약 집계 함수회사가 정하는 정리 기한 표기한은 회사 정책(샘플은 가정값)
정리 누락 후보기한 초과 + 반대편 일치 후보 존재M02FBL3N · FEBAN같은 거래인지 판단은 회사
장기 미결경과일수 > 90일M03 · 정리 기한 탭—기준 일수는 회사 정책
중복으로 보이는 항목계좌 · 금액 · 참조가 같은 항목 2건 이상M04FEBEP · BSEG정상 거래일 수 있음
조정 후 잔액은행 잔액 + 미달 입금 − 미결제 지급 = 장부 잔액 + 은행 입금 미기표 − 은행 출금 미기표계좌별 대사T012K · FS10N통화별로 따로

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

자리손대는 내용비고
정리 기한 표유형별 기한과 장기 미결 기준 일수 · 유효 기간회사별로 다르게 둘 수 있고, 바꿔도 과거 조회 결과가 흔들리지 않게 유효 기간을 둔다
일치 후보 규칙금액 일치 허용 범위 · 시기 근접 일수 · 통화 처리후보가 너무 많거나 적을 때 조정한다. 후보는 판단이 아니라 확인 대상이다
항목 유형 구분입금 · 지급 · 입금 미기표 · 출금 미기표 외에 쓰는 유형어음 · 선급 등 회사 고유 유형은 유형 표에 행을 더한다
환율 유형과 환산 시점기준일 환율 유형 · 환산 시점샘플은 가정값. 표준 환산 결과와 맞추는 방법은 확인 필요
권한회사코드 · 계좌 단위 조회 권한권한은 명세를 읽는 뷰에 건다. 합계 뷰에만 걸면 뺄셈으로 다른 사람의 숫자가 새어 나온다
사용자 조치 문구점검 코드별 조치 문구회사 용어와 절차에 맞게 고친다

CDS 구성

화면이 보여 주는 판정은 서비스 쪽에서 만들어집니다. 운영에서는 그 서비스가 CDS 뷰 위에 서야 대용량에서도 버티고, 권한을 표준 방식으로 걸 수 있습니다. 아래는 이 화면의 판정을 CDS 로 옮길 때의 구성입니다. 뷰 이름은 기능을 뜻하는 이름으로 새로 지은 것이고, 표준 뷰 이름과 필드명 가운데 확인하지 못한 곳은 “확인 필요”로 적었습니다. 지면을 아끼려 계좌 기초 집계 같은 보조 뷰는 생략한 스케치입니다.

뷰 레이어 구성

레이어뷰하는 일왜 나누나
기준ZBOPN_POLICY유형별 정리 기한 · 장기 미결 기준 · 유효 기간을 담은 회사 정책 표기한은 코드가 아니라 회사가 정하는 값이라, 전송(TR)으로 옮기는 표에 둔다
차원ZI_BankOpenTypeDim항목 유형 코드와 이름 · 출처(장부 측 · 은행 측)큐브가 코드만 들고 있고 이름은 차원에서 붙이게 한다
기본ZI_BankOpenItem장부 측 열린 항목과 은행 측 미기표 항목을 한 모양으로 합침두 원천의 모양이 다르므로 이후 모든 뷰가 이 뷰만 보게 한다
판정ZI_BankOpenAged경과일수 · 기한 초과 · 구간 · 장기 미결 판정기준일을 파라미터로 받아 같은 데이터를 어느 날짜로든 다시 본다
큐브ZI_BankOpenAgeCube유형 × 구간 × 회사 집계(건수 · 원화 금액 · 기한 초과)경과 구간 · 정리 기한 탭이 같은 집계를 읽게 한다
대사ZI_BankOpenAcctRecon계좌별 조정 후 은행 잔액과 조정 후 장부 잔액통화별로 따로 계산하고 원화로 섞지 않는다
쿼리ZC_BankOpenAgeQuery조회조건과 화면 표시 주석을 붙인 소비 뷰화면 필터와 표시 정보를 한 곳에 둔다
권한ZC_BankOpenAgeQuery 의 접근 제어회사코드 권한을 조회 뷰에 건다표준 권한을 그대로 따른다
서비스ZUI_BankOpenOData 서비스 정의와 바인딩게시와 서비스 활성화를 코드와 분리한다

① 정리 기한 표

유형마다 며칠 안에 정리해야 하는지, 며칠을 넘으면 장기 미결로 보는지는 회사가 정할 일입니다. 코드에 박지 않고 표로 두면 개발 없이 바꿀 수 있습니다. 유효 기간 칸을 두어 기한을 바꿔도 과거 기간의 판정이 달라지지 않게 합니다.

" ─────────────────────────────────────────────────────────────────
"  ZBOPN_POLICY — 항목 유형별 정리 기한 · 장기 미결 기준 (투명 테이블)
"  회사가 정하는 표이므로 코드에 박지 않고 전송(TR)으로 옮긴다.
"  유효 기간을 두어, 기한을 바꿔도 과거 기간의 판정이 흔들리지 않게 한다.
" ─────────────────────────────────────────────────────────────────
@EndUserText.label : '은행 미결 항목 정리 기한'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zbopn_policy {
  key mandt      : mandt not null;
  key bukrs      : bukrs not null;          " 회사코드
  key item_type  : abap.char(2) not null;   " DT 미달 입금 · OC 미결제 지급 · BC/BD 은행 측 미기표
  key valid_from : abap.dats not null;
  valid_to       : abap.dats;
  limit_days     : abap.int4;               " 정리 기한(일)
  long_days      : abap.int4;               " 장기 미결 기준(일)
  action_text    : abap.char(60);           " 기본 정리 방법 문구
}

② 항목 유형 차원

큐브에는 유형 코드만 두고 이름과 출처는 차원에서 붙입니다. 유형이 늘어도 큐브를 고치지 않아도 되고, 화면의 이름이 한 곳에서 정해집니다.

" ─────────────────────────────────────────────────────────────────
"  ZI_BankOpenTypeDim — 항목 유형 차원
"  코드 → 이름 · 출처(장부 측 / 은행 측). 큐브는 코드만 들고 간다.
" ─────────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #NOT_REQUIRED
@EndUserText.label : '항목 유형(차원)'
@Analytics.dataCategory : #DIMENSION
@ObjectModel.representativeKey : 'ItemType'
define view entity ZI_BankOpenTypeDim
  as select from zbopn_type
{
  key item_type as ItemType,
      type_name as TypeName,      // 미달 입금 · 미결제 지급 · 은행 입금 미기표 · 은행 출금 미기표
      origin    as Origin         // 장부 측 / 은행 측
}

③ 미결 항목 통합

장부 측 항목은 은행 G/L 계정의 열린 항목에서, 은행 측 항목은 명세 항목 가운데 아직 기표되지 않은 것에서 옵니다. 두 원천의 모양이 달라 먼저 한 모양으로 합쳐 둡니다. 이후의 모든 뷰는 이 뷰만 봅니다.

" ─────────────────────────────────────────────────────────────────
"  ZI_BankOpenItem — 장부 측 열린 항목 + 은행 측 미기표 항목 (스케치)
"  장부 측 : 은행 계정의 열린 항목(미반제)  → DT 미달 입금 · OC 미결제 지급
"  은행 측 : 명세 항목 가운데 장부에 반영되지 않은 것 → BC 입금 · BD 출금
"  필드명 · 미기표 판정 조건은 환경에 맞춰 확인 필요 (FEBAN 후처리 대상 기준과 맞출 것)
" ─────────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '은행 미결 항목(스케치)'
define view entity ZI_BankOpenItem
  as select from acdoca as a
    inner join   zbopn_bankgl as g on  g.bukrs = a.rbukrs
                                   and g.glacct = a.racct       // 은행 계정 목록
{
  key a.rbukrs                as Bukrs,
  key a.belnr                 as DocNo,
  key a.docln                 as DocLine,
      cast( 'BOOK' as abap.char(4) ) as Origin,
      case when a.hsl >= 0 then 'DT' else 'OC' end as ItemType,   // 차변 열린 항목 = 미달 입금 등
      a.budat                 as OrigDate,
      a.rhcur                 as Waers,
      a.hsl                   as Amount
}
where a.augbl = ''                                                  // 아직 반제되지 않은 항목
union all
  select from febep as e
    inner join febko as k on k.kukey = e.kukey
{
  key k.bukrs                 as Bukrs,
  key e.kukey                 as DocNo,
  key e.esnum                 as DocLine,
      cast( 'BANK' as abap.char(4) ) as Origin,
      case when e.kwbtr >= 0 then 'BC' else 'BD' end as ItemType,
      e.budat                 as OrigDate,
      e.waers                 as Waers,
      e.kwbtr                 as Amount
}
where e.belnr = ''                                                  // 장부 반영 전 — 판정 조건은 확인 필요

④ 경과 판정

기준일을 파라미터로 받아 경과일수와 기한 초과를 계산합니다. 같은 데이터를 월말 기준으로도, 어제 기준으로도 다시 볼 수 있습니다. 정리 기한은 정책 표에서 가져옵니다.

" ─────────────────────────────────────────────────────────────────
"  ZI_BankOpenAged — 경과일수 · 기한 초과 · 구간 · 장기 미결
"  기준일은 파라미터. 정리 기한은 ZBOPN_POLICY 에서(유효 기간 안의 행).
"  통화가 다른 금액은 더하지 않으므로 원화 환산 금액을 함께 만든다.
" ─────────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '은행 미결 항목 경과 판정(스케치)'
define view entity ZI_BankOpenAged
  with parameters
    p_BaseDate : abap.dats
  as select from ZI_BankOpenItem as i
    inner join   zbopn_policy    as p on  p.bukrs     = i.Bukrs
                                      and p.item_type = i.ItemType
                                      and p.valid_from <= $parameters.p_BaseDate
                                      and ( p.valid_to is initial or p.valid_to >= $parameters.p_BaseDate )
{
  key i.Bukrs, key i.DocNo, key i.DocLine,
      i.Origin, i.ItemType, i.OrigDate, i.Waers, i.Amount,
      currency_conversion( amount => i.Amount, source_currency => i.Waers,
                           target_currency => cast( 'KRW' as abap.cuky ),
                           exchange_rate_date => $parameters.p_BaseDate,
                           exchange_rate_type => 'M',            // 환율 유형은 회사가 정함(확인 필요)
                           error_handling => 'SET_TO_NULL' )                as AmountKrw,
      p.limit_days                                                    as LimitDays,
      dats_days_between( i.OrigDate, $parameters.p_BaseDate )         as AgeDays,
      case when dats_days_between( i.OrigDate, $parameters.p_BaseDate ) > p.limit_days
           then dats_days_between( i.OrigDate, $parameters.p_BaseDate ) - p.limit_days
           else 0 end                                                 as OverdueDays,
      case when dats_days_between( i.OrigDate, $parameters.p_BaseDate ) <= 30 then 'B1'
           when dats_days_between( i.OrigDate, $parameters.p_BaseDate ) <= 60 then 'B2'
           when dats_days_between( i.OrigDate, $parameters.p_BaseDate ) <= 90 then 'B3'
           else 'B4' end                                              as AgeBucket,
      case when dats_days_between( i.OrigDate, $parameters.p_BaseDate ) > p.long_days
           then 'X' else '' end                                       as IsLong
}

⑤ 경과 구간 큐브

경과 구간 탭과 정리 기한 탭은 같은 집계를 서로 다른 모양으로 봅니다. 한 번 집계해 두면 두 탭의 건수와 금액이 어긋날 수 없습니다. 원화 환산은 환율 유형과 기준일을 정해 큐브 안에서 끝냅니다.

" ─────────────────────────────────────────────────────────────────
"  ZI_BankOpenAgeCube — 회사 × 유형 × 구간 집계
"  건수 · 원화 환산 금액 · 기한 초과 건수/금액 · 최장 경과일.
"  통화가 다른 금액은 더하지 않는다 → 환산한 금액만 합산 (환율 유형은 회사가 정함, 확인 필요)
" ─────────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '은행 미결 항목 경과 큐브(스케치)'
@Analytics.dataCategory : #CUBE
define view entity ZI_BankOpenAgeCube
  with parameters
    p_BaseDate : abap.dats
  as select from ZI_BankOpenAged( p_BaseDate : $parameters.p_BaseDate ) as a
  association [0..1] to ZI_BankOpenTypeDim as _Type on _Type.ItemType = a.ItemType
{
  key a.Bukrs,
  key a.ItemType,
  key a.AgeBucket,
      @Aggregation.default : #SUM
      count( * )                                  as ItemCnt,
      @Aggregation.default : #SUM
      sum( a.AmountKrw )                          as AmtKrw,        // 원화 환산 금액(환산 방식은 확인 필요)
      @Aggregation.default : #SUM
      sum( case when a.OverdueDays > 0 then 1 else 0 end ) as OverdueCnt,
      @Aggregation.default : #MAX
      max( a.AgeDays )                            as MaxAge,
      _Type
}
group by a.Bukrs, a.ItemType, a.AgeBucket

⑥ 계좌별 조정 후 잔액 대사

계좌마다 은행 잔액에 미달 입금을 더하고 미결제 지급을 뺀 값과, 장부 잔액에 은행 입금 미기표를 더하고 출금 미기표를 뺀 값을 만듭니다. 통화별로 따로 계산해야 하므로 계좌 단위에서 끝내고, 합계는 원화 환산 금액으로만 냅니다.

" ─────────────────────────────────────────────────────────────────
"  ZI_BankOpenAcctRecon — 계좌별 조정 후 잔액 대사
"  조정 후 은행 잔액 = 은행 잔액 + 미달 입금 − 미결제 지급
"  조정 후 장부 잔액 = 장부 잔액 + 은행 입금 미기표 − 은행 출금 미기표
"  두 값의 차이가 0 이 아니면 대사 차이(요약의 정합성 대사 차이 건에 잡힌다)
" ─────────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '계좌별 조정 후 잔액 대사(스케치)'
define view entity ZI_BankOpenAcctRecon
  with parameters
    p_BaseDate : abap.dats
  as select from ZI_BankOpenAcctBase( p_BaseDate : $parameters.p_BaseDate ) as b
{
  key b.Bukrs,
  key b.AcctNo,
      b.Waers,
      b.BankBal,                                                   // 은행 명세 기말 잔액
      b.BookBal,                                                   // 장부 잔액(FS10N 과 대사)
      b.BankBal + b.DepTr - b.OsChk                    as AdjBank,   // 조정 후 은행 잔액
      b.BookBal + b.BkCr  - b.BkDr                     as AdjBook,   // 조정 후 장부 잔액
      ( b.BankBal + b.DepTr - b.OsChk )
        - ( b.BookBal + b.BkCr - b.BkDr )              as Diff
}

⑦ 조회 쿼리

화면이 쓰는 필터와 표시 정보를 소비 뷰에 모읍니다. 기준일 파라미터는 화면이 조회 기간 말일로 채우고, 값 도움말이 필요한 필터에는 차원을 연결합니다.

" ─────────────────────────────────────────────────────────────────
"  ZC_BankOpenAgeQuery — 화면 조회용 소비 뷰
"  필터 · 표시 정보를 주석으로 붙인다. 파라미터는 기준일 하나.
" ─────────────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '은행 미결 항목 경과 조회'
@Analytics.query : true
@VDM.viewType : #CONSUMPTION
define view entity ZC_BankOpenAgeQuery
  with parameters
    @Consumption.derivation : { lookupEntity : 'ZI_BankOpenPeriodEnd', resultElement : 'BaseDate',
                                binding : [ { targetParameter : 'p_PeriodKey', type : #PARAMETER, value : 'p_PeriodKey' } ] }
    p_BaseDate : abap.dats
  as select from ZI_BankOpenAgeCube( p_BaseDate : $parameters.p_BaseDate )
{
  @Consumption.filter : { selectionType : #SINGLE, mandatory : true }
  key Bukrs,
  @Consumption.filter.selectionType : #RANGE
  key ItemType,
  @AnalyticsDetails.query.axis : #ROWS
  key AgeBucket,
  @AnalyticsDetails.query.axis : #COLUMNS
  ItemCnt,
  AmtKrw,
  OverdueCnt,
  MaxAge
}

⑧ 접근 제어

권한은 합계가 아니라 명세를 읽는 뷰에 걸어야 합니다. 합계 화면에만 걸면 전체 합계에서 자기 몫을 빼서 다른 회사의 숫자를 알아낼 수 있기 때문입니다.

" ─────────────────────────────────────────────────────────────────
"  ZC_BankOpenAgeQuery 의 접근 제어 — 회사코드 권한
"  명세를 읽는 기본 뷰(ZI_BankOpenItem)에도 같은 규칙을 건다.
" ─────────────────────────────────────────────────────────────────
@EndUserText.label : '은행 미결 항목 — 회사코드 권한'
@MappingRole : true
define role ZC_BankOpenAgeQuery {
  grant select on ZC_BankOpenAgeQuery
    where ( Bukrs ) = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' );
}

⑨ 서비스 정의

서비스 정의는 어떤 뷰를 내보낼지만 적고, 게시와 활성화는 바인딩에서 합니다. 화면의 서비스 주소를 바꾸는 일이 곧 이 바인딩의 주소를 가져다 쓰는 일입니다.

" ─────────────────────────────────────────────────────────────────
"  ZUI_BankOpen — 서비스 정의 (OData V2 바인딩으로 게시)
" ─────────────────────────────────────────────────────────────────
@EndUserText.label : '은행 미결 항목 경과 정리 점검'
define service ZUI_BankOpen {
  expose ZC_BankOpenAgeQuery as AgeSet;
  expose ZI_BankOpenItem      as ItemSet;
  expose ZI_BankOpenAcctRecon as AcctSet;
  expose ZI_BankOpenTypeDim   as TypeSet;
}

운영 시점에 해야 할 일

개발보다 정하는 일이 많습니다. 아래는 코딩이 아니라 합의입니다.

해야 할 일무엇을 정하나정하지 않으면누가
정리 기한 정책유형별 정리 기한과 장기 미결 기준 일수화면의 “기한 초과”가 회사 기준과 달라 첫 회의에서 믿지 못하게 된다자금팀 · 회계팀
은행 계정과 계좌 매핑어떤 G/L 계정이 어느 하우스 뱅크 계좌인지장부 측 항목이 어느 계좌의 것인지 가를 수 없다자금팀
미기표 판정 조건명세 항목 중 어느 상태를 “장부 반영 전”으로 볼지후처리 대기 목록과 숫자가 어긋난다자금팀 · 표준 운영 담당
일치 후보 규칙금액 일치 범위 · 시기 근접 일수 · 통화 처리후보가 너무 많아 무시되거나 너무 적어 쓸모가 없다자금팀
환율 유형과 환산 시점원화 환산에 쓸 환율 유형과 기준일외화 항목 합계가 표준 환산 결과와 맞지 않는다회계팀
권한 설계회사코드 · 계좌 단위 조회 범위합계에서 다른 회사의 숫자가 드러난다보안 · 권한 담당
성능 기준조회 기간 · 파라미터 필수화 · 응답 시간 기준대용량에서 첫 조회가 오래 걸린다Basis · 개발
대사 체계FBL3N · FS10N 과 맞출 항목과 주기숫자가 다를 때 어디부터 볼지 정해져 있지 않다회계팀
전송(TR) 순서정책 표 → 차원 → 기본 뷰 → 판정 → 큐브 → 쿼리 → 권한 → 서비스권한 없이 뷰만 먼저 올라가는 순간이 생긴다개발 · Basis
서비스 활성화서비스 정의 · 바인딩 게시와 화면의 서비스 주소 교체화면이 샘플 서비스를 계속 바라본다개발 · Basis

운영 데이터로 갈 때

명세는 한 달에 수만 건, 열린 항목은 수천 건이 될 수 있습니다. 판정은 CDS 에서 하고, 화면은 조회 기간으로 범위를 좁혀 첫 페이지만 읽습니다. 기준일 파라미터는 필수로 두고, 큐브는 유형·구간 수준에서 끝나 행 수가 작게 유지되도록 합니다. 항목 한 줄을 읽는 미결 명세는 페이지 단위로 읽고 건수는 별도로 가져옵니다. 응답 시간 기준은 조회 기간별로 정해 두는 편이 좋습니다.

자주 묻는 질문

도입을 검토하는 분들이 가장 자주 묻는 것을 네 묶음으로 정리했습니다. 답은 모두 이 화면이 실제로 하는 일을 기준으로 적었고, 확인하지 못한 것은 확인 필요로 남겼습니다.

숫자와 판정

조정 후 잔액이 맞는데도 점검할 게 남습니까?

네. 조정 후 은행 잔액과 조정 후 장부 잔액이 같다는 것은 남은 항목들이 서로 상쇄된다는 뜻일 뿐, 그 항목이 언제부터 남았는지는 말해 주지 않습니다. 샘플에서 여섯 계좌의 조정 후 잔액은 모두 차이가 0이지만 미결 항목 72건 중 25건이 정리 기한을 넘겼습니다. 그래서 계좌별 대사 탭의 점검 결과도 “정상”이 아니라 항목 상태를 반영해 “점검 필요” 또는 “확인 필요”로 나옵니다.

경과일수는 어떻게 계산합니까?

기준일에서 발생일을 뺍니다. 기준일은 조회 기간의 말일이고, 샘플에서는 2026년 9월 30일입니다. 발생일은 장부 측 항목이면 증빙일, 은행 측 항목이면 명세 일자를 쓰는 것을 전제로 했으며 실제 원천 필드는 환경에서 확인이 필요합니다. 항목마다 계산한 경과일수는 대사식으로 다시 검산합니다(72건, 차이 0).

정리 기한은 누가 정합니까?

회사가 정합니다. 샘플은 미달 입금 5일, 미결제 지급 30일, 은행 입금·출금 미기표 각 3일의 가정값을 썼습니다. 운영에서는 정책 표에 유형별로 적고, 유효 기간 칸을 두어 기한을 바꿔도 과거 기간의 조회 결과가 흔들리지 않게 합니다. 기한은 화면의 “기한 초과” 판정 전체의 기준이므로, 도입에서 가장 먼저 합의할 값입니다.

일치 후보는 어떻게 찾습니까?

장부 측 항목과 은행 측 항목의 금액과 통화가 같고 시기가 가까우면 서로의 후보로 붙입니다. 기한을 넘긴 항목에 후보가 있으면 “정리 누락 후보”로 올립니다. 후보는 같은 거래라는 판단이 아니라 “확인해 보라”는 신호입니다. 금액이 같은 별개 거래도 있을 수 있으므로, 실제 정리는 사람이 확인한 뒤 표준 화면에서 합니다.

장기 미결은 몇 일부터입니까?

샘플은 경과 90일을 넘으면 장기 미결로 봅니다. 이 숫자도 정책 표의 값이며 회사 기준으로 바꿉니다. 장기 미결은 “확인 필요”로 표시합니다. 정리 기한을 넘긴 것과 달리 사유를 확인하고 정리 방향을 정해야 하는 항목이라는 뜻입니다. 샘플에서는 미결제 지급 4건이 해당하고 최장 경과는 150일입니다.

중복으로 보이는 항목은 어떻게 가려냅니까?

같은 계좌에서 참조 번호와 금액이 같은 항목이 둘 이상이면 표시합니다. 중복 입력이나 은행 명세의 중복 수신을 잡으려는 것입니다. 다만 정상적인 반복 거래도 있을 수 있어 “중복이다”가 아니라 “확인 필요”로만 표시합니다. 샘플에는 이런 항목이 4건(두 쌍) 있습니다.

정합성 대사 11건은 무엇을 확인합니까?

이 화면의 숫자들이 서로 맞는지를 식으로 세워 보여 줍니다. 통화별 조정 후 잔액, 탭 사이 건수·금액 합계, 항목마다 다시 계산한 경과일수와 초과 일수, 기한 초과 건수의 일치 같은 것입니다. 샘플에서 검사 건수 합계는 158건이고 차이는 0건입니다. 점검 코드가 붙은 항목은 일부러 넣은 예외라 대사 차이와 따로 적었습니다.

대사 차이가 생기면 어떻게 보입니까?

요약의 “정합성 대사 차이 건” 숫자가 0이 아니게 되고, 대사 결과 탭에서 어느 식의 좌변과 우변이 얼마나 어긋났는지 나옵니다. 원인은 대개 조회 범위가 탭마다 다르거나 외화 환산 기준이 섞인 경우입니다. 회사·기간·계좌 조건부터 같은지 확인하는 편이 빠릅니다.

화면과 조작

조회조건은 어떻게 동작합니까?

회계연도와 기간(월)은 필수이고 나머지는 선택입니다. “전체”로 둔 선택 조건은 서비스에 보내지 않고, 값을 고른 조건만 필터로 나갑니다. 조건마다 의미가 있는 탭에만 적용됩니다. 예를 들어 계좌는 미결 명세와 계좌별 대사 탭에, 경과 구간은 미결 명세와 경과 구간 탭에 걸립니다.

점검 코드의 M · G · K · A 는 무엇입니까?

M 은 미결 항목 한 건의 판정, G 는 경과 구간 행의 상태, K 는 정리 기한 행(유형)의 상태, A 는 계좌의 상태입니다. 코드를 고르면 해당 종류의 탭에만 적용됩니다. 예를 들어 M02 를 고르면 미결 명세 탭만 정리 누락 후보로 좁혀지고 다른 탭은 그대로입니다.

발생일 기간을 고르면 어느 탭에 적용됩니까?

미결 명세 탭에만 적용됩니다. 집계 탭은 구간과 유형 단위 집계라 항목의 발생일로 거를 수 없기 때문입니다. 시작과 종료를 모두 고르면 하나의 범위 조건으로 묶어 보내 기간 밖의 항목이 섞여 들어오지 않게 합니다.

행을 누르면 무엇이 열립니까?

미결 명세의 행을 누르면 그 항목의 계좌·유형·출처·참조, 발생일과 기준일, 경과일수와 정리 기한과 초과 일수, 금액, 일치 후보, 정리 제안이 대화상자로 열리고, 아래에 같은 계좌의 다른 미결 항목이 표로 이어집니다. 한 계좌의 사정을 한 번에 훑을 수 있게 하려는 구성입니다.

CSV 로 내려받을 수 있습니까?

있습니다. 지금 보고 있는 탭의 조회 결과를 그대로 내려받으며, 조회조건으로 줄인 행만 담깁니다. 외화 항목의 원화 환산 금액도 함께 담겨 엑셀에서 합계를 다시 확인할 수 있습니다.

조회 결과가 없으면 어떻게 보입니까?

조건에 맞는 항목이 없으면 빈 결과 안내를 띄웁니다. 서비스 연결 실패와 빈 결과는 구분해서 안내하므로, “연결이 안 된 것인지, 조건에 걸리는 항목이 없는 것인지”를 헷갈리지 않게 했습니다.

표준 기능과 도입

도입 효과는 무엇이고 누가 씁니까?

월마감에서 은행 계좌 대사를 맡는 자금 담당자와 그 결과를 확인하는 자금팀장·회계팀이 주 사용자입니다. 항목마다 날짜를 찾아 기준일에서 빼고 엑셀에서 정렬하던 일이 한 화면의 조회로 바뀌고, 기한을 넘긴 항목과 정리 누락 후보를 마감 전에 먼저 볼 수 있습니다. 효과의 크기는 회사의 미결 항목 규모와 현재 방식에 따라 다르며 이 글에서 수치로 약속하지 않습니다.

적용 시기와 범위는 어떻게 됩니까?

관련 기준서가 따로 있는 화면이 아니라 자금 회계 업무 분석 화면입니다. 정리 기한과 장기 미결 기준, 환율, 계정 체계는 모두 회사가 정하는 값이며 샘플은 가정값입니다. 따라서 적용 시기가 정해져 있지 않고, 회사가 정책을 합의한 시점부터 쓰면 됩니다.

표준 T-code 와 어떤 관계입니까?

대체하지 않습니다. 명세 입력(FF67)과 후처리(FEBAN), 장부 측 열린 항목 조회(FBL3N), 잔액 확인(FS10N), 반제(F-03)는 표준에 그대로 둡니다. 이 앱은 그 앞뒤에서 경과일수와 정리 기한을 계산하고 점검 대상을 가려 보여 주는 조회·검증 화면입니다. 기존 화면을 없앨 필요가 없습니다.

데이터 원천은 무엇이고 어떻게 맞춰 봅니까?

장부 측은 은행 계정의 열린 항목(BKPF · BSEG · ACDOCA), 은행 측은 명세 항목(FEBKO · FEBEP), 잔액은 하우스 뱅크 계정과 FS10N 입니다. 두 화면의 숫자가 다르면 순서가 있습니다. ① 조회 범위(회사 · 기간 · 계좌)가 같은지 ② 외화 환산 기준이 같은지 ③ 항목 한 줄을 FBL3N 의 열린 항목과 증빙일·금액으로 맞춰 보고 ④ 잔액은 FS10N 과 계좌별 대사 탭의 장부 잔액을 견줍니다.

외화 항목은 어떻게 처리합니까?

통화가 다른 금액은 그대로 더하지 않고 원화 환산 금액으로만 합산합니다. 샘플은 기준일 가정 환율(USD · EUR · JPY)을 썼습니다. 계좌별 대사는 통화별로 따로 계산해 해당 통화 단위로 보여 줍니다. 운영에서는 회사가 정한 환율 유형과 기준일을 써야 하고, 표준 환산 결과와의 대응은 확인이 필요합니다.

S/4HANA 가 아니라 ECC 에서도 됩니까?

구조가 달라집니다. 명세 원천(FEBKO · FEBEP)과 기표 원천(BKPF · BSEG)은 ECC 에도 있어 같은 판정을 ABAP 쪽 뷰나 함수로 만들 수 있습니다. 다만 ACDOCA 를 쓰는 부분은 달라지므로 환경을 보고 판단합니다(확인 필요).

이 화면이 정리 판단을 대신합니까?

아닙니다. 이 화면은 점검 도구이며 최종 판단은 회사와 감사인이 합니다. 세무 신고가 걸린 항목은 회사와 세무 대리인이 확인합니다. 화면은 “점검 필요”와 “확인 필요”로 사람이 볼 항목을 가릴 뿐, 정리 방법의 옳고 그름을 말하지 않습니다.

운영과 권한

운영 서비스에 연결하는 절차는 어떻게 됩니까?

순서는 정책 합의 → 정책 표와 차원 → 기본 뷰와 판정 → 큐브와 대사 → 쿼리와 접근 제어 → 서비스 정의와 바인딩 게시 → 화면의 서비스 주소 교체입니다. 개발보다 합의가 오래 걸립니다. 걸리는 기간은 환경과 합의 속도에 따라 달라 이 글에서 숫자로 말하지 않습니다.

권한은 어떻게 걸립니까?

회사코드 권한(F_BKPF_BUK)을 CDS 의 접근 제어에 걸어 표준 권한을 따릅니다. 주의가 하나 있습니다. 합계를 보여 주는 뷰에만 권한을 걸면 전체 합계에서 자기 몫을 빼서 남의 숫자를 알아낼 수 있습니다. 그래서 명세를 읽는 기본 뷰에도 같은 규칙을 겁니다. 계좌 단위 제한이 필요하면 같은 방식으로 규칙을 더합니다.

계좌번호는 왜 일부만 보입니까?

샘플의 계좌번호는 앞뒤 일부만 보이는 가상 형식입니다. 운영에서도 화면에 전체 번호를 올리지 않는 편이 안전합니다. 화면 권한과 별개로, 캡처나 공유 과정에서 새는 일을 줄이기 위해서입니다.

운영 데이터가 많으면 느리지 않습니까?

샘플은 72건이라 브라우저가 가볍게 읽습니다. 운영에서는 열린 항목이 수천 건, 명세가 한 달에 수만 건이 될 수 있어 판정을 CDS 로 내립니다. 기준일 파라미터를 필수로 두고, 경과 구간·정리 기한 탭은 유형과 구간 수준의 집계라 행 수가 작게 유지됩니다. 미결 명세는 페이지 단위로 읽고 건수는 별도로 가져옵니다.

정리 기한이나 계정 체계를 바꾸면 어떻게 됩니까?

정리 기한은 정책 표의 행을 바꾸면 됩니다. 유효 기간 칸이 있어 바뀐 기한은 그 기간부터 적용되고 과거 기간의 조회 결과는 달라지지 않습니다. 은행 계정이나 계좌가 바뀌거나 늘어나면 계정과 하우스 뱅크 계좌의 매핑 표에 행을 더합니다. 화면 코드는 고치지 않습니다.

유지보수는 무엇을 하게 됩니까?

정기적으로 손이 가는 곳은 정책 표와 매핑 표입니다. 새 항목 유형이 생기면 유형 표에 행을 더하고, 일치 후보가 너무 많거나 적으면 규칙의 허용 범위를 조정합니다. 점검 코드의 조치 문구를 회사 용어에 맞게 고치는 일도 있습니다.

외부 라이브러리나 외부 전송이 있습니까?

화면은 OpenUI5 표준 컨트롤만 씁니다. 외부 차트 라이브러리를 들이지 않았고, 은행 거래 내용이 화면 밖의 외부 서비스로 나가는 경로도 없습니다. 사내망 반입 심사를 가볍게 하려는 선택입니다.

샘플 데이터는 실제 자료입니까?

아닙니다. 은행·거래처·계좌번호·금액·환율은 모두 가상입니다. 환율은 “기준일 가정 환율”이며 실제 시세와 무관합니다. 실제 자료로 바꾸는 일은 서비스를 바꾸는 것이고 화면은 그대로 씁니다.