SAP 매출 가격조건 현황 — 조건 레코드가 언제 끝나는지, 청구 전에 확인한다
VK13으로 한 건씩 들여다보는 대신, 조건유형·판매조직·고객·자재로 걸러낸 목록에서 어떤 조건이 곧 끝나는지 한눈에 확인하는 화면입니다.
영업 담당이 "이 고객 이 자재는 지금 얼마에 나가야 하나"를 물으면, 답은 결국 조건 레코드 하나로 좁혀집니다. 문제는 그 레코드가 언제까지 유효한지, 다음 달이면 끊기는 건 아닌지를 알려면 VK13을 조건유형별로 하나씩 열어봐야 한다는 점입니다.
가격이 갑자기 바뀌는 사고는 대개 여기서 시작합니다. 조건 레코드의 유효기간이 끝났는데 아무도 갱신하지 않아, 다음 접근순서의 조건이 대신 적용되거나 가격결정 자체가 비어버리는 경우입니다. SAP 표준 가격결정(조건 기법) 데이터 구조를 그대로 이어받아, 조건유형·판매조직·고객·자재로 조건 레코드를 걸러보고 조회 기준일 대비 유효기간이 얼마나 남았는지 재계산해 보여주도록 OpenUI5 화면으로 확장한 것이 ZLSD0010입니다. 실제 구동 화면 4종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 조건 레코드 원천 — 헤더(
KONH)와 품목(KONP) 구조를 그대로 사용 - 수량 구간(Scale) —
KONM스케일 테이블의 구간별 단가 구조 - 접근순서 — 조건유형별 접근순서 테이블(
A002·A004·A006·A016·A304·A305·A906) - 텍스트 — 조건유형(
T685T) · 고객명(KNA1) · 자재명(MAKT)
| 항목 | 내용 |
|---|---|
| 업무 영역 | 영업(SD) · 가격결정 · 조건 레코드 조회 |
| Namespace | zui5.pricecond |
| 셸 구조 | 조회조건 영역(우측 조회) + 조건 레코드 목록, 기본정보·수량구간 상세 Dialog |
| 화면 수 | 조회 화면 1개 + 상세 다이얼로그(탭 2개) |
| 대응 T-code | VK13(조건 레코드 표시), 보조: V/LD·V/06(가격결정절차), VK12(조건 변경) |
| 성격 | 조회·모니터링형 — 조건 레코드 생성·변경은 표준 트랜잭션이 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 4종 둘러보기
조건유형·판매조직·고객·자재·상태·조회 기준일을 넣고 조회하면 조건 레코드가 목록으로 뜹니다 → 상태(임박·만료)로 좁혀보고 → 레코드를 골라 기본정보와 수량 구간을 확인합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 조건유형·판매조직·상태는 드롭다운에서 고르고, 고객·자재는 코드나 이름 일부만 입력해도 부분일치로 걸립니다.
- 조회 기준일 기본값은 오늘입니다. 날짜를 바꾸면 그 시점 기준으로 상태가 다시 계산됩니다.
- 조회조건 입력필드에서 Enter 를 눌러도 바로 재조회됩니다. 조회·초기화 버튼은 조회조건 영역 오른쪽 끝에 있습니다.
- 목록에서 행을 클릭하면 상세 다이얼로그가 열립니다. 기본정보·수량구간(Scale) 두 탭을 오갑니다.
- 수량 구간이 없는 조건(고객할인·운임 등 단일 단가)은 "수량 구간이 설정되지 않은 조건입니다"로 표시됩니다.
- 목록은 CSV 다운로드로 내려받습니다. 현재 필터링된 결과만 담기며, UTF-8 BOM 이 붙어 엑셀에서 한글이 깨지지 않습니다.
유효기간 임박 판정 로직
이 화면의 핵심은 목록이 아니라 조회 기준일 대비 재계산입니다. 서버가 내려준 상태값을 그대로 띄우지 않고, 조회 기준일과 각 레코드의 유효개시일·유효종료일을 비교해 화면에서 매번 다시 분류합니다.
| 상태 | 판정 조건 |
|---|---|
| 선등록 | 조회 기준일이 유효개시일보다 이름 (아직 개시 전) |
| 만료 | 유효종료일이 조회 기준일보다 이전 |
| 임박 | 유효종료일까지 남은 일수가 7일 이내 |
| 유효 | 그 외 |
조회 기준일을 바꿔볼 수 있게 만든 이유
"다음 결산 마감일 기준으로 뭐가 임박해 있나"처럼 미래 시점을 가정해 미리 점검하고 싶을 때가 많습니다. 서버 판정을 그대로 신뢰하는 대신 화면에서 재현 가능하게 만들면, 날짜 하나만 바꿔 그 시나리오를 바로 확인할 수 있습니다.
가격결정 절차 반영 4단계
SAP가 주문 한 건에 가격을 매길 때 내부적으로 거치는 절차를, 조회 화면이 참고자료로 보여주는 4단계로 정리했습니다.
| 단계 | 내용 |
|---|---|
| ① 절차 결정 | 판매문서 유형·판매조직 조합으로 가격결정절차(본 사례: RVAA01)가 정해집니다. |
| ② 접근순서 탐색 | 절차에 속한 조건유형마다 지정된 접근순서(예: A305 고객/자재)를 위에서부터 확인합니다. |
| ③ 조건 레코드 매칭 | 접근순서의 필드 조합으로 유효기간 내의 조건 레코드를 찾습니다. 이 화면이 조회하는 대상입니다. |
| ④ 수량 구간 적용 | 매칭된 레코드에 수량 구간이 있으면, 실제 주문수량이 속하는 구간의 단가가 최종 적용됩니다. |
이 화면은 ③·④단계에 해당하는 조건 레코드와 구간 단가를 조회·모니터링하는 용도이며, 가격결정 엔진 자체를 재현하지는 않습니다.
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 조건유형 | 선택 | PR00/K004/K005/K007/K020/KF00/K148 등, 데이터에 존재하는 값만 노출 |
| 판매조직 | 선택 | 1000/2000/3000 |
| 고객 | 선택 | 고객코드 또는 고객명 부분일치 |
| 자재 | 선택 | 자재코드 또는 자재명 부분일치 |
| 상태 | 선택 | 전체/만료/임박/유효/선등록 |
| 조회 기준일 | 선택 | 기본값 오늘. 상태 재계산의 기준 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
| 조건레코드 | 조건 레코드 번호 |
| 조건유형 | 코드 + 명칭 |
| 판매조직 · 유통채널 | 코드 + 명칭 |
| 고객 · 자재 | 해당 없는 조건(자재 무관 등)은 괄호로 표시 |
| 조건금액 | 통화 조건은 천단위 구분, % 조건은 % 단위 그대로 |
| 단계수 | 수량 구간(Scale) 개수. 0이면 단일 단가 |
| 유효개시일 · 유효종료일 | YYYY-MM-DD |
| 상태 | 만료/임박/유효/선등록 + D-day (예: D-5, D+39) |
| 변경자 · 변경일 | 최종 변경 이력 |
SAP 표준 기능 매핑
이 화면이 조회하는 데이터와 판정 기준은 SAP 표준 가격결정 구조(조건 기법)를 그대로 이어받습니다. 표준 실행은 VK11·VK12·VK13(조건 레코드 생성·변경·표시)과 V/06(가격결정절차 정의)이 담당하고, 이 화면은 그 결과를 조회·모니터링 관점에서 확장한 것입니다 — 실행 자체를 대체하지 않습니다.
| 표준 기능 | T-code | 본 화면과의 관계 |
|---|---|---|
| 조건 레코드 생성/변경/표시 | VK11 · VK12 · VK13 | 본 화면이 조회하는 원천 데이터. 조건 변경은 VK12에서 수행 |
| 가격결정절차 정의 | V/06 · V/08 | 가격결정절차·접근순서 텍스트 표시에 참고 |
| 조건유형 마스터 | V/06 하위 OV/06 등 | 조건유형 코드/명칭(T685T) 표시에 사용 |
참고 CDS 뷰
운영 서비스로 연결할 때는 조건 헤더·품목·텍스트를 결합한 뷰로 서빙하는 구성을 제안합니다.
@AbapCatalog.sqlViewName: 'ZPRICECONDV'
@EndUserText.label: '매출 가격조건 조회용 (Z)'
define view Z_C_SalesPriceCondition
as select from konh as Header
inner join konp as Item on Item.knumh = Header.knumh
left outer join t685t as Text on Text.kschl = Header.kschl
and Text.spras = 'K'
{
key Header.knumh,
Header.kschl,
Text.vtext as ConditionTypeName,
Header.datab,
Header.datbi,
Item.kbetr,
Item.konwa,
Item.kpein,
Item.kstbs,
// 수량 구간(KONM)은 KSTBS = 'X' 인 레코드에서 knumh 로 연장 조회
case when Header.datbi < $session.system_date then 'EXPIRED'
when Header.datbi - $session.system_date <= 7 then 'IMMINENT'
else 'VALID' end as StatusDerived
}
매핑 이해를 돕기 위한 참고용 설계입니다. 접근순서 테이블은 조건유형마다 다르므로(A002·A004·A006·A016·A304·A305·A906), 실제 도입 시에는 대상 조건유형에 맞는 접근순서를 개별적으로 결합합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.f.DynamicPage — 조회조건 헤더 + 결과 그리드 |
| 조회조건 | sap.m.FlexBox(wrap) — 좁은 화면에서 버튼이 overflow 메뉴에 숨는 것을 피하려 OverflowToolbar 대신 사용, 우측 끝에 조회 버튼 고정 |
| 결과 그리드 | sap.ui.table.Table — 컬럼 12개, selectionBehavior=RowOnly로 행 클릭 즉시 상세 진입 |
| 상세 | sap.m.Dialog + IconTabBar(기본정보 · 수량구간) + sap.m.Table |
| 모델 | ModelMock — localdata JSON 을 fetch + Promise 로 제공(OData 미구현) |
| 포맷 | 금액·상태·D-day·고객/자재 표시 포맷터 |
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon · lodash · moment |
Component.js | 디바이스 모델 초기화 |
manifest.json | 앱 디스크립터 — 앱 ID(zui5.pricecond) · ko 로케일 |
view/Main.view.xml · view/DetailDialog.fragment.xml | 조회조건 · 결과 그리드 · 상세 다이얼로그 |
controller/Main.controller.js | 유효기간 재계산 · 조회 · 상세 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise) |
model/formatter.js | 금액 · 상태 · D-day · 고객/자재 표시 포맷 |
i18n/i18n_ko.properties | ko 로케일 리소스 |
localdata/pricecond.json | 조건 레코드 46건 검증용 데이터 |
운영 전환 시에는 ModelMock 내부만 실제 서비스 호출로 바꾸면 화면과 판정 로직은 그대로 씁니다.
검증 결과
화면 구성에 쓴 데이터는 조건 레코드 46건(만료 6건 · 임박 8건 · 유효 32건)이며, 유효기간·수량 구간 정합성까지 전수 검증했습니다.
| 검증 항목 | 결과 |
|---|---|
| 유효개시일 < 유효종료일 (46건 전수) | 통과 |
| 조회 기준일 기준 상태 재계산 = 사전 산정값 (46건 전수) | 통과 |
| 수량 구간 기준수량은 항상 오름차순 | 통과 |
| 수량 구간 단가는 구간이 클수록 낮아지는 체증할인 구조 | 통과 |
| XML/JSON 전체 파싱 · i18n 키 누락 0건 · 이벤트 핸들러 미구현 0건 | 통과 |
| 조회 버튼이 조회조건 영역 오른쪽 끝에 위치 | 통과 |
| Enter 키 입력으로 즉시 재조회 | 통과 |
| 적용 테마 sap_horizon 확인 | 통과 |
| 화면 렌더링 — 실브라우저에서 조회 → 필터 → 상세 실동작 후 캡처 | 4/4 |
고객·자재·금액은 모두 검증용 데이터입니다.
자주 묻는 질문
실제 VK13 값과 다를 수 있나요?
이 화면은 검증용 데이터로 구성한 조회 UI 사례이며, 실제 조건 레코드는 SAP 시스템에서 VK13으로 조회해야 합니다. 화면 구조와 판정 로직을 확인하는 용도로 봐 주세요.
조회 기준일을 바꾸면 만료·임박 건수가 왜 달라지나요?
상태는 저장된 값을 그대로 표시하지 않고, 조회 기준일과 유효개시일·유효종료일을 비교해 화면에서 즉시 재계산하기 때문입니다. 미래 날짜를 넣으면 그 시점 기준으로 임박·만료가 몇 건인지 미리 볼 수 있습니다.
수량 구간(Scale)이 없는 조건도 있나요?
있습니다. 고객할인·운임처럼 고객이나 배송조건 단위로 매기는 조건은 대개 단일 단가이고, 자재 단위로 매기는 기본가격·자재할인 조건에 주로 수량 구간이 붙습니다. 구간이 없는 조건은 상세에서 단일 단가로 표시됩니다.
SAP 표준 기능과 어떻게 이어지나요?
조건 레코드 생성·변경은 VK11·VK12가, 조회는 VK13이 표준으로 담당합니다. 이 화면은 그 결과 데이터를 유효기간 임박 여부와 수량 구간까지 한 화면에서 모아 보는 조회·모니터링 관점으로 확장한 것입니다.