수입 솔루션 · 매입채무 결제

SAP 수입 결제 만기 구조 다차원 분석 — 계획 대비 결제 총액 차이를 요인으로 가르고 원천 결제 라인까지 내려가는 리포트

큐브 집계 · 끌어다 놓는 축 구성 · 칸에서 원천 결제 라인까지의 드릴스루 · 계획 대비 차이와 요인분해 · 행에 남는 차이 사유 · 규칙이 계산하는 AI 분석 · 하루 한 번 도는 AI 에이전트 — 소개 영상과 실제 화면 19종, 그리고 CDS 코드까지

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

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

수입 대금을 결제하는 날마다 자금 담당과 구매 담당이 같은 질문을 받습니다. 계획한 만큼 나갔나, 더 나갔다면 어디서 났나, 다음 결제 전에 무엇을 확인해야 하나. 지금은 이 세 답이 표준 화면 여러 개와 엑셀, 은행 통지서로 흩어져 있고, 물대에 은행 수수료와 금융 이자, 서류·전신료가 더해지는 수입 결제는 합계 하나만 봐서는 원인이 보이지 않습니다.

이 앱은 결제 라인을 한 번 조회해 계획과 실적 큐브로 묶고, 보는 축을 바꾸고, 칸에서 원천 결제 라인까지 내려가고, 계획 대비 차이를 요인으로 나눠 보여 줍니다. 환율 영향은 IAS 21 환율변동효과(K-IFRS 제1021호) 관점으로 읽을 수 있게 결제 환율 요인을 따로 세웠습니다. 본 화면은 점검 도구이며 최종 판단은 회사와 감사인이 합니다.

한 줄 요약 — 수입 결제 총액을 은행·공급사·결제 조건·만기 구간으로 마음대로 돌려 보고, 계획과 다른 금액을 요인으로 가르고, 칸의 값이 결제 라인 합과 같은지 매번 검산하는 다차원 분석 화면입니다.

핵심 포인트 여덟 가지

핵심 포인트고객이 얻는 것지금 방식이라면
① 은행·공급사·결제 조건을 바꿔도 합계가 갈라지지 않는 피벗결제 은행, 공급사, 결제 조건, 만기 구간, 결제 통화 등 11개 축을 끌어다 놓아 행 3단계·열 2단계로 봅니다. 모든 축이 같은 큐브에서 나와 합계가 어긋날 자리가 없습니다.은행별, 공급사별, 만기별 표를 따로 만들고 총액이 서로 다르면 표를 맞추는 회의를 엽니다.
② 칸에서 결제 원천 라인까지 한 번에숫자를 누르면 그 칸을 이루는 결제 라인이 열리고, 라인 합이 칸의 값과 같은지 그 자리에서 보입니다.표준 화면을 따로 열어 은행·기간·조건을 손으로 다시 맞춥니다.
③ 계획 대비 차이를 요인으로 가르기결제 물량, 외화 단가, 결제 환율, 수수료율, 금융 금리, 금융 일수, 서류·전신 단가, 미계획 결제로 나눠 요인의 합이 총 차이와 같은지 매번 검산합니다.엑셀로 요인을 나누고 합계가 맞는지 다시 손으로 확인합니다.
④ 금액과 비율을 모두 넘을 때만 색을 칠하는 비교금액 임계와 비율 임계를 둘 다 넘은 칸만 색이 들어가므로 작은 흔들림에 눈이 팔리지 않습니다.차이가 있는 칸마다 색이 칠해져 어디부터 봐야 할지 알 수 없습니다.
⑤ 차이 사유가 행에 남는다사유가 조회 범위와 행 경로에 묶여 저장되어 축을 바꿔도, 다음에 열어도 같은 행에 따라옵니다.같은 질문을 다시 하고 지난번 답은 메일에서 찾습니다.
⑥ 역할마다 다른 요약CFO는 통화·자재그룹, 구매 책임자는 공급사·공급국, 자금 책임자는 은행·결제 조건, 회계 책임자는 만기 구간·플랜트 기준으로 요약이 바뀝니다.같은 숫자를 역할별로 다시 정리한 자료를 따로 만듭니다.
⑦ 숫자는 규칙이 계산하는 AI 분석과 PPTX 보고발견 사항의 금액과 비율은 서버 규칙이 큐브에서 계산하고, 읽은 결과는 브라우저에서 PowerPoint 보고서로 만들어 내려받습니다.AI가 만든 숫자를 보고에 써도 되는지부터 따져야 합니다.
⑧ 하루 한 번 도는 AI 에이전트은행 수수료율, 공급사 지연 결제율, 계획 초과 등 6개 규칙을 하루 한 번 점검해 대기함에 올립니다. 한도는 화면이 아니라 서버가 지킵니다.결제 건이 몰린 날에도 누군가 화면을 열어야 이상이 눈에 띕니다.

사례로 보는 효과

검증용 샘플 데이터(가정값)의 2026년 4월~9월 결제 라인 3,000건을 기준으로 보면, 결제 원화 총액은 계획 2,123.37억원에서 실적 2,258.72억원으로 +135.36억원(+6.4%) 늘었습니다. 요인으로 가르면 미계획 결제 +81.93억원, 외화 단가 +27.97억원, 결제 환율 +19.33억원이 크고, 결제 물량 +4.31억원, 금융 금리 +0.99억원, 금융 일수 +0.41억원, 서류·전신 단가 +0.37억원, 수수료율 +0.05억원은 작습니다. 요인의 합과 총 차이의 차이는 0원입니다.

표만 보면 "환율이 올라서 더 나갔다"로 끝나기 쉽지만, 요인으로 가르면 계획에 없던 결제가 가장 큰 몫이고 환율은 그다음임이 드러납니다. 이 수치는 가정 데이터에서 나온 것이며 실제 회사의 값이 아닙니다.

도입하면 달라지는 것

  • 결제 보고 준비 — 은행별·공급사별 표를 따로 만들던 일이 한 화면의 축 바꾸기로 줄어듭니다.
  • 회의의 주제 — "어느 표가 맞나"가 아니라 "미계획 결제를 어떻게 줄일까"를 이야기합니다.
  • 기록 — 차이 사유와 레이아웃이 남아 같은 설명을 다시 하지 않습니다.
  • 점검 — 에이전트 규칙이 하루 한 번 대기함에 점검 필요 항목을 올립니다.

이런 회사에 맞습니다

수입 대금을 여러 통화(USD·EUR·JPY·CNY 등)와 여러 은행으로 결제하고, 결제 조건(송금 사후, 인수도 조건 추심, 기한부 신용장, 선급금 등)이 섞여 있어 결제 총액의 원인을 매달 엑셀로 나누는 구매·자금·회계 조직에 맞습니다. 공급사가 10곳 이상이고 결제 은행이 3곳 이상이며 월 수백 건의 결제 라인이 쌓이는 회사에서 효과가 큽니다.

실행 화면 — 처음 연 화면부터 좁은 화면까지

