SAP 전표 LineItem 조회 — 한 줄에 53개 항목을 담는 이유
전표 라인 하나에 붙은 계정·거래처·원가·세목·조직·자재 정보를 한 줄로 펼쳐, 어떤 질문이 와도 화면을 바꾸지 않고 답하는 조회 화면입니다.
전표를 확인해 달라는 요청은 한 가지 모양으로 오지 않습니다. 어느 거래처인지, 어느 팀 비용인지, 세금계산서는 붙었는지, 취소된 건 아닌지가 그때그때 다르게 섞여 옵니다.
표준 화면은 질문마다 다른 조회 화면을 열어야 합니다. 그래서 이 앱은 방향을 반대로 잡았습니다. 라인 한 줄에 붙을 수 있는 정보를 모두 한 줄에 담고, 화면을 바꾸는 대신 열을 보는 방식입니다. SAP 표준 전표 구조를 그대로 이어받아 53개 항목을 한 줄로 펼치도록 OpenUI5 화면으로 확장했습니다. 실제 구동 화면 2종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 전표 키 — 회사코드 · 회계연도 · 전표번호 · 라인번호(
bukrs·gjahr·belnr·buzei) - 헤더 필드 — 전표유형 · 증빙일 · 전기일 · 입력일시 · 등록자 · 헤더텍스트 · 참조번호를 표준명 그대로
- 라인 필드 — 계정(
hkont) · 차대(shkzg) · 거래통화금액(wrbtr) · 원화금액(dmbtr) · 적요(sgtxt) - 역분개 관계 — 취소전표(
stblg) · 취소연도(stjah) 표준 필드로 원전표와 취소전표를 연결 - 세목·조직 — 세금코드(
mwskz) · 사업영역(gsber) · 기능영역(fkber) · 사업장(bupla) · 세무서(secco)
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 전표 라인 통합 조회 |
| Namespace | zui5.lineitem |
| 셸 구조 | 조회조건 영역(우측 조회·초기화) + 라인 테이블 |
| 화면 수 | 조회 화면 1개 |
| 데이터 | 전표 라인 98건 (53개 필드) |
| 성격 | 조회형(Read-Only) — 전기와 역분개는 표준 트랜잭션이 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 1종 둘러보기
회사코드·기간·계정 등으로 조회하면 라인이 한 줄씩 펼쳐집니다 → 필요한 관점의 열을 골라 읽고 → 전표구분과 원전표/취소전표 열로 정상 전표인지 확인합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드와 회계연도를 넣고 기간을 지정합니다.
- 계정·거래처·코스트센터·세금코드 등 보조 조건으로 범위를 좁힙니다. 조건을 많이 걸수록 읽을 줄이 줄어듭니다.
- 조회조건 입력필드에서 값을 바꾸거나 Enter 를 누르면 즉시 조회됩니다.
- 전표구분 열로 정상·역분개·취소 전표를 구분합니다. 상태 색으로 먼저 눈에 들어옵니다.
- 원전표/취소전표 열로 짝이 되는 전표를 확인합니다.
- 결과는 CSV 다운로드로 내려받습니다. 53개 열이 그대로 담기고 UTF-8 BOM 이 붙어 엑셀에서 한글이 깨지지 않습니다.
전표구분 판정 규칙
같은 라인이라도 그것이 정상 전기인지, 무언가를 되돌린 것인지에 따라 읽는 방법이 달라집니다.
취소전표(stblg) 가 비어 있고 취소 표시도 없으면 → 정상
취소전표(stblg) 에 값이 있으면 → 역분개됨 (이 전표가 취소당함)
xreversal 표시가 있으면 → 취소전표 (다른 전표를 취소한 전표)
원화환산 검증 dmbtr = wrbtr × kursf
역분개 관계를 같은 줄에 두는 이유
금액이 맞지 않는다는 문의는 대개 취소된 전표를 함께 세었기 때문입니다. 취소 여부와 짝 전표 번호가 같은 줄에 있으면 "이 건은 10월에 취소됐습니다" 로 답이 끝납니다. 별도 화면에서 다시 조회하지 않아도 되도록 stblg·stjah 를 결과 열에 그대로 뒀습니다.
53개 항목의 여섯 묶음
열이 많아 보이지만 성격은 여섯 갈래뿐입니다. 어떤 질문이 오느냐에 따라 보는 묶음이 달라집니다.
| 묶음 | 주요 항목 | 답하는 질문 |
|---|---|---|
| 전표 키·헤더 | 회사코드 · 연도 · 전표번호 · 라인 · 전표유형 · 증빙일 · 전기일 · 입력일시 · 등록자 · 헤더텍스트 | 전표 식별 |
| 금액 | 통화 · 환율 · 거래통화금액 · 원화금액 · 차대 | 금액 확인 |
| 계정·적요 | G/L 계정 · 계정명 · 적요 | 무슨 계정으로 갔는가 |
| 거래처 | 공급업체 · 고객 · 사업자번호 · 결제조건 · 지급방법 · 은행 | 누구와 거래했는가 |
| 원가·조직 | 코스트센터 · 내부오더 · 사업영역 · 기능영역 · 사업장 · 세무서 | 어디에 귀속되는가 |
| 세목·자재 | 세금코드 · 세금코드명 · 자재 · 자재명 · 플랜트 | 세무·물류 연결 |
| 역분개 | 원전표 · 취소전표 · 취소연도 · 취소 표시 | 살아 있는 전표인가 |
조회조건
조회조건은 결과 열과 같은 축으로 구성해, 보고 싶은 관점을 그대로 조건으로 넣을 수 있게 했습니다.
| 필드 | 필수 | 설명 |
|---|---|---|
회사코드 bukrs | 필수 | 대상 회사코드 |
회계연도 gjahr | 필수 | 대상 회계연도 |
전기일 budat | 선택 | 기간 From~To |
전표유형 blart | 선택 | SA · KR · DR · KZ · DZ 등 |
G/L 계정 hkont | 선택 | 계정 범위 |
거래처 lifnr · kunnr | 선택 | 공급업체 · 고객 |
코스트센터 kostl · 오더 aufnr | 선택 | 원가 귀속처 |
세금코드 mwskz | 선택 | 세목별 조회 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
| 전표번호/항목 | 회사코드·연도와 함께 전표를 식별하는 4단 키 |
| 전표유형 · 전기일자 · 증빙일자 | 코드와 텍스트를 함께 표시 |
| G/L 계정 | 계정코드와 명칭 |
| 차대 · 통화 · 금액 · 금액(원화) | 차변/대변 구분, 거래통화 금액과 원화환산 금액 |
| 적요 · 헤더텍스트 | 라인 적요와 전표 헤더 텍스트 |
| 거래처/고객 | 코드 · 명칭 · 사업자번호 |
| 코스트센터 · 내부오더 | 원가 귀속처와 명칭 |
| 세목 | 세금코드와 명칭 |
| 사업영역/기능영역/사업장 | 조직 귀속 정보 |
| 자재/플랜트 | 물류 연결 정보 |
| 사용자 · 입력일시 | 누가 언제 입력했는지 |
| 전표구분 | 정상 / 역분개됨 / 취소전표 — 상태 색으로 구분 |
| 원전표/취소전표 | 역분개 짝 전표 번호와 연도 |
SAP 표준 기능 매핑
전표는 표준 전기가 만듭니다. 이 화면은 헤더와 라인, 마스터 텍스트를 한 줄로 합쳐 보여 주는 조회 전용 확장입니다.
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
BKPF | 전표 헤더 — 전표유형 · 일자 · 입력일시 · 등록자 · 헤더텍스트 · 참조번호 | 라인마다 헤더 정보를 붙여 한 줄로 완결 |
BSEG | 전표 라인 — 계정 · 차대 · 금액 · 적요 · 원가귀속 · 세금코드 | 결과 열의 뼈대 |
ACDOCA | 유니버설 저널 (S/4HANA) | 조회 원천을 표준 CDS 로 교체 가능 |
LFA1 · KNA1 | 공급업체 · 고객 마스터 | 코드 옆에 명칭·사업자번호 표시 |
CSKS · AUFK | 코스트센터 · 내부오더 | 원가 귀속처 명칭 |
T007S | 세금코드 텍스트 | 세목 명칭 표시 |
FB03 관점 | 전표 조회 | 한 건씩 열지 않고 조건으로 묶어 조회 |
도입 시 확인이 필요한 부분
53개 항목 중 회사에서 실제로 쓰지 않는 필드가 있습니다. 기능영역이나 세무서 코드를 운영하지 않으면 그 열은 비어 보이므로 도입 시 사용 필드를 정리해 제외하는 편이 읽기에 좋습니다. S/4HANA 환경이면 BSEG 직접 조회보다 ACDOCA 기반 CDS 가 성능상 유리합니다.
참고 CDS 뷰
운영 서비스로 연결할 때는 헤더·라인에 마스터 명칭을 붙이고 역분개 구분을 계산한 뷰를 제안합니다.
@AbapCatalog.sqlViewName: 'ZCLINEITEM'
@EndUserText.label: '전표 LineItem 통합 조회 (Z)'
define view Z_C_DOCUMENT_LINE_ITEM
as select from bseg as Line
inner join bkpf as Header on Line.bukrs = Header.bukrs
and Line.belnr = Header.belnr
and Line.gjahr = Header.gjahr
left outer join lfa1 as Vendor on Line.lifnr = Vendor.lifnr
left outer join kna1 as Customer on Line.kunnr = Customer.kunnr
left outer join cskt as CCtrText on Line.kostl = CCtrText.kostl
and CCtrText.spras = 'K'
{
key Line.bukrs, key Line.gjahr, key Line.belnr, key Line.buzei,
Header.blart, Header.bldat, Header.budat, Header.usnam, Header.bktxt,
Header.stblg, Header.stjah,
Line.hkont, Line.shkzg, Line.waers, Line.wrbtr, Line.dmbtr, Line.sgtxt,
Line.kostl, CCtrText.ktext as KostlTx,
Line.aufnr, Line.mwskz, Line.gsber, Line.bupla, Line.matnr, Line.werks,
Vendor.name1 as LifnrTx,
Customer.name1 as KunnrTx,
// 전표구분 — 취소전표 유무로 판정
case when Header.stblg <> '' then 'REVERSED' else 'NORMAL' end as DocStatus
}
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 릴리즈와 사용 필드 범위에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 라인 테이블 |
| 조회조건 | sap.m.Input · sap.m.Select · sap.m.DatePicker — 우측 끝에 조회·초기화 |
| 결과 테이블 | sap.m.Table — 열이 많아 popin 반응형, growing 적용 |
| 전표구분 | sap.m.ObjectStatus — 정상 / 역분개됨 / 취소전표 |
| 안내 메시지 | sap.m.MessageStrip — 조회 전 안내와 조건 오류 |
| 이벤트 | 모든 버튼이 onPAI 단일 진입점, fcCode 로 분기 |
열을 줄이지 않고 접은 이유
열을 줄이면 화면은 깔끔해지지만, 빠진 열이 필요한 순간 다른 화면을 찾게 됩니다. popin 반응형은 좁은 화면에서 우선순위가 낮은 열을 행 아래로 내려 한 줄을 여러 줄로 펼칩니다. 가로 스크롤 없이 같은 정보를 볼 수 있어, 열을 많이 두어도 읽는 부담이 크게 늘지 않습니다.
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon |
Component.js | 조회조건 모델 · 결과 모델 초기화 |
manifest.json | 앱 디스크립터 — 앱 ID(zui5.lineitem) · ko 로케일 |
view/Main.view.xml | 조회조건과 라인 테이블 |
controller/Main.controller.js | 조회 · 전표구분 판정 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise) |
model/formatter.js | 금액 · 일자 · 차대 · 전표구분 포맷터 |
i18n/i18n_ko.properties | ko 로케일 리소스 |
localdata/lineitem.json | 전표 라인 98건 (53개 필드) |
운영 전환 시에는 ModelMock 내부만 실제 서비스 호출로 바꾸면 화면 로직은 그대로 씁니다.
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 전표 키(회사코드+연도+전표번호+라인) 중복 없음 | 통과 |
| 원화환산 = 거래통화금액 × 환율 | 통과 |
| 코드가 있는 항목은 명칭도 존재 (계정 · 거래처 · 코스트센터 · 세금코드) | 통과 |
| 취소전표가 있으면 취소연도도 존재 | 통과 |
| 전표구분 = 취소 정보 재판정값과 일치 | 통과 |
| XML · JSON 전체 파싱 | 오류 0건 |
| 화면 렌더링 — 실브라우저 조회 후 캡처 | 통과 |
| 테마 런타임 확인 | sap_horizon |
회사코드·거래처·금액은 모두 검증용 데이터입니다.
자주 묻는 질문
열이 53개나 필요한가요?
한 번에 다 보지는 않습니다. 다만 어떤 질문이 오느냐에 따라 필요한 열이 매번 달라서, 미리 줄이면 그때마다 다른 화면을 찾게 됩니다. 좁은 화면에서는 우선순위가 낮은 열이 접히므로 읽는 부담은 크지 않습니다.
취소된 전표도 결과에 나오나요?
나옵니다. 대신 전표구분 열에서 역분개됨으로 구분되고 짝이 되는 취소전표 번호가 같은 줄에 표시됩니다. 합계를 낼 때 취소 건을 빼야 하는지 판단할 수 있도록 감추지 않고 표시합니다.
기능영역이나 세무서 코드를 안 쓰면 어떻게 되나요?
해당 열이 비어 보입니다. 운영하지 않는 필드는 도입 시 목록에서 제외하는 편이 읽기에 좋아, 사용 필드 정리를 먼저 하는 것을 권합니다.
SAP 표준 기능과 어떻게 이어지나요?
전표 전기와 역분개는 표준 트랜잭션이 담당하고 데이터도 표준 구조 그대로입니다. FB03 으로 한 건씩 열던 확인을 조건으로 묶어 조회하고, 헤더·라인·마스터를 한 줄로 합쳐 보여 주는 것이 이 화면의 역할입니다.