SAP 전기기간·전기권한 통제 점검 — 마감된 기간으로 몰래 들어온 전표는 없는가
회계기간 마감 이후의 사후 전기와, 권한 없는 사용자의 전기를 활동 이력으로 함께 확인합니다
회계기간을 마감하면 그 기간으로의 전기는 더 이상 들어오지 않아야 합니다. 하지만 실제로는 마감 직후 발견된 오류를 바로잡거나, 승인 지연으로 처리 시점이 늦어지면서 이미 닫힌 기간으로 전표가 들어오는 경우가 있습니다. 권한도 마찬가지입니다. 특정 회사코드나 전표유형에 대한 전기 권한은 필요한 사람에게만 부여돼야 하지만, 조직 개편이나 임시 대행 과정에서 권한 범위 밖의 사용자가 전기하는 일이 생길 수 있습니다. 두 가지 모두 전표 헤더만 봐서는 정상 전표와 구분되지 않고, 기간통제 설정·권한 마스터와 대조해야 드러납니다.
표준 전표 헤더·기간통제 구조를 그대로 이어받아, 전표의 전기일·입력일을 기간통제 마스터와 대조해 사후 전기 여부를, 작성자·회사코드·전표유형 조합을 권한 마스터와 대조해 권한 위반 여부를 함께 판정하는 화면을 OpenUI5로 확장했습니다. 판정 결과는 항상 "확인 필요"로 표시해 담당자가 직접 경위를 확인하도록 안내합니다. 실제 구동 화면 5종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 기간통제 — 회사코드별 전기기간 개방·마감 설정은 표준 기간통제(OB52) 구조를 그대로 활용
- 전표 원천 — 전기일·입력일·작성자는 표준 전표 헤더 구조를 그대로 사용
- 표준 화면 — 기간통제 설정(OB52) · 전표 조회(FB03)
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 내부통제 |
| 관련 대상 영역 | - (내부통제 · 전기기간·전기권한 통제) |
| Namespace | zui5.postctrl |
| 셸 구조 | 조회조건 영역(우측 조회) + 요약 패널 + 탭 4종, 상세 Dialog |
| 화면 수 | 조회 화면 1개(탭 4종) + 상세 다이얼로그 |
| SAP 표준 T-code | - (연관 화면은 §7 참고) |
| 성격 | 조회·집계·대사형 — 위반 해당 여부의 최종 확인은 회사 몫 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 5종 둘러보기
회사코드·회계연도·기간·작성자·전표유형·판정을 넣고 조회하면 네 개 탭이 함께 갱신됩니다 → 행을 클릭하면 상세 내역이 다이얼로그로 열립니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 회사코드 · 회계연도 · 기간 · 작성자 · 전표유형 · 판정을 지정합니다.
- 작성자 입력 필드에서 Enter 키를 누르거나 조회조건 영역 오른쪽 끝의 조회 버튼을 누르면 재조회됩니다. 초기화 버튼은 조건을 기본값으로 되돌립니다.
- 전표유형·판정을 "전체"로 두면 해당 조건 없이 조회합니다.
- 각 탭의 행을 클릭하면 상세 다이얼로그가 열립니다.
기간·권한 위반 판정 로직
전표마다 기간 판정과 권한 판정을 독립적으로 계산하고, 둘 중 하나라도 확인 필요면 종합 판정을 확인 필요로 표시합니다.
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 전기일이 속한 기간이 입력 시점에 열려 있었다 | 정상 | 추가 조치 없음 |
| 전기일이 속한 기간이 이미 마감됐는데 그 이후에 입력됐다(사후 전기) | 확인 필요 | 마감 후 전기 승인 이력을 확인 |
| 작성자가 해당 회사코드·전표유형에 대한 허용 목록에 있다 | 정상 | 추가 조치 없음 |
| 작성자가 해당 회사코드·전표유형에 대한 허용 목록에 없다 | 확인 필요 | 권한 부여 경위를 확인하고 임시 권한이면 회수 검토 |
이 화면이 대신 정하지 않는 것
기간·권한 판정에 걸렸다고 해서 곧바로 통제 위배로 단정하지 않습니다. 결산 후 승인된 정정 전기나 정당하게 부여된 임시 권한일 수 있어, 위반 여부에 대한 최종 판단은 회사가 내부통제 절차에 따라 합니다. 이 화면은 그 판단이 필요한 후보를 골라내는 점검 도구입니다.
점검 처리 단계
| 단계 | 내용 |
|---|---|
| 1단계 | 회사코드·회계연도·기간별 기간통제 마스터(개방·마감 여부)를 확보 |
| 2단계 | 전표의 전기일이 속한 기간을 그 전표의 입력일 시점 개방 여부와 대조해 기간 판정을 산출 |
| 3단계 | 사용자별 회사코드·전표유형 권한 마스터를 확보 |
| 4단계 | 전표의 작성자·회사코드·전표유형 조합을 권한 마스터와 대조해 권한 판정을 산출 |
| 5단계 | 기간 판정과 권한 판정 중 하나라도 확인 필요면 종합 판정을 확인 필요로 산출 |
| 6단계 | 회사코드별로 점검 건수·정상 건수·기간 위반·권한 위반 건수와 위반율을 집계 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 회사코드 | 필수 | 4자리 코드 |
| 회계연도·기간 | 필수 | 기간통제 현황·요약 패널 조회 기준 |
| 작성자(사용자ID) | 선택 | 부분 일치(포함), Enter 키로 바로 조회 |
| 전표유형 | 선택 | 전체 선택 시 조건 미전달 |
| 판정 | 선택 | 종합 판정 기준. 전체 선택 시 조건 미전달 |
결과 컬럼
| 컬럼 | 설명 |
|---|---|
| 전표번호 · 전표유형 · 전기일 · 기간 · 입력일 · 사용자 | 전표 식별 정보 |
| 전표금액 | 전표 총액 |
| 기간 판정 · 권한 판정 · 종합 판정 | 정상 / 확인 필요 |
| 점검 건수 · 정상 건수 · 기간 위반 건수 · 권한 위반 건수 · 위반율(%) | 회사코드별 집계 값 |
SAP 표준 기능 매핑
| SAP 표준 T-code | 연관 기능 |
|---|---|
OB52 | 회사코드별 전기기간 개방·마감 설정 |
FB03 | 전표 조회 |
FBL3N | 계정별 명세 조회 |
SU53 | 권한 실패 분석 |
SUIM | 사용자 정보시스템(권한 부여 현황 조회) |
통제 기준 정의표
| 관련 대상 영역 | 요구사항 | 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| - | 마감된 회계기간으로의 사후 전기 방지 | 기간 판정 | 기간통제 마스터, 전표 헤더 | 대상 영역: 내부통제 |
| - | 회사코드·전표유형별 전기 권한의 적정성 | 권한 판정 | 권한 마스터, 전표 헤더 | 대상 영역: 내부통제 |
도입 시 확인이 필요한 부분
권한 마스터의 구체적인 조합(회사코드·전표유형별 허용 범위)은 회사의 권한 설계·역할(PFCG Role) 구성에 맞춰 확정해야 합니다.
참고 CDS 뷰
운영 서비스로 연결할 때를 가정해 새로 스케치한 집계 뷰 예시입니다(운영 반영 시 권한 체크를 추가해야 합니다).
@AbapCatalog.sqlViewName: 'ZCDSPOSTCTL'
define view ZCDS_I_PostCtrlCheck
as select from bkpf as doc
left outer join t001b as ctrl
on ctrl.bukrs = doc.bukrs and ctrl.frper = doc.monat
{
key doc.belnr as Belnr,
key doc.bukrs as Bukrs,
key doc.gjahr as Gjahr,
doc.blart as Blart,
doc.budat as Budat,
doc.cpudt as Cpudt,
doc.usnam as UsNam
// 기간 판정은 T001B 기준 개방 구간과 CPUDT 를 대조하고,
// 권한 판정은 권한 마스터 뷰와 USNAM·BUKRS·BLART 를 대조해 파생(별도 집계 뷰)
}
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 Panel + 요약 패널 + 탭(IconTabBar) 4종 |
| 조회조건 | sap.m.ComboBox · sap.m.Input — 우측 끝에 조회 버튼, Enter 키로 즉시 재조회 |
| 전표별 통제 점검 목록 | sap.ui.table.Table(컬럼 10개 초과) — 행 클릭 시 상세 다이얼로그 |
| 기간통제·권한·집계 목록 | sap.m.Table(소량) — 행 클릭 시 상세 다이얼로그 |
| 상세 | sap.m.Dialog — 선택 행 데이터를 그대로 표시 |
| 공통 처리 | 전역 오류 처리기(ErrorHandler) |
서비스 경로는 manifest.json 의 dataSources 에 상대 경로로 선언한 OData 모델을 그대로
바인딩하며, 조회조건은 sap.ui.model.Filter 로 조립해 $filter 로만 전달합니다. 전표유형·판정을
"전체"로 둘 때는 필터를 아예 생성하지 않습니다.
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon |
Component.js | 컴포넌트 초기화, 전역 오류 처리기 연결 |
manifest.json | 앱 디스크립터 — zui5.postctrl · OData dataSources · ko 로케일 |
view/Main.view.xml | 조회조건 + 요약 패널 + 탭 4종 |
view/DetailDialog.fragment.xml | 상세 다이얼로그 |
controller/Main.controller.js | 조회·필터 조립·다이얼로그 로직 |
controller/BaseController.js | 공통 처리 |
model/ErrorHandler.js | 전역 오류 처리 |
model/formatter.js | 판정·개방여부 서식 |
i18n/i18n_ko.properties | ko 로케일 리소스 |
검증 환경 구성 상세는 이 글에서 다루지 않습니다. 운영 전환 시에는 화면과 판정 로직은 그대로 두고 데이터 계층만 실제 서비스 호출에 맞추면 됩니다.
검증 결과
화면 구성에 쓴 데이터는 정상 건수 + 기간·권한 위반 건수 = 총 점검 건수 관계가 항상 성립하도록 구성했습니다.
| 검증 항목 | 결과 |
|---|---|
| 대사식 전수 검증(점검 40건 — 기간 위반 4건 · 권한 위반 12건, 집계식 불일치 0건) | 통과 |
| 표시 금지 검사 — 커스텀 프로그램ID·앱 식별자·출처 표현 검출 | 0건 |
| 화면 렌더링 — 실브라우저에서 조회 → 필터 → 행 클릭 상세까지 실동작 후 캡처 | 5/5 |
| 조회 버튼 위치 · sap_horizon 테마 적용 · Enter 키 조회 | 확인 |
| OData 계약 — 동사 경로 미사용, $filter·$orderby·$top 로만 조회조건 전달 | 확인 |
사용자·전표 데이터는 모두 검증용으로 구성한 가상 데이터입니다.
자주 묻는 질문
이 화면은 어느 범위에 적용하나요?
전표를 전기하고 회계기간을 마감하는 회사코드를 대상으로 하며, 회계연도·기간·회사코드를 선택해 조회합니다.
종합 판정이 확인 필요로 뜨면 무엇을 의미하나요?
전표가 마감된 기간으로 사후 전기됐거나, 전기한 사용자가 해당 회사코드·전표유형에 대한 권한이 없다는 신호입니다. 위반 여부의 최종 판단과 조치는 회사가 내부통제 절차에 따라 수행합니다.
화면의 수치는 실시간 SAP 데이터인가요?
실제 운영 화면은 OData 서비스를 통해 조회합니다. 이 글에 표시된 수치와 캡처는 검증용 샘플 데이터이며 실제 업무 데이터가 아닙니다.
기간 위반과 권한 위반은 어떻게 다른가요?
기간 위반은 마감된 회계기간으로 사후 전기된 경우를, 권한 위반은 작성자가 해당 회사코드·전표유형에 대한 전기 권한을 보유하지 않은 경우를 가리킵니다. 두 판정은 독립적으로 계산되며 하나라도 해당하면 종합 판정이 확인 필요로 표시됩니다.