솔루션 홈
결산

SAP 잔액 Migration — 넣기 전에 한 번 돌려 보고 넣는다

기초잔액을 양식으로 올려 저장해 두고, 시뮬레이션을 통과한 건만 실제 전표로 기표하는 화면입니다.

시스템을 새로 열 때 기초잔액을 넣는 작업은 한 번에 끝나지 않습니다.

계정이 틀리고, 전기기간이 막혀 있고, 차대가 안 맞습니다. 그런데 이걸 기표해 보고서야 알면 이미 절반이 들어간 상태에서 역분개부터 해야 합니다. 그래서 이 화면은 저장과 기표를 나눕니다. 양식을 올려 저장해 두고 고쳐 가다가, 준비가 되면 시뮬레이션으로 먼저 돌려 봅니다. 한 줄이라도 오류가 나면 실기표는 시작하지 않습니다.

SAP 표준 구조를 그대로 이어받은 부분

  • 이관 데이터 — ZTFIG0010(계정잔액 이관) 구조 그대로
  • 기표 처리 — ZFI_DOCUMENT_POSTING, BDC 모드는 화면에서 지정
  • 역분개 — 전표가 생성된 라인은 FB08 로 역분개한 뒤 삭제
  • 양식 배포 — SMW0 에 저장된 양식을 내려받아 사용
항목내용
업무 영역재무회계(FI) · 결산 · 데이터 이관
Namespacezui5.balmig
셸 구조조회조건 영역(우측 조회) + 이관 데이터 목록, 툴바에 7개 동작
화면 수조회·편집 화면 1개
데이터라인 28건 · 작업키 3개 (기표완료 10 · 오류 2)
성격등록·기표형(CRUD) — 기표는 표준 펑션이 수행
UI 테마sap_horizon 단일 적용

실제 화면 10종 둘러보기

양식을 업로드해 저장해 두고 → 작업으로 시뮬레이션을 돌린 뒤 → 전부 통과했을 때만 기표합니다.

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

Main.view.xml
이관 데이터 — 작업키 단위
이관 데이터 — 작업키 단위 — 회사코드·작업일자·작업key 로 묶인 이관 라인이 나옵니다. 상단에 차변·대변 합계가 함께 표시되어 균형이 맞는지 먼저 보입니다. 조회 버튼은 조회조건 영역 오른쪽 끝에 있습니다.
다른 작업키
작업키 전환 — 배치 단위로 관리
작업키 전환 — 배치 단위로 관리 — 이관은 한 번에 끝나지 않으므로 작업키로 배치를 나눕니다. 키를 바꾸면 그 배치의 라인만 나옵니다.
시뮬레이션 실패
시뮬레이션 오류 — 실기표 차단
시뮬레이션 오류 — 실기표 차단 — 작업을 누르면 먼저 시뮬레이션이 돕니다. 한 줄이라도 오류가 나면 대상 행수와 오류 행수, 차변·대변 합계를 알려 주고 실기표는 진행하지 않습니다.
오류 라인
오류 라인 — 메시지로 원인 표시
오류 라인 — 메시지로 원인 표시 — 오류가 난 줄만 붉게 남고 메시지 칸에 사유가 들어갑니다. 전기기간이나 계정 조합처럼 고쳐야 할 지점이 줄 단위로 드러납니다.
기표 확인
시뮬레이션 통과 — 기표 확인
시뮬레이션 통과 — 기표 확인 — 오류가 없으면 몇 행을 얼마로, 어떤 BDC 모드로 기표할지 확인합니다. 여기서 취소하면 아무것도 들어가지 않습니다.
기표 결과
기표 완료 — 전표번호 반환
기표 완료 — 전표번호 반환 — 생성된 전표번호와 대상 행수·금액을 알려 주고, 호출한 펑션과 적용된 BDC 모드도 함께 남습니다.
기표 후 상태
기표 후 — 입력칸 잠금
기표 후 — 입력칸 잠금 — 전표가 생긴 라인은 계정·금액 입력칸이 잠깁니다. 전표와 근거가 어긋나지 않게 하기 위해서입니다.
업로드
업로드 — 회사코드 불일치 제외
업로드 — 회사코드 불일치 제외 — 파일을 올리면 조회조건과 회사코드가 다른 줄은 버립니다. 몇 행이 들어가고 몇 행이 빠졌는지 알려 줍니다.
순번 채번
업로드 후 — 순번 이어서 채번
업로드 후 — 순번 이어서 채번 — 새로 올라온 줄은 기존 마지막 순번부터 이어서 번호가 붙습니다. 여러 번 나눠 올려도 순번이 겹치지 않습니다.
역분개 삭제
삭제 — 전표가 있으면 역분개 먼저
삭제 — 전표가 있으면 역분개 먼저 — 이미 기표된 라인을 지우려 하면 몇 건이 역분개 대상이고 어느 전표인지 알려 줍니다. 역분개한 뒤에 삭제가 진행됩니다.

