솔루션 홈
MIR6 · 구매 연계

SAP 송장검증 현황 조회 — 지급이 막힌 이유를 문서마다 밝히기

구매 송장의 수량 차이와 가격 차이를 계산해 지급차단 사유를 가려내고, 문서별 예상 회계처리까지 확인하는 화면입니다.

송장이 막히면 지급이 멈추고, 지급이 멈추면 벤더에서 전화가 옵니다. 그런데 왜 막혔는지는 문서를 하나씩 열어 봐야 알 수 있습니다.

막히는 이유는 대개 둘입니다. 수량이 안 맞거나 단가가 안 맞거나. 표준 송장검증 구조를 그대로 이어받아 두 차이를 계산해 차단 사유와 함께 보여 주고, 예상 회계처리까지 미리 확인하도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면 3종을 함께 공개합니다.

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

  • 송장 문서 — 송장번호(InvoiceDocNo) · 회계연도 · 전기일 · 증빙일
  • 구매오더 연계 — 발주번호(PoNumber)로 입고 실적과 대조
  • 차단 정보 — 차단 사유(BlockReason)와 지급차단 표시(PaymentBlock)
  • 수량 · 금액 — 입고수량(GrQty) · 송장수량(InvoiceQty) · 송장금액(InvoiceAmount)
  • 공급업체 — 벤더 코드와 명칭
항목내용
대응 T-codeMIR6 (송장 개요) · MIR5
업무 영역재무회계(FI-AP) · 구매(MM) 연계 · 결산
Namespacezui5.invverif
셸 구조조회조건 영역(우측 조회·초기화) + 송장 목록, 행 선택 시 품목과 예상 회계처리
화면 수조회 화면 1개 + 문서 상세
데이터송장 헤더 24건 · 품목 29건 · 전기 라인 53건
성격조회형(Read-Only) — 송장 등록과 차단 해제는 표준이 담당
UI 테마sap_horizon 단일 적용

실제 화면 3종 둘러보기

회사코드·기간·공급업체·상태로 조회하면 송장이 차단 사유와 함께 나옵니다 → 수량 차이와 가격 차이를 나눠 보고 → 행을 눌러 품목 내역과 예상 회계처리를 확인합니다.

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

MIR6 — Main.view.xml
초기 진입 화면 — 조회조건과 안내 메시지
초기 진입 화면 — 조회조건과 안내 메시지 — 회사코드·기간·공급업체·상태를 고르는 화면입니다. 조회·초기화 버튼은 조회조건 영역 오른쪽 끝에 있습니다.
MIR6 — 송장 현황
메인화면 — 차단 사유와 차이 금액
메인화면 — 차단 사유와 차이 금액 — 송장번호·공급업체·전기일·발주번호·송장금액과 함께 입고수량·송장수량·수량차이·가격차이·차단사유가 이어집니다. 차단된 문서는 상태 색으로 먼저 보입니다.
MIR6 — 예상 회계처리
상세 다이얼로그 — 품목과 분개
상세 다이얼로그 — 품목과 분개 — 행을 고르면 송장 품목과 함께 예상 회계처리가 차변·대변으로 펼쳐집니다. 차대일치 검증 결과도 함께 표시됩니다.

조작 방법

  1. 회사코드기간을 넣습니다. 월 단위로 보는 것이 일반적입니다.
  2. 공급업체상태로 좁힙니다. 차단 문서만 보려면 상태를 차단으로 고릅니다.
  3. 조회조건 입력필드에서 값을 바꾸거나 Enter 를 누르면 즉시 조회됩니다.
  4. 수량차이가 있는 건과 가격차이만 있는 건을 나눠 봅니다.
  5. 차단사유로 어떤 검증에 걸렸는지 확인합니다.
  6. 행을 선택하면 품목 내역과 예상 회계처리가 열립니다.
  7. 결과는 CSV 다운로드로 내려받습니다.

차단 판정 규칙

검증은 두 가지 허용 범위를 넘었는지 보는 일입니다.

