SAP 영업 가격·리베이트 통합 관리 — 가격 요청에서 정산까지 한 앱에서 처리하고 숫자까지 점검하는 영업 마감
가격 요청 · 약정 · 달성 확인 · 리베이트 충당 · 정산 처리 — 작성자와 승인자 분리, 시뮬레이션 일괄 실행, 여섯 가지 대사 규칙, 다차원 분석과 요인 분해, AI 에이전트까지. 소개 영상과 실제 화면 31종, CDS 코드까지 공개합니다.
소개 영상블로그 목차 순서대로 · 자막 포함
도입 포인트 — 이 앱을 사용해야 하는 이유
영업 가격과 리베이트는 처음부터 끝까지 여러 화면과 파일을 거칩니다. 가격 조건은 가격 조건 화면(VK11)에서, 수주는 판매 오더 화면(VA01)에서, 청구는 청구 화면(VF01)에서, 한도는 신용 관리 화면(FD32)에서 처리하고, 약정 대비 달성 현황과 충당·정산 금액은 엑셀로 맞춰 봅니다. 승인은 메일과 구두로 오가니 “누가 언제 승인했는지”와 “이 숫자가 어디서 왔는지”를 월말마다 사람이 다시 짜 맞춥니다.
이 앱은 가격 요청 → 약정 → 달성 확인 → 리베이트 충당 → 정산(+정정)을 하나의 문서 흐름으로 묶어, 처리 담당자는 작성과 일괄 실행을, 승인자는 승인과 반려를, 관리자는 기준정보를 한 화면 안에서 맡습니다. 처리 규칙은 서버가 판정하고, 다 처리한 뒤에는 여섯 가지 대사 규칙이 약정부터 정산까지의 금액이 이어지는지를 다시 점검합니다. 표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 처리·점검 관점을 더해 확장합니다.
한 줄 요약 — 가격 요청에서 정산까지 한 앱에서 처리하고 승인하며, 같은 화면에서 숫자가 맞는지 점검합니다.
핵심 포인트 여덟 가지
| 핵심 포인트 | 고객이 얻는 것 | 지금 방식이라면 |
|---|---|---|
| ① 처리 · 승인 · 확정을 한 앱에서 | 가격 요청 → 약정 → 달성 확인 → 충당 → 정산(+정정)이 하나의 문서 흐름으로 이어지고, 상태(초안 · 검토요청 · 승인 · 확정 · 반려 · 취소)가 한눈에 보입니다. | 표준 화면 여러 개와 엑셀 · 메일을 오가며 진행 상황을 사람이 이어 붙입니다. |
| ② 작성자와 승인자가 나뉘는 승인 | 작성자 ≠ 승인자를 서버가 판정하고 1억원 이상 문서는 두 단계로 승인합니다. 화면을 우회해 호출해도 거절되고 감사 로그에 남습니다. | 메일 결재와 구두 확인이라 누가 언제 승인했는지 따로 찾아야 합니다. |
| ③ 한도를 넘는 약정을 요청 전에 점검 | 약정 검토 요청 전에 리베이트 한도 사용률과 요청 할인율을 점검해 결과를 보여 줍니다. | 승인 단계에서야 한도 초과를 알게 되거나 사후에 발견합니다. |
| ④ 시뮬레이션하고 실행하는 일괄 처리 | 만들 문서 · 항목 수 · 금액을 저장 없이 먼저 보고, 확인한 합계 그대로 실행합니다. 같은 조건은 두 번 만들어지지 않습니다. | 월말에 대상 목록을 엑셀로 뽑아 건건이 입력하고 중복 여부를 눈으로 확인합니다. |
| ⑤ 여섯 가지 대사 규칙과 예외 조치 | 약정 → 달성 → 충당 → 정산 → 미결 금액이 이어지는지 6개 규칙으로 점검하고, 차이는 예외 목록에서 사유와 조정 문서로 조치합니다. | 표준 화면 값을 엑셀로 맞춰 보고 차이 원인을 메일로 묻습니다. |
| ⑥ 칸에서 원천 문서 라인까지 드릴스루 | 분석 칸을 누르면 그 금액을 만든 문서 라인이 열리고 라인 합계가 칸 금액과 같은지 바로 보입니다. | 리포트를 닫고 다른 화면에서 조건을 다시 넣어 확인합니다. |
| ⑦ 계획 대비 차이를 다섯 요인으로 | 물량 · 믹스 · 단가 · 할인·리베이트 · 환율로 나누고, 요인 합이 총차이와 같은지 검산 줄을 매번 보여 줍니다. | 차이 원인을 엑셀로 만들고 산식이 사람마다 달라집니다. |
| ⑧ 영역 간 연계 · 감사 로그 · 숫자를 만들지 않는 AI | 영업 문서가 생산 · 원가 · 재무 · 자금 문서로 이어지는 길을 보고, 모든 쓰기와 거절된 요청이 기록됩니다. AI 는 근거 표의 값을 읽어 설명만 합니다. | 영역마다 화면이 달라 문서 연결과 변경 이력을 따로 찾아야 합니다. |
사례로 보는 효과
검증용 샘플 데이터(2026-01 ~ 2026-10)에서 계획 순매출은 5,451,919,190원이고 실적은 5,305,392,467원으로 달성률 97.31%, 총차이는 −146,526,723원입니다. 표준 리포트는 여기까지 알려 줍니다. 이 앱의 요인 분해는 이 차이를 물량 −11,610,545원 · 믹스 −24,515,330원 · 단가 +3,523원 · 할인·리베이트 −118,910,939원 · 환율 +8,506,568원으로 나눕니다. 총차이의 대부분(약 81%)이 매출 부진이 아니라 할인과 리베이트에서 났다는 것이 바로 보이고, 다섯 요인의 합과 총차이의 차이는 0원으로 검산 줄에 표시됩니다.
같은 데이터에서 대사 6규칙의 검사 건수는 R01 759 · R02 1,007 · R03 24 · R04 442 · R05 24 · R06 759건이고, 차이는 모두 점검 기능을 보여 주려고 의도적으로 넣은 예외 10건뿐입니다.
도입하면 달라지는 것
- 월말 정산 준비 — 일괄 실행의 시뮬레이션 합계를 확인하고 실행하면 대상 목록 작성과 중복 확인이 사라집니다.
- 승인 — 메일 대신 화면에서 승인·반려하고 이력이 문서에 남습니다. 1억원 이상은 두 번째 승인자가 따로 확인합니다.
- 대사 회의 — “어느 숫자가 맞나” 대신 예외 목록의 사유와 조정 문서를 보며 무엇을 조치할지 이야기합니다.
- 감시 — 아무도 화면을 열지 않아도 하루 한 번 감시 규칙이 돌고 걸린 항목이 보고로 올라옵니다.
이런 회사에 맞습니다
가격 조건 · 리베이트 약정이 많아 월말 충당·정산 확인에 엑셀을 쓰는 영업 · 가격 담당 조직. 영업조직이 2곳 이상이고 승인 단계(작성 → 승인 → 확정)와 직무 분리가 필요한 회사. SAP 표준 화면은 그대로 쓰되 약정 · 달성 · 충당 · 정산의 연결 상태를 한 화면에서 점검하고 싶은 경영지원 · 영업관리 조직. AI 를 쓰고 싶지만 숫자의 출처는 서비스가 통제해야 하는 조직.
실행 화면 — 처리부터 대사·분석까지
사용 방법
- 앱을 엽니다. 첫 화면 「개요 · 할 일」에 미결 정산액 · 승인 대기 · 반려 · 미해결 대사 예외 카드와 내 역할의 할 일이 보입니다. 오른쪽 위 「사용자」 상자로 조회자 · 처리자 · 승인자 · 관리자를 바꿔 볼 수 있습니다(시연용).
- 조회조건을 넣습니다. 문서 처리 화면 위쪽의 영업조직 · 기간(시작/종료)은 모두 선택 사항이고, 문서번호 · 고객 입력란과 구분 · 상태는 왼쪽 목록 위에 있습니다.
- 조회합니다. 파란 「조회」 단추를 누르거나 입력란에서 Enter 키를 누릅니다. 처음 열 때는 기본 조건으로 한 번 자동 조회합니다.
- 요약을 확인합니다. 목록 제목의 문서 건수와 개요 카드의 금액 · 건수를 봅니다.
- 행을 눌러 상세를 엽니다. 오른쪽에 문서 상세가 열리고 항목 → 상태 이력 → 연계 문서 → 감사 로그 탭으로 이어집니다.
- 처리합니다. 처리자는 한도 점검 → 검토 요청, 승인자는 승인 또는 반려(사유 필수), 처리자는 승인 문서를 확정합니다.
- 일괄 실행과 대사는 각각 「시뮬레이션」 → 「실행」, 「대사 실행」 순서입니다. 분석은 「조회」 한 번으로 큐브를 읽은 뒤 축을 바꿔도 서버를 다시 부르지 않습니다.
- 내려받습니다. 목록과 분석 위쪽의 「CSV」 단추로 현재 값을 파일로 내려받고, 분석에서는 xlsx · PowerPoint 도 만듭니다.
무엇으로 만들었나
| 자리 | 무엇 | 왜 그렇게 두었나 |
|---|---|---|
| 화면 컨트롤 | OpenUI5 의 표준 컨트롤(ToolPage 메뉴, 분할 레이아웃, 표, 객체 페이지)과 직접 그린 차트 | 외부 라이브러리 반입 심사 없이 사내망에서 그대로 열립니다. |
| 집계 · 판정 로직 | 서비스 쪽 로직 파일(조회 · 단건 · 생성 · 수정 · 삭제 · 펑션)과 화면 쪽 큐브 집계 모듈 | 상태 전이 · 직무 분리 · 금액 구간 · 대사 · 요인 분해를 서버가 판정해 화면을 우회해도 같은 결과가 나옵니다. |
| OData 서비스 구성 | OData V2 서비스 하나를 앱의 기본 모델로 선언하고, 목록은 엔티티셋에 직접 바인딩합니다. 필터와 정렬은 서버로 전달하고 쓰기는 생성 · 수정과 펑션 호출로 보냅니다. | 화면이 모델 하나만 알면 되고, 운영에서 CDS 서비스로 바꿀 때 서비스 주소 한 곳만 교체합니다. |
| 테마 · 화면 크기 | sap_horizon 테마, 컴팩트/코지 밀도, 좁은 화면 대응 | 표준 Fiori 와 같은 모습이라 사용자가 따로 배울 것이 적습니다. |
앱 정보
| 항목 | 내용 |
|---|---|
| 영역 | 영업 |
| 업무 흐름 범위 | 가격 요청 → 약정 → 달성 확인 → 리베이트 충당 → 정산(+정정) |
| 모듈 구성 | 기준정보 · 문서 처리 · 상태·승인 · 일괄 실행 · 대사·예외 · 분석 · 영역 간 연계 · 이력·감사·권한 |
| 관련 기준서 · 대상 영역 | - (업무 분석 앱 — 대상 영역: 영업 가격·리베이트) |
| SAP 표준 T-code | VK11 · VA01 · VA41 · VF01 · FD32 · FB03 · FBL5N · F-28 · VKM1(확인 필요) · VBO1 · VBO3 · VBOF(확인 필요) |
| 화면 성격 | 통합 관리(처리 · 승인 · 일괄 실행 · 대사 · 분석) |
| 테마 | sap_horizon (OpenUI5 1.120) |
SAP 표준 기능을 그대로 이어받은 부분 — 가격 조건 · 판매 오더 · 청구 · 신용 한도는 표준 화면과 같은 데이터 구조(문서 번호 · 고객 · 자재 · 조건 레코드)를 이어받습니다. 표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 처리와 점검 관점을 더해 확장합니다.
첫 화면에서 오늘 할 일이 보인다
앱을 열면 가장 먼저 「개요 · 할 일」이 나옵니다.

