솔루션 홈
FB60 · 전표 처리

SAP 증빙 전표 작성 — 영수증을 골라 결재상신까지

영수증 카드 목록에서 올릴 건을 고르고, 회계계정과 금액을 맞춘 뒤 여러 건을 한 번에 결재상신하는 화면입니다.

경비 전표는 영수증에서 시작합니다. 법인카드 승인 내역이나 세금계산서가 들어오면 계정과 코스트센터를 붙이고, 금액을 맞춘 뒤, 결재를 올려야 전표가 끝납니다.

이 과정을 SAP GUI 화면 여러 개를 오가며 하면 한 건씩 처리하게 됩니다. 이 앱은 증빙을 카드 목록으로 보여 주고, 여러 건을 골라 한 번에 결재상신하도록 OpenUI5 화면으로 확장했습니다. 서버에 올린 앱에서 목록 → 선택 → 결재상신 순서로 실제 캡처한 화면 4종을 함께 공개합니다.

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

  • 회사코드·회계연도 — 전표 헤더 기준 정보
  • 전표번호 — 전표 생성 시 표준 번호 범위에서 채번
  • 회계계정 — 계정과목(G/L)·코스트센터·내부오더·적요
  • 금액 — 공급가액·부가세·통화
  • 증빙 — 법인카드·세금계산서·기타증빙·예산신청 구분과 첨부파일
항목내용
대응 T-codeFB60 · FV60 (매입 송장·전표 입력)
업무 영역재무회계(FI) · 경비 전표
Namespacefi077_journalentry
셸 구조sap.f.FlexibleColumnLayout — 왼쪽 증빙 카드 목록, 오른쪽 상세·편집
데이터ZFCMC_F00_C007(증빙 헤더) · to_acct(회계계정) · VL_APPRLINE(결재선) · ZFILESet(첨부파일)
성격입력형 — 편집 저장, 전표 생성·삭제, 결재상신
처리 상태임시 → 전표작성완료 → 결재상신완료 → 부서장결재완료 → 결재완료 / 반려
UI 테마sap_horizon 단일 적용

실제 화면 4종 둘러보기

증빙을 목록에서 보고 → 올릴 건을 선택한 뒤 → 결재선과 메모를 넣어 결재상신합니다.

아래는 서버에 올린 앱을 실제 브라우저로 열어 순서대로 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다. 데이터는 시연용 목업입니다.

전표 작성 — ① 목록
① 증빙 목록 — 처리 단계 탭과 영수증 카드
① 증빙 목록 — 처리 단계 탭과 영수증 카드 — 위쪽은 회사코드·증빙구분·카드번호·결재문서번호·전표번호·처리상태 조회조건, 그 아래는 처리 단계별 건수 탭입니다. 카드마다 영수증 이미지와 처리상태·증빙구분·카드번호·가맹점명·공급가액·거래일시·전표번호가 함께 표시됩니다.
전표 작성 — ② 선택
② 상신할 증빙 선택 — 카드 체크박스로 여러 건
② 상신할 증빙 선택 — 카드 체크박스로 여러 건 — (주)한빛식당 법인카드 327,000원과 대성상사(주) 세금계산서 658,000원 두 건을 체크했습니다. 선택한 카드는 테두리로 강조되고, 하단의 [결재 상신]이 선택한 건 전체를 대상으로 동작합니다.
전표 작성 — ③ 결재상신
③ 결재상신 대화상자 — 결재선·메모·대상 증빙
③ 결재상신 대화상자 — 결재선·메모·대상 증빙 — 결재선 코드 A100 을 고르자 결재순번 1~3(팀장 → 본부장 → 재무팀장)이 채워졌습니다. 가운데 표에는 선택한 증빙 2건의 카드번호·거래일·가맹점·업종·공급가액·세액·첨부파일이 나와 상신 전에 한 번 더 확인할 수 있습니다.
전표 작성 — ④ 상신 완료
④ 상신 완료 메시지
④ 상신 완료 메시지 — [결재상신]을 누르면 선택한 전표 키, 회사코드, 결재선, 메모가 한 번에 상신 요청으로 전달되고 처리 결과가 메시지로 표시됩니다. 닫으면 목록과 탭 건수가 새로 고쳐집니다.

