SAP 잔액 Migration — 넣기 전에 한 번 돌려 보고 넣는다
기초잔액을 양식으로 올려 저장해 두고, 시뮬레이션을 통과한 건만 실제 전표로 기표하는 화면입니다.
시스템을 새로 열 때 기초잔액을 넣는 작업은 한 번에 끝나지 않습니다.
계정이 틀리고, 전기기간이 막혀 있고, 차대가 안 맞습니다. 그런데 이걸 기표해 보고서야 알면 이미 절반이 들어간 상태에서 역분개부터 해야 합니다. 그래서 이 화면은 저장과 기표를 나눕니다. 양식을 올려 저장해 두고 고쳐 가다가, 준비가 되면 시뮬레이션으로 먼저 돌려 봅니다. 한 줄이라도 오류가 나면 실기표는 시작하지 않습니다.
SAP 표준 구조를 그대로 이어받은 부분
- 이관 데이터 —
ZTFIG0010(계정잔액 이관) 구조 그대로 - 기표 처리 —
ZFI_DOCUMENT_POSTING, BDC 모드는 화면에서 지정 - 역분개 — 전표가 생성된 라인은
FB08로 역분개한 뒤 삭제 - 양식 배포 —
SMW0에 저장된 양식을 내려받아 사용
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 결산 · 데이터 이관 |
| Namespace | zui5.balmig |
| 셸 구조 | 조회조건 영역(우측 조회) + 이관 데이터 목록, 툴바에 7개 동작 |
| 화면 수 | 조회·편집 화면 1개 |
| 데이터 | 라인 28건 · 작업키 3개 (기표완료 10 · 오류 2) |
| 성격 | 등록·기표형(CRUD) — 기표는 표준 펑션이 수행 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 10종 둘러보기
양식을 업로드해 저장해 두고 → 작업으로 시뮬레이션을 돌린 뒤 → 전부 통과했을 때만 기표합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 양식다운로드로 양식을 받아 이관 잔액을 작성합니다.
- 회사코드·작업일자·작업key를 지정하고 업로드로 파일을 올립니다.
- 저장하면 데이터만 남습니다. 계정이나 금액을 고쳐 가며 준비합니다.
- 전체 선택 후 작업을 누르면 시뮬레이션이 먼저 돕니다.
- 오류가 있으면 메시지 칸에서 사유를 확인하고 고친 뒤 다시 실행합니다.
- 전부 통과하면 확인창을 거쳐 기표됩니다. 되돌리려면 삭제로 역분개합니다.
버튼별 동작 규칙
버튼 하나하나가 사양서에 정해진 동작을 그대로 수행합니다.
버튼별 동작 (사양서)
전체 선택 / 전체선택 해제
리스트에 보이는 모든 라인을 선택 / 선택 해제
양식다운로드
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 원천 | 비고 |
|---|---|---|
| 이관 데이터 | ZTFIG0010 | JOBDAT · JOBKEY · JOBSEQ 로 식별 |
| 회사코드 | T001 | 조회조건과 업로드 필터 기준 |
| 전표 필드 | BKPF · BSEG 항목 | 기표 시 그대로 전달 |
| 기표 | ZFI_DOCUMENT_POSTING | BDC 모드는 화면 지정값 |
| 양식 | 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단계 기표 | 시뮬레이션 결과에 따라 확인창 또는 오류창 분기 |
| CSV | Blob + 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.properties | ko 로케일 리소스 |
localdata/balmig.json | 이관 데이터 시뮬레이션 데이터 |
검증 결과
화면 구성에 쓴 데이터는 기표 완료·미기표·오류가 섞인 이관 배치입니다.
| 데이터 | 규모 | 구성 |
|---|---|---|
| 이관 라인 | 28건 | 작업키 3개 (기표완료 10 · 미기표 18) |
| 작업키 | M01 · M02 · M03 | 기표 완료 / 미기표 / 시뮬레이션 오류 |
| 금액 | 차변 = 대변 | 작업키마다 균형이 맞도록 구성 |
| 검증 항목 | 결과 |
|---|---|
| 작업키가 정의 목록에 존재 · 순번이 1부터 연속 | 통과 |
| 전기키가 정의 목록에 존재 · 차대 구분 일치 | 통과 |
| 계정이 마스터에 존재 · 대체계정과 일치 | 통과 |
| 작업키별 차변 합계 = 대변 합계 | 통과 |
| 금액 > 0 · 거래통화금액 = 현지통화금액 (KRW) | 통과 |
| 증빙일 ≤ 전기일 · 가치일자·기산일이 전기일과 동일 | 통과 |
| 기표 완료 건만 전표번호·회계연도 보유 | 통과 |
| 오류 라인은 전표번호가 없음 (실기표 차단) | 통과 |
| 차변 라인만 코스트센터 보유 · 대변은 공란 | 통과 |
| 화면 렌더링 — 오류 차단 → 기표 → 업로드 → 역분개 삭제 | 10/10 |
계정·금액은 모두 검증용 데이터입니다.
자주 묻는 질문
저장과 작업을 왜 나눴나요?
이관 데이터는 한 번에 완성되지 않기 때문입니다. 계정을 고치고 금액을 맞추는 동안 전표를 만들면 안 됩니다. 저장은 데이터만 남기고, 준비가 끝났을 때 작업으로 기표합니다. 사양서에도 저장은 '저장만 한다'고 명시돼 있습니다.
한 줄만 오류인데 왜 전부 막나요?
잔액 이관은 차변과 대변이 한 세트이기 때문입니다. 통과한 줄만 넣으면 차대가 깨진 전표가 생기거나 반쪽짜리 잔액이 남습니다. 오류를 고쳐 전부 통과시킨 뒤 한 번에 넣는 편이 결과적으로 빠릅니다.
업로드할 때 회사코드가 다른 줄은 왜 버리나요?
조회조건의 회사코드로 작업 중인데 다른 회사의 잔액이 섞여 들어가면 엉뚱한 장부에 기표됩니다. 사양서가 파일에서 삭제하도록 지정한 것도 그래서입니다. 몇 행이 빠졌는지 알려 주므로 파일이 잘못됐는지 바로 확인할 수 있습니다.
기표된 줄을 삭제하면 어떻게 되나요?
먼저 역분개하고 나서 삭제합니다. 데이터만 지우면 전표는 남아 잔액이 어긋납니다. 삭제 확인창에 몇 건이 역분개 대상이고 어느 전표인지 표시되므로 무엇이 취소되는지 알고 진행할 수 있습니다.
SAP 표준 기능과 어떻게 이어지나요?
기표는 ZFI_DOCUMENT_POSTING이 수행하고 결과는 BKPF·BSEG 표준 구조에 남습니다. 시뮬레이션도 같은 펑션의 모드를 쓰므로 실기표와 판정 기준이 같습니다. 역분개 역시 표준 전표 역분개와 같은 결과입니다.