SAP 고정자산 이관 — 취득·상각 이력까지 한 번에 옮기기
기존 시스템의 자산 대장을 엑셀로 받아 점검하고, 이전년도·금년·손상차손 구분에 맞춰 BAPI 파라미터를 구성해 생성하는 화면입니다.
시스템을 새로 여는 날, 고정자산은 잔액만 옮겨서는 안 되는 자산입니다.
취득가액과 그동안 쌓인 감가상각 누계, 올해 이미 반영한 비용까지 함께 넘어가야 새 시스템에서 상각이 이어집니다. 그런데 이 세 값은 넣는 방식이 서로 다릅니다. 작년까지 끝난 자산은 상각영역만 지정하면 되고, 올해 취득한 자산은 취득 트랜잭션을 만들어야 하며, 손상이 있었다면 누계·기표 값을 부호를 뒤집어 넣어야 합니다. 이 화면은 처리 구분을 고르면 그에 맞는 BAPI 파라미터를 구성해 넘기고, 무엇이 들어가는지 미리 보여 줍니다.
SAP 표준 구조를 그대로 이어받은 부분
- 생성 처리 —
BAPI_FIXEDASSET_OVRTAKE_CREATE호출 후BAPI_TRANSACTION_COMMIT - 양식 구조 —
ZFIS027필드(ANLKL · DESCRIPT · CAP_DATE · ACQ_VALUE · ORD_DEP1 · ORD_DEP2) 그대로 - 차량 자산 — 자산클래스 3000 은
timedependentdata-plate_no에 차량번호 - 양식 배포 —
WWWDATA에 저장된 업로드 양식을 내려받아 사용
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI-AA) · 자산 마스터 이관 |
| Namespace | zui5.assetmig |
| 셸 구조 | 실행조건 영역(우측 저장) + 자산 목록 + BAPI 파라미터 미리보기 |
| 화면 수 | 조회·실행 화면 1개 + 파라미터 패널 |
| 데이터 | 자산 28건 (정상 21 · 에러 7) · 자산클래스 6종 |
| 성격 | 등록형 — 자산 생성은 표준 BAPI 가 수행 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 10종 둘러보기
양식을 업로드하면 자산마다 상태가 붙습니다 → 자산을 눌러 BAPI 파라미터를 확인하고 → 생성대상 선택 후 저장합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- Excel Format Download로 양식을 받아 자산 대장을 옮겨 적습니다.
- 회사코드를 넣고 파일 업로드로 양식을 올리면 자산마다 점검이 돌고 상태가 표시됩니다.
- 처리 구분을 고릅니다. 라디오 옆에 그 구분이 어떤 파라미터를 쓰는지 설명이 나옵니다.
- 자산을 클릭하면 아래에 BAPI 파라미터 미리보기가 열립니다. 구분을 바꿔 가며 비교해 봅니다.
- 생성대상 선택으로 작업전 자산만 고른 뒤 저장을 누르면 확인 팝업을 거쳐 생성됩니다.
- 에러만 보기로 반려된 자산을 추려 메시지대로 고친 뒤 다시 올립니다.
구분별 BAPI 파라미터와 점검
구분에 따라 파라미터가 달라지고, 점검은 업로드 시점에 한 번에 끝냅니다.
처리 구분별 BAPI 파라미터 (BAPI_FIXEDASSET_OVRTAKE_CREATE)
이전년도 depreciationareas-area = '01'
depreciationareasx-area = '01'
금년 transactions-current_no = '0001'
transactions-area = '01'
transactions-valuedate = 자본화일자
transactions-assettrtyp = '100'
transactions-amount = 취득액
transactions-fisc_year = 시스템 연도
손상차손 cumulatedvalues-fisc_year = 시스템 연도
cumulatedvalues-area = '1'
cumulatedvalues-acq_value = 취득액
cumulatedvalues-unp_dep = 누계액 × (−1)
postedvalues-area = '1'
postedvalues-unp_dep = 비용 × (−1)
postedvalues-fisc_year = 시스템 연도
공통 자산클래스 3000 → timedependentdata-plate_no = 차량번호
통화는 KRW 고정| 항목 | 산식 · 규칙 |
|---|---|
E01 자산클래스 | 정의되지 않은 클래스면 반려 |
E02 내역 | DESCRIPT 가 비어 있으면 반려 |
E03 자본화일자 | 8자리 날짜가 아니면 반려 |
E04 취득액 | 0 이거나 숫자가 아니면 반려 |
E05 코스트센터 | 등록되지 않은 코스트센터면 반려 |
E06 차량번호 | 자산클래스 3000 전용 — 차량번호가 없으면 반려 |
E07 누계액 | 취득액을 초과하면 반려 |
파라미터를 미리 보여 주는 이유
BAPI 호출은 성공하면 되돌리기 어렵습니다. 특히 자산은 생성 후 삭제가 까다로워, 잘못된 구분으로 수백 건을 넣으면 정리에 며칠이 걸립니다. 그래서 저장 전에 그 자산이 어떤 파라미터로 들어갈지 눈으로 확인할 수 있게 했습니다. 구분을 바꿔 가며 비교해 보면 어느 쪽이 맞는지 판단이 빨라집니다.
처리 구분 3종
자산이 언제 취득됐고 손상이 있었는지에 따라 BAPI 에 넣는 구조가 달라집니다.
| 처리 구분 | 대상 자산 | 사용 구조 | 특징 |
|---|---|---|---|
| 이전년도 | 작년까지 취득과 상각이 끝난 자산 | depreciationareas | 상각영역만 지정하고 잔액은 별도 이관 |
| 금년 | 올해 취득한 자산 | transactions | 취득 트랜잭션(유형 100)을 만들어 취득액 반영 |
| 손상차손 | 손상이 반영된 자산 | cumulatedvalues · postedvalues | 누계·비용을 부호 반전해 전달 |
구분을 먼저 고르게 한 덕분에 잘못된 구조로 자산이 들어가는 사고를 막습니다.
실행 조건
| 필드 | 필수 | 설명 |
|---|---|---|
| Company code | 필수 | 자산을 생성할 회사코드 |
| File name | 필수 | 업로드 양식 경로. 기본 c:\ |
| 처리 구분 | 필수 | 이전년도 / 금년 / 손상차손 — BAPI 파라미터가 달라짐 |
| 생성대상 선택 | 보조 | 작업전 자산만 한 번에 선택 |
| 에러만 보기 | 보조 | 반려된 자산만 추려 보기 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
| 처리결과 | 작업전 / 생성완료 / 에러 |
| 번호 | 양식의 행 번호 |
| 자산클래스 · 내역 | 자산 구분과 이름 |
| 이전자산번호 | 기존 시스템의 자산 키. 이관 추적 기준 |
| 자본화일자 · 코스트센터 · 오더번호 | 취득 시점과 원가 귀속처 |
| 취득액 · 누계액 · 비용 | 양식의 세 금액 |
| 장부가 · 상각률 | 취득액 − 누계액, 누계액 ÷ 취득액 (계산값) |
| 차량번호 | 자산클래스 3000 에만 입력 |
| 자산번호 · MTYPE | 생성된 SAP 자산번호와 BAPI 메시지 유형 |
| 메시지1·2·3 | 생성 결과, 호출 BAPI, COMMIT 수행 내역 |
보조 기능
| 컬럼 | 의미 · 표시 |
|---|---|
| BAPI 파라미터 미리보기 | 자산을 고르면 그 구분으로 구성될 파라미터를 펼쳐 표시 |
| 구분 전환 | 같은 자산도 구분을 바꾸면 파라미터가 달라짐 |
| 에러 자산 | 파라미터를 구성하지 않고 안내 |
SAP 표준 기능 매핑
자산 생성은 표준 BAPI 가 수행합니다. 이 화면은 앞단에서 걸러 내고 구분에 맞는 파라미터를 구성합니다.
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
BAPI_FIXEDASSET_OVRTAKE_CREATE | 자산 이관 생성 BAPI | 구분별 파라미터를 구성해 호출 |
BAPI_TRANSACTION_COMMIT | 커밋 | 생성 성공 시 수행 |
AS91 관점 | 자산 이관 단건 등록 | 화면 입력 대신 양식으로 대체 |
AS03 관점 | 자산 조회 | 반환된 자산번호로 결과 확인 |
WWWDATA | 양식 저장소 | 업로드 양식 배포 |
AW01N 관점 | 자산 explorer | 이관 후 상각 계산 확인 |
운영 데이터 소스 매핑
| 항목 | SAP 원천 | 비고 |
|---|---|---|
| 업로드 구조 | ZFIS027 | 자산클래스 · 내역 · 이전자산번호 · 자본화일자 · 금액 3종 |
| 자산클래스 | ANLA-ANLKL | 클래스별 상각 규칙 결정 |
| 차량 정보 | timedependentdata-plate_no | 자산클래스 3000 에만 사용 |
| 회계연도 | 시스템 연도 | transactions · cumulatedvalues · postedvalues 에 공통 적용 |
| 통화 | KRW 고정 | 사양서 지정 |
도입 시 확인이 필요한 부분
상각영역 구성이 회사마다 다릅니다. 사양서는 영역 '01' 과 '1' 을 쓰지만, 세무·관리 영역을 함께 이관하려면 영역별로 값을 따로 넘겨야 합니다. 자산클래스별 번호범위와 상각키, 이관 기준일(전기이월 시점)도 재무팀과 먼저 확정한 뒤 양식 구성에 반영해야 합니다.
참고 CDS 뷰
이관 결과를 원장과 대조할 때는 자산 마스터와 평가값을 묶은 뷰가 편합니다.
@AbapCatalog.sqlViewName: 'ZCASSETMIG'
@EndUserText.label: '자산 이관 결과 (Z)'
define view Z_C_ASSET_MIGRATION
as select from anla as Master
left outer join anlc as Values_ on Master.bukrs = Values_.bukrs
and Master.anln1 = Values_.anln1
and Master.anln2 = Values_.anln2
left outer join anlz as TimeDep on Master.bukrs = TimeDep.bukrs
and Master.anln1 = TimeDep.anln1
{
key Master.bukrs as Bukrs,
key Master.anln1 as AssetNo,
key Master.anln2 as SubNo,
Master.anlkl as AssetClass,
Master.txt50 as Description,
Master.aktiv as CapitalizedOn,
Master.invnr as LegacyAssetNo,
TimedDep.kostl as CostCenter,
TimeDep.kfzkz as PlateNo,
Values_.kansw as AcquisitionValue,
Values_.knafa as AccumDepreciation,
Values_.nafag as CurrentYearDep,
// 장부가 = 취득액 - 상각누계
Values_.kansw + Values_.knafa as NetBookValue
}이관 결과를 확인하거나 원장과 대조할 때 쓰는 참고용 설계입니다. 생성은 표준 BAPI 가 담당합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 실행조건 영역 · 자산 목록 · 파라미터 패널 |
| 실행조건 | sap.m.Input · sap.m.RadioButtonGroup — 우측 끝에 저장 |
| 자산 목록 | sap.ui.table.Table — 다중선택, 처리결과·번호·클래스 3컬럼 고정 |
| 상태 표시 | sap.m.ObjectStatus + 아이콘 · RowSettings.highlight |
| 파라미터 미리보기 | cellClick → sap.m.List 로 구성 항목 나열 |
| 상각률 강조 | 계산값을 ObjectStatus 색으로 표시 |
| CSV | Blob + UTF-8 BOM — 양식 · 결과 2종 |
장부가와 상각률을 계산해 보여 주는 이유
양식에는 취득액·누계액·비용 세 값만 있습니다. 그런데 이관 전에 확인해야 할 것은 '이 자산이 지금 얼마짜리인가'입니다. 장부가와 상각률을 화면에서 계산해 주면 누계액이 잘못 들어간 자산이나 이미 상각이 끝난 자산을 목록에서 바로 짚을 수 있습니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.assetmig) · ko 로케일 · sap_horizon |
Component.js | 실행조건 모델 · 결과 모델 초기화 |
view/Main.view.xml | 실행조건 + 자산 목록 + 파라미터 패널 |
controller/Main.controller.js | 양식 다운로드 · 업로드 점검 · 구분 전환 · 생성 · CSV |
model/ModelMock.js | 점검 7종 · 구분별 BAPI 파라미터 구성 · 생성 시뮬레이션 |
model/formatter.js | 상태 · 금액 · 일자 · 장부가 · 상각률 · 자산번호 포맷터 |
i18n/i18n_ko.properties | ko 로케일 리소스 — 오류 메시지 포함 |
localdata/assetmig.json | 자산 이관 양식 샘플 (정상·에러 혼재) |
검증 결과
화면 구성에 쓴 데이터는 클래스별 자산과 점검에 걸리는 자산을 섞어 만든 이관 양식입니다.
| 데이터 | 규모 | 구성 |
|---|---|---|
| 업로드 자산 | 28건 | 클래스 6종 (정상 21 · 에러 7) |
| 금액 | 취득 9,589,000,000원 | 누계 3,032,640,000 · 장부가 6,556,360,000 |
| 처리 구분 · 점검 | 3종 · 7종 | 이전년도·금년·손상차손 / 클래스·내역·일자·금액·CC·차량·누계 |
| 검증 항목 | 결과 |
|---|---|
| 정상 라인의 자산클래스가 정의 목록에 존재 · 명칭 일치 | 통과 |
| 정상 라인은 내역 보유 · 자본화일자 8자리 | 통과 |
| 취득액 > 0 · 통화 KRW · 코스트센터 등록 확인 | 통과 |
| 자산클래스 3000 은 차량번호 보유, 그 외는 없음 | 통과 |
| 누계액 ≤ 취득액 · 음수 아님 | 통과 |
| 토지(1000)는 감가상각 누계·비용이 0 | 통과 |
| 자본화일자가 시스템 연도 이전 | 통과 |
| 이전자산번호 중복 없음 · 라인번호 연속 | 통과 |
| E01~E07 각 에러가 실제 위반 조건과 일치 | 통과 |
| 화면 렌더링 — 업로드 → 파라미터 2종 → 에러 → 선택 → 생성 | 10/10 |
자산 내역·금액은 모두 검증용 데이터입니다.
자주 묻는 질문
처리 구분을 왜 셋으로 나눴나요?
자산이 어느 시점에 취득됐고 손상이 있었는지에 따라 BAPI 에 넣어야 할 구조가 다르기 때문입니다. 작년까지 끝난 자산에 취득 트랜잭션을 만들면 올해 취득한 것으로 잡히고, 손상 자산에 누계값을 안 넣으면 상각이 처음부터 다시 계산됩니다. 구분을 먼저 고르게 해 잘못된 구조로 들어가는 것을 막았습니다.
누계액과 비용을 왜 마이너스로 넘기나요?
사양서에 지정된 규칙이자 BAPI 의 값 체계입니다. 감가상각 누계는 자산 가치를 줄이는 값이라 부호를 반대로 전달해야 장부가가 취득액에서 차감되는 형태로 잡힙니다. 화면에서는 양수로 보이지만 파라미터 미리보기에서 실제 넘어가는 값을 확인할 수 있습니다.
자산클래스 3000 만 차량번호를 요구하는 이유는?
차량운반구는 시간종속 데이터에 차량번호를 담도록 사양서에 명시돼 있습니다. 다른 클래스에는 해당 필드가 없어 넣어도 반영되지 않습니다. 그래서 3000 인데 차량번호가 비면 업로드 단계에서 반려합니다.
상각률은 어디에 쓰나요?
이관 전에 이상한 자산을 골라내는 데 씁니다. 상각률이 90%를 넘으면 거의 상각이 끝난 자산이라 이관 대상인지 폐기 대상인지 확인이 필요하고, 0%인데 자본화가 오래된 자산은 누계액이 빠졌을 가능성이 있습니다. 양식에는 없는 계산값이지만 화면에서 보여 줍니다.
SAP 표준 기능과 어떻게 이어지나요?
자산 생성은 BAPI_FIXEDASSET_OVRTAKE_CREATE 가 수행하고 커밋까지 표준 흐름을 따릅니다. 데이터도 ANLA·ANLC 등 표준 구조에 그대로 남습니다. 이 화면은 양식을 점검해 통과한 건만 넘기고, 구분에 맞는 파라미터를 구성하며, 반환된 자산번호와 메시지를 정리하는 역할을 합니다.