사용 방법

  1. 조회 조건 입력 — 회사코드(필수)와 시작·종료 기간(선택)을 정하고, 필요하면 차원 값 버튼에서 공급사·은행 등의 값을 여러 개 고릅니다(선택).
  2. 조회 — 조회 조건 패널 오른쪽 위의 조회 버튼을 누르거나 입력칸에서 Enter 키를 누릅니다. 처음 열 때는 자동으로 조회하지 않습니다(저장한 레이아웃에서 자동 조회를 켠 경우만 예외).
  3. 요약 확인 — 임원 요약에서 결제 총액, 부대·금융비용률, 지연 결제율과 계획 대비 증감을 봅니다. 역할을 바꾸면 요약 기준 축이 바뀝니다.
  4. 축·표 이동 — 칩을 행 축(최대 3개)과 열 축(최대 2개)으로 끌어 놓고, 표시 항목·금액 단위·비교(실적만/계획 대비)를 바꿉니다.
  5. 칸·행 클릭 — 값 칸을 누르면 결제 원천 라인이, 계획 대비에서 행 이름을 누르면 그 범위의 요인 워터폴이 열립니다. 사유 버튼으로 차이 사유를 적습니다.
  6. 내보내기 — 피벗 표와 원천 라인 창의 CSV 버튼, AI 분석 창의 PPTX 보고서 버튼으로 내려받습니다.

무엇으로 만들었나

자리무엇왜 그렇게 두었나
화면 컨트롤OpenUI5 sap.ui.table.TreeTable, 칩 보드(DragInfo/DropInfo), 직접 그린 SVG 차트외부 차트·피벗 라이브러리 없이 사내망에서도 그대로 동작하고 보안 검토 부담이 없습니다.
집계 로직model/cube.js(재묶음·계산 항목 평가), model/chart.js(SVG), model/pptx.js(보고서)축을 바꿀 때마다 서버를 부르지 않고 브라우저에서 큐브를 다시 묶기 위해서입니다.
OData 서비스 구성OData V2 서비스 하나. 큐브·계획은 한 번 읽고, 원천 라인은 칸을 누를 때 조건으로 읽고, 차이 사유·레이아웃·에이전트는 같은 서비스에 쓰기로 저장읽기와 쓰기를 한 계약으로 두면 운영 서비스로 바꿀 때 주소만 교체하면 됩니다.
요인 분해·AI 규칙서비스 쪽 펑션(요인 분해, 범위 분석, 에이전트 실행)금액과 비율은 서버가 한 곳에서 계산해 화면과 보고서가 같은 숫자를 쓰도록 하기 위해서입니다.
테마sap_horizonSAP 표준 화면과 같은 시각 언어를 쓰도록 했습니다.
항목내용
솔루션수입
업무 영역매입채무 · 결제 만기 · 환율
관련 기준서·대상 영역IAS 21 환율변동효과(K-IFRS 제1021호) · 수입 대금 결제
SAP 표준 T-codeME23N · MIGO · MIRO · MB51 · FBL1N · FAGL_FCV
화면 성격다차원 분석 리포트(조회 중심, 차이 사유·레이아웃은 저장)
데이터가정 데이터 — 결제 라인 3,000건, 실적 큐브 19,311행, 계획 큐브 17,803행
테마sap_horizon
SAP 표준 기능을 그대로 이어받은 부분 — 구매오더(ME23N), 입고(MIGO), 송장 검증(MIRO), 공급업체 개별 항목(FBL1N)이 만드는 데이터 구조를 그대로 이어받고, 표준 실행은 SAP 표준 T-code가 담당합니다. 이 화면은 조회·검증 관점을 더해 확장합니다.

처음 열었을 때 — 조건과 보드가 한눈에

처음 열면 조회 조건, 분석 축 보드, 임원 요약, 피벗 영역이 위에서 아래로 놓입니다. 조회 버튼은 조회 조건 패널 오른쪽 위에 있습니다.

조회 조건 — 조회 전의 첫 화면
조회 조건 — 조회 전의 첫 화면 — 회사코드·기간·차원 값, 아직 조회하지 않은 상태입니다.

회사코드는 필수이고 기본값은 가정 데이터의 1000입니다. 기간은 2026.04~2026.09가 들어 있고, 차원 값 버튼은 "전체"로 시작합니다. 조회 버튼이나 Enter 키를 누르기 전에는 서버를 부르지 않습니다.

조회 직후 — 요약과 보드
조회 직후 — 요약과 보드 — 한 번의 조회로 계획·실적 큐브가 모두 읽힙니다.

분석 축 패널 제목에 현재 축 배치(행: 결제 은행 › 결제 조건 / 열: 결제월)가 요약됩니다. 이후 축을 바꾸는 조작은 이미 읽어 온 큐브를 브라우저에서 다시 묶으므로 기다림이 없습니다.

경영 요약 — 역할이 바뀌면 보는 곳이 바뀝니다

임원 요약은 역할(CFO, 구매 책임자, 자금 책임자, 회계 책임자)에 따라 기준 축과 표시 항목이 달라집니다.

역할별 요약 — 구매 책임자 기준
역할별 요약 — 구매 책임자 기준 — 공급사별 지연 결제율이 계획 초과 상위로 나옵니다.

구매 책임자를 고르면 표시 항목이 지연 결제율, 행 축이 공급사로 바뀝니다. 상위 목록의 숫자는 계획 대비 증감이며, 가정 데이터에는 특정 공급사의 지연 결제가 심어져 있어 점검 필요 후보가 위에 올라옵니다.

축 전환과 범위 — 끌어 놓으면 바로 다시 묶입니다

분석 축 보드 — 끌어다 놓기
분석 축 보드 — 끌어다 놓기 — 칩을 행 축·열 축으로 옮기거나 화살표 버튼으로 보냅니다.

사용 가능 칩은 분기, 공급사, 공급국, 자재그룹, 결제 은행, 플랜트, 결제 통화, 결제 조건, 결제 채널, 만기 구간, 결제월입니다. 행 축은 최대 3개, 열 축은 최대 2개이며 넘으면 안내가 뜹니다. 끌기가 어려우면 칩의 화살표 버튼을 누릅니다.

피벗 트리표 — 합계와 펼치기
피벗 트리표 — 합계와 펼치기 — 행을 펼치면 아래 단계로 내려갑니다.

표시 항목(결제 원화 총액 등)과 금액 단위(원·천원·백만원 등)를 바꿀 수 있습니다. 칸 수(예: 2,674)는 현재 축 조합으로 묶인 큐브 칸의 수이고, 표시 행 수와 원천 라인 읽는 단위는 표 아래에서 고릅니다.

행·열 바꾸기 — 서버를 다시 부르지 않음
행·열 바꾸기 — 서버를 다시 부르지 않음 — 같은 숫자를 다른 방향에서 봅니다.

행·열 바꾸기 버튼을 누르면 브라우저가 큐브를 다시 묶습니다. 브라우저 검사에서 이 조작 동안 네트워크 요청이 0건이었습니다. 기본 축으로 되돌리는 버튼도 옆에 있습니다.

차원 값 다중 선택 — 범위를 좁히기
차원 값 다중 선택 — 범위를 좁히기 — 공급사·은행 등 11개 축의 값을 여러 개 고릅니다.

선택한 값은 조회 조건 제목에 요약되고, 큐브와 원천 라인 모두에 같은 조건이 적용됩니다. 값을 하나도 고르지 않은 축은 전체로 봅니다.