미결 정산액 · 약정 보류·차단 고객 · 승인 대기 · 반려 · 미해결 대사 예외 · 확정 문서 · 열린 할 일이 카드로 모입니다. 카드를 누르면 해당 목록으로 이동하고, 「내 할 일」은 지금 선택한 역할의 것만 보여 줍니다. 아래 알림에는 하루 한 번 도는 에이전트의 보고가 올라옵니다.
기준정보는 한곳에서 보고 고친다
고객 · 자재 · 할인 규칙 · 가격 조건 네 묶음을 탭으로 오갑니다.

고객별 영업조직 · 지역 · 유통 채널 · 정산 조건과 리베이트 한도 · 노출액 · 미결 정산액을 한 표로 봅니다. 한도에 가까운 고객은 사용률로 판단하고, 행을 누르면 변경 이력을 확인할 수 있습니다. 조회자 역할에는 수정 단추가 보이지 않습니다.

자재별 제품군 · 단위 · 정가를 봅니다. 정가는 가격 조건 레코드를 만들 때 기준이 되고, 사용 여부 열로 비활성 자재를 걸러낼 수 있습니다.

고객 그룹 × 제품군 × 최소 수량별 할인율 규칙입니다. 문서 항목에 할인율을 넣을 때 허용 범위를 판단하는 근거가 되며, 규칙 수가 적어 한 화면에서 전체를 확인합니다.

확정 약정 항목마다 만들어지는 가격 조건 레코드입니다. 단가 · 할인율 · 리베이트율 · 유효기간과 원천 문서 · 항목을 함께 보여 줘서, 약정이 가격 조건으로 이어졌는지 바로 확인합니다.

관리자 역할이 기준정보를 고치는 창입니다. 저장하면 변경 전후 값이 이력으로 남고, 허용되지 않는 값은 서버가 거절합니다.
승인 버튼은 승인자에게만 보인다
문서 처리는 목록과 상세가 한 화면에 있고, 역할에 맞는 단추만 보입니다.

문서번호 · 고객 · 구분 · 상태로 조회하고 CSV · xlsx 로 내려받습니다. 목록 제목의 건수가 현재 조건의 문서 수이며, 행을 누르면 오른쪽에 상세가 열립니다. 상태는 색으로도 구분됩니다.

문서 머리 정보(상태 · 승인 단계 · 한도 점검 결과 · 작성자 · 승인자 · 참조 문서)와 항목별 수량 · 단가 · 할인율 · 리베이트율 · 순액을 봅니다. 순액은 총액에서 할인과 리베이트를 뺀 값입니다.

초안 상태 문서에서는 항목 수정 · 한도 점검 · 검토 요청 단추가 활성화됩니다. 같은 문서를 조회자나 승인자 역할로 열면 이 단추들은 보이지 않습니다.

약정을 검토 요청하기 전에 리베이트 한도 사용률과 요청 할인율을 점검한 결과입니다. 한도를 넘으면 결과에 표시되고, 이 경우 승인은 두 단계로 진행됩니다.

고객 · 영업조직 · 구분을 정해 새 문서를 만드는 창입니다. 항목은 만든 뒤 상세에서 추가합니다. 필수 입력이 비면 저장 단추가 눌리지 않습니다.