조작 방법

  1. 양식다운로드로 양식을 받아 이관 잔액을 작성합니다.
  2. 회사코드·작업일자·작업key를 지정하고 업로드로 파일을 올립니다.
  3. 저장하면 데이터만 남습니다. 계정이나 금액을 고쳐 가며 준비합니다.
  4. 전체 선택작업을 누르면 시뮬레이션이 먼저 돕니다.
  5. 오류가 있으면 메시지 칸에서 사유를 확인하고 고친 뒤 다시 실행합니다.
  6. 전부 통과하면 확인창을 거쳐 기표됩니다. 되돌리려면 삭제로 역분개합니다.

버튼별 동작 규칙

버튼 하나하나가 사양서에 정해진 동작을 그대로 수행합니다.

버튼별 동작 (사양서)

  전체 선택 / 전체선택 해제
     리스트에 보이는 모든 라인을 선택 / 선택 해제

  양식다운로드
     SMW0 에 저장된 양식을 로컬에 다운로드

  업로드
     파일을 읽어 ALV 에 출력
     파일의 회사코드가 조회조건과 다르면 그 줄은 삭제
     순번은 ZTFIG0010 에서 키로 조회한 마지막 번호부터 순차 채번
     금액 · 날짜 · alpha conversion 필드는 포맷에 맞게 변환

  저장
     화면의 데이터를 ZTFIG0010 에 저장만 한다 (기표하지 않음)

  삭제
     선택 데이터를 ZTFIG0010 에서 삭제
     전표번호가 있는 경우 FB08 로 역분개한 뒤 삭제

  작업
     1) SIMULATION MODE 로 먼저 실행
        오류가 있으면 ALV 메시지 필드에 기록하고 실기표하지 않음
     2) 선택 리스트 전부 오류가 없을 때만
        ZFI_DOCUMENT_POSTING 으로 실제 기표
     3) 기표 메시지를 ALV 에 기록하고
        ZTFIG0010 의 전표 필드·메시지 필드를 갱신
항목산식 · 규칙
저장과 기표 분리저장은 데이터만 남기고 전표를 만들지 않는다
시뮬레이션 우선작업 실행 시 항상 먼저 수행
전부 통과 조건선택 라인 중 하나라도 오류면 실기표 중단
차대 균형선택분의 차변 합계 = 대변 합계
중복 기표 방지이미 전표가 있는 라인은 오류로 처리
역분개 삭제전표가 있으면 FB08 후 삭제
업로드 필터회사코드가 다른 줄은 버림

시뮬레이션 결과를 줄 단위로 남기는 이유

전체가 실패했다는 메시지만으로는 어디를 고쳐야 할지 알 수 없습니다. 오류 줄에 사유를 남기면 전기기간 문제인지 계정 조합 문제인지가 줄마다 드러나고, 고친 뒤 다시 돌려 통과한 줄과 남은 줄이 바로 갈립니다.

라인 상태 4종

한 줄이 저장에서 기표까지 가는 동안 네 가지 상태를 지납니다.

상태의미전표다음 동작
대기저장만 된 상태없음작업으로 시뮬레이션 수행
검증통과시뮬레이션 통과없음확인하면 실기표 진행
오류시뮬레이션 실패없음메시지 확인 후 수정하고 재실행
기표완료전표 생성있음입력칸 잠금 · 삭제 시 역분개

상태가 줄마다 보이므로 무엇이 남았고 무엇을 되돌려야 하는지가 분명합니다.

조회조건

필드필수설명
Company Code필수대상 회사코드
작업일자필수이관 작업을 수행한 날짜
작업key필수배치를 구분하는 키
BDC 모드선택N background / A display all / E display errors only

결과 컬럼

컬럼의미 · 표시
상태 · Seq. · 작업key처리 상태와 배치 내 순번
CoCode · DocumentNo회사코드와 기표 후 생성된 전표번호
Pstng Date · Doc..Date · Type · Currency전표 헤더 항목
Reference · HeaderText참조번호와 헤더 텍스트
Key · G/L acct · Alt. Accou · SGL Ind전기키와 계정 정보
Bal.c/f TC · LC거래통화·현지통화 이월 잔액
Bus. Area · Bus. Pl. · Cost Ctr · Profit Ctr조직 배부 정보
Value date · Bline Date · Assign. · Ref. Key일자와 참조 항목
Payt Terms · Pymt Meth. · Bank Name지급 조건
Text · 메시지적요와 처리 결과