칸에서 결제 원천 라인까지 — 칸의 값 = 라인 합

행 펼치기 — 은행에서 결제 조건으로
행 펼치기 — 은행에서 결제 조건으로 — 행 경로가 그대로 조회 조건이 됩니다.

은행 아래 결제 조건이 단계로 나뉘어 보이며, 단계 보기를 켜면 앞 열 대비 증감이 표시됩니다.

원천 결제 라인 — 칸 값과 합계 비교
원천 결제 라인 — 칸 값과 합계 비교 — 칸을 누르면 그 칸을 이루는 라인이 열립니다.

맨 위에 "칸의 값"과 "읽은 라인의 합"이 나란히 있고 같으면 확인 표시가 붙습니다. 예를 들어 2026.05, 새롬은행, 송금 사후 결제 칸은 3,966.7백만원이고 46건의 라인 합과 같습니다. 라인은 쪽 단위로 더 읽거나 CSV로 내려받습니다.

계산 항목 — 비율과 단가도 칸 단위로

표시 항목에는 측정값 8종(결제 건수, 수량, 물대, 은행 수수료, 금융 이자, 서류·전신료, 지연 결제 건수, 금융 일수 합) 외에 계산 항목 8종이 있습니다. 부대·금융비용률 = (수수료+이자+서류) ÷ 물대 × 100, 지연 결제율 = 지연 건수 ÷ 결제 건수 × 100처럼 토큰 식을 칸마다 평가하므로, 어떤 축으로 묶어도 비율이 칸 기준으로 다시 계산됩니다(합계의 평균이 아닙니다).

기준 대비 차이 — 같은 표가 점검 리포트가 됩니다

계획 대비 — 임계 초과 칸만 색
계획 대비 — 임계 초과 칸만 색 — 금액 임계와 비율 임계를 모두 넘은 칸만 칠합니다.

비교를 "계획 대비"로 바꾸면 칸마다 차이가 나타납니다. 금액 임계(기본 1,000,000원)와 비율 임계(기본 10%)를 둘 다 넘을 때만 색이 들어갑니다. 임계는 입력칸에서 바꾸고, 붉은색은 계획보다 더 나간 방향입니다.

요인 워터폴 — 계획에서 실적까지
요인 워터폴 — 계획에서 실적까지 — 계획 2,123.37억원에서 실적 2,258.72억원까지 요인을 차례로 잇습니다.

결제 물량 → 외화 단가 → 결제 환율 → 수수료율 → 금융 금리 → 금융 일수 → 서류·전신 단가 → 미계획 결제 순서로 한 요인씩 실적 값으로 바꿔 차이를 구합니다. 검산 줄이 "요인 합 − 총 차이 = 0원"을 매번 보여 줍니다. 행 이름을 누르면 그 범위만 다시 분해합니다.

차이 사유 — 숫자 옆에 이유를 남깁니다
차이 사유 — 숫자 옆에 이유를 남깁니다 — 주된 요인을 고르고 사유를 500자까지 적습니다.

사유는 조회 범위와 행 경로를 키로 저장됩니다. 같은 행이면 축을 바꾸거나 다시 열어도 따라오고, 행에는 사유 버튼이 표시됩니다.

AI 분석과 보고서 — 숫자는 규칙이, 설명은 읽기 좋게

AI 분석 — 발견 사항과 근거 표
AI 분석 — 발견 사항과 근거 표 — 현재 범위의 차이를 규칙으로 읽습니다.

기본은 모델 없이 규칙 기반 해설입니다(모델 연결은 꺼짐). 발견 사항마다 근거 표가 붙고, 금액·비율은 서버가 큐브에서 계산한 값입니다. 결과는 차이 사유로 옮기거나 PPTX 보고서로 내려받을 수 있습니다.

AI 에이전트 — 규칙 · 대기함 · 실행 기록

에이전트 규칙 — 6개 점검
에이전트 규칙 — 6개 점검 — 규칙마다 임계값과 대상 역할이 있습니다.

수수료율 상한 0.117%, 공급사 지연 결제율 상한 36%, 계획 초과 3.5%, 금융 금리 요인 2천만원, 금융 일수 요인 600만원, 환율 요인 5억원이 기본값입니다(모두 가정값). 임계는 화면에서 고치고 저장합니다.

에이전트 실행 결과 — 대기함
에이전트 실행 결과 — 대기함 — "지금 실행"을 누르면 점검 필요 항목이 대기함에 쌓입니다.

가정 데이터에서는 6개 규칙 모두에서 보고가 올라옵니다. 열어 둔 동안 한 시간마다 실행하는 타이머 스위치도 있습니다.

하루 한 번 제한 — 서버가 판정
하루 한 번 제한 — 서버가 판정 — 같은 날 두 번째 실행은 한도 안내가 뜹니다.

실행 기록은 서버(RunAgent 펑션)에 남고 한도 판정도 서버가 합니다. 화면을 닫아도 같은 호출을 배치가 대신 부를 수 있도록 판단과 기록을 화면 밖에 두었습니다.

레이아웃 저장과 복원 — 짜 둔 축으로 다시 시작

레이아웃 — 저장 목록
레이아웃 — 저장 목록 — 이름을 붙여 저장하고 불러오거나 지웁니다.

축 배치, 표시 항목, 단위, 비교, 임계, 역할이 한 묶음으로 저장됩니다.

레이아웃 저장 후 — 기본·자동 실행
레이아웃 저장 후 — 기본·자동 실행 — 기본 레이아웃과 자동 실행을 지정할 수 있습니다.

기본·자동 실행을 켜 두면 다음에 열 때 그 배치로 시작해 곧바로 조회합니다. 브라우저 검사에서 새로고침 뒤 자동 실행으로 26행이 다시 그려졌고 저장한 사유도 남아 있었습니다.

좁은 화면에서 달라지는 것

390px 폭 — 한 열로 쌓임
390px 폭 — 한 열로 쌓임 — 휴대폰 폭에서도 같은 리포트를 봅니다.

가로 넘침이 없고 패널이 세로로 쌓입니다. 표는 가로 스크롤을 쓰며, 차트는 숨기지 않고 표 아래로 내려갑니다.

화면 뒤에서 일어나는 일

  1. 한 번 읽기 — 조회하면 실적 큐브(CubeSet)와 계획 큐브(PlanSet)를 회사코드·기간 조건으로 한 번씩 읽습니다.
  2. 브라우저 재묶음 — 축·필터·표시 항목이 바뀌면 큐브를 다시 묶어 트리표를 만듭니다. 서버 요청은 없습니다.
  3. 칸 클릭 — 행 경로와 열 조합을 조건으로 원천 라인(ItemSet)을 읽고, 합계가 칸 값과 같은지 비교합니다.
  4. 요인 분해·분석·에이전트 — 펑션이 서버에서 계산해 돌려줍니다.
  5. 저장 — 차이 사유와 레이아웃은 ReasonSet·LayoutSet에 생성·수정·삭제로 저장합니다.

판정과 처리 로직