초안 문서를 검토 요청하는 확인 창입니다. 요청하면 상태가 검토요청으로 바뀌고 승인자의 할 일에 올라갑니다.

승인자는 승인 또는 반려를 고릅니다. 반려에는 사유가 필수입니다. 작성자와 같은 사용자의 승인은 서버가 거절하고, 1억원 이상 문서는 두 번째 승인자가 따로 승인해야 승인 상태가 됩니다.

생성 → 검토 요청 → 승인 → 확정까지 처리자와 시각이 상태 이력으로 쌓입니다. 취소나 반려도 같은 표에 남아 문서의 지난 경로를 그대로 읽을 수 있습니다.
시뮬레이션 합계와 실행 결과가 같다
일괄 실행은 조건 → 시뮬레이션 → 확인 → 실행 → 로그 순서를 지킵니다.

영업조직 · 대상 기간 · 실행 유형(달성 일괄 확인 · 리베이트 일괄 충당)을 정합니다. 처리자와 관리자 역할만 실행할 수 있습니다.

시뮬레이션은 저장하지 않고 만들 문서 · 항목 수 · 수량 · 금액과 제외 사유를 미리 보여 줍니다. 이미 진행 중인 후속 문서가 있는 항목은 중복 방지를 위해 제외되고, 시뮬레이션 없이는 실행 단추가 활성화되지 않습니다.

시뮬레이션 합계를 확인하고 실행합니다. 서버는 시뮬레이션과 같은 대상으로만 실행합니다.

실행 이력 · 로그 · 만들어진 문서가 이어집니다. 만들어진 문서의 번호를 눌러 문서 처리에서 이어서 처리하고, 같은 조건으로 다시 실행해도 문서가 두 번 만들어지지 않습니다.
여섯 규칙으로 맞춰 보고 차이는 예외로 남긴다
대사는 약정에서 정산까지 금액이 이어지는지를 규칙별로 점검합니다.

여섯 규칙(R01~R06)의 이름 · 설명 · 허용 오차입니다. 약정 수량 = 달성 + 미확인, 달성 = 충당 + 미충당, 고객 미결 = 충당 − 정산, 총액 − 할인 − 리베이트 = 순액, 노출액 = 미결 + 미충당 약정, 확정 약정 항목 = 가격 조건 1건입니다.

규칙별 검사 건수 · 차이 건수 · 좌우 금액 · 최대 차이를 보여 줍니다. 샘플에서는 R02 만 차이 0건이고 나머지 규칙은 의도적으로 넣은 예외가 각각 2건씩 나옵니다.

차이가 난 항목을 목록으로 보고 사유와 조정 문서로 조치합니다. 상태는 미해결 → 조치 중 → 해결로 바뀌며, 처리자와 승인자 역할이 조치할 수 있습니다.
축을 바꿔도 합계가 같다
분석 화면은 큐브를 한 번 읽고 화면 안에서 축을 바꿔 다시 집계합니다.

차원 9개 가운데 원하는 것을 행(최대 3단계)과 열(최대 2단계)에 놓고 순매출 등 척도를 다시 집계합니다. 칸을 누르면 원천 문서 라인(드릴스루)이 열려 라인 합계가 칸 금액과 같은지 확인합니다.

비교 기준을 켜면 실적과 계획의 차이와 증감률이 칸마다 나옵니다. 색은 좋은 방향(높을수록 좋은지 낮을수록 좋은지)에 따라 칠합니다.

계획 대비 차이를 물량 · 믹스 · 단가 · 할인·리베이트 · 환율 다섯 요인으로 나누고, 요인 합이 총차이와 같은지 검산 줄에 보여 줍니다. 원인은 사람이 확인해야 하므로 화면은 “확인 필요”로 표시합니다.

차원 값을 골라 범위를 좁히는 창입니다. 영업조직 · 지역 · 채널 · 고객 그룹 · 고객 · 제품군 · 자재 · 통화를 조합할 수 있습니다.

경영진 · 영업 책임자 · 가격 담당 · 물류 담당 관점으로 척도 묶음을 한 번에 바꿉니다. 같은 큐브에서 나오므로 어느 관점이든 합계가 어긋나지 않습니다.
영업 문서가 다른 영역으로 이어지는 길
문서 흐름도에서 문서를 누르면 해당 문서 상세로 이동합니다.

영업 문서에서 생산 · 원가 · 재무 · 자금 문서로 이어지는 흐름을 그림으로 봅니다. 문서를 누르면 해당 문서 상세로 이동하고, 앞 문서와 뒤 문서의 금액 · 일자 · 비고가 함께 보입니다.
AI 는 설명만 하고 숫자는 서비스가 계산한다
AI 분석과 에이전트는 서비스가 계산한 근거 표를 읽어 말로 풀어 줍니다.

AI 분석은 서비스가 계산한 근거 표의 값을 읽어 요약합니다. 금액과 비율은 서비스가 만든 값 그대로이고, 모델은 설명만 덧붙입니다. 모델을 쓰지 않아도 같은 근거로 규칙 해설이 나옵니다.

에이전트는 하루에 한 번 감시 규칙 5개(제품군 순매출 계획 미달 · 리베이트 한도 임박 고객 · 장기 미충당 달성 · 고객그룹 공제율 상승 · 승인 대기 장기 문서)를 점검하고 걸린 항목을 역할별 보고로 올립니다.
누가 무엇을 했는지 남는다
이력 · 감사 · 권한 화면에서 역할별 권한과 상태 전이 규칙을 확인합니다.

역할별 권한과 상태 전이 규칙, 그리고 감사 로그를 한 화면에서 봅니다. 직무 분리나 권한 때문에 거절된 요청도 로그에 남습니다. 사용자 전환은 시연용이며 운영에서는 SAP 권한으로 바뀝니다.
좁은 화면에서도 목록과 상세를 쓴다
폭이 좁은 기기에서는 목록과 상세가 한 화면씩 차례로 열립니다.

