솔루션 홈
가격조건 현황

SAP 매출 가격조건 현황 — 조건 레코드가 언제 끝나는지, 청구 전에 확인한다

VK13으로 한 건씩 들여다보는 대신, 조건유형·판매조직·고객·자재로 걸러낸 목록에서 어떤 조건이 곧 끝나는지 한눈에 확인하는 화면입니다.

영업 담당이 "이 고객 이 자재는 지금 얼마에 나가야 하나"를 물으면, 답은 결국 조건 레코드 하나로 좁혀집니다. 문제는 그 레코드가 언제까지 유효한지, 다음 달이면 끊기는 건 아닌지를 알려면 VK13을 조건유형별로 하나씩 열어봐야 한다는 점입니다.

가격이 갑자기 바뀌는 사고는 대개 여기서 시작합니다. 조건 레코드의 유효기간이 끝났는데 아무도 갱신하지 않아, 다음 접근순서의 조건이 대신 적용되거나 가격결정 자체가 비어버리는 경우입니다. SAP 표준 가격결정(조건 기법) 데이터 구조를 그대로 이어받아, 조건유형·판매조직·고객·자재로 조건 레코드를 걸러보고 조회 기준일 대비 유효기간이 얼마나 남았는지 재계산해 보여주도록 OpenUI5 화면으로 확장한 것이 ZLSD0010입니다. 실제 구동 화면 4종을 함께 공개합니다.

SAP 표준 기능을 그대로 이어받은 부분

  • 조건 레코드 원천 — 헤더(KONH)와 품목(KONP) 구조를 그대로 사용
  • 수량 구간(Scale) — KONM 스케일 테이블의 구간별 단가 구조
  • 접근순서 — 조건유형별 접근순서 테이블(A002·A004·A006·A016·A304·A305·A906)
  • 텍스트 — 조건유형(T685T) · 고객명(KNA1) · 자재명(MAKT)
항목내용
업무 영역영업(SD) · 가격결정 · 조건 레코드 조회
Namespacezui5.pricecond
셸 구조조회조건 영역(우측 조회) + 조건 레코드 목록, 기본정보·수량구간 상세 Dialog
화면 수조회 화면 1개 + 상세 다이얼로그(탭 2개)
대응 T-codeVK13(조건 레코드 표시), 보조: V/LD·V/06(가격결정절차), VK12(조건 변경)
성격조회·모니터링형 — 조건 레코드 생성·변경은 표준 트랜잭션이 담당
UI 테마sap_horizon 단일 적용

실제 화면 4종 둘러보기

조건유형·판매조직·고객·자재·상태·조회 기준일을 넣고 조회하면 조건 레코드가 목록으로 뜹니다 → 상태(임박·만료)로 좁혀보고 → 레코드를 골라 기본정보와 수량 구간을 확인합니다.

아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.

Main.view.xml
조건 레코드 목록 — 전체 46건
조건 레코드 목록 — 조회조건 오른쪽 끝에 조회·초기화 버튼이 있고, 상단 경고 스트립에 만료·임박 건수가 바로 뜹니다. 조건레코드·조건유형·판매조직·유통채널·고객·자재·조건금액·단계수가 한 줄에 담깁니다.
상태 필터
상태 = 임박(D-7 이내) 필터 결과 8건
임박 건만 걸러보기 — 상태를 임박(D-7 이내)으로 두고 조회하면 곧 끝나는 조건만 남습니다. 담당자가 매일 아침 이 화면만 열어도 오늘 처리해야 할 조건이 몇 건인지 바로 보입니다.
상세 · 기본정보
상세 다이얼로그 — 기본정보 탭
상세 · 기본정보 — 레코드를 클릭하면 열리는 다이얼로그입니다. 접근순서·가격결정절차·판매조직·고객·자재·상태·유효기간·조건금액·변경이력을 한 화면에서 확인합니다.
상세 · 수량 구간
상세 다이얼로그 — 수량 구간(Scale) 탭
상세 · 수량 구간(Scale) — 기본가격(PR00) 조건의 구간별 단가입니다. 기준수량은 항상 오름차순, 단가는 구간이 커질수록 낮아지는 체증할인 구조가 그대로 보입니다.

조작 방법

  1. 조건유형·판매조직·상태는 드롭다운에서 고르고, 고객·자재는 코드나 이름 일부만 입력해도 부분일치로 걸립니다.
  2. 조회 기준일 기본값은 오늘입니다. 날짜를 바꾸면 그 시점 기준으로 상태가 다시 계산됩니다.
  3. 조회조건 입력필드에서 Enter 를 눌러도 바로 재조회됩니다. 조회·초기화 버튼은 조회조건 영역 오른쪽 끝에 있습니다.
  4. 목록에서 행을 클릭하면 상세 다이얼로그가 열립니다. 기본정보·수량구간(Scale) 두 탭을 오갑니다.
  5. 수량 구간이 없는 조건(고객할인·운임 등 단일 단가)은 "수량 구간이 설정되지 않은 조건입니다"로 표시됩니다.
  6. 목록은 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.htmlOpenUI5 부트스트랩 — 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.jslocaldata JSON 읽기(Promise)
model/formatter.js금액 · 상태 · D-day · 고객/자재 표시 포맷
i18n/i18n_ko.propertiesko 로케일 리소스
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이 표준으로 담당합니다. 이 화면은 그 결과 데이터를 유효기간 임박 여부와 수량 구간까지 한 화면에서 모아 보는 조회·모니터링 관점으로 확장한 것입니다.

가격조건 유효기간 점검, 지금 쓰는 SAP 위에서 확장해 보세요

VK13을 조건유형별로 하나씩 여는 대신, 임박·만료를 한 화면에서 먼저 걸러보면 가격 갱신을 놓치는 사고를 줄일 수 있습니다. 현재 SAP 환경 기준으로 어떻게 적용되는지 함께 확인해 드립니다.

가격조건조건레코드VK13가격결정절차수량구간OpenUI5