판정 조건결과 상태사용자 조치
계획 대비에서 |차이| ≥ 금액 임계 그리고 |차이÷계획| ≥ 비율 임계칸에 색 표시(붉은색 증가·초록색 감소)요인 워터폴·원천 라인으로 원인 확인
금액 임계만 넘고 비율 임계는 못 넘음색 없음필요 시 임계 조정
칸 값과 읽은 라인 합이 다름점검 필요 표시조회 범위를 다시 읽기
요인 합 − 총 차이가 0이 아님검산 줄에 점검 필요 표시분해 범위 확인(정상 데이터에서는 0원)
에이전트 규칙 값이 임계 초과대기함에 보고 행 추가(점검 필요)해당 은행·공급사 확인 후 사유 기록
같은 날 에이전트 두 번째 실행한도 안내(LIMITED)다음 날 실행 또는 기존 대기함 확인
처리 단계산식
물대결제 수량 × 외화 단가 × 결제 환율
은행 수수료물대 × 수수료율
금융 이자물대 × 금융 금리 × 금융 일수 ÷ 365
서류·전신료결제 수량 × 서류 단가
결제 원화 총액물대 + 수수료 + 이자 + 서류·전신료
요인 분해계획 값에서 한 요인씩 실적 값으로 바꾸며 단계 차이를 구함(단계 대입) — 합은 총 차이와 같음

조회 조건

필드필수기본값처리
회사코드필수1000$filter Bukrs eq
시작·종료 기간선택2026.04~2026.09Period ge / le
차원 값선택전체차원 필드 eq 의 or 묶음(브라우저·서버 공통)
비교선택실적만큐브 + 계획 큐브 읽기 여부
금액·비율 임계선택1,000,000원 · 10%브라우저에서 색 판정

결과 컬럼

컬럼의미산출
행 축 경로선택한 차원 순서의 트리큐브 재묶음
열(결제월 등)열 축 값별 칸큐브 재묶음
표시 항목측정값 또는 계산 항목CNT·QTY·GOODS·FEE·INT·DOC·LATE·DAYS, 계산 항목 8종
차이실적 − 계획계획 대비일 때만
사유저장된 차이 사유 버튼ReasonSet

파일 구성

(앱 폴더)/
  index.html · readme.html · Component.js · manifest.json
  controller/  view/ (fragment/)  model/ (formatter · ErrorHandler · cube · chart · pptx · layout)
  css/  i18n/i18n_ko.properties
  odata/(서비스 폴더)/ (metadata · service · core · json/)
  media/ (intro.mp4 · intro_poster.jpg)

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

표준 실행은 SAP 표준 T-code가 담당하고, 이 화면은 조회·검증 관점을 더해 확장합니다. 표준 화면이 이미 잘하는 일은 표준에 두고, 결제 총액을 여러 축으로 돌려 보며 계획과 비교하는 자리만 이어 붙였습니다.

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

하고 싶은 일표준 화면표준에서 이어 붙일 자리이 화면이 더하는 관점
구매오더·품목 확인ME23N결제 라인에서 구매오더 번호로 이동결제 총액을 구매오더가 아닌 은행·조건 축으로 묶어 비교
입고 수량·일자 확인MIGO · MB51입고 전표와 결제 수량 대조결제 수량이 계획 수량과 다른 정도를 요인으로 분리
송장 검증 결과 확인MIRO송장 번호·금액·결제 조건 확인결제 조건별 금융 일수·이자를 칸 단위로 비교
공급업체 개별 항목 확인FBL1N미결·결제 완료 항목, 만기 구간 확인만기 구간·결제 은행 축으로 계획 대비 차이를 분해
외화 평가 확인FAGL_FCV결제 환율과 평가 환율 차이 확인결제 환율 요인을 계획 환율과 분리해 환율변동효과 관점으로 읽기
요인 분해표준에 없음-단계 대입으로 요인 8개의 합이 총 차이와 같도록 분해
차이 사유 기록표준 전표 적요전표 단위라 집계 행에는 붙일 곳이 없음조회 범위와 행 경로를 키로 사유 저장

T-code 별 연계 지점

T-code이름이 화면이 이어받는 데이터대사 지점·오가는 방법
ME23N구매오더 조회EKKO·EKPO의 구매오더 번호, 품목, 수량, 단가, 통화결제 라인의 구매오더 번호를 ME23N에서 열어 단가·수량이 외화 단가 요인과 맞는지 확인. 남겨 둘 일: 구매오더 변경·승인
MIGO입고 처리MKPF·MSEG의 입고 수량·일자결제 수량을 입고 수량과 대조. 남겨 둘 일: 입고 전기
MB51자재 문서 목록자재 문서 이력입고 전표 목록과 결제 라인 수 대조
MIRO송장 검증RBKP·RSEG의 송장 번호·금액·결제 조건송장 금액과 물대(수량×단가×환율) 비교. 남겨 둘 일: 송장 검증 전기·지급 차단 해제
FBL1N공급업체 개별 항목BSIK·BSAK의 만기·청산일·하우스 뱅크·결제 방법칸의 라인 합을 FBL1N 개별 항목 합과 맞춤. 이 화면 결과에서 FBL1N으로 내려가 원천 확인
FAGL_FCV외화 평가결제 환율, 평가 환율 차이결제 환율 요인 금액을 평가 결과와 함께 점검. 남겨 둘 일: 평가 실행·전표 생성

기존 리포트를 없애야 하나요? 아니요. 법정·감사·세무 신고에 쓰는 보고는 표준 화면에 그대로 두고, 이 화면은 결제 만기 구조를 돌려 보는 분석과 점검에 씁니다.

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

S/4HANA에는 CDS 분석 쿼리와 Fiori 분석 앱, Analysis for Office 같은 분석 도구가 있습니다. 이 화면은 그것들을 대체하지 않고, 같은 CDS 큐브 위에 올릴 수 있는 OpenUI5 분석 화면의 한 가지 구성을 보여 줍니다. 구체적인 Fiori 분석 앱 이름은 확인하지 못해 적지 않았습니다(확인 필요).

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

자리무엇을 손대나비고
부대비용 조건 유형수수료·이자·서류 비용을 어느 조건 유형·계정에서 읽을지회계·구매 협의
결제 조건 매핑결제 조건 코드를 송금 사후·인수도·기한부·선급금 그룹으로 묶기매핑 테이블에서 관리
은행·결제 채널 매핑하우스 뱅크 코드와 결제 방법을 은행·채널 차원으로 묶기자금 협의
환율 유형결제 환율과 계획 환율을 어느 환율 유형으로 볼지회계 협의
확장 필드계획 결제일, 지연 사유 등 표준에 없는 필드를 확장 필드로 추가확장 필드·BAdI는 확인 필요
권한회사코드·플랜트·구매 조직 기준 권한을 큐브 단계에 걸기DCL로 구현

분석 지표 정의

지표산식·판정 기준대응 기능원천 데이터비고
결제 원화 총액물대 + 수수료 + 이자 + 서류·전신료피벗 표시 항목결제 원천 라인측정값 5종의 합
부대·금융비용률(수수료+이자+서류)÷물대×100계산 항목CalcSet가정 비율
지연 결제율계획 결제일을 넘긴 라인÷전체 라인×100계산 항목·에이전트 규칙계획 결제일·실제 결제일점검 필요 판단용
결제 환율 요인결제 환율만 실적으로 바꾼 단계의 금액 차이요인 워터폴결제 환율·계획 환율IAS 21 환율변동효과(K-IFRS 제1021호) 관점
미계획 결제계획에 없던 결제 라인의 총액요인 워터폴계획 여부 플래그사유 확인 필요