좁은 화면에서는 목록이 먼저 보이고, 행을 누르면 상세가 이어서 열립니다. 조회조건은 접어 두고, 표의 열은 중요한 항목만 남깁니다.
화면 뒤에서 일어나는 일
모든 쓰기와 상태 전이는 화면이 아니라 서비스가 판정합니다. 화면은 단추를 보이거나 숨길 뿐이고, 같은 요청을 화면 밖에서 보내도 같은 규칙으로 걸러집니다.
처리 판정 규칙 — 조건 → 결과 상태 → 사용자 조치
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 초안 문서를 검토 요청, 약정은 한도 점검 포함 | 검토요청(20) | 승인자가 승인 또는 반려 |
| 승인자 ≠ 작성자, 금액 1억원 미만 | 승인(30) | 처리자가 확정 |
| 금액 1억원 이상 또는 한도 초과 | 승인 단계 1/2 → 2/2 | 다른 승인자가 두 번째 승인 |
| 승인자가 반려(사유 필수) | 반려(90) | 처리자가 보완 후 재요청 |
| 승인 문서를 확정 | 확정(40) — 매출 라인 · 노출액 반영, 약정은 가격 조건 생성 | 다음 문서 진행 |
| 확정 문서를 취소, 후속 문서 없음 | 취소(99) — 역처리 문서 생성, 가격 조건 종료 | 정정 문서 작성 |
| 확정 문서를 취소, 후속 문서 있음 | 거절 — 감사 로그에 기록 | 후속 문서를 먼저 정리 |
| 작성자와 같은 사용자의 승인 · 역할 밖 동작 | 거절 — 감사 로그에 기록 | 알맞은 역할로 전환 |
| 일괄 실행 대상 중 진행 중인 후속 문서가 있는 항목 | 시뮬레이션에서 제외 | 제외 사유 확인 |
| 대사 좌우 차이가 허용 오차 초과 | 예외(미해결) | 사유 입력 · 조정 문서로 조치 |
조회조건
| 조건 | 필수 여부 | 기본값 | 서비스 필터 |
|---|---|---|---|
| 영업조직 | 선택 | 전체 | 영업조직 eq |
| 기간(시작 · 종료) | 선택 | 2026-01 ~ 2026-10 | 문서일 ge / le (날짜 리터럴) |
| 문서번호 · 고객 | 선택 | 비움 | 문서번호 · 고객 포함 |
| 구분 · 상태 | 선택 | 전체 | 구분 eq · 상태 eq |
| 분석 척도 · 표시 행 수 | 척도 필수 | 순매출 · 200행 | 큐브 읽기 후 화면에서 집계 |
| 비교 기준 · 역할별 요약 | 선택 | 끔 · 직접 구성 | 계획 큐브 비교 |
결과 컬럼
| 컬럼 | 의미 | 산출식 |
|---|---|---|
| 문서번호 · 구분 · 상태 | 문서 식별과 진행 단계 | 문서 머리 값 |
| 총액(원) | 수량 × 정가 | Σ 항목 수량 × 정가 |
| 할인 · 리베이트(원) | 할인율 · 리베이트율을 적용한 금액 | 총액 × 율 |
| 순액(원) | 실제 정산 대상 금액 | 총액 − 할인 − 리베이트 |
| 검사 건수 · 차이 건수 | 대사 규칙별 점검 결과 | 규칙 좌우 금액 비교, 허용 오차 이내면 정상 |
| 실적 · 계획 · 차이 · 증감률 | 분석 비교 칸 | 실적 − 계획, 차이 ÷ 계획 |
좁은 화면에서 달라지는 것
폭 1060px 이하에서는 왼쪽 메뉴가 접히고 목록 · 상세가 한 열로 쌓입니다. 390px 폭에서도 단추와 표가 잘리지 않도록 표는 가로로 밀어 볼 수 있게 했습니다. 승인 · 반려처럼 중요한 단추는 그대로 남깁니다.
파일 구성
pricehub/
├─ index.html · Component.js · manifest.json
├─ controller/ 화면별 제어 · 공통 제어
├─ view/ 화면 9종 + 대화상자 16종
├─ model/ 큐브 집계 · 서식 · 내보내기 · 권한 보조
├─ odata/ 서비스 선언 · 서비스 로직 · 샘플 데이터
├─ css/ · i18n/ 스타일 · 번역
└─ media/ 소개 영상 · 포스터 · 목차 트랙
SAP 표준 기능 확장 포인트 — 표준 T-code 와 어떻게 연계되는지
표준으로 되는 것과 안 되는 것
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 처리 · 점검 관점을 더해 확장합니다. 아래는 표준 화면으로 충분한 일과 이 앱이 더하는 관점을 나란히 둔 표입니다.
| 하고 싶은 일 | SAP 표준 | 이 앱이 더하는 것 |
|---|---|---|
| 가격 조건 등록 · 변경 | VK11 · VK12 등 표준 화면이 담당 | 표준 화면에 입력된 조건과 약정에서 생성되는 조건의 연결 · 유효기간 점검 |
| 판매 오더 · 청구 | VA01 · VF01 표준 실행 | 달성 수량 · 충당 금액을 문서 흐름으로 집계하고 대사 |
| 신용 · 리베이트 한도 | FD32 · VKM1 표준 화면 | 약정 요청 시 한도 사용률 · 요청 할인율 점검과 2단계 승인 |
| 전표 조회 · 고객 미결 | FB03 · FBL5N | 미결 정산액을 충당 − 정산으로 다시 계산해 R03 로 비교 |
| 공제 · 입금 정산 | F-28 | 정산 문서와 정산률(정산 ÷ 순매출) 분석 |
| 리베이트 약정 | VBO1 · VBO3 · VBOF (확인 필요) | 약정 → 달성 → 충당 → 정산의 연결 상태와 미충당 잔량 |
T-code 별 연계 지점
| T-code | 이름 | 연계(이어받는 데이터 · 대사 지점 · 오가는 방법 · 표준에 남길 일) |
|---|---|---|
| VK11 | 가격 조건 생성 | 약정 확정 시 만들어지는 가격 조건 레코드(단가 · 할인율 · 리베이트율 · 유효기간)가 원천이며, 표준 조건과 R06 으로 개수를 맞춥니다. 이 앱 → VK11 계열 화면에서 조건 원천 확인, 표준 화면의 조건 → 이 앱 가격 조건 탭. 표준에 남길 일: 조건 유형 · 접근 순서 설정. |
| VA01 · VA41 | 판매 오더 · 계약 | 달성 확인의 수량 원천입니다. 이 앱의 달성 문서 → 해당 오더 화면에서 수량 확인. 표준에 남길 일: 오더 입력 · 납품. |
| VF01 | 청구 문서 생성 | 충당 · 정산 금액의 원천입니다. R02 · R04 로 청구 금액과 맞춥니다. 표준에 남길 일: 청구 실행 · 세금계산서 발행. |
| FD32 · VKM1 | 신용 한도 · 신용 점검(VKM1 은 확인 필요) | 한도 사용률을 약정 요청 전에 점검하고 노출액을 R05 로 맞춥니다. 표준에 남길 일: 한도 변경 승인. |
| FB03 · FBL5N | 전표 조회 · 고객 개별 항목 | 확정 문서의 재무 전표를 열어 금액을 대조하고 고객 미결 금액을 R03 로 맞춥니다. 표준에 남길 일: 법정 · 감사 대응 전표. |
| F-28 | 입금 · 공제 정산 | 정산 문서와 대응하는 표준 업무입니다. 표준에 남길 일: 은행 · 입금 처리. |
| VBO1 · VBO3 · VBOF | 리베이트 약정 (확인 필요) | 약정 · 정산 대응 업무입니다. 표준 거래 이름과 실제 연동 방식은 확인 필요이며 고객사의 리베이트 구성에 따라 달라집니다. |
운영 전환 시 기존 표준 리포트와 화면을 없앨 필요는 없습니다. 이 앱은 같은 데이터를 이어받아 점검 · 승인 · 대사를 더하는 자리이므로 표준 화면은 그대로 두고 함께 씁니다.
분석 지표 정의
| 지표 | 산식 · 판정 기준 | 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| 순매출 | 총매출 − 할인 − 리베이트 | 분석 · 피벗 | 청구 라인 금액 | 큐브 합계 = 원천 합계 검산 |
| 공제율 | (할인 + 리베이트) ÷ 총매출 × 100 | 분석 · 계산 항목 | 청구 · 조건 | 에이전트 임계 7% |
| 달성률 | 순매출 ÷ 계획 × 100 | 계획 대비 · 에이전트 | 큐브 · 계획 큐브 | 임계 90% |
| 한도 사용률 | 리베이트 노출액 ÷ 한도 × 100 | 한도 점검 · 에이전트 | 신용 · 문서 흐름 | 임계 80% |
| 미충당 잔량 | 달성 확인 수량 − 충당 수량 | 대사 R02 · 에이전트 | 달성 · 충당 문서 | 14일 이상 2건 초과 시 보고 |
| 요인 분해 | 물량 · 믹스 · 단가 · 할인·리베이트 · 환율 5요인 합 = 총차이 | 분석 · 요인 분해 | 큐브 · 계획 | 원인은 확인 필요 |
S/4HANA 분석 스택과의 자리
S/4HANA 의 CDS 분석 쿼리와 Fiori 분석 앱, Analysis for Office 는 정해진 보고서와 임의 분석에 강점이 있습니다. 이 앱은 그 위에서 처리 · 승인 · 대사 · 요인 분해를 한 흐름으로 묶는 자리입니다. 표준 분석 앱의 구체적인 이름과 제공 범위는 시스템 버전에 따라 다르므로 이 글에서는 확인 필요로 남깁니다. 운영에서는 같은 CDS 큐브를 표준 분석 도구와 이 앱이 함께 읽을 수 있습니다.
확장 포인트 — 운영에서 실제로 손대는 자리
| 자리 | 정하는 것 | 정하지 않으면 |
|---|---|---|
| 조건 유형 · 부대 조건 | 할인 · 리베이트 조건 종류 코드(확인 필요) | 조건 종류가 정해지지 않으면 할인율과 리베이트율이 섞여 R04 가 맞지 않습니다. |
| 확장 필드 | 처리 상태 · 승인 단계 · 한도 점검 결과를 어디에 저장하나(문서 확장 필드 또는 별도 테이블) | 저장 위치가 없으면 상태가 화면에만 남습니다. |
| BAdI · 커스텀 필드 | 약정 확정 · 취소 시 후속 처리(가격 조건 생성 · 종료)를 끼워 넣는 지점 | 약정과 가격 조건이 따로 놀아 R06 에서 차이가 납니다. |
| 권한 | 영업조직 · 고객 그룹별 조회 · 처리 범위를 권한 객체로 지정 | 전사 합계와 자기 몫의 차이로 남의 숫자가 드러납니다. |
| 대사 허용 오차 | 원 단위 · 수량 소수 자리 허용 오차 | 오차가 크면 차이를 놓치고, 작으면 반올림 차이가 예외로 쏟아집니다. |
CDS 구성 — 원천에서 화면까지
운영 데이터로 갈 때는 아래 순서로 뷰를 나눕니다. 이 절의 뷰 이름은 이 글에서 새로 스케치한 이름이고, 표준 CDS 뷰 이름은 확인하지 못해 원천 테이블(청구 VBRK · VBRP, 고객 KNA1 · KNVV, 자재 MARA · MAKT) 기준으로 썼습니다. 리베이트 약정과 신용 한도 원천은 확인 필요입니다.
뷰 레이어 구성
| 레이어 | 뷰 | 하는 일 | 왜 나누나 |
|---|---|---|---|
| 기준 | 매핑 · 대사 규칙 · 허용 오차 테이블 | 대사 규칙과 허용 오차, 계정 · 조건 종류 매핑을 담습니다 | 규칙을 바꿔도 뷰를 다시 이송하지 않게 하려고 |
| 차원 | 고객 · 자재 · 기간 차원 뷰 | 이름 · 그룹 · 지역 같은 속성을 한곳에서 제공합니다 | 모든 큐브가 같은 속성을 쓰도록 |
| 큐브 | 순매출 큐브 · 문서 흐름 큐브 · 계획 큐브 | 원천 라인을 척도로 집계합니다(합계 · 건수) | 집계를 데이터베이스에서 하려고 |
| 대사 | 규칙별 대사 뷰 | 앞 문서와 뒤 문서의 금액을 규칙마다 맞춥니다 | 차이를 SQL 한 번에 잡으려고 |
| 쿼리 | 분석 쿼리(Consumption) | 행 · 열 축과 계산 항목을 정의합니다 | 화면의 축 구성과 같은 모양을 서버에서도 쓰려고 |
| 권한 | 접근 제어(DCL) | 영업조직 · 고객 그룹 범위를 권한 객체로 제한합니다 | 집계 단계에서 걸어야 합계로 새지 않으므로 |
| 서비스 | Service Definition · Binding | 화면이 부르는 OData 서비스로 게시합니다 | 화면 변경 없이 주소만 교체하려고 |
필드 매핑 — OData 엔티티 → 원천
| 엔티티 | 프로퍼티 | 원천 테이블.필드 또는 산출식 | 비고 |
|---|---|---|---|
| Customer | CustNo · Name · SalesOrg · CustGroup · Region · Channel | KNA1.KUNNR · KNA1.NAME1 · KNVV.VKORG · KNVV.KDGRP · KNA1.REGIO · KNVV.VTWEG | 영업 영역 데이터는 KNVV, 일반 데이터는 KNA1 |
| Customer | RebateLimit · Exposure · OpenRebate | 신용·리베이트 한도 원천 — 확인 필요 | 한도는 신용 관리 설정, 노출액은 문서 흐름 합산값(산출식: 확정 충당 순액 − 확정 정산) |
| Material | MatNo · Name · ProdGroup · Uom · ListPrice | MARA.MATNR · MAKT.MAKTX · MARA.MATKL · MARA.MEINS · KONP.KBETR(정가 조건) | 정가는 가격 조건 레코드에서 유효기간으로 선택 |
| DocHeader(PQ·AG) | DocNo · DocDate · CustNo · SalesOrg · Status | VBAK.VBELN · VBAK.ERDAT · VBAK.KUNNR · VBAK.VKORG · 처리 상태 확장 필드(확인 필요) | 가격 요청·약정은 판매 문서 또는 리베이트 약정 문서로 대응 — 확인 필요 |
| DocHeader(ST·AC) | DocNo · DocDate · Amount | VBRK.VBELN · VBRK.FKDAT · VBRK.NETWR | 정산·충당은 청구·재무 전표와 대응. 전표 연결은 확인 필요 |
| DocItem | ItemNo · MatNo · Qty · UnitPrice · GrossAmt · NetAmt | VBAP.POSNR · VBAP.MATNR · VBAP.KWMENG · VBAP.NETPR · VBRP.NETWR(청구 라인) | GrossAmt = Qty × ListPrice(산출식), NetAmt = GrossAmt − DiscAmt − RebateAmt |
| Condition | CondId · UnitPrice · DiscRate · RebRate · ValidFrom · ValidTo | KONH.KNUMH · KONP.KBETR · KONP.KONWA · KONH.DATAB · KONH.DATBI | 할인·리베이트율은 조건 종류별로 분리 — 조건 종류 코드는 확인 필요 |
| Cube | Period · 차원 9개 · Measure · Value | 집계 뷰(ZSD_I_NetCube) — 원천 라인 합산 | Value = Σ 원천 라인 금액(척도별 산출식). 원천 합계와 같은지 검산 |
| Item(드릴스루) | DocNo · ItemNo · DocType · PostDate | 큐브 칸의 원천 라인(ZSD_I_DocLine) | 칸 금액 = 드릴스루 라인 합계 |
| ReconResult | RuleId · CheckCnt · DiffCnt | 대사 뷰(ZSD_I_Recon) — 규칙별 좌우 합계 비교 | 파생값. 허용 오차는 규칙 테이블 |
| PeriodSum | Period · DocCnt · NetAmt · OpenEnd | 기간 요약 뷰 — 큐브 + 문서 건수 | 파생값 |
① 대사 기준 테이블 — 규칙 · 허용 오차
대사 규칙과 허용 오차는 코드가 아니라 데이터로 둡니다. 규칙을 바꿀 때 뷰를 다시 이송하지 않게 하려는 것이 이 테이블의 이유입니다.
" ───────────────────────────────────────────────
" 테이블 : ZSD_RECON_RULE (대사 기준)
" 역할 : 대사 규칙 R01~R06 의 이름 · 허용 오차 · 사용 여부
" 이렇게 나눈 이유 : 허용 오차를 바꿀 때 뷰 이송을 피하려고
" ───────────────────────────────────────────────
@EndUserText.label : '영업 대사 기준'
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zsd_recon_rule {
key client : abap.clnt not null;
key rule_id : abap.char(3) not null;
rule_name : abap.char(60);
@Semantics.amount.currencyCode : 'zsd_recon_rule.currency'
tolerance : abap.curr(15,2);
currency : abap.cuky;
active : abap.char(1);
}
② 고객 차원 — 이름 · 그룹 · 지역
고객 이름과 그룹, 지역을 한곳에서 제공하는 차원 뷰입니다. 모든 큐브와 대사 뷰가 같은 속성을 쓰게 합니다.
" ───────────────────────────────────────────────
" 뷰 : ZSD_I_CustomerDim
" 역할 : 고객 차원(이름 · 영업조직 · 그룹 · 채널 · 지역)
" 이렇게 나눈 이유 : 속성 정의를 큐브마다 복사하지 않으려고
" ───────────────────────────────────────────────
@AccessControl.authorizationCheck : #NOT_REQUIRED
@EndUserText.label : '영업 고객 차원'
@Analytics.dataCategory : #DIMENSION
@ObjectModel.representativeKey : 'CustNo'
define view entity ZSD_I_CustomerDim
as select from kna1
left outer join knvv on knvv.kunnr = kna1.kunnr
{
key kna1.kunnr as CustNo,
kna1.name1 as Name,
knvv.vkorg as SalesOrg,
knvv.kdgrp as CustGroup,
knvv.vtweg as Channel,
kna1.regio as Region
}
③ 자재 차원 — 제품군과 단위
자재의 제품군 · 단위 · 이름을 제공합니다. 제품군은 분석의 행 축과 일괄 실행 제외 판단에 쓰입니다.
" ───────────────────────────────────────────────
" 뷰 : ZSD_I_MaterialDim
" 역할 : 자재 차원(이름 · 제품군 · 기본 단위)
" ───────────────────────────────────────────────
@AccessControl.authorizationCheck : #NOT_REQUIRED
@EndUserText.label : '영업 자재 차원'
@Analytics.dataCategory : #DIMENSION
@ObjectModel.representativeKey : 'MatNo'
define view entity ZSD_I_MaterialDim
as select from mara
left outer join makt on makt.matnr = mara.matnr
and makt.spras = $session.system_language
{
key mara.matnr as MatNo,
makt.maktx as Name,
mara.matkl as ProdGroup,
mara.meins as Uom
}
④ 순매출 큐브 — 원천 라인을 척도로 집계
청구 라인을 기간 · 영업조직 · 고객 · 자재 차원으로 묶어 순매출 · 수량을 합산합니다. 이 뷰의 합계가 원천 라인 합계와 같은지가 매번 검산하는 항목입니다.
" ───────────────────────────────────────────────
" 뷰 : ZSD_I_NetCube
" 역할 : 순매출 · 수량 큐브(청구 라인 기준)
" 이렇게 나눈 이유 : 집계는 데이터베이스에서, 화면은 읽기만
" ───────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '영업 순매출 큐브'
@Analytics.dataCategory : #CUBE
define view entity ZSD_I_NetCube
as select from vbrp
inner join vbrk on vbrk.vbeln = vbrp.vbeln
association [0..1] to ZSD_I_CustomerDim as _Customer
on $projection.CustNo = _Customer.CustNo
{
key vbrp.vbeln as DocNo,
key vbrp.posnr as ItemNo,
@ObjectModel.foreignKey.association : '_Customer'
vbrk.kunag as CustNo,
vbrk.vkorg as SalesOrg,
vbrp.matnr as MatNo,
left( cast( vbrk.fkdat as abap.char(8) ), 6 ) as Period,
vbrk.waerk as Currency,
@Semantics.amount.currencyCode : 'Currency'
@DefaultAggregation : #SUM
vbrp.netwr as NetAmt,
@DefaultAggregation : #SUM
vbrp.fkimg as Qty,
_Customer
}
⑤ 대사 뷰 — 고객 미결 = 충당 − 정산 (R03)
한 규칙을 뷰 하나로 만들어 좌우 금액과 차이를 계산합니다. 허용 오차는 기준 테이블에서 읽으므로 화면은 차이가 오차를 넘는 행만 예외로 보여 줍니다.
" ───────────────────────────────────────────────
" 뷰 : ZSD_I_ReconR03
" 역할 : 규칙 R03 — 고객 미결 정산액 = 확정 충당 순액 − 확정 정산
" ───────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '대사 R03'
define view entity ZSD_I_ReconR03
as select from ZSD_I_CustomerOpen as c
inner join ZSD_I_AccrualSum as a on a.CustNo = c.CustNo
inner join ZSD_I_SettleSum as s on s.CustNo = c.CustNo
inner join zsd_recon_rule as r on r.rule_id = 'R03'
{
key c.CustNo,
c.OpenRebate as LeftAmt,
a.AccrualNet - s.SettleAmt as RightAmt,
abs( c.OpenRebate - ( a.AccrualNet - s.SettleAmt ) ) as Diff,
case when abs( c.OpenRebate - ( a.AccrualNet - s.SettleAmt ) ) > r.tolerance
then 'X' else ' ' end as IsException
}
⑥ 분석 쿼리 — 제품군 × 월 순매출
화면의 레이아웃(행 · 열 · 척도)과 같은 모양을 서버 쪽에서도 정의합니다. 계산 항목(평균 순단가)은 수식으로 둡니다.
" ───────────────────────────────────────────────
" 뷰 : ZSD_C_NetQuery
" 역할 : 제품군(행) × 월(열) 순매출 · 평균 순단가
" ───────────────────────────────────────────────
@EndUserText.label : '제품군 × 월 순매출'
@Analytics.query : true
define view entity ZSD_C_NetQuery
as select from ZSD_I_NetCube
{
@AnalyticsDetails.query.axis : #ROWS
@Consumption.filter : { selectionType : #SINGLE, mandatory : false }
MatNo,
@AnalyticsDetails.query.axis : #COLUMNS
@Consumption.filter : { selectionType : #INTERVAL, mandatory : true }
Period,
@AnalyticsDetails.query.axis : #COLUMNS
@AnalyticsDetails.query.formula : 'NetAmt / Qty'
cast( 0 as abap.dec(15,2) ) as AvgNetPrice,
@DefaultAggregation : #SUM
NetAmt
}
⑦ 접근 제어 — 영업조직 단위 제한
집계 단계에서 접근을 제한해야 합계로 새지 않습니다. 영업조직을 권한 객체의 값으로 제한합니다.
" ───────────────────────────────────────────────
" DCL : ZSD_I_NetCube
" 역할 : 영업조직(VKORG) 권한이 있는 행만 읽도록 제한
" ───────────────────────────────────────────────
@EndUserText.label : '영업 큐브 접근 제한'
@MappingRole : true
define role ZSD_I_NetCube {
grant select on ZSD_I_NetCube
where ( SalesOrg ) = aspect pfcg_auth( V_VBRK_VKO, VKORG, ACTVT = '03' );
}
⑧ 서비스 정의와 바인딩 — 화면이 부르는 서비스
화면은 이 서비스만 바라봅니다. 처리 펑션(검토 요청 · 승인 · 확정 · 일괄 실행)은 RAP 액션으로 노출해 표준 일괄 처리나 BAPI 와 연결합니다.
" ───────────────────────────────────────────────
" Service Definition : ZSD_UI_PRICEHUB
" 역할 : 화면이 부르는 엔티티 · 액션 목록
" ───────────────────────────────────────────────
@EndUserText.label : '영업 가격·리베이트 서비스'
define service ZSD_UI_PRICEHUB {
expose ZSD_I_CustomerDim as Customer;
expose ZSD_I_MaterialDim as Material;
expose ZSD_I_NetCube as Cube;
expose ZSD_I_ReconR03 as ReconR03;
expose ZSD_C_NetQuery as NetQuery;
}
" 처리 펑션은 행위 정의(Behavior Definition)의 액션으로 선언한다
" action SubmitDocument result [1] $self;
" action ApproveDocument result [1] $self;
" action PostDocument result [1] $self;
" Service Binding(OData V2 - UI) 으로 게시한 뒤 manifest 의 서비스 주소만 바꾼다.
운영 시점에 해야 할 일
개발보다 정하는 일이 많습니다. 아래 여덟 가지는 코딩이 아니라 합의이고, 합의가 끝나야 위 CDS 뷰를 확정할 수 있습니다.
| 해야 할 일 | 무엇을 정하나 | 정하지 않으면 | 누가 |
|---|---|---|---|
| 상태 흐름 · 승인 단계 · 금액 구간 | 초안 → 검토요청 → 승인 → 확정 · 반려 · 취소와 1억원 기준 2단계 승인을 확정합니다 | 기준이 없어 같은 문서가 사람마다 다르게 처리됩니다 | 영업관리 · 경영지원 |
| 직무 분리 · 역할 | 데모 사용자 전환을 없애고 SAP 권한 객체와 PFCG 역할로 처리자 · 승인자 · 관리자를 옮깁니다 | 작성자가 스스로 승인하는 구멍이 남습니다 | 보안 · 권한 |
| 처리 펑션 연결 | 확정 · 취소 · 일괄 실행을 표준 BAPI · RAP 액션 · 표준 일괄 처리와 연결합니다 | 화면 상태와 SAP 전표가 따로 움직입니다 | IT · 영업 담당 |
| 문서 번호 범위 · 연계 키 | 문서 번호 범위와 영역 간 문서 흐름 키(생산 · 원가 · 재무 · 자금 문서)를 정합니다 | 문서 흐름도가 끊겨 추적이 안 됩니다 | IT · 각 영역 담당 |
| 대사 규칙 · 허용 오차 | 6개 규칙과 오차, 표준 T-code 와 맞출 항목을 정합니다 | 반올림 차이가 예외로 쏟아지거나 진짜 차이를 놓칩니다 | 회계 · 영업관리 |
| 환율 유형 · 환산 시점 · 부호 규칙 | 환산 기준 환율과 시점, 할인 · 리베이트의 부호 규칙을 정합니다 | 환율 요인이 흔들려 요인 분해가 어긋납니다 | 자금 · 회계 |
| 원천 확정 · 차원 범위 | 실적 · 계획 · 예측의 원천과 쓸 차원 범위를 정합니다 | 나중에 늘리려면 뷰를 고쳐 다시 이송해야 합니다 | 영업관리 · IT |
| 성능 · 배치 · 이송 | 응답 시간 기준, 일괄 실행 배치 등록, 이송(TR) 순서, 서비스 활성화(/IWFND/MAINT_SERVICE 또는 Binding 게시)와 manifest 의 서비스 주소 교체 | 일부만 이송돼 화면이 빈 값으로 뜹니다 | Basis · IT |
숫자를 믿을 수 있는가 — 검증 결과
위 표의 숫자는 도입 포인트의 사례와 같은 샘플 데이터에서 독립 스크립트로 다시 계산해 앱 결과와 맞춘 값입니다. 차이가 나는 10건은 대사 기능이 실제로 잡아내는지 보여 주려고 의도적으로 넣은 예외입니다. 서비스 로직은 64개 시나리오(상태 전이 · 직무 분리 · 2단계 승인 · 일괄 실행 중복 방지 · 대사 · 요인 분해)를 모두 통과했습니다.
| 대사식 | 검사 건수 | 차이 건수 | 비고 |
|---|---|---|---|
| R01 약정 수량 = 달성 + 미확인 | 759 | 2 | 최대 차이 5 |
| R02 달성 수량 = 충당 + 미충당 | 1,007 | 0 | 0 |
| R03 고객 미결 = 충당 − 정산 | 24 | 2 | 최대 차이 120,000원 |
| R04 총액 − 할인 − 리베이트 = 순액 | 442 | 2 | 최대 차이 2,500원 |
| R05 노출액 = 미결 + 미충당 약정 | 24 | 2 | 최대 차이 330,000원 |
| R06 확정 약정 항목 = 가격 조건 1건 | 759 | 2 | 최대 차이 1 |
| 큐브 합계 = 원천 라인 합계(척도 7종) | 7 | 0 | 0 |
| 요인 분해 합 = 총차이 | 1 | 0 | 0 |
운영 데이터로 갈 때
대용량(전표 · 문서 흐름 수천만 건)에서는 집계를 반드시 데이터베이스에서 합니다. 화면은 큐브 한 번 읽기에 조회 기간 · 영업조직 · 척도를 필수 파라미터로 받아 읽는 양을 제한하고, 드릴스루는 칸 하나의 원천 라인만 가져옵니다. 인덱스는 문서일 · 영업조직 · 고객 · 자재에 두고, 응답 시간 기준은 목록 조회 2초, 큐브 집계 5초, 드릴스루 3초를 출발점으로 잡아 실측으로 조정합니다(기준값은 확인 필요). 데모 데이터로는 문서 2,118건 · 문서 라인 2,363행 · 큐브 4,806행 규모규모이며, 실제 응답 시간은 고객사 데이터로 확인해야 합니다.
자주 묻는 질문
도입을 검토할 때 자주 나오는 질문을 숫자와 산식 · 화면과 처리 · 분석 기능 · 도입과 운영으로 묶었습니다.
숫자와 산식
이 앱의 숫자는 어디서 오나요?
화면의 금액 · 수량은 문서 항목에서 서비스가 계산한 값입니다. 순액은 총액에서 할인과 리베이트를 뺀 값이고, 분석 칸 금액은 원천 문서 라인의 합계입니다. 운영에서는 같은 값을 SAP 원천 테이블에서 CDS 뷰로 읽습니다. 샘플 데이터는 화면 시연용 가상 값입니다.
대사 규칙 6개는 무엇을 맞추나요?
R01 약정 수량 = 달성 + 미확인, R02 달성 수량 = 충당 + 미충당, R03 고객 미결 = 충당 − 정산, R04 총액 − 할인 − 리베이트 = 순액, R05 노출액 = 미결 + 미충당 약정, R06 확정 약정 항목 = 가격 조건 1건입니다. 허용 오차는 수량 규칙 0.001, 금액 규칙 1원, R06 은 0 입니다.
요인 분해의 합이 총차이와 같다는 건 어떻게 보장하나요?
물량 · 믹스 · 단가 · 할인·리베이트 · 환율의 다섯 요인을 서비스가 같은 기준으로 계산하고, 화면은 요인 합에서 총차이를 뺀 검산 줄을 매번 보여 줍니다. 합이 맞지 않으면 이 줄이 0 이 아니게 되어 바로 알 수 있습니다. 요인의 원인(왜 할인이 늘었는지)은 서비스가 판단하지 않으므로 확인 필요로 표시합니다.
외화와 환율은 어떻게 처리하나요?
계획 환율 대비 환율 요인으로 분리해 보여 줍니다. 샘플에서는 가정 환율을 사용하며 운영 환율 유형과 환산 시점은 도입 시 정해야 합니다(운영 시점에 해야 할 일 표 참고).
표시 금액과 SAP 원장 금액이 다를 수 있나요?
부호 규칙과 반올림 기준이 다르면 달라질 수 있습니다. 이 앱은 할인과 리베이트를 빼는 값으로 보여 주고, 표준 화면 값과의 일치는 대사 규칙으로 점검합니다. 표준과 맞출 항목은 도입 시 확정합니다.
대사에서 차이가 나면 틀린 건가요?
차이는 점검이 필요한 항목이라는 뜻입니다. 반올림, 시차(충당은 했지만 정산이 아직), 입력 차이 등 원인이 다양하므로 예외 목록에서 사유를 적고 필요하면 조정 문서로 조치합니다. 최종 판단은 회사와 감사인이 합니다.
화면과 처리
작성자와 승인자가 같으면 어떻게 되나요?
서버가 승인 요청을 거절하고 그 요청도 감사 로그에 남깁니다. 화면에서는 작성자에게 승인 단추가 보이지 않지만, 화면 밖에서 같은 요청을 보내도 같은 규칙이 적용됩니다.
1억원 이상은 왜 두 단계인가요?
큰 금액은 승인자 한 명의 판단에만 맡기지 않도록 두 번째 승인자가 따로 승인하게 한 샘플 규칙입니다. 기준 금액과 단계는 회사 정책에 따라 정해야 하며, 한도를 넘는 약정도 같은 두 단계로 진행됩니다.
일괄 실행에서 같은 문서가 두 번 만들어지지 않나요?
시뮬레이션이 이미 진행 중인 후속 문서가 있는 항목을 제외하고, 실행도 시뮬레이션과 같은 대상으로만 이뤄집니다. 같은 조건으로 다시 실행해도 문서가 중복 생성되지 않습니다.
확정한 문서를 취소할 수 있나요?
승인자가 취소할 수 있고, 취소하면 역처리 문서가 만들어지며 약정이라면 가격 조건 레코드가 종료됩니다. 후속 문서(달성 · 충당 · 정산)가 이미 있으면 서버가 거절하므로 후속 문서를 먼저 정리해야 합니다.
조회자 역할에서는 무엇이 보이나요?
조회와 내려받기만 가능하고 쓰기 단추는 숨겨집니다. 서버도 조회자의 쓰기 요청을 권한 없음으로 거절하고 기록합니다.
엑셀이나 CSV 로 내려받을 수 있나요?
문서 목록과 분석에서 CSV 를, 분석에서는 xlsx 와 PowerPoint 도 내려받을 수 있습니다. 브라우저 안에서 만들어지므로 별도 서버가 필요하지 않습니다.
분석 기능
분석 화면에서 축을 바꾸면 서버를 다시 부르나요?
부르지 않습니다. 「조회」 한 번으로 큐브를 읽은 뒤 행 · 열 축을 바꾸는 일은 화면 안에서 다시 집계합니다. 합계는 어떤 축이든 같습니다.
드릴스루에서 라인 합계가 칸 금액과 다르면요?
칸 금액과 라인 합계를 같은 화면에 나란히 보여 주고, 다르면 그 차이를 표시합니다. 샘플 데이터에서는 7개 척도 모두 큐브 합계와 원천 라인 합계의 차이가 0입니다.
계획 대비 차이의 “계획”은 어디서 오나요?
계획 큐브(같은 차원 구조)에서 읽습니다. 운영에서는 계획 원천(어느 버전 · 범주)을 정해야 하며 이는 도입 시 가장 먼저 합의할 항목입니다.
AI 분석은 숫자를 만들어 내지 않나요?
만들지 않습니다. 금액과 비율은 서비스가 계산한 근거 표의 값 그대로이고, 모델은 그 값을 읽어 설명만 덧붙입니다. 모델을 쓰지 않아도 같은 근거로 규칙 해설이 나옵니다. 원인에 대한 단정은 하지 않습니다.
에이전트는 무엇을 감시하나요?
하루에 한 번 규칙 5개를 점검합니다 — 제품군 순매출 계획 미달(90% 미만), 리베이트 한도 임박 고객(80% 초과), 장기 미충당 달성, 고객 그룹 공제율 상승(7% 초과), 승인 대기 장기 문서. 걸린 항목은 받을 역할별 보고로 올라옵니다. 임계값은 운영에서 조정합니다.
레이아웃을 저장해 두면 무엇이 남나요?
행 · 열 축, 척도, 필터, 기간, 비교 기준이 저장되고 자동 조회 여부도 정할 수 있습니다. 저장한 레이아웃은 목록에서 불러오거나 관리 창에서 이름을 바꾸고 지웁니다.
도입과 운영
SAP 표준 화면을 없애야 하나요?
아닙니다. 표준 실행은 SAP 표준 T-code 가 담당하고, 이 앱은 처리 · 승인 · 대사 · 분석 관점을 더해 확장합니다. 법정 · 감사 대응은 표준 화면에 그대로 둡니다.
운영 시스템과 연결하려면 무엇이 필요한가요?
SAP 원천을 CDS 뷰로 열고 OData 서비스를 게시한 뒤 앱의 서비스 주소를 바꿉니다. 처리 펑션은 표준 BAPI 나 RAP 액션과 연결합니다. 정해야 할 항목은 운영 시점에 해야 할 일 표에 정리했고, 소요는 고객사의 조건 유형 · 권한 설계 범위에 따라 달라 확인 필요입니다.
권한과 보안은 어떻게 되나요?
샘플은 사용자 전환으로 역할을 흉내 내지만 운영에서는 SAP 권한 객체와 역할로 바뀝니다. 영업조직 단위 제한은 집계 단계(CDS 접근 제어)에 걸어야 합계로 새지 않습니다. 모든 쓰기와 거절된 요청은 감사 로그에 남습니다.
대용량 데이터에서도 쓸 수 있나요?
집계를 데이터베이스에서 하고 조회 기간 · 영업조직을 필수 조건으로 받아 읽는 양을 제한합니다. 구체적인 응답 시간은 고객사 데이터 규모에 따라 달라 실측이 필요합니다(확인 필요).
조건 유형이나 매핑이 바뀌면 어떻게 하나요?
매핑과 대사 규칙, 허용 오차는 기준 테이블로 분리돼 있어 데이터만 고치면 됩니다. 뷰 구조 자체가 바뀌는 변경(새 차원 추가)은 이송이 필요합니다.
언제 적용하는 것이 좋은가요?
적용 시기와 범위는 회사의 가격 · 리베이트 정책과 정산 주기에 따라 정합니다. 법령이나 기준서에서 정한 적용 시기는 이 글에서 확인한 사실이 없어 확인 필요로 남깁니다. 월 정산을 시작하기 전에 파일럿을 돌려 보는 방식을 권합니다.
이 앱의 결과를 그대로 신고나 공시에 써도 되나요?
이 앱은 점검 도구이며 최종 판단은 회사와 감사인이 합니다. 세무 신고는 회사와 세무 대리인 · 관세사가 확인합니다. 법정 보고와 공시 숫자는 표준 거래에서 만들어야 합니다.
도입하면 업무가 얼마나 줄어드나요?
줄어드는 시간을 수치로 약속하지 않습니다. 월말 대상 목록 작성, 중복 확인, 대사 엑셀 맞춤처럼 사람이 이어 붙이던 단계가 화면 안으로 들어오는 것이 변화이며, 효과는 고객사의 거래 규모에 따라 달라 도입 전 파일럿에서 측정하길 권합니다.