조작 방법

  1. 조회조건을 넣고 [조회]를 누르거나, 처리 단계 (임시·전표작성완료·결재상신완료 등)을 눌러 목록을 좁힙니다.
  2. 카드를 누르면 오른쪽에 상세가 열립니다. 사용내역·처리상태와 회계계정 품목을 확인합니다.
  3. 내용을 고치려면 [편집]에서 헤더와 품목을 수정하고 [저장]합니다. 품목은 [라인 추가]·[라인 삭제]로 조정합니다.
  4. 상세 하단의 [전표생성]으로 SAP 전표를 만들고, 잘못 만들었으면 [전표삭제]로 되돌립니다.
  5. 영수증 파일은 [증빙첨부]로 올리고, 새 증빙은 목록 하단 [영수증 추가]로 등록합니다.
  6. 목록에서 올릴 카드의 체크박스를 선택하고 [결재 상신]을 누릅니다.
  7. 대화상자에서 결재선을 고르고 메모를 적은 뒤 [결재상신]을 누릅니다.
  8. 결과 메시지를 닫으면 목록과 탭 건수가 새로 고쳐집니다.

저장·상신 검증 규칙

전표로 넘어가기 전에 화면에서 먼저 막아야 할 것들입니다.

① 금액 합계   헤더 금액(h_hwbas) = Σ 회계계정 품목 금액(hwbas)
               불일치 → "금액 합계가 일치하지 않습니다."  헤더 금액 · 품목 합계 · 차이 표시
               품목 표 머리글에 "합계: 품목합계 (차이)" 실시간 표시

② 필수값      회사코드 · 카드번호 · 가맹점명 · 금액 · 부가세 · 거래일 · 거래시간 · 거래번호 · 구매처
               품목: 금액 · 통화 · 계정과목 · 코스트센터

③ 형식        거래일 YYYY-MM-DD · 거래시간 HH:MM · 금액은 숫자

④ 버튼 노출   전표번호 없음 → [전표생성]
               전표번호 있음 → [전표삭제] · [결재상신]

⑤ 결재상신    선택 0건 → "선택한 라인이 없습니다."
               요청값 I_IFKEY = 선택 전표 키를 쉼표로 연결, I_BUKRS · I_APPRCD(결재선) · I_MEMO

품목을 모두 불러온 뒤 합계를 비교하는 이유

품목 표를 10줄씩 끊어 읽으면 화면에 보이는 줄만 합산돼, 11번째 줄부터는 합계에서 빠지고 저장에서도 누락됩니다. 편집 화면은 품목 전체를 한 번에 불러와 검증과 저장이 모든 줄을 대상으로 하도록 했습니다.

증빙구분카드번호 칸가맹점명 칸금액 칸부가세 칸
법인카드(C)카드번호가맹점명총액부가세
세금계산서(T)세금계산서승인번호상호공급가액세액
기타증빙(O)카드번호가맹점명총액부가세
예산신청(B)예산신청번호예산신청명예산금액해당 없음

처리 단계

단계처리상태·결과
① 증빙 등록영수증 추가 · 엑셀 업로드 · 첨부파일 등록임시
② 계정 입력편집에서 계정과목·코스트센터·금액 입력, 금액 합계 검증 후 저장임시
③ 전표 생성헤더(회사코드·증빙일·통화·공급가액·세액)와 품목(계정·코스트센터·금액)을 묶어 전표 생성 요청전표작성완료 · 전표번호 채번
④ 결재상신선택한 증빙을 결재선·메모와 함께 funcRequestList 로 상신결재상신완료(P)
⑤ 결재부서장 → 최종 결재자 순으로 승인 또는 반려부서장결재완료(A) · 결재완료(C) · 반려(R)

조회조건

필드필수설명
회사코드선택값도움으로 회사코드 지정
증빙구분선택전체 · 법인카드 · 세금계산서 · 기타증빙 · 예산신청
카드번호선택카드번호 또는 세금계산서 승인번호
결재문서번호선택상신 후 채번된 결재문서
전표번호선택생성된 SAP 전표번호
처리상태선택처리상태 목록에서 선택(기본 전체)
처리 단계 탭임시 · 전표작성완료 · 결재상신완료 · 부서장결재완료 · 결재완료 · 반려 (탭마다 건수 표시)

화면 항목

증빙 카드 · 상세 사용내역