CDS 구성 — 운영 데이터로 갈 때의 뷰 레이어와 코드

화면이 읽는 큐브·계획·원천 라인·차원은 운영에서는 CDS 뷰로 만들고, 서비스는 OData V2로 노출합니다. 아래 코드는 구조를 보여 주는 참고용이며 필드명·애노테이션은 SAP 릴리스와 회사 환경에 맞춰 확인해야 합니다(확인 필요). 표준 CDS 뷰 이름 대신 원천 테이블을 직접 읽는 형태로 적었습니다.

뷰 레이어 구성

레이어뷰·객체하는 일왜 나누나
기준ZIMP_APMAP (매핑 테이블)결제 조건·은행·채널 코드를 차원 값으로 묶는 기준회사마다 다른 코드 체계를 뷰 코드가 아닌 데이터로 관리하려고
원천 라인ZI_ImpApPayItem결제 청산 항목에 구매오더·송장·환율을 붙여 결제 라인 한 줄로 만듦큐브와 드릴스루가 같은 라인에서 나오도록
계획ZI_ImpApPlan계획 결제 라인(계획 수량·단가·환율·결제일)실적과 같은 차원 키를 쓰도록
차원ZI_ImpApDim차원 정의와 값 목록화면의 축 칩과 값 목록의 출처
큐브ZI_ImpApPayCube차원 조합 × 측정값 집계(실적·계획 같은 키)화면이 한 번에 읽는 단위
쿼리ZC_ImpApPayQuery조회 조건·표시 항목을 가진 분석 쿼리Fiori·Analysis for Office도 같은 쿼리를 재사용
쓰기ZR_ImpApReason차이 사유·레이아웃 저장(RAP)읽기 큐브와 쓰기 객체를 분리
권한ZI_ImpApPayCube DCL회사코드·플랜트·구매 조직 권한집계 단계에 걸어 뺄셈으로 새지 않게
서비스Service Definition / BindingOData V2 노출화면이 부르는 주소의 근거

① 결제 차원 매핑 테이블

결제 조건(송금 사후, 인수도, 기한부 신용장, 선급금), 은행, 결제 채널은 회사마다 코드가 다릅니다. 이 표 한 장이 코드를 차원 값으로 바꾸는 곳이라 가장 먼저 합의합니다.

" ─────────────────────────────────────────────
" ZIMP_APMAP
" 역할 : 코드 → 차원 값 매핑
" 이렇게 나눈 이유 : 코드 체계를 뷰가 아닌 데이터로 두어 현업이 직접 고치게 하려고
" ─────────────────────────────────────────────
@EndUserText.label : '수입 결제 차원 매핑'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zimp_apmap {
  key client      : abap.clnt not null;
  key map_type    : abap.char(10) not null;   " BANK | TERM | CHANNEL | BUCKET
  key source_val  : abap.char(10) not null;   " 원천 코드(하우스 뱅크, 지급 조건, 지급 방법)
  target_val      : abap.char(10);            " 차원 값
  target_text     : abap.char(40);            " 차원 값 이름
}

② 결제 원천 라인 뷰

드릴스루가 읽는 라인입니다. 청산 항목에 구매오더, 송장, 결제 환율을 붙이고, 만기 구간을 만기일과 결제일의 차이로 계산합니다. 칸의 값과 라인 합이 같아야 하므로 큐브는 반드시 이 뷰에서 집계합니다.