수량 차이 = 송장 수량(InvoiceQty) − 입고 수량(GrQty)
가격 차이 = 송장 단가 − 발주 단가  →  금액으로 환산

허용 범위 안        →  차단 없음, 지급 가능
수량 차이 초과      →  수량 차단 — 입고 확인 필요
가격 차이 초과      →  가격 차단 — 구매 조건 확인 필요
지급차단 표시 있음  →  수동 차단 — 사유 확인 후 해제

예상 회계처리를 함께 보는 이유

차단을 풀지 말지 판단하려면 풀었을 때 어떤 분개가 생기는지 알아야 합니다. 가격 차이가 구매가격차이 계정으로 갈지 재고로 갈지에 따라 손익 영향이 달라지기 때문입니다. 분개를 미리 보여 주면 차단 해제 결정이 근거를 갖습니다.

송장이 차단되는 네 가지 이유

이유상황다음 조치
수량 초과 청구입고보다 많은 수량을 청구입고 누락인지 과다 청구인지 확인
단가 불일치발주 단가와 다른 단가로 청구계약·가격 조건 확인
입고 미완입고 전에 송장이 먼저 도착입고 등록 후 자동 해제
수동 차단담당자가 직접 차단 설정사유 확인 후 해제

조회조건

필드필수설명
회사코드 Bukrs필수대상 회사코드
기간 PostingDate필수전기일 From~To 또는 회계월
공급업체 Lifnr선택벤더 코드·명칭
상태선택전체 / 차단만 / 정상만
발주번호 PoNumber선택특정 발주 건

결과 컬럼

컬럼의미 · 표시
송장번호 InvoiceDocNo · 회계연도송장 문서 키
공급업체 Lifnr · LifnrName벤더 코드와 명칭
전기일 PostingDate · 증빙일 DocDate날짜 정보
발주번호 PoNumber연계 구매오더
송장금액 InvoiceAmount · 통화 Currency청구 금액
입고수량 GrQty · 송장수량 InvoiceQty · 단위 Unit수량 대조
수량차이 QtyVariance송장 − 입고
가격차이 PriceVarianceAmount단가 차이의 금액 환산
차단사유 BlockReason · BlockReasonText검증 차단 사유
지급차단 PaymentBlock지급 차단 표시. 상태 색

SAP 표준 기능 매핑

표준역할이 화면에서의 확장
MIR6송장 개요차이와 차단 사유를 계산해 열로 추가
MIRO송장 등록등록 결과를 검증 관점으로 재구성
RBKP · RSEG송장 헤더 · 품목조회 원천
EKKO · EKPO구매오더 헤더 · 품목발주 단가·수량 비교 기준
EKBE구매오더 이력입고 실적
LFA1공급업체 마스터벤더 명칭

도입 시 확인이 필요한 부분

허용 오차(Tolerance) 설정이 회사마다 다릅니다. 수량 1% 이내는 통과, 금액 1만원 이내는 통과처럼 한도가 정의돼 있어, 화면의 차이 표시와 실제 차단 판정이 어긋나지 않으려면 그 설정을 읽어야 합니다.

참고 CDS 뷰

@AbapCatalog.sqlViewName: 'ZCINVVERIF'
@EndUserText.label: '송장검증 현황 (Z)'
define view Z_C_INVOICE_VERIFICATION
  as select from rbkp as Header
    inner join      rseg as Item   on Header.belnr = Item.belnr
                                  and Header.gjahr = Item.gjahr
    left outer join lfa1 as Vendor on Header.lifnr = Vendor.lifnr
    left outer join ekpo as PoItem on Item.ebeln = PoItem.ebeln
                                  and Item.ebelp = PoItem.ebelp
{
  key Header.belnr as InvoiceDocNo,
  key Header.gjahr as FiscalYear,
      Header.bukrs, Header.lifnr, Vendor.name1 as LifnrName,
      Header.budat as PostingDate,
      Header.bldat as DocDate,
      Header.rmwwr as InvoiceAmount,
      Header.waers as Currency,
      Item.ebeln   as PoNumber,
      Item.menge   as InvoiceQty,
      PoItem.menge as PoQty,
      Header.zlspr as PaymentBlock
      // 수량차이·가격차이와 차단 사유는 입고 이력(EKBE)·허용오차 설정과
      // 대조하는 소비 뷰에서 계산
}

