SAP 마스터 변경 승인 이력 점검 — 바뀐 기록마다 결재와 반복 여부가 따라붙는가
거래처·고객·계정 마스터의 민감 필드 변경을 승인문서 연결, 자기승인, 7일 이내 반복변경, 마감통제기간까지 네 가지 기준으로 가려 확인이 필요한 건만 남깁니다
거래처 은행계좌가 바뀌었다는 사실 자체는 변경문서(CDHDR·CDPOS)만 열어 보면 누구나 알 수 있습니다. 그런데 그 변경에 결재가 따라붙었는지, 승인자가 변경자 본인은 아닌지, 같은 필드가 며칠 새 또 바뀌지는 않았는지, 결산 마감 직전에 몰래 들어온 것은 아닌지는 변경문서 한 건만 봐서는 드러나지 않습니다. 표준 변경문서 조회 화면은 건별로 하나씩 열어야 하고, 이 네 가지 기준을 한 번에 겹쳐 보는 기능은 없습니다.
SAP 표준 변경문서 구조를 그대로 이어받아 거래처·고객·계정 마스터의 민감 필드 변경을 모으고, 승인문서 연결 · 자기승인 · 7일 이내 반복변경 · 마감통제기간 중 변경 네 기준으로 확인이 필요한 건만 걸러내는 화면을 OpenUI5 화면으로 확장했습니다. 실제 구동 화면 4종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 변경문서 구조 — 헤더(
CDHDR)와 항목(CDPOS)의 변경 전/후 값 구조를 그대로 사용 - 오브젝트 구분 — 거래처(공급업체)·고객·계정(G/L) 마스터 오브젝트유형을 표준 분류대로 유지
- 표준 화면 — 거래처 변경이력(XK04·FK04) · 고객 변경이력(XD04·FD04) · 계정 변경이력(FS04)
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 내부통제 · 마스터데이터 관리 |
| 관련 대상 영역 | 내부통제 — 거래처·고객·계정 마스터 변경문서의 민감 필드 변경에 대한 승인 연결·자기승인·반복변경·마감통제기간 점검 |
| Namespace | zui5.mdchange |
| 셸 구조 | 조회조건 영역(우측 조회) + 오브젝트유형별 점검 결과 집계 + 변경 명세, 필드 변경 상세 Dialog |
| 화면 수 | 조회 화면 1개 + 상세 다이얼로그 |
| SAP 표준 T-code | XK04 · FK04 · XD04 · FD04 · FS04 |
| 데이터 연동 방식 | OData V2 — 화면 블록마다 엔티티셋에 직접 바인딩 |
| 성격 | 조회·점검형 — 변경문서 생성은 표준이 담당, 이 화면은 읽기 전용 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 4종 둘러보기
오브젝트유형·변경일·점검상태를 넣고 조회하면 오브젝트유형별 점검 결과 집계와 변경 명세가 함께 뜹니다 → 점검상태를 점검 필요로 좁혀 확인 대상만 남기고 → 행을 눌러 필드 변경 상세에서 이전값·이후값을 확인합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 오브젝트유형·변경일(시작/종료)·변경자·점검상태를 조건으로 입력합니다. 비워 두면 전체가 조회됩니다.
- 조회 버튼은 조회조건 입력 필드 줄의 가장 오른쪽에 있습니다. 입력 필드에서 Enter 키를 눌러도 같은 조회가 실행됩니다.
- 오브젝트유형별 점검 결과 집계에서 어느 유형에 점검 필요 건이 몰려 있는지 먼저 확인합니다.
- 변경 명세 표에서 점검상태·사유를 보고, 행을 클릭해 필드 변경 상세를 확인합니다.
- CSV 다운로드(UTF-8 BOM)로 조회된 명세를 저장할 수 있습니다.
네 가지 기준 — 점검 필요 판정 규칙
민감 필드가 바뀐 변경문서마다 네 가지를 겹쳐 봅니다. 하나라도 걸리면 점검 필요입니다.
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 민감 필드 변경 + 승인문서 미연결 | 점검 필요 | 승인 절차 없이 변경됐는지 확인합니다. |
| 민감 필드 변경 + 승인자 = 변경자 (자기승인) | 점검 필요 | 겸직·직무분리 상충 여부를 확인합니다. |
| 동일 오브젝트·동일 민감필드가 7일 이내 반복 변경 | 점검 필요 | 반복 변경의 사유를 확인합니다. |
| 마감통제기간(월말 3영업일) 중 민감 필드 변경 | 점검 필요 | 결산 마감 직전 변경의 타당성을 확인합니다. |
| 승인문서는 있으나 승인자 정보 확인 불가 | 확인 필요 | 승인 이력을 원문서로 재확인합니다. |
이 화면이 대신 정하지 않는 것
판정 결과는 확인이 필요한 건을 가려내는 표시이며, 통제 위반 여부를 단정하지 않습니다. 민감 필드 목록, 반복변경 임계일수(7일), 마감통제기간의 실제 영업일 수는 회사의 내부통제 설계와 결산 일정에 따라 달라집니다. 최종 판단은 회사와 감사인이 합니다.
변경문서 집계에서 판정까지
| 단계 | 내용 |
|---|---|
| 1단계 | 변경문서 헤더를 오브젝트유형·오브젝트ID·변경자·변경일시별로 모은다 |
| 2단계 | 변경문서에 속한 필드별 명세(이전값·이후값)를 연결하고 민감 필드 여부를 표시한다 |
| 3단계 | 민감 필드가 포함된 변경문서에 대해 승인문서·승인자 연결 여부를 확인한다 |
| 4단계 | 동일 오브젝트·동일 필드의 7일 이내 반복 변경, 마감통제기간 중 변경 여부를 판정한다 |
| 5단계 | 판정 결과를 오브젝트유형별로 집계해 요약 테이블로 대사한다 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 오브젝트유형 | 선택 | 전체 / 거래처(공급업체) 마스터 / 고객 마스터 / 계정(G/L) 마스터 |
| 변경일(시작/종료) | 선택 | 변경일자 범위. 비워 두면 전체 기간이 조회됩니다. |
| 변경자 | 선택 | 부분 일치로 검색합니다. |
| 점검상태 | 선택 | 전체 / 정상 / 점검 필요 / 확인 필요 |
결과 컬럼
| 영역 | 컬럼 · 표시 |
|---|---|
| 오브젝트유형별 집계 | 오브젝트유형 · 점검상태 · 건수 · 민감필드건수합 |
| 변경 명세 | 변경번호 · 오브젝트유형 · 오브젝트ID · 변경자 · 변경일 · 변경시각 · 변경유형 · 필드변경건수 · 민감필드건수 · 승인문서 · 점검상태 · 사유 |
| 필드 변경 상세 | 원천테이블 · 필드명 · 필드텍스트 · 이전값 · 이후값 · 민감여부 |
SAP 표준 기능 매핑
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 그 데이터에 승인·반복·마감기간 관점의 조회·점검을 더해 확장합니다.
| 표준 T-code | 표준 기능 | 이 화면이 더한 것 |
|---|---|---|
XK04 / FK04 | 거래처(공급업체) 마스터 변경 이력 표시 | 민감 필드·승인·반복·마감기간 조건으로 점검 필요 건을 자동으로 가려냄 |
XD04 / FD04 | 고객 마스터 변경 이력 표시 | 위와 동일한 판정을 고객 마스터에도 동일 화면에서 적용 |
FS04 | G/L 계정 마스터 변경 이력 표시 | 계정 마스터 차단·필드상태그룹 변경까지 같은 기준으로 점검 |
분석 지표 정의표
| 지표 | 정의 | 이 화면의 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| 민감 필드 변경 | 은행계좌·지급방법·세금번호·차단코드·지급조건 등 자금·통제 영향이 큰 필드의 변경 | 필드 변경 상세의 민감여부 표시 | CDPOS | 오브젝트유형별 민감 필드 목록은 사전 정의값입니다. |
| 승인 연결 | 변경문서에 연결된 승인문서번호·승인자 | 변경 명세의 승인문서 컬럼과 자기승인 판정 | CDHDR(확장 필드 가정) | 승인 워크플로 연동은 회사 설정에 따라 다릅니다. |
| 반복 변경 | 동일 오브젝트·동일 필드가 7일 이내 다시 변경된 경우 | 점검 사유 "7일 이내 동일필드 반복변경" | CDHDR/CDPOS | 임계일수(7일)는 점검 기준의 예시값입니다. |
| 마감통제기간 | 월말 3영업일 이내의 변경 | 점검 사유 "마감통제기간 중 변경" | CDHDR | 마감통제기간의 실제 영업일 수는 회사 결산 일정에 따릅니다. |
참고 CDS 뷰
| 원천 테이블 | 주요 필드 | 쓰임 |
|---|---|---|
CDHDR | OBJECTCLAS · OBJECTID · USERNAME · UDATE · UTIME | 변경문서 헤더 |
CDPOS | TABNAME · FNAME · VALUE_OLD · VALUE_NEW | 변경문서 명세 |
LFA1 | LIFNR · NAME1 | 거래처(공급업체) 마스터 |
KNA1 | KUNNR · NAME1 | 고객 마스터 |
SKB1 | BUKRS · SAKNR | 계정(G/L) 마스터(회사코드 뷰) |
define view entity ZC_MasterChangeItem
as select from ZI_ChangeDocumentHeader as h
inner join ZI_ChangeDocumentItem as i on i.ChangeNo = h.ChangeNo
{
key h.ChangeNo as ChangeNo,
h.ObjectClass as ObjectClass,
h.ObjectId as ObjectId,
h.ChangedBy as ChangedBy,
h.ChangeDate as ChangeDate,
i.FieldName as FieldName,
i.OldValue as OldValue,
i.NewValue as NewValue
}
표준 CDS 뷰 이름과 필드는 시스템 릴리스에 따라 다를 수 있으므로, 도입 시 실제 시스템에서 확인해 확정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 · 구성 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 패널 · 집계 패널 · sap.ui.table.Table 명세 |
| 데이터 연동 | manifest.json dataSources.mainService(OData V2, 상대 경로) — 화면 블록마다 엔티티셋에 직접 바인딩합니다. 모델 설정은 useBatch:false · defaultBindingMode:"OneWay" · defaultCountMode:"Inline" |
| 조회조건 | sap.m.Select · sap.m.Input — 우측 끝에 조회·초기화 버튼, Enter 키로 즉시 재조회, sap/ui/model/Filter로 조회조건을 조립합니다. "전체"를 고른 조건은 필터를 만들지 않습니다 |
| 정렬 · 페이징 | sap.ui.table.Table의 sorter와 모델의 페이징 기능으로 처리 |
| 명세 표 | sap.ui.table.Table — 컬럼 10개를 넘어 셀 클릭 시 상세 다이얼로그를 엽니다 |
| 집계 표 | sap.m.Table — sap.m.ObjectStatus로 점검상태를 표준 ValueState 로만 표시 |
| 공통 처리 | CSV 다운로드 공통 컨트롤러(UTF-8 BOM), 전역 오류 처리기 — 메타데이터 로드 실패·요청 실패·빈 응답을 구분해 안내 |
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon, OData 서비스에 연결 |
Component.js | 화면 상태·조회조건 모델 초기화, 전역 오류 처리기 연결 |
manifest.json | 앱 디스크립터 — zui5.mdchange · ko 로케일, OData 서비스와 모델 선언 |
view/Main.view.xml | 조회조건 · 집계 패널 · 명세 테이블 |
view/DetailDialog.fragment.xml | 필드 변경 상세 다이얼로그 |
controller/Main.controller.js | 조회조건 조립 · 바인딩 · 다이얼로그 · CSV 다운로드 |
controller/BaseController.js | CSV 다운로드 공통 처리 |
model/ErrorHandler.js | 전역 오류 처리 |
model/formatter.js | 상태·민감여부 표시 서식 |
i18n/i18n_ko.properties | ko 로케일 리소스 |
운영 데이터는 OData 서비스가 제공하며, 검증용 샘플 데이터는 화면과 완전히 분리해 별도로 둡니다. 화면과 판정 로직은 그대로 씁니다.
검증 결과
화면 구성에 쓴 검증용 샘플 데이터는 22건의 변경문서(필드변경 43건)를 기준으로 오브젝트유형별 집계와 명세 건수가 정확히 맞물리도록 구성했습니다.
| 검증 항목 | 결과 |
|---|---|
| SummarySet 집계 건수 합 = ChangeHeaderSet 총 건수 | 통과(차이 0) |
| FieldChangeSet 건수 = ChangeHeaderSet.FieldChangeCount 합 | 통과(차이 0) |
| 점검상태 판정 결과 — 정상 10건 · 점검 필요 10건 · 확인 필요 2건 | 확인(의도적으로 구성한 케이스) |
| 오브젝트유형=거래처 필터 시 22건 → 9건으로 정상 축소 | 확인 |
| 점검상태=점검 필요 필터 시 10건으로 정상 축소 | 확인 |
| $orderby=ChangeDate desc · $top=3 정상 정렬 | 확인 |
| $inlinecount=allpages → 총 22건 확인 | 확인 |
| 표시 금지 검사 — 커스텀 프로그램ID·앱 식별자·출처 표현 검출 | 0건 |
| 화면 렌더링 — 실브라우저에서 조회 → 필터 → 행 클릭 상세까지 실동작 후 캡처 | 4/4 |
조회 버튼 위치 · sap_horizon 테마 · Enter 키 조회 · 서비스 미연결 시 오류 안내 | 확인 |
모든 데이터는 검증용으로 구성한 가상 데이터입니다.
자주 묻는 질문
이 화면의 판정이 곧 통제 위반을 의미하나요?
아닙니다. 이 화면은 마스터 변경 이력을 모아 승인·반복·마감기간 기준으로 확인이 필요한 건을 가려내는 점검 도구이며, 최종 판단은 회사와 감사인이 합니다.
민감 필드와 마감통제기간은 어떻게 정하나요?
은행계좌·지급방법·세금번호·차단코드·지급조건 등을 예시 민감 필드로, 월말 3영업일을 예시 마감통제기간으로 둡니다. 실제 적용 시에는 회사의 내부통제 설계와 결산 일정에 맞춰 조정합니다.
자기승인 판정은 어떻게 이뤄지나요?
변경문서에 연결된 승인문서의 승인자와 변경을 수행한 사용자가 같은 경우를 자기승인으로 표시합니다. 승인 워크플로 자체가 없는 회사라면 이 판정은 승인문서 연결 여부 확인으로 대체됩니다.
실제 운영 환경에서는 데이터가 어떻게 연동되나요?
화면은 OData V2 서비스(엔티티셋 3종)에 바인딩되어 있으며 조회조건은 모두 $filter 로 전달됩니다. 검증용 샘플 데이터는 별도의 목업 환경에서만 제공되며, 실제 서비스가 연결되지 않으면 오류 메시지를 안내합니다.