SAP 구매정보레코드 가격이력 현황 — 가격은 언제 마지막으로 확인했나요
정보레코드 가격, 방치하면 유효기간이 끝난 줄도 모릅니다. 현재가와 이력, 최근 발주단가 괴리를 한 화면에서 봅니다.
구매팀이 신규 발주단가를 협상하거나 시스템이 자동으로 단가를 제안할 때, 기준이 되는 것은 정보레코드(Purchase Info Record)에 등록된 조건가격입니다. 그런데 정보레코드는 한 번 등록되면 오래 방치되기 쉽습니다. 유효기간이 지난 채로 남아 있거나, 실제 발주단가와 이미 크게 벌어진 상태로 몇 달째 갱신되지 않는 경우도 드물지 않습니다. 문제는 ME13으로 한 건씩 열어보기 전까지는 이 괴리를 알아채기 어렵다는 점입니다.
SAP 표준 정보레코드 데이터 구조를 그대로 이어받아 정보레코드별 현재 조건가격과 과거 가격 변경 이력, 최근 실제 발주단가와의 변동률, 유효기간 임박 여부를 한 화면에서 조회하도록 OpenUI5 화면으로 확장했습니다. 발주 잔량·입고 진행률을 다루는 기존 공개 화면(미입고현황)이 발주 이후 단계를 본다면, 이 화면은 그보다 앞선 가격 마스터 자체의 최신성과 유효성을 스크리닝한다는 점이 다릅니다. 실제 구동 화면 5종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 정보레코드 — 일반 데이터(
EINA)와 구매조직 데이터(EINE) 구조를 그대로 사용 - 가격 조건 — 조건레코드(
A017유사) 유효기간·순단가 구조 - 최근 발주 비교 — 발주 아이템(
EKPO) 순단가 - 구매처·자재 마스터 —
LFA1·MAKT
| 항목 | 내용 |
|---|---|
| 업무 영역 | 구매(MM) · 정보레코드 가격 관리 |
| Namespace | zui5.inforecord |
| 셸 구조 | 조회조건 영역(우측 조회) + 정보레코드 결과 테이블, 상세 Dialog |
| 화면 수 | 조회 화면 1개 + 상세보기 Dialog |
| 대응 T-code | ME13(정보레코드 표시) · ME1P(자재별 리스트) · ME11/ME12(신규/변경) |
| 성격 | 조회·스크리닝형 — 정보레코드 등록·변경은 표준 트랜잭션이 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 5종 둘러보기
구매조직·자재그룹·구매처를 조회조건에 넣고 조회하면 정보레코드별 현재가와 유효기간이 만료·만료임박 우선으로 정렬돼 뜹니다 → 상세보기로 가격 변경 이력과 산출근거를 확인합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 구매조직·자재그룹 드롭다운, 구매처/자재 텍스트, 유효종료일(~까지), 상태 중 필요한 조건을 입력합니다(모두 선택 사항).
- [조회] 버튼을 누르거나 입력 필드에서 Enter 키를 누르면 바로 재조회됩니다.
- 결과는 상태 우선순위(만료 → 만료임박 → 삭제표시 → 정상)로 정렬되어, 가장 급한 건이 위에 옵니다.
- 행의 상세 아이콘을 누르면 가격 변경 이력과 산출근거를 확인할 수 있습니다.
- [CSV 다운로드]로 현재 조회 결과를 UTF-8 BOM CSV 로 내려받습니다.
정보레코드 상태 판정 로직
이 화면의 핵심은 "지금 손봐야 할 정보레코드"를 자동으로 골라내는 것입니다. 판정은 삭제표시 여부와 유효기간 잔여일수, 두 축으로 이뤄집니다.
| 상태 | 판정 기준 | 배지 |
|---|---|---|
| 만료 | 삭제표시가 아니고, 유효종료일이 제한없음이 아니며 오늘보다 이전 | 만료 |
| 만료임박 | 삭제표시가 아니고, 유효종료일까지 잔여일수가 0~30일 이내 | 만료임박 |
| 삭제표시 | 정보레코드에 삭제표시(LOEKZ=X)가 붙어 신규발주 제안에서 제외된 상태 | 삭제표시 |
| 정상 | 위 조건에 해당하지 않음 (유효기간 여유 있음 또는 제한없음) | 정상 |
임계치는 화면 상수로 관리
만료임박 기준(30일)은 화면 컨트롤러 상단의 상수로 관리됩니다. 구매 조직마다 가격 재협상 리드타임이 다르므로, 실제 도입 시에는 이 값을 조직 기준에 맞춰 조정하는 것을 전제로 합니다.
가격이력 조회 처리 4단계
화면이 뜨는 순간부터 상세보기를 열기까지, 데이터는 아래 네 단계를 거쳐 조립됩니다.
| 단계 | 내용 |
|---|---|
| ① 마스터 적재 | 정보레코드 현재 조건(최신 유효 레코드)과 가격 변경 이력을 최초 조회 시 한 번만 불러와 캐시 |
| ② 조건 필터링 | 구매조직·자재그룹·구매처/자재 텍스트·유효종료일·상태로 필터링하면서 상태·잔여일수·변동률을 즉시 계산 |
| ③ 정렬 | 만료 → 만료임박 → 삭제표시 → 정상 순으로 1차 정렬, 동일 상태 내에서는 정보레코드번호 순으로 2차 정렬 |
| ④ 상세 조립 | 상세보기 클릭 시 같은 정보레코드번호의 이력을 적용시작일 순으로 모아 이력 표와 산출근거표를 구성 |
조회조건
| 필드 | 설명 |
|---|---|
| 구매조직 | Ekorg 코드 선택 (전체 포함) |
| 자재그룹 | 자재그룹 코드 선택 (전체 포함) |
| 구매처(코드/명) | 구매처코드 또는 구매처명 부분일치 |
| 자재(코드/명) | 자재코드 또는 자재명 부분일치 |
| 유효종료일(~까지) | 지정일 이전에 유효기간이 끝나는(또는 이미 끝난) 레코드만 필터. 제한없음 레코드는 이 조건을 걸면 자동 제외 |
| 상태 | 정상/만료임박/만료/삭제표시 선택 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
| 정보레코드번호 | 정보레코드 고유번호 |
| 구매처코드 · 구매처명 | 텍스트 검색 대상 |
| 자재코드 · 자재명 | 텍스트 검색 대상 |
| 구매조직 | 코드와 텍스트를 함께 표시 |
| 정보레코드가 | 순단가/가격단위/통화, 우측정렬 |
| 기준가격일 | YYYY.MM.DD 형식 |
| 유효종료일 | YYYY.MM.DD 형식, 제한없음은 텍스트로 표시 |
| 최근발주단가 | 우측정렬, 천단위 콤마 |
| 변동률 | (최근발주단가−정보레코드가)/정보레코드가×100, 절대값 5%↑ 주의·10%↑ 위험 강조 |
| 상태 | 아이콘·색상으로 강조된 배지 |
SAP 표준 기능 매핑
표준 실행은 T-code 가 그대로 담당하고, 이 화면은 조회·검증 관점을 더해 확장합니다.
| 단계 | SAP 표준 화면 | 이 앱이 더하는 것 |
|---|---|---|
| 정보레코드 조회 | ME13 | 여러 정보레코드를 한 화면에서 가로로 비교, 상세는 이력까지 요약 |
| 자재별 리스트 | ME1P | 이 화면의 자재 텍스트 필터·전체 리스트 조회에 대응 |
| 정보레코드 신규/변경 | ME11 / ME12 | 정비가 필요한 레코드를 골라내는 스크리닝 용도로 연계, 실제 변경은 표준 트랜잭션에서 수행 |
도입 시 확인이 필요한 부분
만료임박 임계치(30일)와 변동률 경고 기준(5%/10%)은 구매 조직의 가격 재협상 정책에 맞춰 조정합니다. 정보레코드가 플랜트 특화(EINE-WERKS)로 관리되는 조직이라면 플랜트별 조건 우선순위 규칙도 함께 정의해야 합니다.
참고 CDS 뷰
운영 서비스로 연결할 때를 가정한 참고용 설계입니다(이 화면은 OData 를 구현하지 않고 mock JSON 으로 동작합니다).
@AbapCatalog.sqlViewName: 'ZLMMINFORECORD'
@EndUserText.label: '정보레코드 가격이력 및 최근발주 비교 (Z)'
define view Z_C_MM_INFORECORD_PRICEHIST
as select from eina as a
inner join eine as b on a.infnr = b.infnr
left outer join lfa1 as v on a.lifnr = v.lifnr
left outer join makt as t on a.matnr = t.matnr and t.spras = 'K'
{
key a.infnr as Infnr,
a.matnr as Material,
a.lifnr as Vendor,
v.name1 as VendorName,
t.maktx as MaterialName,
b.ekorg as PurchOrg,
b.werks as Plant,
b.netpr as Netpr,
b.peinh as Peinh,
b.preisdat as Preisdat,
a.loekz as DeletionFlag
// 유효기간(Datbi)·이력은 조건레코드(A017 유사) 테이블에서 별도 조인
// 최근 발주단가는 EKPO 를 정보레코드 참조 기준으로 최신 1건 서브쿼리
}
매핑 이해를 돕기 위한 참고용 설계이며, 실제 도입 시에는 조건테이블 구성(가격결정 스키마·액세스 시퀀스)에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.f.DynamicPage — 조회조건(Header) + 결과 테이블(Content) |
| 조회조건 | sap.m.Select · sap.m.Input · sap.m.DatePicker — 우측 끝에 조회 버튼, Enter 키 조회 지원 |
| 결과 테이블 | sap.ui.table.Table — 컬럼 11개, 상태별 행 하이라이트(RowSettings) |
| 상세보기 | sap.m.Dialog — 요약 카드(ObjectNumber/ObjectStatus) + 이력·산출근거 테이블 |
| 데이터 | OData 미구현 — ModelMock 이 localdata/*.json 을 fetch, Promise 로 제공 |
| 다운로드 | CSV(UTF-8 BOM) — BaseController.downloadCsv 공통 함수 |
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon · lodash · moment |
Component.js | 디바이스 모델 초기화, 라우터 시작 |
manifest.json | 앱 디스크립터 — 앱 ID(zui5.inforecord) · ko 로케일 |
view/Main.view.xml · fragments/* | 조회조건 · 결과 테이블 · 상세 Dialog |
controller/Main.controller.js | 조회 · 상태 판정 · 상세보기 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise) |
js/formatter.js | 금액 · 일자 · 상태 배지 포맷 |
i18n/i18n_ko.properties | ko 로케일 리소스 |
localdata/infrecords.json · history.json 등 | 정보레코드 마스터 · 가격 변경 이력 검증용 데이터 |
검증 결과
화면 구성에 쓴 데이터는 정보레코드 42건 · 가격 변경 이력 125건이며, 상태 분포는 정상 29건 · 만료임박 4건 · 만료 7건 · 삭제표시 2건입니다.
| 검증 항목 | 결과 |
|---|---|
| 이력 마지막 행의 가격·유효종료일 = 마스터 현재값 (전건 일치) | 통과 |
| 이력 구간 연속성(다음 적용시작일 = 이전 적용종료일 + 1일) | 통과 |
| XML/JSON 전체 파싱 · i18n 키 누락 0건 · 이벤트핸들러 미구현 0건 | 통과 |
| 조회 버튼 위치(조회조건 영역 우측) · 적용 테마(sap_horizon) | 통과 |
| Enter 키 조회 실동작 | 통과 |
| 화면 렌더링 — 실브라우저에서 조회 → Enter 조회 → 상세보기 → 상태필터 실동작 후 캡처 | 5/5 |
구매처·자재·가격은 모두 검증용 데이터입니다.
자주 묻는 질문
정보레코드가와 최근발주단가가 다른 게 정상인가요?
어느 정도 차이는 정상입니다. 발주 시점 협상이나 소량 발주 할증 등으로 실제 발주단가가 정보레코드 기준가와 다를 수 있습니다. 다만 변동률이 ±10%를 넘으면 정보레코드 갱신이 필요한지 검토가 필요합니다.
유효종료일이 제한없음인 레코드는 언제 만료로 바뀌나요?
제한없음(9999-12-31)으로 등록된 조건은 판정 로직상 만료·만료임박으로 전환되지 않습니다. 실제 계약 종료 시 정보레코드 변경 트랜잭션에서 조건 유효기간을 직접 조정해야 합니다.
삭제표시된 레코드가 목록에 계속 보이는 이유는 무엇인가요?
삭제표시는 신규 발주 제안 대상에서 제외한다는 뜻이지 이력 자체가 사라지는 것은 아니므로, 정비 이력 확인을 위해 조회 목록에는 계속 노출하고 상태 컬럼으로 구분해서 보여줍니다.
SAP 표준 기능과 어떻게 이어지나요?
정보레코드 등록·변경은 표준 트랜잭션이 담당하고 EINA·EINE에 그대로 남습니다. 이 화면은 그 데이터에 최근 발주단가 비교와 유효기간 임박 판정을 더해, 가격 재협상·정비 대상을 조회·검증 관점에서 골라내도록 확장한 것입니다.