보조 기능

컬럼의미 · 표시
전체 선택 / 해제목록 전체를 한 번에 고르거나 풀기
양식다운로드 · 업로드양식 배포와 파일 등록
저장 · 삭제 · 작업저장만 / 역분개 후 삭제 / 시뮬레이션 후 기표

SAP 표준 기능 매핑

기표와 역분개는 표준이 수행하고, 이 화면은 그 앞에서 걸러 냅니다.

표준역할이 화면에서의 확장
ZFI_DOCUMENT_POSTING전표 전기 펑션시뮬레이션과 실기표 모두 이 펑션
FB08전표 역분개기표된 라인 삭제 시 먼저 수행
F-02 관점전표 입력화면 입력 대신 양식으로 대체
FB03 관점전표 조회생성된 전표 확인
SMW0양식 저장소업로드 양식 배포
OB52 관점전기기간 개폐시뮬레이션 오류의 잦은 원인

운영 데이터 소스 매핑

항목SAP 원천비고
이관 데이터ZTFIG0010JOBDAT · JOBKEY · JOBSEQ 로 식별
회사코드T001조회조건과 업로드 필터 기준
전표 필드BKPF · BSEG 항목기표 시 그대로 전달
기표ZFI_DOCUMENT_POSTINGBDC 모드는 화면 지정값
양식SMW0양식다운로드로 배포

도입 시 확인이 필요한 부분

이관 대상 전표유형과 번호범위, 전기기간 개폐 일정을 먼저 잡아야 합니다. 특히 이관은 과거 일자로 전기하는 경우가 많아 해당 기간이 열려 있는지가 시뮬레이션 오류의 대부분입니다. 작업키 체계도 미리 정해 두면 여러 번 나눠 올릴 때 배치 추적이 쉬워집니다.

참고 CDS 뷰

이관 진행 상황을 볼 때는 이관 데이터에 전표 헤더를 붙인 뷰가 편합니다.

@AbapCatalog.sqlViewName: 'ZCBALMIG'
@EndUserText.label: '계정잔액 이관 현황 (Z)'
define view Z_C_BALANCE_MIGRATION
  as select from ztfig0010 as Mig
    left outer join bkpf as Doc      on  Mig.bukrs = Doc.bukrs
                                     and Mig.belnr = Doc.belnr
                                     and Mig.gjahr = Doc.gjahr
    left outer join skat as AcctText on  Mig.saknr = AcctText.saknr
                                     and AcctText.spras = 'K'
{
  key Mig.bukrs      as Bukrs,
  key Mig.jobdat     as JobDate,
  key Mig.jobkey     as JobKey,
  key Mig.jobseq     as JobSeq,
      Mig.belnr      as DocumentNo,
      Mig.gjahr      as Gjahr,
      Mig.budat      as PostingDate,
      Mig.bldat      as DocumentDate,
      Mig.blart      as DocumentType,
      Mig.bschl      as PostingKey,
      Mig.saknr      as GlAccount,
      AcctText.txt50 as GlAccountName,
      Mig.wrbtr      as AmountTc,
      Mig.dmbtr      as AmountLc,
      Mig.gsber      as BusinessArea,
      Mig.bupla      as BusinessPlace,
      Mig.kostl      as CostCenter,
      Mig.prctr      as ProfitCenter,
      // 기표 여부와 역분개 여부
      case when Mig.belnr = '' then 'READY'
           when Doc.stblg <> '' then 'REVERSED'
           else 'POSTED' end as MigrationStatus
}

이관 진행 상황을 확인할 때 쓰는 참고용 설계입니다. 기표 여부는 전표번호로, 역분개 여부는 전표 헤더로 판정합니다.

OpenUI5 구성

기능사용 컨트롤
화면 골격sap.m.Page + 조회조건 영역 · 이관 데이터 목록
조회조건sap.m.Input · DatePicker · ComboBox 2종
이관 목록sap.ui.table.Table — 상태·순번·작업키·회사코드 4컬럼 고정
상태 표시ObjectStatus + 아이콘 — 대기·검증통과·오류·기표완료
조건부 잠금전표번호가 있으면 입력칸을 읽기 전용으로
2단계 기표시뮬레이션 결과에 따라 확인창 또는 오류창 분기
CSVBlob + UTF-8 BOM — 양식 · 결과 2종

