솔루션 홈
내부통제

SAP 마스터 변경 승인 이력 점검 — 바뀐 기록마다 결재와 반복 여부가 따라붙는가

거래처·고객·계정 마스터의 민감 필드 변경을 승인문서 연결, 자기승인, 7일 이내 반복변경, 마감통제기간까지 네 가지 기준으로 가려 확인이 필요한 건만 남깁니다

거래처 은행계좌가 바뀌었다는 사실 자체는 변경문서(CDHDR·CDPOS)만 열어 보면 누구나 알 수 있습니다. 그런데 그 변경에 결재가 따라붙었는지, 승인자가 변경자 본인은 아닌지, 같은 필드가 며칠 새 또 바뀌지는 않았는지, 결산 마감 직전에 몰래 들어온 것은 아닌지는 변경문서 한 건만 봐서는 드러나지 않습니다. 표준 변경문서 조회 화면은 건별로 하나씩 열어야 하고, 이 네 가지 기준을 한 번에 겹쳐 보는 기능은 없습니다.

SAP 표준 변경문서 구조를 그대로 이어받아 거래처·고객·계정 마스터의 민감 필드 변경을 모으고, 승인문서 연결 · 자기승인 · 7일 이내 반복변경 · 마감통제기간 중 변경 네 기준으로 확인이 필요한 건만 걸러내는 화면을 OpenUI5 화면으로 확장했습니다. 실제 구동 화면 4종을 함께 공개합니다.

SAP 표준 기능을 그대로 이어받은 부분

  • 변경문서 구조 — 헤더(CDHDR)와 항목(CDPOS)의 변경 전/후 값 구조를 그대로 사용
  • 오브젝트 구분 — 거래처(공급업체)·고객·계정(G/L) 마스터 오브젝트유형을 표준 분류대로 유지
  • 표준 화면 — 거래처 변경이력(XK04·FK04) · 고객 변경이력(XD04·FD04) · 계정 변경이력(FS04)
항목내용
업무 영역재무회계(FI) · 내부통제 · 마스터데이터 관리
관련 대상 영역내부통제 — 거래처·고객·계정 마스터 변경문서의 민감 필드 변경에 대한 승인 연결·자기승인·반복변경·마감통제기간 점검
Namespacezui5.mdchange
셸 구조조회조건 영역(우측 조회) + 오브젝트유형별 점검 결과 집계 + 변경 명세, 필드 변경 상세 Dialog
화면 수조회 화면 1개 + 상세 다이얼로그
SAP 표준 T-codeXK04 · FK04 · XD04 · FD04 · FS04
데이터 연동 방식OData V2 — 화면 블록마다 엔티티셋에 직접 바인딩
성격조회·점검형 — 변경문서 생성은 표준이 담당, 이 화면은 읽기 전용
UI 테마sap_horizon 단일 적용

실제 화면 4종 둘러보기

오브젝트유형·변경일·점검상태를 넣고 조회하면 오브젝트유형별 점검 결과 집계와 변경 명세가 함께 뜹니다 → 점검상태를 점검 필요로 좁혀 확인 대상만 남기고 → 행을 눌러 필드 변경 상세에서 이전값·이후값을 확인합니다.

아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.

Main.view.xml
마스터 변경 이력 점검 메인 화면 — 조회조건과 오브젝트유형별 점검 결과 집계
메인화면 — 2026년 8월 전체 조회 결과. 22건의 변경문서 중 점검 필요 10건, 확인 필요 2건이 오브젝트유형별로 집계됩니다. 조회 버튼은 조회조건 영역 오른쪽 끝에 있습니다.
점검상태 = 점검 필요
점검상태를 점검 필요로 좁힌 변경 명세 목록
조건 조회 — 점검상태만 "점검 필요"로 좁히면 10건이 변경일 내림차순으로 남고, 승인문서 미연결·자기승인·반복변경·마감통제기간 사유가 행마다 표시됩니다.
DetailDialog.fragment.xml
필드 변경 상세 다이얼로그
필드 변경 상세 — 행을 클릭하면 그 변경문서에 속한 필드별 이전값·이후값과 민감 여부가 나란히 펼쳐집니다.
오브젝트유형별 집계
오브젝트유형별 점검 결과 집계 표
오브젝트유형별 집계 — 거래처·고객·계정 마스터별로 정상·점검 필요·확인 필요 건수와 민감필드 건수합을 모아 봅니다.