항목필드설명
처리상태status미처리 · 결재중(P) · 승인(A) · 완료(C) · 반려
증빙구분datagb법인카드(C) · 세금계산서(T) · 기타증빙(O) · 예산신청(B)
카드번호 · 가맹점명cardno · mernm증빙구분에 따라 칸 이름이 바뀜
공급가액 · 부가세h_hwbas · h_hwste품목 합계와 비교되는 헤더 금액
거래일 · 거래시간 · 거래번호trxdt · trxtm · trxno승인 일시와 승인번호
전표번호 · 회계연도 · 결재문서번호belnr · gjahr · docno전표 생성·상신 결과
증빙파일1·2file1_name · file2_name/odata/…/ZFILESet(전표키,번호)/$value 로 열기

회계계정 품목

항목필드설명
항목번호itmno품목 순번
금액 · 통화hwbas · waers품목 금액
계정과목saknr · saknr_tx계정명(코드) 형식
코스트센터kostl · kostl_tx부서명(코드) 형식
내부오더 · 적요aufnr · sgtxt원가 귀속과 설명

결재상신 대화상자

영역내용
결재선 · 메모결재선 코드(값도움)와 결재 요청 사유
증빙선택한 증빙의 카드번호·거래일·가맹점·업종·공급가액·세액·첨부파일
결재선 목록결재순번 · 결재자ID · 결재자명

SAP 표준 기능 매핑

표준역할이 화면에서의 확장
FB60 · FV60매입 송장 입력 · 임시 저장증빙 카드에서 바로 계정 입력
BAPI_ACC_DOCUMENT_POST전표 전기헤더·품목을 묶어 전표 생성 요청
BKPF · BSEG전표 헤더 · 라인전표번호 · 회계연도 결과
SKA1 · CSKS계정 · 코스트센터 마스터계정명(코드) · 부서명(코드) 표시
결재선 · 상신 이력표준 기능 없음별도 엔티티(결재선·결재문서)로 관리

도입 시 확인이 필요한 부분

법인카드 승인 내역을 어디서 받아올지(카드사 연계·엑셀 업로드)와, 부가세 코드·사업장·거래처를 증빙구분별로 어떻게 정할지 먼저 합의해야 합니다. 결재선은 조직 개편 때마다 바뀌므로 결재선 코드를 부서 마스터와 분리해 관리하는 편이 안전합니다.

참고 CDS 뷰

@AbapCatalog.sqlViewName: 'ZCJOUENTRY'
@EndUserText.label: '증빙 전표 작성 목록 (Z)'
define view Z_C_JOURNAL_ENTRY
  as select from zfit_evidence as Head          -- 증빙 헤더(카드 승인·세금계산서)
    left outer join bkpf as Doc on  Doc.bukrs = Head.bukrs
                                and Doc.belnr = Head.belnr
                                and Doc.gjahr = Head.gjahr
  association [0..*] to zfit_evidence_item as _Acct on _Acct.ifkey = Head.ifkey
  association [0..1] to zfit_appr_doc      as _Appr on _Appr.docno = Head.docno
{
  key Head.ifkey,
      Head.bukrs,
      Head.datagb,                              -- C 법인카드 · T 세금계산서 · O 기타 · B 예산
      Head.cardno,
      Head.mernm,
      @Semantics.amount.currencyCode: 'Waers'
      Head.hwbas     as SupplyAmount,
      @Semantics.amount.currencyCode: 'Waers'
      Head.hwste     as TaxAmount,
      Head.waers     as Waers,
      Head.trxdt,
      Head.belnr,
      Head.gjahr,
      Head.docno,
      Head.status,                              -- '' · P · A · C · R
      _Acct,                                    -- 회계계정 품목(to_acct)
      _Appr
}

매핑 이해를 돕기 위한 참고용 설계입니다. 증빙·결재 테이블 이름은 예시이며, 실제 도입 시에는 운영 환경 설정과 릴리즈에 맞춰 조정합니다.

OpenUI5 구성

기능사용 컨트롤 · 구현
화면 골격sap.f.FlexibleColumnLayout — 목록과 상세를 한 화면에 나란히
조회·탭FilterBar · VariantManagement + sap.m.IconTabBar(처리 단계별 건수)
증빙 목록sap.f.GridList 다중 선택 — 영수증 sap.m.Image + 데이터 필드
상세 · 편집sap.uxap.ObjectPageLayout + 어노테이션(FieldGroup · LineItem) XML 템플릿으로 필드·품목 자동 구성
회계계정 품목sap.m.Table — 편집 시 인라인 입력, 머리글에 합계·차이 표시
결재상신sap.m.Dialog — 결재선 값도움, 증빙·결재선 표, 상신 요청
라벨어노테이션 라벨 + 증빙구분별 i18n 라벨(카드번호 ↔ 세금계산서승인번호 등)