기표된 줄의 입력칸을 잠그는 이유

전표가 이미 나갔는데 근거 데이터를 고치면 둘이 어긋납니다. 나중에 무엇이 맞는 값인지 판단할 수 없게 됩니다. 고쳐야 한다면 역분개부터 하는 것이 순서라, 화면에서 입력칸을 잠가 그 순서를 강제합니다.

파일 구성

경로역할
manifest.json앱 디스크립터 — 앱 ID(zui5.balmig) · ko 로케일 · sap_horizon
Component.js조회조건 모델 · 결과 모델 초기화
view/Main.view.xml조회화면 + 편집 가능한 이관 데이터 목록
controller/Main.controller.js조회 · 업로드 · 저장 · 삭제 · 시뮬레이션·기표 · CSV
model/ModelMock.js업로드 필터·채번 · 시뮬레이션 · 기표 · 역분개 삭제
model/formatter.js상태 · 금액 · 일자 · 차대 · 잠금 포맷터
i18n/i18n_ko.propertiesko 로케일 리소스
localdata/balmig.json이관 데이터 시뮬레이션 데이터

검증 결과

화면 구성에 쓴 데이터는 기표 완료·미기표·오류가 섞인 이관 배치입니다.

데이터규모구성
이관 라인28건작업키 3개 (기표완료 10 · 미기표 18)
작업키M01 · M02 · M03기표 완료 / 미기표 / 시뮬레이션 오류
금액차변 = 대변작업키마다 균형이 맞도록 구성
검증 항목결과
작업키가 정의 목록에 존재 · 순번이 1부터 연속통과
전기키가 정의 목록에 존재 · 차대 구분 일치통과
계정이 마스터에 존재 · 대체계정과 일치통과
작업키별 차변 합계 = 대변 합계통과
금액 > 0 · 거래통화금액 = 현지통화금액 (KRW)통과
증빙일 ≤ 전기일 · 가치일자·기산일이 전기일과 동일통과
기표 완료 건만 전표번호·회계연도 보유통과
오류 라인은 전표번호가 없음 (실기표 차단)통과
차변 라인만 코스트센터 보유 · 대변은 공란통과
화면 렌더링 — 오류 차단 → 기표 → 업로드 → 역분개 삭제10/10

계정·금액은 모두 검증용 데이터입니다.

자주 묻는 질문

저장과 작업을 왜 나눴나요?

이관 데이터는 한 번에 완성되지 않기 때문입니다. 계정을 고치고 금액을 맞추는 동안 전표를 만들면 안 됩니다. 저장은 데이터만 남기고, 준비가 끝났을 때 작업으로 기표합니다. 사양서에도 저장은 '저장만 한다'고 명시돼 있습니다.

한 줄만 오류인데 왜 전부 막나요?

잔액 이관은 차변과 대변이 한 세트이기 때문입니다. 통과한 줄만 넣으면 차대가 깨진 전표가 생기거나 반쪽짜리 잔액이 남습니다. 오류를 고쳐 전부 통과시킨 뒤 한 번에 넣는 편이 결과적으로 빠릅니다.

업로드할 때 회사코드가 다른 줄은 왜 버리나요?

조회조건의 회사코드로 작업 중인데 다른 회사의 잔액이 섞여 들어가면 엉뚱한 장부에 기표됩니다. 사양서가 파일에서 삭제하도록 지정한 것도 그래서입니다. 몇 행이 빠졌는지 알려 주므로 파일이 잘못됐는지 바로 확인할 수 있습니다.

기표된 줄을 삭제하면 어떻게 되나요?

먼저 역분개하고 나서 삭제합니다. 데이터만 지우면 전표는 남아 잔액이 어긋납니다. 삭제 확인창에 몇 건이 역분개 대상이고 어느 전표인지 표시되므로 무엇이 취소되는지 알고 진행할 수 있습니다.

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

기표는 ZFI_DOCUMENT_POSTING이 수행하고 결과는 BKPF·BSEG 표준 구조에 남습니다. 시뮬레이션도 같은 펑션의 모드를 쓰므로 실기표와 판정 기준이 같습니다. 역분개 역시 표준 전표 역분개와 같은 결과입니다.

잔액 이관, 지금 쓰는 SAP 위에서 확장해 보세요

저장과 기표를 나누고 시뮬레이션을 먼저 돌리면 이관 작업이 되돌리기에서 확인하기로 바뀝니다. 현재 SAP 환경 기준으로 어떻게 적용되는지 함께 확인해 드립니다.

잔액 이관기초잔액MigrationZTFIG0010시뮬레이션역분개OpenUI5