조작 방법

  1. 오브젝트유형·변경일(시작/종료)·변경자·점검상태를 조건으로 입력합니다. 비워 두면 전체가 조회됩니다.
  2. 조회 버튼은 조회조건 입력 필드 줄의 가장 오른쪽에 있습니다. 입력 필드에서 Enter 키를 눌러도 같은 조회가 실행됩니다.
  3. 오브젝트유형별 점검 결과 집계에서 어느 유형에 점검 필요 건이 몰려 있는지 먼저 확인합니다.
  4. 변경 명세 표에서 점검상태·사유를 보고, 행을 클릭해 필드 변경 상세를 확인합니다.
  5. 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고객 마스터 변경 이력 표시위와 동일한 판정을 고객 마스터에도 동일 화면에서 적용
FS04G/L 계정 마스터 변경 이력 표시계정 마스터 차단·필드상태그룹 변경까지 같은 기준으로 점검

분석 지표 정의표

지표정의이 화면의 대응 기능원천 데이터비고
민감 필드 변경은행계좌·지급방법·세금번호·차단코드·지급조건 등 자금·통제 영향이 큰 필드의 변경필드 변경 상세의 민감여부 표시CDPOS오브젝트유형별 민감 필드 목록은 사전 정의값입니다.
승인 연결변경문서에 연결된 승인문서번호·승인자변경 명세의 승인문서 컬럼과 자기승인 판정CDHDR(확장 필드 가정)승인 워크플로 연동은 회사 설정에 따라 다릅니다.
반복 변경동일 오브젝트·동일 필드가 7일 이내 다시 변경된 경우점검 사유 "7일 이내 동일필드 반복변경"CDHDR/CDPOS임계일수(7일)는 점검 기준의 예시값입니다.
마감통제기간월말 3영업일 이내의 변경점검 사유 "마감통제기간 중 변경"CDHDR마감통제기간의 실제 영업일 수는 회사 결산 일정에 따릅니다.

참고 CDS 뷰

원천 테이블주요 필드쓰임
CDHDROBJECTCLAS · OBJECTID · USERNAME · UDATE · UTIME변경문서 헤더
CDPOSTABNAME · FNAME · VALUE_OLD · VALUE_NEW변경문서 명세
LFA1LIFNR · NAME1거래처(공급업체) 마스터
KNA1KUNNR · NAME1고객 마스터
SKB1BUKRS · 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.Tablesap.m.ObjectStatus로 점검상태를 표준 ValueState 로만 표시
공통 처리CSV 다운로드 공통 컨트롤러(UTF-8 BOM), 전역 오류 처리기 — 메타데이터 로드 실패·요청 실패·빈 응답을 구분해 안내

파일 구성

경로역할
index.htmlOpenUI5 부트스트랩 — 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.jsCSV 다운로드 공통 처리
model/ErrorHandler.js전역 오류 처리
model/formatter.js상태·민감여부 표시 서식
i18n/i18n_ko.propertiesko 로케일 리소스

운영 데이터는 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 로 전달됩니다. 검증용 샘플 데이터는 별도의 목업 환경에서만 제공되며, 실제 서비스가 연결되지 않으면 오류 메시지를 안내합니다.

마스터 변경, 바뀐 기록에 결재가 따라붙는지부터 확인해 보세요

변경문서를 건별로 하나씩 열어 보는 대신, 승인 연결·자기승인·반복변경·마감통제기간 네 기준을 겹쳐 확인이 필요한 건만 먼저 골라 두면 결산과 감사 대응이 한결 가벼워집니다. 현재 SAP 환경 기준으로 어떻게 적용되는지 함께 확인해 드립니다.

내부통제마스터 변경승인통제자기승인반복변경 점검마감통제기간CDHDRCDPOSOpenUI5