매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경 설정과 릴리즈에 맞춰 조정합니다.

OpenUI5 구성

기능사용 컨트롤
화면 골격sap.m.Page + 조회조건 영역 · 송장 테이블
조회조건sap.m.Select · sap.m.DatePicker · sap.m.Input — 우측 끝에 조회·초기화
이벤트모든 버튼이 onPAI 단일 진입점, fcCode 로 분기
송장 테이블sap.m.Table — 수량·금액 열 인접 배치
차단 표시sap.m.ObjectStatus — 차단 사유별 상태 색
상세 화면sap.m.Dialog — 품목과 예상 회계처리

차대일치를 상세에 넣은 이유

예상 회계처리를 보여 주면서 차대가 맞는지 확인하지 않으면, 화면에서 본 분개와 실제 전기가 달라질 수 있습니다. 상세 화면에서 차변 합계와 대변 합계를 함께 표시하면 그 자리에서 검증이 끝납니다.

파일 구성

경로역할
manifest.json앱 디스크립터 — 앱 ID(zui5.invverif) · ko 로케일
view/Main.view.xml조회조건과 송장 테이블
controller/Main.controller.js조회 · 차이 계산 · 분개 구성 · CSV
model/ModelMock.jslocaldata JSON 읽기(Promise)
js/formatter.js금액 · 수량 · 차단 상태 포맷터
localdata/invheader.json송장 헤더 24건
localdata/invitems.json송장 품목 29건
localdata/postingdata.json전기 라인 53건

검증 결과

검증 항목결과
수량차이 = 송장수량 − 입고수량 (전 건)통과
차단 건은 차단 사유 텍스트 존재통과
예상 회계처리 차변 합계 = 대변 합계통과
송장 헤더 금액 = 품목 금액 합계통과
벤더 코드가 있으면 명칭도 존재통과
XML · JSON 전체 파싱오류 0건
화면 렌더링 — 실브라우저 조회 → 상세 실동작 후 캡처3/3
테마 런타임 확인sap_horizon

자주 묻는 질문

허용 오차는 어디서 정하나요?

구매 설정의 허용 오차 키에 수량·금액·비율 한도가 정의돼 있습니다. 회사와 자재 유형에 따라 다르므로 화면의 차이 표시가 실제 차단 판정과 같으려면 그 설정을 참조해야 합니다.

입고 전에 송장이 먼저 오면 어떻게 되나요?

수량 차이로 차단됩니다. 입고가 등록되면 차이가 해소돼 자동으로 풀리는 것이 보통이므로, 이런 건은 입고 예정일을 확인하고 기다리면 됩니다.

가격 차이는 어디로 가나요?

설정에 따라 구매가격차이 계정으로 가거나 재고 가액에 반영됩니다. 표준원가를 쓰는지 이동평균을 쓰는지에 따라 갈리며, 예상 회계처리에서 그 결과를 미리 확인할 수 있습니다.

SAP 표준 기능과 어떻게 이어지나요?

송장 등록과 차단은 MIRO·MIR6 가 담당하고 데이터는 표준 송장 구조에 남습니다. 이 화면은 그 문서에 입고 실적과 발주 조건을 대조해 차이를 계산하고, 차단 사유와 예상 분개를 함께 보여 주는 확장입니다.

송장검증 점검, 지금 쓰는 SAP 위에서 확장해 보세요

왜 막혔는지가 문서마다 보이면 벤더 문의에 답하는 시간이 줄어듭니다. 현재 SAP 환경 기준으로 어떻게 적용되는지 함께 확인해 드립니다.

송장검증MIR6지급차단가격차이수량차이GR/IR구매 송장OpenUI5