" ─────────────────────────────────────────────
" ZI_ImpApPayItem
" 역할 : 결제 라인 한 줄
" 이렇게 나눈 이유 : 큐브와 드릴스루가 같은 라인에서 나오도록
" ─────────────────────────────────────────────
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '수입 결제 라인'
@ObjectModel.usageType: { sizeCategory: #XL, serviceQuality: #C, dataClass: #TRANSACTIONAL }
define view entity ZI_ImpApPayItem
  as select from bsak as k
    inner join   ekpo as po on  po.ebeln = k.ebeln
                            and po.ebelp = k.ebelp
    left outer join zimp_apmap as mb on  mb.map_type   = 'BANK'
                                     and mb.source_val = k.hbkid
    left outer join zimp_apmap as mt on  mt.map_type   = 'TERM'
                                     and mt.source_val = k.zterm
    left outer join zimp_apmap as mc on  mc.map_type   = 'CHANNEL'
                                     and mc.source_val = k.zlsch
{
  key k.bukrs                                   as CompanyCode,
  key k.belnr                                   as PaymentDoc,
  key k.gjahr                                   as FiscalYear,
  key k.buzei                                   as PaymentItem,
      k.lifnr                                   as Supplier,
      k.ebeln                                   as PurchaseOrder,
      k.ebelp                                   as PurchaseOrderItem,
      k.augdt                                   as PayDate,            // 청산일 = 실제 결제일
      k.zfbdt                                   as BaselineDate,
      dats_add_days( k.zfbdt, cast( k.zbd1t as abap.int4 ), 'NULL' ) as PlanPayDate,
      cast( concat( substring( k.augdt, 1, 4 ), substring( k.augdt, 5, 2 ) ) as abap.char(6) ) as Period,
      coalesce( mb.target_val, 'ETC' )          as Bank,
      coalesce( mt.target_val, 'ETC' )          as PayTerm,
      coalesce( mc.target_val, 'ETC' )          as Channel,
      k.waers                                   as Currency,
      @Semantics.amount.currencyCode: 'Currency'
      k.wrbtr                                   as DocAmount,
      @Semantics.amount.currencyCode: 'LocalCurrency'
      k.dmbtr                                   as GoodsAmount,
      cast( 'KRW' as waers )                    as LocalCurrency,
      case when k.augdt > dats_add_days( k.zfbdt, cast( k.zbd1t as abap.int4 ), 'NULL' )
           then 1 else 0 end                    as LateFlag
}
where k.bstat <> 'S'   " 특수 총계 전표 제외

③ 계획 라인 뷰

계획은 실적과 같은 차원 키를 가져야 같은 칸에서 비교됩니다. 계획 수량·단가·환율·수수료율·금리·일수를 라인 단위로 두어 단계 대입 요인 분해가 가능하게 했습니다.

" ─────────────────────────────────────────────
" ZI_ImpApPlan
" 역할 : 계획 결제 라인
" 이렇게 나눈 이유 : 계획과 실적을 같은 키로 맞춰 칸 단위로 비교하려고
" ─────────────────────────────────────────────
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '수입 결제 계획 라인'
define view entity ZI_ImpApPlan
  as select from zimp_applan as p
{
  key p.bukrs        as CompanyCode,
  key p.plan_id      as PlanId,
  key p.plan_item    as PlanItem,
      p.supplier     as Supplier,
      p.bank         as Bank,
      p.pay_term     as PayTerm,
      p.period       as Period,
      p.currency     as Currency,
      p.plan_qty     as PlanQty,
      p.plan_price   as PlanPrice,
      p.plan_rate    as PlanRate,
      p.plan_fee_pct as PlanFeePct,
      p.plan_int_rate as PlanIntRate,
      p.plan_days    as PlanDays,
      p.plan_doc_unit as PlanDocUnit
}
where p.version = 'PLAN' 

④ 차원 뷰

화면의 축 칩과 값 목록이 읽는 뷰입니다. 차원 정의는 데이터로 관리하고 값 목록은 매핑 테이블과 마스터에서 가져옵니다.

" ─────────────────────────────────────────────
" ZI_ImpApDim
" 역할 : 차원 정의·값
" 이렇게 나눈 이유 : 축 칩과 값 선택 목록의 출처
" ─────────────────────────────────────────────
@EndUserText.label: '수입 결제 차원 값'
define view entity ZI_ImpApDim
  as select distinct from zimp_apmap
{
  key map_type   as Dim,
  key target_val as Value,
      target_text as Name
}
union all
select distinct from lfa1
{
  key cast( 'SUPPLIER' as abap.char(10) ) as Dim,
  key lifnr as Value,
      name1 as Name
}

⑤ 큐브 — 차원 조합 × 측정값

화면이 한 번에 읽는 큐브입니다. 라인에서 차원 조합별로 합계를 내며 측정값은 CNT, QTY, GOODS, FEE, INT, DOC, LATE, DAYS 여덟 가지입니다. 결제 통화가 달라도 원화(로컬 통화)로 모은 값을 쓰므로 통화 환산이 칸마다 어긋나지 않습니다.

" ─────────────────────────────────────────────
" ZI_ImpApPayCube
" 역할 : 차원 조합별 집계
" 이렇게 나눈 이유 : 화면이 읽는 단위를 가볍게 하고 합계가 라인과 같도록
" ─────────────────────────────────────────────
@Analytics.dataCategory: #CUBE
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '수입 결제 큐브'
@ObjectModel.usageType: { sizeCategory: #XL, serviceQuality: #D, dataClass: #TRANSACTIONAL }
define view entity ZI_ImpApPayCube
  as select from ZI_ImpApPayItem as i
{
  key i.CompanyCode,
  key i.Period,
  key i.Supplier,
  key i.Bank,
  key i.PayTerm,
  key i.Channel,
  key i.Currency,
      @Aggregation.default: #SUM
      count(*)                                  as LineCount,
      @Aggregation.default: #SUM
      sum( i.GoodsAmount )                      as GoodsAmount,
      @Aggregation.default: #SUM
      sum( i.LateFlag )                         as LateCount
}
group by i.CompanyCode, i.Period, i.Supplier, i.Bank, i.PayTerm, i.Channel, i.Currency

⑥ 분석 쿼리(Consumption)

조회 조건(회사코드 필수, 기간 범위)과 표시 항목을 가진 쿼리입니다. 같은 쿼리를 Analysis for Office 등에서도 쓸 수 있도록 큐브 위에 얇게 얹었습니다.

" ─────────────────────────────────────────────
" ZC_ImpApPayQuery
" 역할 : 조회 조건·표시 항목
" 이렇게 나눈 이유 : 큐브는 재사용, 쿼리는 소비자별로
" ─────────────────────────────────────────────
@Analytics.query: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '수입 결제 만기 구조 분석'
@UI.headerInfo: { typeName: '결제', typeNamePlural: '결제' }
define view entity ZC_ImpApPayQuery
  as select from ZI_ImpApPayCube
{
  @Consumption.filter: { mandatory: true, selectionType: #SINGLE }
  @AnalyticsDetails.query.axis: #FREE
  key CompanyCode,
  @Consumption.filter: { selectionType: #INTERVAL }
  @AnalyticsDetails.query.axis: #COLUMNS
  key Period,
  @AnalyticsDetails.query.axis: #ROWS
  key Bank,
  @AnalyticsDetails.query.axis: #ROWS
  key PayTerm,
  @AnalyticsDetails.query.axis: #FREE
  key Supplier,
  @AnalyticsDetails.query.axis: #FREE
  key Currency,
  GoodsAmount,
  LateCount
}

⑦ 쓰기 객체 — 차이 사유(RAP)

차이 사유와 레이아웃은 읽기 큐브가 아닌 별도 객체에 저장합니다. 키는 조회 범위와 행 경로이며, 화면은 생성·수정·삭제를 호출합니다.

" ─────────────────────────────────────────────
" ZR_ImpApReason
" 역할 : 차이 사유 저장
" 이렇게 나눈 이유 : 읽기 큐브를 건드리지 않고 사용자 입력만 저장
" ─────────────────────────────────────────────
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '수입 결제 차이 사유'
define root view entity ZR_ImpApReason
  as select from zimp_apreason
{
  key scope_key   as ScopeKey,
  key row_path    as RowPath,
      cause       as Cause,
      reason_text as ReasonText,
      @Semantics.systemDateTime.lastChangedAt: true
      changed_at  as ChangedAt,
      @Semantics.user.lastChangedBy: true
      changed_by  as ChangedBy
}

managed implementation in class zbp_imp_apreason unique;
define behavior for ZR_ImpApReason alias Reason
persistent table zimp_apreason
lock master
authorization master ( instance )
{
  create; update; delete;
  field ( readonly : update ) ScopeKey, RowPath;
}

⑧ 권한(DCL)

권한은 큐브에 겁니다. 드릴스루에만 걸면 합계에서 뺄셈으로 다른 조직의 값이 드러나므로 집계 단계에서 회사코드와 구매 조직 기준으로 거릅니다.

" ─────────────────────────────────────────────
" ZI_ImpApPayCube DCL
" 역할 : 회사코드 기준 권한
" 이렇게 나눈 이유 : 집계에서 걸러야 합계가 새지 않음
" ─────────────────────────────────────────────
@EndUserText.label: '수입 결제 큐브 권한'
@MappingRole: true
define role ZI_ImpApPayCube {
  grant select on ZI_ImpApPayCube
    where ( CompanyCode ) = aspect pfcg_auth ( F_BKPF_BUK, BUKRS, ACTVT = '03' );
}

⑨ 서비스 정의와 바인딩

" ─────────────────────────────────────────────
" ZUI_ImpApPay
" 역할 : OData V2 노출
" 이렇게 나눈 이유 : 화면이 부르는 서비스의 근거
" ─────────────────────────────────────────────
@EndUserText.label: '수입 결제 만기 구조 서비스'
define service ZUI_ImpApPay {
  expose ZI_ImpApPayCube   as CubeSet;
  expose ZI_ImpApPlan      as PlanSet;
  expose ZI_ImpApPayItem   as ItemSet;
  expose ZI_ImpApDim       as DimSet;
  expose ZR_ImpApReason    as ReasonSet;
}
" 서비스 바인딩: OData V2 - UI 로 만들고 게시(활성화)합니다.

운영 시점에 해야 할 일

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

해야 할 일무엇을 정하나정하지 않으면누가
결제 조건·은행·채널 매핑지급 조건 코드, 하우스 뱅크, 지급 방법을 어느 차원 값으로 묶을지칸마다 기타(ETC)로 쏠려 비교가 안 됨자금 · 구매
부대비용 원천 확정은행 수수료, 금융 이자, 서류·전신료를 어느 계정·조건 유형에서 읽을지물대만 보이고 총액이 계획과 맞지 않음회계 · 구매
환율 유형과 시점결제 환율을 어느 환율 유형·시점으로 볼지환율 요인이 평가 결과와 어긋남회계
계획 원천 확정계획 수량·단가·환율·금리를 어디서 가져올지요인 분해가 무의미해짐기획 · 구매
미계획 결제 기준계획에 없던 결제의 판정 기준미계획 요인이 과대·과소구매 · 자금
부호 규칙반품·상계·선급금 정산의 부호총액이 표준 화면과 다름회계
차원 범위쓸 차원 11개 중 운영에 둘 것나중에 늘리려면 뷰를 고쳐 다시 이송현업 · 자금
권한 설계회사코드·플랜트·구매 조직 권한 범위남의 조직 값이 합계에서 드러남보안 · 권한
성능 기준큐브 읽기 응답 시간, 한 번에 읽을 행 수화면이 느려지거나 상한에 걸림Basis
대사 체계FBL1N·MIRO와 맞출 항목과 주기"이 숫자 맞아?"가 반복됨회계
전송(TR) 순서매핑 테이블 → 뷰 → 권한 → 서비스 순서활성화 오류Basis
서비스 활성화와 주소 교체/IWFND/MAINT_SERVICE 등록 또는 바인딩 게시, 화면의 서비스 주소 교체화면이 가정 데이터를 계속 읽음Basis · 개발
배치 등록에이전트 실행을 배치(SM36)로 부를지화면을 열어야만 점검이 돎Basis · 자금

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

대사식검사 건수차이 건수의도적 예외
큐브 합계 = 원천 라인 합계(측정값 8종)800
칸 값 = 읽은 원천 라인 합(칸 5곳 클릭)500
요인 합 − (실적 − 계획) = 0원(전체 범위)100
계획 큐브 합계 = 원천 계획 합계100

큐브 합계와 원천 라인 합계는 결제 건수 3,000건, 수량 1,985,962, 물대 2,242.65억원 등 8개 측정값 모두 차이 0입니다. 가정 데이터에는 점검 필요 사례(특정 공급사의 단가 상승·결제 지연, 특정 은행의 수수료·금리 가산)를 일부러 심어 두었고, 에이전트 규칙 6개 모두에서 보고가 올라옵니다. 이 수치는 가정 데이터에서 나온 값입니다.

운영 데이터로 갈 때

  • 집계 위치 — 결제 라인이 수천만 건이면 큐브 집계를 화면이 아닌 CDS(필요하면 SAP HANA의 집계 테이블)에서 합니다.
  • 파라미터 필수화 — 회사코드와 기간을 필수로 두어 전체를 읽지 않게 합니다.
  • 원천 라인 읽는 단위 — 드릴스루는 쪽 단위(기본 500건)로 읽습니다.
  • 인덱스·응답 시간 — 청산일·회사코드·공급업체 기준 접근을 확인하고 응답 시간 기준을 먼저 정합니다.
  • 브라우저 상한 — 화면은 노드 1,500개, 열 36개까지만 그려 상한을 넘기면 범위를 좁히도록 안내합니다.

자주 묻는 질문 — 숫자와 산식, 화면과 조작, 분석 기능, 도입과 운영

현업 담당자와 IT 담당자가 가장 많이 묻는 것을 네 묶음으로 정리했습니다. 이 화면은 점검 도구이며 최종 판단은 회사와 감사인이 합니다.

숫자와 산식

결제 원화 총액은 어떻게 계산하나요?

물대 + 은행 수수료 + 금융 이자 + 서류·전신료입니다. 물대는 결제 수량 × 외화 단가 × 결제 환율, 은행 수수료는 물대 × 수수료율, 금융 이자는 물대 × 금융 금리 × 금융 일수 ÷ 365, 서류·전신료는 결제 수량 × 서류 단가로 구합니다. 라인마다 계산한 뒤 칸에서 합산합니다.

계획 금액은 어디서 오나요?

화면의 계획 큐브는 실적과 같은 차원 키를 가진 계획 결제 라인에서 옵니다. 샘플에서는 가정값으로 만들었고, 운영에서는 계획 수량·단가·환율·수수료율·금리·일수를 어느 원천에서 가져올지 먼저 정해야 합니다(계획 원천 확정). 확인된 원천이 없는 상태에서 정한 값은 가정값입니다.

차이 요인의 합이 총 차이와 정말 같은가요?

같습니다. 계획 값에서 시작해 결제 물량 → 외화 단가 → 결제 환율 → 수수료율 → 금융 금리 → 금융 일수 → 서류·전신 단가 순서로 한 요인씩 실적 값으로 바꾸고, 계획에 없던 결제는 별도 요인으로 더합니다. 단계 차이를 모두 더하면 총 차이와 정확히 같아지며, 화면의 검산 줄이 매번 "요인 합 − 총 차이"를 보여 줍니다. 샘플에서는 0원입니다.

요인의 순서를 바꾸면 요인별 금액이 달라지나요?

달라질 수 있습니다. 단계 대입 방식은 앞 요인이 먼저 실적으로 바뀌므로 교차 영향이 뒤 요인에 반영됩니다. 그래서 순서를 화면에서 고정해 두었고, 합이 총 차이와 같다는 성질은 어떤 순서에서도 유지됩니다. 순서 자체는 회사 합의로 정하세요.

외화와 환율은 어떻게 처리하나요?

결제 환율을 계획 환율과 분리해 결제 환율 요인으로 보여 줍니다. 환율 영향은 IAS 21 환율변동효과(K-IFRS 제1021호) 관점으로 읽을 수 있게 했으나, 환율 유형·시점은 회사 정책에 따라 달라 확인이 필요합니다. 샘플의 환율은 가정값이며 실제 환율이 아닙니다.

칸의 값과 원천 라인 합이 다르면 어떻게 하나요?

화면에 점검 필요가 표시됩니다. 먼저 조회 범위(기간·차원 값 필터)가 큐브와 원천 라인에서 같은지 확인하고, 읽은 라인 수가 읽는 단위를 넘지 않았는지 보세요. 그래도 다르면 매핑 테이블에서 원천 코드가 기타로 쏠린 곳이 없는지 확인한 뒤 FBL1N 개별 항목과 대조합니다.

화면과 조작

조회 버튼은 어디에 있나요? Enter 키로도 되나요?

조회 조건 패널 오른쪽 위에 있는 조회 버튼을 누르거나, 입력칸에서 Enter 키를 누르면 됩니다. 처음 열 때는 자동으로 조회하지 않으며, 저장한 레이아웃에서 자동 실행을 켠 경우에만 열 때 곧바로 조회합니다.

축을 바꿀 때마다 서버를 다시 부르나요?

부르지 않습니다. 조회 한 번에 실적·계획 큐브를 읽고, 이후 행·열 바꾸기와 축 이동은 브라우저가 큐브를 다시 묶습니다. 브라우저 검사에서 행·열 바꾸기 동안 네트워크 요청이 0건이었습니다.

행·열에 놓을 수 있는 축의 개수에 제한이 있나요?

행 축은 최대 3개, 열 축은 최대 2개입니다. 열이 너무 많아지지 않도록 열 36개, 트리 노드 1,500개를 상한으로 두었고, 넘으면 범위를 좁히라는 안내가 뜹니다. 칩을 끌기 어려우면 칩의 화살표 버튼으로 보낼 수 있습니다.

차원 값 필터는 어떻게 쓰나요?

차원 값 버튼에서 축별로 값을 여러 개 고릅니다. 선택한 값은 큐브와 원천 라인 모두에 같은 조건으로 적용되고, 조회 조건 제목에 요약됩니다. 값을 고르지 않은 축은 전체입니다.

휴대폰에서도 볼 수 있나요?

390px 폭에서도 가로 넘침 없이 한 열로 쌓여 보이도록 했습니다. 표는 가로 스크롤을 쓰고 차트는 숨기지 않고 표 아래로 내려갑니다. 다만 열이 많은 피벗은 큰 화면이 읽기 편합니다.

CSV는 어떻게 내려받나요?

피벗 표 오른쪽 위의 CSV 버튼은 현재 보이는 표를, 원천 라인 창의 CSV 버튼은 그 칸의 라인을 내려받습니다. 라인은 쪽 단위로 읽어 오며, 더 읽기 버튼으로 이어서 읽을 수 있습니다.

분석 기능

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

계획 대비 모드에서 금액 임계(기본 1,000,000원)와 비율 임계(기본 10%)를 둘 다 넘은 칸만 칠합니다. 붉은색은 계획보다 더 나간 방향, 초록색은 덜 나간 방향입니다. 임계는 입력칸에서 바꿀 수 있습니다.

AI 분석은 숫자를 모델이 만드나요?

아닙니다. 발견 사항의 금액과 비율은 서버 규칙이 큐브에서 계산해 근거로 넘기고, 모델 연결은 기본으로 꺼져 있어 규칙 기반 해설이 나옵니다. 모델을 켜더라도 설명만 맡기고 숫자는 규칙이 계산한 값을 그대로 씁니다. 별도의 API 키가 필요하지 않습니다.

PPTX 보고서는 어디서 만들어지나요?

브라우저에서 바로 만들어집니다. 외부 라이브러리나 서버를 거치지 않고 표지, 요약, 핵심 발견, 차트, 표, 근거를 담은 .pptx 파일을 직접 짓습니다. AI 분석을 먼저 실행해야 보고서 버튼이 동작합니다.

AI 에이전트는 어떻게 동작하나요?

규칙 6개(은행 수수료율 상한, 공급사 지연 결제율 상한, 계획 초과, 금융 금리 요인, 금융 일수 요인, 환율 요인)를 하루 한 번 점검해 점검 필요 항목을 대기함에 올립니다. 규칙마다 임계값과 대상 역할이 있고, 화면에서 임계를 고쳐 저장할 수 있습니다. 판단과 기록은 서버가 맡습니다.

같은 날 에이전트를 두 번 실행하면 어떻게 되나요?

두 번째 실행은 서버가 한도로 거절하고 화면에는 오늘은 이미 실행했다는 안내가 뜹니다. 하루 한 번 제한은 화면이 아니라 서버의 실행 기록으로 판정하므로, 화면을 새로 열어도 같습니다.

차이 사유는 얼마나 오래 남나요?

사유는 조회 범위와 행 경로를 키로 저장됩니다. 같은 범위의 같은 행이면 축을 바꾸거나 새로고침해도 따라오고, 삭제하기 전까지 남습니다. 샘플에서는 브라우저 저장소를 쓰고, 운영에서는 쓰기 객체(RAP)에 저장합니다.

도입과 운영

누가 쓰면 가장 효과적인가요?

수입 대금 결제를 맡는 자금 담당, 공급사 가격·지연을 보는 구매 담당, 부대·금융비용과 환율 영향을 점검하는 회계 담당입니다. 역할별 요약이 있어 CFO와 책임자급이 같은 숫자를 각자의 관점으로 볼 수 있습니다. 월 수백 건 이상의 결제 라인이 쌓이는 조직에서 효과가 큽니다.

언제부터 쓸 수 있고 어디까지 적용되나요?

지금 공개된 것은 가정 데이터로 동작하는 설명용 화면입니다. 특정 시스템에 연결된 시점이나 적용 범위는 확인된 사실이 없어 적지 않았으며, 도입 시점과 범위는 환경 확인 뒤 정합니다.

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

표준 실행은 SAP 표준 T-code가 담당하고, 이 화면은 조회·검증 관점을 더해 확장합니다. 구매오더(ME23N), 입고(MIGO), 송장 검증(MIRO), 공급업체 개별 항목(FBL1N), 외화 평가(FAGL_FCV)에서 보던 데이터를 이어받아 결제 총액을 여러 축으로 돌려 봅니다. 기존 리포트는 없애지 않고 함께 둡니다.

운영 시스템에 연결하려면 어떤 절차가 필요한가요?

CDS 뷰(원천 라인, 계획, 큐브, 쿼리, 권한)를 만들고 OData 서비스를 활성화한 뒤, 화면의 서비스 주소만 운영 서비스로 교체합니다. 그 전에 결제 조건·은행·채널 매핑, 부대비용 원천, 환율 유형, 계획 원천을 합의해야 하며, 소요 기간은 합의 범위와 환경에 따라 달라 확인이 필요합니다.

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

회사코드·플랜트·구매 조직 권한을 CDS 큐브에 DCL로 겁니다. 드릴스루에만 권한을 걸면 합계에서 뺄셈으로 다른 조직의 값이 드러나므로 집계 단계에서 거릅니다. 화면은 OpenUI5 표준 컨트롤과 직접 그린 SVG만 써 외부 라이브러리 반입 심사 부담이 적습니다.

결제 라인이 수천만 건이면 느려지지 않나요?

화면이 큐브를 한 번에 읽는 구조라 규모가 커지면 집계를 CDS(필요하면 SAP HANA 집계 테이블)에서 하고, 회사코드·기간을 필수로 둡니다. 드릴스루는 쪽 단위로 읽고, 화면은 열 36개·노드 1,500개 상한으로 범위를 좁히도록 안내합니다. 성능 기준은 도입 전에 먼저 정하세요.

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

코드를 차원 값으로 바꾸는 규칙을 매핑 테이블에 데이터로 두었으므로 현업이 직접 고칠 수 있습니다. 새 은행이나 결제 조건이 생기면 그 코드가 어느 차원 값인지 한 줄만 추가하면 됩니다. 매핑이 없는 코드는 기타(ETC)로 모이므로 정기적으로 확인하세요.

이 화면의 결과로 회계 처리나 세무 신고를 끝낼 수 있나요?

아닙니다. 점검 도구이며 최종 판단은 회사와 감사인이 하고, 세무 신고는 회사와 세무 대리인·관세사가 합니다. 이 화면은 결제 총액의 원인을 빠르게 좁히고 확인할 대상을 알려 주는 용도입니다.

데이터가 실제 고객 값인가요?

아닙니다. 모든 거래처·은행·금액·환율·수수료율은 설명용으로 만든 가정값이며 실제 회사나 거래의 값이 아닙니다. 가정 데이터에는 점검 필요 사례를 일부러 심어 두어 기능이 동작하는 모습을 볼 수 있게 했습니다.