SAP 결산 마감 진행현황 — 무엇이 막혀서 다음이 안 되는가
월차 결산 태스크의 진행 상태를 담당자와 카테고리별로 모으고, 선행작업 때문에 대기 중인 항목과 기한이 지난 항목을 가려내는 화면입니다.
결산은 일이 많아서 늦는 게 아니라 순서가 막혀서 늦습니다. 은행 잔액 조정이 끝나야 자금 마감이 되고, 그게 끝나야 재무제표가 나옵니다.
엑셀 체크리스트로 관리하면 누가 무엇을 기다리는지 보이지 않습니다. 표준 결산 관리 구조를 그대로 이어받아 선행 관계와 지연을 함께 보도록 OpenUI5 화면으로 확장한 것이 이 앱입니다. 실제 구동 화면 3종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 결산 단위 — 회사코드와 결산 월(
ClosingMonth) - 태스크 — 순번(
TaskSeq) · ID(TaskId) · 이름(TaskName) - 분류 — 카테고리(
Category)로 자금 · 채권 · 원가 등 구분 - 담당 — 담당자(
OwnerId) · 이름 · 부서(Dept) - 선행 관계 — 선행 태스크(
PredecessorTaskId)와 계획·실제 시각
| 항목 | 내용 |
|---|---|
| 대응 기능 | Financial Closing Cockpit(CLOCO) · Schedule Manager(SCMA) |
| 업무 영역 | 재무회계(FI) · 결산 관리 · 내부통제 |
| Namespace | zui5.closetask |
| 셸 구조 | 조회조건 영역(우측 조회·초기화) + 태스크 목록, 행 선택 시 선행 관계 |
| 화면 수 | 조회 화면 1개 + 상세 |
| 데이터 | 결산 태스크 42건 · 담당자 30건 |
| 성격 | 조회형(Read-Only) — 태스크 실행은 각 담당 업무가 수행 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 3종 둘러보기
회사코드·결산월·카테고리로 조회하면 태스크 진행 상태가 나옵니다 → 대기와 지연 항목을 가려내고 → 무엇이 선행작업인지 확인해 병목을 해소합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드와 결산월을 고릅니다.
- 카테고리로 자금·채권·원가 등 영역을 나눕니다.
- 담당자로 특정 담당의 태스크만 볼 수 있습니다.
- 조회조건 입력필드에서 값을 바꾸거나 Enter 를 누르면 즉시 조회됩니다.
- 지연 항목부터 확인합니다. 계획 시각을 넘긴 미완료 건입니다.
- 대기 항목은 선행작업 때문에 시작하지 못한 건입니다. 선행작업을 먼저 봅니다.
- 행을 선택하면 선행 관계가 열립니다.
- 결과는 CSV 다운로드로 내려받아 결산 회의 자료로 씁니다.
상태 판정 규칙
세 가지 상태가 있고, 그중 둘이 조치 대상입니다.
실제 완료 시각 있음 → 완료
선행 태스크 미완료 → 대기(Blocked) — 시작 불가
선행 완료 · 계획 시각 경과 · 미완료 → 지연(Delayed) — 즉시 조치
선행 완료 · 계획 시각 이전 · 미완료 → 진행 예정
지연 시간 = 현재 − 계획 시각
대기와 지연을 구분하는 이유
둘 다 미완료지만 책임이 다릅니다. 대기는 앞 작업이 안 끝나서 손을 댈 수 없는 상태라 담당자를 재촉해도 소용이 없습니다. 지연은 시작할 수 있는데 안 한 상태입니다. 구분하지 않으면 엉뚱한 사람에게 연락하게 됩니다.
결산 카테고리와 순서
| 카테고리 | 주요 태스크 | 통상 순서 |
|---|---|---|
| 자금 | 은행 잔액 조정 · 자금 마감 | 가장 먼저 |
| 채권채무 | 미결 정리 · 연령분석 · 충당금 | 자금 이후 |
| 자산·원가 | 감가상각 · 원가 배부 · 재고 평가 | 채권채무와 병행 |
| 재무제표 | 재분류 · 이월 · 제표 작성 | 가장 마지막 |
순서는 회사마다 다르며 선행 관계로 정의합니다. 이 화면은 그 정의를 읽어 상태를 판정합니다.
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
회사코드 Bukrs | 필수 | 대상 회사코드 |
결산월 ClosingMonth | 필수 | 2026-08 등 |
카테고리 Category | 선택 | 자금 · 채권 · 원가 등 |
담당자 OwnerId | 선택 | 담당자별 태스크 |
부서 Dept | 선택 | 부서 단위 |
| 상태 | 선택 | 전체 / 대기 / 지연 / 완료 |
결과 컬럼
| 컬럼 | 의미 · 표시 |
|---|---|
순번 TaskSeq · 태스크 ID TaskId | 실행 순서와 식별자 |
태스크명 TaskName | 작업 내용 |
카테고리 Category · CategoryText | 자금 · 채권 등 |
담당자 OwnerName · 부서 Dept | 책임 소재 |
선행 태스크 PredecessorTaskName | 기다리는 작업 |
계획 시각 PlanDateTime | 완료 예정 |
실제 시각 ActualDateTime | 실제 완료 |
| 상태 | 완료 / 대기 / 지연 / 예정. 상태 색 |
| 지연 시간 | 계획 대비 경과 |
SAP 표준 기능 매핑
| 표준 | 역할 | 이 화면에서의 확장 |
|---|---|---|
CLOCO | Financial Closing Cockpit (S/4HANA) | 대기·지연 판정을 얹어 병목 식별 |
SCMA | Schedule Manager (ECC) | 같은 구조로 태스크 관리 |
| 태스크 정의 | 선행 관계와 계획 시각 | 상태 판정 근거 |
T001 | 회사코드 마스터 | 결산 단위 |
| 사용자 마스터 | 담당자 정보 | 책임 소재 표시 |
도입 시 확인이 필요한 부분
결산 태스크 목록과 선행 관계를 먼저 정의해야 합니다. 이 정의가 실제 업무 순서와 다르면 대기 판정이 틀려 오히려 혼란을 줍니다. 처음에는 핵심 태스크 20~30개로 시작해 운영하면서 보완하는 편이 정착이 빠릅니다.
참고 CDS 뷰
@AbapCatalog.sqlViewName: 'ZCCLOSETASK'
@EndUserText.label: '결산 마감 태스크 현황 (Z)'
define view Z_C_CLOSING_TASK
as select from zclose_task as Task
left outer join zclose_task as Pred on Task.predecessor_id = Pred.task_id
and Task.bukrs = Pred.bukrs
and Task.closing_month = Pred.closing_month
{
key Task.bukrs,
key Task.closing_month as ClosingMonth,
key Task.task_id as TaskId,
Task.task_seq as TaskSeq,
Task.task_name as TaskName,
Task.category as Category,
Task.owner_id as OwnerId,
Task.plan_datetime as PlanDateTime,
Task.actual_datetime as ActualDateTime,
Pred.task_name as PredecessorTaskName,
Pred.actual_datetime as PredecessorDone
// 상태 판정: 실제 완료 → 완료, 선행 미완료 → 대기,
// 계획 경과 → 지연 (소비 뷰에서 계산)
}
매핑 이해를 돕기 위한 참고용 설계입니다. 실제 도입 시에는 운영 환경 설정과 릴리즈에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 태스크 테이블 |
| 조회조건 | sap.m.Select · sap.m.DatePicker · sap.m.Input — 우측 끝에 조회·초기화 |
| 이벤트 | 모든 버튼이 onPAI 단일 진입점, fcCode 로 분기 |
| 태스크 테이블 | sap.m.Table — 순번순 정렬, 카테고리 그룹 |
| 상태 표시 | sap.m.ObjectStatus — 완료 / 대기 / 지연 |
| 상세 화면 | sap.m.Dialog — 선행 태스크와 상태 |
담당자와 부서를 함께 두는 이유
결산이 늦어지면 누구에게 연락해야 하는지가 급합니다. 담당자 이름만 있으면 연락처를 다시 찾아야 하고, 부서까지 있으면 부재 시 대체 담당을 바로 찾을 수 있습니다. 결산은 시간이 촉박한 작업이라 이 한 단계가 체감 차이를 만듭니다.
파일 구성
| 경로 | 역할 |
|---|---|
manifest.json | 앱 디스크립터 — 앱 ID(zui5.closetask) · ko 로케일 |
view/Main.view.xml | 조회조건과 태스크 테이블 |
controller/Main.controller.js | 조회 · 상태 판정 · 선행 관계 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise) |
js/formatter.js | 일시 · 상태 색 포맷터 |
localdata/closetask.json | 결산 태스크 42건 |
localdata/owners.json | 담당자 30건 |
검증 결과
| 검증 항목 | 결과 |
|---|---|
| 완료 건은 실제 완료 시각 존재 | 통과 |
| 대기 건은 선행 태스크가 미완료 상태 | 통과 |
| 지연 건은 계획 시각이 기준 시각 이전 | 통과 |
| 선행 태스크 ID 가 같은 결산월 내에 존재 | 통과 |
| 담당자 ID 가 있으면 이름·부서도 존재 | 통과 |
| XML · JSON 전체 파싱 | 오류 0건 |
| 화면 렌더링 — 실브라우저 조회 → 상세 실동작 후 캡처 | 3/3 |
| 테마 런타임 확인 | sap_horizon |
자주 묻는 질문
선행 관계는 어떻게 정의하나요?
태스크마다 선행 태스크 ID 를 지정합니다. 실제 업무 순서를 반영해야 하며, 처음에는 핵심 의존 관계만 걸고 운영하면서 보완하는 편이 좋습니다.
대기 항목이 많으면 문제인가요?
결산 초반에는 정상입니다. 앞 단계가 끝나야 시작할 수 있는 작업이 대부분이기 때문입니다. 중반 이후에도 대기가 많이 남아 있으면 앞 단계에 병목이 있다는 뜻입니다.
매월 태스크를 다시 만들어야 하나요?
템플릿에서 복제합니다. 결산월마다 같은 목록이 생성되고 계획 시각만 그 달에 맞춰 조정되므로, 매번 새로 만들지 않습니다.
SAP 표준 기능과 어떻게 이어지나요?
결산 태스크 관리는 Closing Cockpit 이나 Schedule Manager 가 담당합니다. 이 화면은 그 정의를 읽어 대기와 지연을 구분해 보여 주고, 담당과 부서까지 붙여 연락할 대상을 바로 알 수 있게 하는 확장입니다.