SAP 계정 업로드 — 엑셀 한 장으로 G/L 마스터 만들기
작성한 양식을 읽어 계정과목을 한 번에 생성·변경하고, 라인마다 성공 여부와 오류 사유를 돌려주는 화면입니다.
계정과목을 수십 개 새로 만들어야 할 때, 화면을 하나씩 열어 입력하면 하루가 갑니다. 더 큰 문제는 중간에 하나가 틀렸을 때입니다.
어디까지 들어갔는지 알 수 없어 처음부터 다시 확인해야 합니다. 그래서 업로드는 넣는 것보다 무엇이 왜 안 들어갔는지 돌려주는 것이 핵심입니다. 이 화면은 양식을 읽어 라인마다 다섯 가지를 검증하고, 통과한 줄만 표준 트랜잭션으로 처리한 뒤, 실패한 줄은 사유와 함께 남깁니다. 오류만 걸러 보고 고쳐서 다시 올리면 됩니다.
SAP 표준 구조를 그대로 이어받은 부분
- 마스터 구조 —
SKA1(계정과목표) ·SKB1(회사코드) 그대로 - 처리 방식 — 계정은
FS00, 텍스트는FST2BDC 로 표준 트랜잭션 경유 - 입력값 점검 —
BUKRS·KTOPL·WAERS·SPRAS - 결과 출력 — 계정별 성공 여부와 메시지 (사양서의 ALV 결과 목록)
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI-GL) · 마스터 일괄 등록 |
| Namespace | zui5.glupload |
| 셸 구조 | 실행조건 영역(우측 실행) + 라인별 결과 목록, 오류만 보기 토글 |
| 화면 수 | 조회·실행 화면 1개 |
| 데이터 | 업로드 31행 (정상 26 · 오류 5) · 기존 마스터 16개 |
| 성격 | 등록형(Batch Input) — 마스터 생성·변경은 표준 트랜잭션이 수행 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 7종 둘러보기
조건을 넣고 양식을 선택하면 내용이 올라옵니다 → 실행하면 줄마다 검증 후 처리되고 → 오류만 보기로 고칠 줄을 추립니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드 · 계정과목표 · 통화 · 언어 네 가지를 넣습니다. 하나라도 비면 실행 단계에서 막습니다.
- 처리 유형을 고릅니다. 속성까지 올리려면 G/L Acc. Upload, 명칭만 고치려면 G/L Text Upload 입니다.
- 양식 받기로 빈 양식을 내려받아 작성합니다. 헤더 1줄과 예시 1줄이 들어 있습니다.
- 파일 선택으로 작성한 양식을 올립니다. Header 행을 제외한 나머지가 목록에 표시됩니다.
- 실행을 누르면 라인별로 검증한 뒤 통과한 줄만 처리하고, 결과가 줄마다 붙습니다.
- 오류만 보기로 실패한 줄을 추리고, 결과 CSV로 전체 결과를 내려받아 수정합니다.
업로드 검증 규칙
업로드는 넣는 것보다 걸러 내는 것이 중요합니다. 라인마다 다음 다섯 가지를 점검합니다.
업로드 흐름
1) 입력값 점검 BUKRS · KTOPL · WAERS · SPRAS
2) 파일 적재 Header line 제외
3) 라인 검증 아래 5가지
4) 생성/변경 판정 기존 마스터 존재 여부
5) BDC 처리 계정 → FS00, 텍스트 → FST2
6) 결과 출력 라인별 성공 여부와 메시지| 항목 | 산식 · 규칙 |
|---|---|
E01 계정과목 형식 | 8자리 숫자가 아니면 반려 |
E02 계정그룹 | 계정과목표에 정의되지 않은 그룹이면 반려 |
E03 계정명 | 단문(20자)이 비어 있으면 반려 |
E04 재무제표 구분 | 대차 계정인데 대차대조표 표시가 없거나, 손익인데 표시가 있으면 반려 |
E05 계정통화 | 회사코드 통화와 다르면 반려 |
| 생성 / 변경 판정 | 기존 마스터에 있으면 변경, 없으면 생성 |
오류 메시지에 코드를 함께 남기는 이유
사유만 적으면 담당자마다 다르게 읽습니다. E02 처럼 코드를 붙이면 같은 오류가 반복될 때 무엇을 고쳐야 하는지 바로 합의됩니다. 결과 CSV 에도 코드가 함께 나가므로 여러 사람이 나눠 수정할 때 기준이 됩니다.
처리 유형 2종
같은 업로드지만 무엇을 바꾸느냐에 따라 거치는 트랜잭션이 다릅니다.
| T-code | 처리 유형 | 대상 | 포함 속성 |
|---|---|---|---|
FS00 | G/L Acc. Upload | 계정과목표(SKA1)와 회사코드(SKB1) 속성을 함께 생성·변경 | 계정그룹 · 재무제표 구분 · 계정통화 · 필드상태그룹 · 미결관리 |
FST2 | G/L Text Upload | 계정 텍스트만 변경 | 계정명 단문 · 장문 |
텍스트 업로드를 따로 둔 덕분에 명칭만 고칠 때 다른 속성이 함께 바뀌는 사고를 막습니다.
실행 조건
| 필드 | 필수 | 설명 |
|---|---|---|
회사코드 BUKRS | 필수 | 마스터를 넣을 회사코드 |
계정과목표 KTOPL | 필수 | 계정과목표 키 |
통화 WAERS | 필수 | 계정통화 검증 기준 |
언어 SPRAS | 필수 | 계정 텍스트 언어 |
| 처리 유형 | 필수 | G/L Acc. Upload (FS00) / G/L Text Upload (FST2) |
| 업로드 파일 | 필수 | 작성한 양식. [양식 받기]로 헤더와 예시를 내려받을 수 있음 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
| 라인 | 양식의 행 번호. 오류 라인을 엑셀에서 찾는 기준 |
| 상태 | 성공 / 오류 — 색으로 구분 |
| 계정과목 | G/L 계정 코드 |
| 처리구분 | 생성 / 변경 — 기존 마스터 존재 여부로 판정 |
| 계정명(단문) · (장문) | 20자 · 50자 텍스트 |
| 계정그룹 · 재무제표 · 대차계정 | 계정 성격을 정하는 속성 |
| 계정통화 · 필드상태그룹 · 미결관리 | 회사코드 레벨 속성 |
| T-code | 실제 처리에 쓰인 트랜잭션 |
| 메시지 | 성공 내용 또는 오류 코드와 사유 |
보조 기능
| 컬럼 | 의미 · 표시 |
|---|---|
| 오류만 보기 | 실패한 줄만 남겨 수정 대상을 추림 |
| 결과 CSV | 전체 라인을 상태·메시지와 함께 내려받아 담당자에게 전달 |
| 양식 받기 | 헤더 1줄과 예시 1줄이 담긴 빈 양식 |
SAP 표준 기능 매핑
마스터 생성·변경은 표준 트랜잭션이 수행합니다. 이 화면은 그 앞뒤에서 검증과 결과 정리를 맡습니다.
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
FS00 | G/L 계정 개별 처리 | 양식의 각 줄을 BDC 로 넘겨 일괄 처리 |
FST2 | 계정 텍스트 변경 | 텍스트만 바꿀 때 별도 유형으로 분리 |
SKA1 · SKB1 | 계정과목표·회사코드 마스터 | 생성·변경 대상 테이블 |
T001 | 회사코드 | 계정과목표·통화 확인 기준 |
FS10N 관점 | 계정 잔액 | 업로드 후 계정이 실제로 쓰이는지 확인하는 후속 화면 |
운영 데이터 소스 매핑
| 항목 | SAP 원천 | 비고 |
|---|---|---|
| 계정과목표 마스터 | SKA1 | 계정그룹 · 재무제표 구분 · 텍스트 |
| 회사코드 마스터 | SKB1 | 계정통화 · 필드상태그룹 · 미결관리 |
| 회사코드 | T001 | 계정과목표(KTOPL) · 통화(WAERS) 확인 |
| 처리 방식 | BDC FS00 / FST2 | 표준 트랜잭션 경유 |
| 결과 출력 | ALV 결과 목록 | 라인별 성공 여부와 메시지 |
도입 시 확인이 필요한 부분
계정그룹별 필수 필드는 필드상태그룹 설정에 따라 달라집니다. 여기서 검증하는 다섯 가지는 공통 항목이고, 실제 도입 때는 회사의 필드상태 설정을 읽어 필수 항목을 동적으로 점검하는 편이 안전합니다. 미결관리나 조정계정처럼 나중에 바꾸기 어려운 속성은 업로드 전에 한 번 더 확인하는 절차를 두길 권합니다.
참고 CDS 뷰
업로드 결과를 확인하거나 기존 마스터를 조회할 때는 계정과목표와 회사코드 속성을 묶은 뷰가 편합니다.
@AbapCatalog.sqlViewName: 'ZCGLMASTER'
@EndUserText.label: 'G/L 계정 마스터 (Z)'
define view Z_C_GL_ACCOUNT_MASTER
as select from ska1 as Coa
inner join skb1 as CcData on Coa.ktopl = CcData.ktopl
and Coa.saknr = CcData.saknr
left outer join skat as AcctText on Coa.ktopl = AcctText.ktopl
and Coa.saknr = AcctText.saknr
and AcctText.spras = $session.system_language
{
key Coa.ktopl as Ktopl,
key Coa.saknr as Saknr,
key CcData.bukrs as Bukrs,
Coa.ktoks as Ktoks,
Coa.xbilk as IsBalanceSheet,
AcctText.txt20 as ShortText,
AcctText.txt50 as LongText,
CcData.waers as Waers,
CcData.fstag as Fstag,
CcData.xopvw as OpenItemMgmt,
CcData.mitkz as ReconAcctType
}업로드 후 결과를 확인하거나 기존 마스터를 조회할 때 쓰는 참고용 설계입니다. 생성·변경은 표준 트랜잭션이 담당합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 실행조건 영역 · 결과 목록 |
| 실행조건 | sap.m.Input · sap.m.RadioButtonGroup — 우측 끝에 실행 |
| 결과 목록 | sap.ui.table.Table — 라인·상태·계정 3컬럼 고정 |
| 상태 표시 | RowSettings.highlight · sap.m.ObjectStatus — 성공·변경·오류 구분 |
| 진행 단계 | sap.m.ObjectStatus — 파일 선택 전 · 실행 대기 · 실행 완료 |
| 오류 필터 | 버튼 토글로 오류 라인만 남김 |
| CSV | Blob + UTF-8 BOM — 양식 · 결과 2종 |
적재와 실행을 나눈 이유
파일을 고르는 즉시 처리하면 잘못된 파일을 골랐을 때 되돌릴 수 없습니다. 적재 단계에서는 내용만 보여 주고, 실행은 확인 창을 거쳐 별도로 누르게 했습니다. 무엇이 몇 줄 들어가는지 눈으로 보고 나서 진행하는 순서입니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.glupload) · ko 로케일 · sap_horizon |
Component.js | 실행조건 모델 · 결과 모델 초기화 |
view/Main.view.xml | 실행조건 + 라인별 결과 목록 |
controller/Main.controller.js | 입력값 점검 · 파일 적재 · 실행 · 오류 필터 · CSV |
model/ModelMock.js | 양식 파싱 자리 · 라인 검증 · 생성/변경 판정 · BDC 처리 |
model/formatter.js | 상태 · 처리구분 · 재무제표 구분 · 플래그 포맷터 |
i18n/i18n_ko.properties | ko 로케일 리소스 — 오류 메시지 포함 |
localdata/glupload.json | 업로드 양식 샘플과 기존 마스터 |
검증 결과
화면 구성에 쓴 데이터는 신규·변경·오류가 섞인 업로드 양식과 기존 마스터입니다.
| 데이터 | 규모 | 구성 |
|---|---|---|
| 업로드 양식 | 31행 | 정상 26행 (생성 20 · 변경 6) · 오류 5행 |
| 기존 마스터 | 16개 | 변경 판정 기준 |
| 검증 규칙 | 5종 | 형식 · 계정그룹 · 계정명 · 재무제표 구분 · 통화 |
| 검증 항목 | 결과 |
|---|---|
| 정상 라인의 계정과목 코드는 8자리 숫자 | 통과 |
| 정상 라인의 계정그룹이 계정과목표에 정의됨 | 통과 |
| 계정그룹 유형과 재무제표 구분 일치 | 통과 |
| 정상 라인의 통화가 회사코드 통화와 동일 | 통과 |
| 계정명 단문·장문 존재 · 단문 20자 이내 | 통과 |
| 처리구분 생성은 기존에 없고, 변경은 존재 | 통과 |
| 오류 라인의 오류코드가 정의 목록에 존재 | 통과 |
| E01~E05 각 오류가 실제 위반 조건과 일치 | 통과 |
| 라인번호 연속·중복 없음 | 통과 |
| 화면 렌더링 — 파일 미선택 차단 → 적재 → 실행 → 오류 필터 | 7/7 |
계정과목·명칭은 모두 검증용 데이터입니다.
자주 묻는 질문
오류가 섞여 있으면 전체가 취소되나요?
아닙니다. 줄 단위로 처리합니다. 통과한 줄은 들어가고 실패한 줄만 남습니다. 전체를 되돌리면 정상인 줄까지 다시 올려야 해서 오히려 손이 많이 갑니다. 대신 실행 결과에 오류 건수를 함께 띄워 그냥 지나치지 않도록 했습니다.
생성과 변경을 따로 고르지 않아도 되나요?
네. 계정과목이 기존 마스터에 있으면 변경, 없으면 생성으로 자동 판정합니다. 담당자가 신규인지 아닌지를 매번 확인해 표시할 필요가 없고, 표시를 잘못해서 생기는 오류도 사라집니다.
계정 업로드와 텍스트 업로드를 왜 나눴나요?
명칭만 바꾸는 일이 잦기 때문입니다. 계정 속성은 그대로 두고 텍스트만 고칠 때 전체 속성을 다시 채워 올리면 실수로 다른 값이 바뀔 수 있습니다. 텍스트 업로드는 FST2 로 텍스트만 건드립니다.
라인번호는 어디에 쓰나요?
양식의 행 번호와 같습니다. 오류 라인 27번이 나오면 엑셀 27행을 열어 고치면 됩니다. Header 행을 제외한 뒤에도 번호가 양식과 어긋나지 않도록 맞춰 뒀습니다.
SAP 표준 기능과 어떻게 이어지나요?
마스터 생성·변경 자체는 FS00 과 FST2 표준 트랜잭션이 수행합니다. 이 화면은 그 앞단에서 양식을 읽고 검증해 통과한 줄만 넘기며, 뒷단에서 라인별 결과를 모아 돌려주는 역할을 합니다. 데이터는 SKA1·SKB1 표준 구조 그대로 남습니다.