SAP 구매발주서 — 무엇을 얼마에 언제까지 받기로 했는가
구매발주 헤더와 품목을 조회하고, 금액과 납기 조건을 확인하는 화면입니다.
구매발주서는 공급업체와의 약속입니다. 무엇을 얼마에 언제까지 받기로 했는지가 여기에 적혀 있고, 이후 입고와 송장이 모두 이 문서를 기준으로 처리됩니다.
그래서 발주 내용이 정확해야 뒤따르는 단계가 막히지 않습니다. 표준 구매발주 구조를 그대로 이어받아 헤더와 품목을 한 화면에서 확인하도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 구매조직 — 발주 주체(
PurchasingOrganization) - 발주 품목 — 자재(
ManufacturerMaterial)와 수량 · 단가 - 금액 — 순금액(
NetAmount)과 단가(NetPriceAmount) - 통화 — 발주 통화(
DocumentCurrency) - 납기 — 품목별 납품 예정일
| 항목 | 내용 |
|---|---|
| 대응 T-code | ME21N · ME23N |
| 업무 영역 | 구매(MM) · 발주 관리 |
| Namespace | mm002_purchaseorder |
| 셸 구조 | 조회조건 영역 + 발주 목록 + 품목 상세 |
| 화면 수 | 조회 화면 1개 + 품목 상세 |
| 데이터 | 발주 품목과 구매조직 등 다중 엔티티 |
| 성격 | 조회형(Read-Only) — 발주 생성은 표준이 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 1종 둘러보기
구매조직·기간·공급업체로 조회하면 발주가 나옵니다 → 금액과 납기를 확인하고 → 품목 단위로 내려갑니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 구매조직을 고릅니다. 발주 주체 단위입니다.
- 기간을 발주일 기준으로 지정합니다.
- 공급업체나 자재로 범위를 좁힐 수 있습니다.
- 조회조건 입력필드에서 값을 바꾸거나 Enter 를 누르면 즉시 조회됩니다.
- 순금액으로 발주 규모를 확인합니다.
- 납기가 지난 품목이 있는지 봅니다. 입고 지연입니다.
- 발주를 선택하면 품목 상세가 열립니다.
- 결과는 CSV 다운로드로 내려받습니다.
금액 구성
품목 금액을 모아 발주 총액이 됩니다.
품목 순금액 = 수량 × 단가
발주 순금액 = Σ(품목 순금액)
통화 발주 통화 기준, 외화는 환율로 원화 환산
납기 상태
납기일 ≥ 오늘 → 예정
납기일 < 오늘, 미입고 → 지연
품목 단위로 납기를 두는 이유
발주 하나에 여러 품목이 들어가고 각각 납기가 다른 경우가 많습니다. 헤더에만 납기를 두면 일부 품목이 늦어도 발주 전체가 정상으로 보입니다. 품목마다 납기를 관리해야 어느 자재가 늦는지 특정됩니다.
구매 흐름 4단계
| 단계 | 내용 | 문서 |
|---|---|---|
| ① 구매요청 | 필요 자재 요청 | 요청 문서 |
| ② 발주 | 공급업체에 주문 | 발주서 |
| ③ 입고 | 납품 확인 | 입고 전표 |
| ④ 송장 | 대금 청구 처리 | 매입채무 |
②의 내용이 ③·④의 기준이 되므로 발주 정확도가 뒤 단계를 좌우합니다.
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
구매조직 PurchasingOrganization | 필수 | 발주 주체 |
| 기간 | 필수 | 발주일 From~To |
| 공급업체 | 선택 | 거래처별 조회 |
| 자재 | 선택 | 품목별 조회 |
| 발주번호 | 선택 | 특정 발주 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
| 발주번호 | 구매오더 식별 |
구매조직 PurchasingOrganization | 발주 주체 |
| 공급업체 | 거래처 코드와 명칭 |
| 발주일 | 주문 날짜 |
통화 DocumentCurrency | 발주 통화 |
순금액 NetAmount | 발주 총액 |
자재 ManufacturerMaterial | 품목 |
수량 · 단가 NetPriceAmount | 품목 조건 |
| 납기 | 납품 예정일. 경과 시 상태 색 |
SAP 표준 기능 매핑
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
ME21N · ME23N | 구매발주 생성·조회 | 헤더와 품목을 한 화면에 |
ME2M · ME2N | 발주 목록 조회 | 목록 형태로 제공 |
EKKO · EKPO | 발주 헤더와 품목 | 조회 원천 |
EKET | 납품 일정 | 납기 정보 |
LFA1 | 공급업체 마스터 | 거래처 명칭 |
도입 시 확인이 필요한 부분
납품 일정이 품목당 여러 건인 경우가 있습니다. 분할 납품이면 한 품목에 여러 납기가 붙어 어느 일정이 지연인지 구분해야 합니다. 또 발주 변경 이력이 필요하면 변경문서와 연결하는 설계가 추가됩니다.
참고 CDS 뷰
@AbapCatalog.sqlViewName: 'ZCPURCHORDER'
@EndUserText.label: '구매발주서 (Z)'
define view Z_C_PURCHASE_ORDER
as select from ekko as Header
inner join ekpo as Item on Header.ebeln = Item.ebeln
left outer join lfa1 as Vendor on Header.lifnr = Vendor.lifnr
left outer join makt as MatText on Item.matnr = MatText.matnr
and MatText.spras = 'K'
{
key Header.ebeln as PurchaseOrder,
key Item.ebelp as ItemNo,
Header.ekorg as PurchasingOrg,
Header.bedat as OrderDate,
Header.lifnr, Vendor.name1 as VendorName,
Header.waers as DocumentCurrency,
Item.matnr, MatText.maktx as MaterialName,
Item.menge as Quantity,
Item.netpr as NetPrice,
Item.netwr as NetAmount
// 납기는 EKET 의 납품 일정과 조인
}
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경 설정과 릴리즈에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 발주 목록 · 품목 |
| 조회조건 | sap.m.Select · sap.m.DatePicker — 우측 끝에 조회 |
| 발주 목록 | sap.m.Table — 발주 단위 |
| 품목 상세 | 선택 시 하단에 품목 펼침 |
| 금액 | sap.m.ObjectNumber — 통화 함께 표시 |
| 이벤트 | onPAI 단일 진입점, fcCode 로 분기 |
통화를 금액과 함께 표시하는 이유
수입 거래가 섞이면 원화와 외화 발주가 한 목록에 나옵니다. 통화 표시가 없으면 숫자 크기만 보고 규모를 오해합니다. 금액 옆에 통화를 붙이면 한 줄에서 바로 구분됩니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — ko 로케일 · sap_horizon |
view/Main.view.xml | 조회조건 · 발주 목록 · 품목 |
controller/Main.controller.js | 조회 · 금액 집계 · 납기 판정 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise) |
js/formatter.js | 금액 · 통화 · 일자 포맷터 |
localdata/Items.json | 발주 품목 |
localdata/PurchasingOrganization.json | 구매조직 |
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 품목 순금액 = 수량 × 단가 (전 품목) | 통과 |
| 발주 순금액 = 품목 순금액 합계 | 통과 |
| 납기 경과 판정 = 납기일 < 기준일 | 통과 |
| 통화가 모든 금액에 표시 | 통과 |
| 공급업체·자재 코드가 있으면 명칭도 존재 | 통과 |
| XML · JSON 전체 파싱 | 오류 0건 |
| 화면 렌더링 — 실브라우저 조회 후 캡처 | 통과 |
| 테마 런타임 확인 | sap_horizon |
자주 묻는 질문
분할 납품은 어떻게 표시되나요?
한 품목에 여러 납기가 붙습니다. 납품 일정 단위로 보면 어느 회차가 지연인지 알 수 있어 품목 단위보다 정확합니다.
발주 금액이 송장과 다르면요?
가격 변동이나 수량 차이가 있었던 것입니다. 송장검증에서 걸러지며, 차이가 허용 범위를 넘으면 처리가 막힙니다.
외화 발주는 언제 환산하나요?
입고나 송장 시점 환율로 원화 금액이 정해집니다. 발주 시점 환율은 참고값이라 실제 원가와 다를 수 있습니다.
SAP 표준 기능과 어떻게 이어지나요?
발주 생성과 관리는 표준 MM 이 담당합니다. 이 화면은 헤더와 품목을 한 화면에 모으고 납기 상태를 붙여 확인을 단순하게 만든 확장입니다.