목록을 카드로 만든 이유

경비 전표를 검토할 때 가장 먼저 보는 것은 영수증 자체입니다. 표에서 파일명만 보면 한 건씩 열어 봐야 하지만, 카드에 영수증 이미지와 금액·가맹점을 함께 두면 목록을 훑는 것만으로 올릴 건을 고를 수 있습니다.

파일 구성

경로역할
webapp/view/Main.view.js · _Main.view.xml조회조건 · 처리 단계 탭 · 증빙 카드 목록
webapp/view/fragments/mainPicGridList.fragment.xml영수증 이미지 카드 템플릿
webapp/view/Detail.view.js · _Detail.view.xml상세(사용내역 · 처리상태 · 회계계정)
webapp/view/DetailEdit.view.js · _DetailEdit.view.xml편집(헤더 입력 · 품목 추가/삭제)
webapp/view/ApprovalRequest.view.js · _ApprovalRequest.view.xml결재상신 대화상자
webapp/controller/Main · Detail · ApprovalRequest.controller.js조회 · 저장 검증 · 전표 생성 · 상신
webapp/view/fragments/FieldGroup · ItemTable (편집 포함)어노테이션 기반 필드·품목 템플릿
webapp/annotations/annotations.xml필드 그룹 · 품목 컬럼 · 한국어 라벨
webapp/localdata/*.json증빙 · 회계계정 · 결재선 목업 데이터

검증 결과

검증 항목결과
① 목록 — 증빙 25건, 처리 단계 탭 건수, 카드 첫 화면 10건 표시통과
② 선택 — 체크박스 2건 선택 시 선택 컨텍스트 2건통과
③ 결재상신 — 대화상자에 선택 증빙 2건 전달통과
③ 결재선 A100 지정 → 결재자 3명(순번 1~3) 표시통과
④ 상신 요청 → 처리 완료 메시지, 목록 새로고침통과
편집 저장 — 헤더 금액 = 품목 합계일 때 저장 (예: 327,000 = 196,000 + 131,000)통과
편집 저장 — 금액 불일치 시 헤더 금액·품목 합계·차이 표시 후 차단통과
목업 헤더 25건 전체 — 헤더 금액과 품목 합계 일치25/25
증빙파일 링크 — /odata/…/ZFILESet(전표키,번호)/$value통과
화면 라벨 한국어 표시 · 테마 런타임 확인sap_horizon

자주 묻는 질문

여러 영수증을 한 번에 상신할 수 있나요?

네. 목록 카드의 체크박스로 여러 건을 고른 뒤 [결재 상신]을 누르면, 선택한 증빙이 한 대화상자에 모이고 전표 키가 쉼표로 묶여 한 번의 상신 요청으로 전달됩니다.

결재선은 어떻게 지정하나요?

결재선 코드를 값도움으로 고르면 등록된 결재선 목록(결재순번·결재자)이 바로 아래 표에 채워집니다. 상신 전에 누가 어떤 순서로 결재하는지 확인할 수 있습니다.

편집 후 저장이 막히는 경우는요?

헤더 금액과 회계계정 품목 금액 합계가 다르면 저장되지 않습니다. 오류 메시지에 헤더 금액·품목 합계·차이가 함께 표시되고, 품목 표 머리글에도 합계와 차이가 실시간으로 보입니다.

증빙구분에 따라 입력 항목이 달라지나요?

네. 법인카드는 카드번호·가맹점명·거래번호, 세금계산서는 승인번호·상호·공급가액처럼 같은 칸이라도 증빙구분에 맞는 이름과 필수 여부로 바뀝니다.

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

전표 생성은 표준 전표 전기(BAPI) 구조에 맞춰 헤더와 품목을 넘기고, 전표번호가 채번된 건만 결재상신 대상이 됩니다. 결재선과 상신 이력은 표준에 없는 부분이라 별도 엔티티로 관리합니다.

경비 전표와 결재상신, 지금 쓰는 SAP 위에서 한 화면으로

영수증을 고르고, 계정을 맞추고, 여러 건을 한 번에 올리면 월말 경비 마감이 짧아집니다. 현재 SAP 환경 기준으로 어떻게 적용되는지 함께 확인해 드립니다.

전표 작성법인카드 경비세금계산서결재상신결재선회계계정OpenUI5