재무회계

SAP 정부보조금 수익 범주 귀속 점검 — IFRS 18 손익 범주를 보조금 유형과 구성요소로 다시 정해 장부와 견주는 마감 점검

보조금 유형 · 구성요소 · 재계산 범주 · 이동 필요 금액 · 이연수익 상각 재계산 · 정합성 대사 — 소개 영상과 실제 화면 7종, 그리고 CDS 코드까지

소개 영상블로그 목차 순서대로 · 자막 포함9개 장면점검 취지 → 처음 화면 → 손익 건별 → 점검 코드 → 상세 → 범주별 합계 → 상각 재계산 → 대사 결과 → 정리

도입 포인트 — 이 앱을 사용해야 하는 이유

정부보조금은 총액만 맞으면 된다고 생각하기 쉽습니다. 그러나 IFRS 18 에서는 같은 금액이 어느 범주에 놓였는가가 영업이익 소계를 바꿉니다. 이자 보전 효익이 영업범주에 있거나, 매각 대상 사업의 지원금이 계속영업에 남아 있으면 숫자는 맞아도 소계는 틀립니다. 이 앱은 보조금 유형과 구성요소로 범주를 다시 정해 장부 기록과 견주고, 다른 건과 옮겨야 할 금액을 마감 전에 한 화면으로 모아 줍니다.

한 줄 요약 — 총액 대사는 표준으로도 됩니다. 이 앱의 값은 그 다음에 있습니다: 건마다 범주가 맞는지, 옮겨야 한다면 얼마인지, 상각액이 다시 계산한 값과 같은지, 그리고 이 점검 결과 자체가 합계와 어긋나지 않는지를 한 번에 확인합니다.

핵심 포인트 여섯 가지

포인트고객이 얻는 것지금 방식이라면
① 규칙으로 다시 정하는 재계산 범주보조금 유형(A~E, M)과 구성요소(보조금 수익 · 상각 · 그 밖)를 키로 영업 · 투자 · 재무 · 중단영업 범주를 다시 정하고, 장부 기록과 건마다 나란히 둡니다.계정 이름을 눈으로 보고 “이건 영업이겠지” 하며 넘어갑니다.
② 옮겨야 할 금액이 숫자로점검 필요 11건의 이동 필요 금액이 건별 · 보조금별로 나오고 합계(142,750,000원)가 요약에 오릅니다.엑셀에 전표를 내려 받아 필터로 거르고, 합계를 손으로 맞춥니다.
③ 판단이 필요한 건은 단정하지 않는다복합 목적 보조금 3건은 틀렸다고 하지 않고 확인 필요로 따로 둡니다. 점검 필요와 섞이지 않아 “틀린 건” 수가 부풀지 않습니다.맞는지 불분명한 건이 틀린 건과 한 목록에 섞여 회의가 길어집니다.
④ 이연수익 상각 재계산교부액 ÷ 내용연수 개월 × 당기 사용 개월로 다시 구해 장부 상각액과 견주고, 다른 한 건(1,250,000원)을 점검 필요로 띄웁니다.상각 전표를 한 장씩 열어 계산기를 두드립니다.
⑤ 점검 결과를 점검하는 정합성 대사여섯 식(건별 · 보조금별 · 범주별 합계와 상각 합계)이 차이 0건인지 화면이 매번 알려 줍니다.결과 숫자를 믿어도 되는지 확인할 방법이 따로 없습니다.
⑥ 정책이 코드가 아니라 표에분류 정책은 매핑 표 한 장에 있어, 회사가 다른 입장을 택하면 표만 고칩니다. 최종 판단은 회사와 감사인이 합니다.규칙이 리포트 프로그램 안에 박혀 있어 정책이 바뀔 때마다 개발자를 부릅니다.

사례로 보는 효과 — 총액은 같은데 영업범주 소계가 달랐던 이유

1000 회사의 영업범주는 장부 기준 361,700,000원이지만 규칙으로 다시 정하면 400,950,000원입니다. 총액은 같고 범주만 다릅니다. 차이 -39,250,000원 안에는 연구개발 과제 지원금 86,600,000원 가운데 영업이 아닌 곳에 기록된 몫, 임대용 건물 개보수 보조금, 매각 대상 사업 연구 지원금 19,600,000원 같은 건들이 들어 있습니다. 반대로 재무범주는 장부가 규칙보다 76,850,000원 많습니다.

금액만 보면 “보조금 수익이 7억 5천만 원” 에서 이야기가 끝나지만, 범주로 보면 영업이익 소계에 들어갈 금액이 얼마인가 가 달라집니다. 이 앱은 그 질문에 11건의 목록과 142,750,000원이라는 숫자로 답합니다.

범주별 합계에서 지키는 등식
회사별 Σ (장부 금액 − 재계산 금액) = 0  ·  건별 손익 금액 합계 = 보조금별 합계 = 범주별 합계

범주를 옮겨도 총액은 같아야 하므로, 이 등식이 깨지면 점검 결과를 쓰지 않습니다. 화면이 대사 결과 탭에서 매번 확인합니다.

이 앱이 하지 않는 일

이 앱은 회계기준을 해석하거나 분류를 확정하지 않습니다. 회사가 정한 규칙을 기계적으로 적용하고, 규칙으로 정할 수 없는 건은 확인 필요로 남깁니다. 법정 공시용 숫자는 표준 보고서에서 만들고, 이 앱은 그 숫자를 만들기 전에 범주를 바로잡는 마감 점검 도구입니다.

실행 화면

실제로 돌아가는 화면 7종을 순서대로 싣습니다. 그림을 누르면 크게 볼 수 있고, 화면마다 무엇을 하는 자리이고 왜 그렇게 두었는지를 아래에 적었습니다. 숫자는 모두 같은 자료에서 나온 것이라 화면끼리 서로 맞춰 보셔도 됩니다.

처음 열었을 때

처음 열었을 때 — 보조금별 점검 결과
처음 열었을 때 — 회계연도 기준으로 자동 조회되어 보조금 18건의 점검 결과가 한 표에 뜹니다. 위쪽 요약에는 점검한 손익 건수 53건, 점검 필요 11건, 확인 필요 3건, 범주 이동 필요 금액 142,750,000원이 먼저 나옵니다.

화면을 여는 순간 조회가 끝나 있습니다. 조회조건은 회계연도와 회사, 보조금 유형, 구성요소, 기록 범주, 전기일 범위, 보조금 이름, 점검 코드이며 모두 비워 두어도 됩니다. 요약 여섯 칸은 점검 필요 건수, 확인 필요 건수, 범주 이동 필요 금액, 영업범주에 기록된 보조금 수익, 정합성 대사 차이 건수를 먼저 알려 줍니다. 점검 필요 11건이 곧 회계팀이 오늘 열어 볼 목록입니다.

손익 건별 점검

손익 건별 점검 — 기록 범주와 재계산 범주를 나란히
손익 건별 점검 — 건마다 장부에 기록된 범주와 보조금 유형 · 구성요소로 다시 정한 범주를 나란히 둡니다. 둘이 다르면 점검 코드와 이동 필요 금액이 붙습니다.

재계산 범주는 사람이 고르는 값이 아니라 규칙이 정합니다. 수익관련(A)과 자산관련(B) 보조금의 수익은 영업범주, 이자 보전 효익(C)은 재무범주, 투자자산 관련(D)은 투자범주, 중단영업 사업(E)은 중단영업입니다. 복합 목적(M)은 목적별로 나눈 근거를 봐야 하므로 범주를 단정하지 않고 확인 필요로 남깁니다.

점검 코드로 조회

점검 코드로 조회
점검 코드로 조회 — 점검 코드를 골라 조회하면 해당 코드의 건만 남습니다. 입력칸에서 엔터를 눌러도 같은 조회가 됩니다.

A01은 수익관련 · 자산관련 보조금이 영업범주 밖에 있는 경우, A02는 이자 보전 효익이 재무범주 밖에 있는 경우, A03은 투자자산 관련 보조금이 투자범주 밖에 있는 경우, A05는 범주가 비어 있는 경우, A06은 중단영업 사업의 보조금이 중단영업 밖에 있는 경우입니다. 코드별 건수가 곧 원인별 건수라서, 어느 계정 매핑부터 고쳐야 하는지 한눈에 갈립니다.

행을 눌러 본 상세

행을 눌러 본 상세 — 점검 근거와 같은 보조금의 손익 건
행을 눌러 본 상세 — 행을 누르면 점검 근거와 같은 보조금의 손익 건이 한 번에 열립니다. 어느 건의 어느 금액을 어느 범주로 옮겨야 하는지 건별로 확인합니다.

상세는 별도 화면으로 넘어가지 않고 대화상자로 뜹니다. 위에는 보조금 이름과 유형, 구성요소, 전기일, 기록 범주, 재계산 범주, 점검 결과가 있고 아래에는 같은 보조금의 모든 손익 건이 있습니다. 보조금 하나가 두 개 범주에 걸쳐 기록된 경우에도 한 번에 맞춰 볼 수 있습니다.

범주별 합계

범주별 합계 — 장부 금액과 재계산 금액
범주별 합계 — 회사별로 영업 · 투자 · 재무 · 중단영업 · 미지정 다섯 범주의 장부 금액과 재계산 금액, 그 차이를 보여 줍니다.

1000 회사는 영업범주 장부 361,700,000원에 재계산 400,950,000원으로 -39,250,000원, 재무범주는 +76,850,000원 차이가 납니다. 범주를 옮겨도 총액은 같으므로 차이 열의 합계는 언제나 0이어야 하고, 화면이 이 등식을 대사 결과 탭에서 매번 확인합니다. 2000 회사는 범주 미지정 8,800,000원 한 건만 어긋납니다.

이연수익 상각 재계산

이연수익 상각 재계산
이연수익 상각 재계산 — 자산관련 보조금은 교부액을 내용연수 개월로 나누고 당기 사용 개월을 곱해 상각액을 다시 구해 장부 상각액과 견줍니다.

7건 가운데 6건은 장부와 같고, G10005 에너지 효율 설비 보조금 한 건만 재계산 45,000,000원에 장부 46,250,000원으로 1,250,000원이 어긋나 점검 필요(A04)로 뜹니다. 교부액 360,000,000원을 72개월로 나눠 9개월을 곱한 값이 45,000,000원이기 때문입니다. 범주 점검과는 별개로 금액 자체의 점검을 둔 이유입니다.

대사 결과

대사 결과 — 정합성 대사 여섯 식과 참고 두 식
대사 결과 — 정합성 대사 여섯 식(R01~R06)이 모두 차이 0건으로 맞는지 보여 주고, 의도적으로 넣은 예외 건은 참고 대사 두 식(R07 · R08)으로 따로 보입니다.

R01~R03은 건별 손익 금액 합계 755,150,000원이 보조금별 · 범주별 장부 · 범주별 재계산 합계와 같은지, R04는 범주별 장부 분해의 합이 보조금별 손익 합계와 같은지, R05는 장부와 재계산의 차이 합이 0인지, R06은 이연수익 상각 건의 합 347,750,000원이 장부 상각액과 같은지 봅니다. 이 여섯 식이 맞아야 점검 결과를 믿고 읽을 수 있습니다. 참고 대사는 어긋남이 일부러 들어간 자리라서 차이 건수가 0이 아닌 것이 정상입니다.

자료 구성 — 이 화면의 숫자가 나온 곳

점검한 손익은 53건, 보조금은 18건(1000 회사 10건 · 2000 회사 8건), 이연수익 상각 대상은 7건입니다. 점검 필요 11건의 내역은 A01 두 건, A02 세 건, A03 세 건, A05 한 건, A06 두 건이고, 확인 필요는 A09 세 건입니다. 상각액이 어긋난 한 건은 A04 입니다. 이들은 모두 점검 기능을 보여 주려고 의도적으로 넣은 예외 건이며, 그 밖의 손익 39건은 장부와 재계산이 같습니다(A00).

SAP 표준 기능 확장 포인트

이 앱은 SAP 표준을 대체하지 않습니다. 표준이 이미 잘하는 일은 표준에 맡기고, 표준이 끊기는 자리만 이어 붙이는 쪽으로 만들었습니다. 어디까지가 표준이고 어디서부터 이 앱인지를 먼저 적습니다.

표준으로 되는 것과 안 되는 것

하고 싶은 일SAP 표준표준에서 걸리는 자리이 앱이 하는 일
계정별 손익 조회FAGLB03 · FS10N계정 단위 잔액이라 보조금 유형이나 구성요소로는 묶이지 않습니다보조금 유형 · 구성요소 단위로 건을 묶어 봅니다
전표 라인 확인FAGLL03 · FB03전표를 보고 범주가 맞는지는 사람이 판단합니다건마다 기록 범주와 재계산 범주를 나란히 둡니다
보조금 마스터 · 예산GMGRANT 계열 거래(Grants Management 를 쓰는 경우)Grants Management 를 쓰지 않는 회사는 마스터 자체가 없습니다보조금 번호 · 유형 · 구성요소를 입력 계약으로 받습니다
고정자산 보조금 처리ABLDT · AFAB 계열상각 전표는 나오지만 재계산해 대조하는 화면은 없습니다교부액 ÷ 내용연수 × 사용 개월로 다시 구해 견줍니다
손익 범주 분류—표준에 없습니다. IFRS 18 범주를 계정 매핑으로 흉내 내는 경우가 많습니다유형 · 구성요소 매핑으로 범주를 다시 정합니다
점검 결과 신뢰성—결과 합계가 원장과 맞는지를 확인하는 장치가 없습니다정합성 대사 여섯 식을 매번 확인합니다

표의 거래 코드는 릴리스와 구성에 따라 다르므로 실제 도입 전 사내 환경에서 한 번 확인해야 합니다. 이 앱은 표준 거래를 없애지 않고, 대사와 감사 대응은 표준 거래가 맡도록 둡니다.

이 앱이 제안하는 마감 순서

순서할 일보는 탭끝났다는 기준
1회계연도와 회사를 정해 조회보조금별 점검요약의 점검 필요 · 확인 필요 건수 확인
2점검 필요 건을 코드별로 좁혀 원인 파악손익 건별 점검A01~A06 별 건수와 이동 필요 금액
3상각 대상 보조금의 재계산 차이 확인이연수익 상각 재계산차이 0 이 아닌 건의 원인 확인
4범주 이동 분개를 만들고 장부를 바로잡음범주별 합계장부 − 재계산 열이 0 으로 수렴
5점검 결과 자체를 점검대사 결과정합성 대사 여섯 식 차이 0건
6복합 목적 보조금의 구분 근거 확인보조금별 점검확인 필요 건이 근거 첨부로 해소

OData 서비스 계약

화면과 서비스는 아래 계약으로만 만납니다. 엔티티셋 다섯 개와 함수 하나이며, 운영에서는 같은 계약 위에 CDS 뷰와 서비스 바인딩을 올립니다.

엔티티셋키내용주요 필터
LineSetGjahr · Bukrs · GrantNo · SeqNo손익 건별 기록 범주 · 재계산 범주 · 이동 필요 금액 · 점검 코드Gjahr · Bukrs · CheckCode · CheckStatus · PostDate
GrantSetGjahr · Bukrs · GrantNo보조금별 장부 범주 분해 · 재계산 분해 · 이동 필요 · 점검 결과Gjahr · Bukrs · GrantType · CheckStatus
CatSetGjahr · Bukrs · Cat범주별 장부 금액 · 재계산 금액 · 차이Gjahr · Bukrs
AmortSetGjahr · Bukrs · GrantNo이연수익 재계산 상각액 · 장부 상각액 · 차이Gjahr · Bukrs
ReconSetGjahr · ReconNo정합성 대사와 참고 대사의 좌변 · 우변 · 차이 건수Gjahr · Kind
FlagCount(함수)Gjahr · Bukrs점검 필요 코드 A01 · A02 · A03 · A05 · A06 의 건수(Edm.Int32)—

CDS 구성

이 사례의 화면은 서비스 엔진이 돌려주는 자료를 읽습니다. 운영에서는 같은 계약을 ACDOCA 와 보조금 마스터 위의 CDS 뷰가 채웁니다. 아래는 그때 만드는 뷰들을 레이어 순서대로 적은 것입니다.

코드는 스케치입니다. 필드 이름과 표준 뷰 이름은 릴리스 · 환경에 따라 다르므로, 그대로 붙여 넣기 전에 View Browser(F2170) 로 실제 이름을 확인해야 합니다. 확인이 필요한 자리는 주석에 적어 두었습니다. 보조금 번호와 유형은 Grants Management 를 쓰는 환경과 쓰지 않는 환경이 다르므로 ZGRANT_MASTER 라는 고객 테이블을 가정했습니다.

뷰 레이어 구성

레이어뷰하는 일왜 나누나
기준ZGRANT_CATMAP유형 · 구성요소 → 손익 범주 매핑 표분류 정책이 코드에 박히지 않게 합니다
건ZI_GrantLineACDOCA 보조금 손익 건 + 기록 범주장부 쪽 사실을 한곳에 모읍니다
재계산ZI_GrantLineChk매핑을 붙여 재계산 범주 · 점검 코드 · 이동 금액규칙을 한 번만 정의합니다
집계ZI_GrantCatCube범주별 장부 · 재계산 · 차이범주별 합계 탭이 읽습니다
상각ZI_GrantAmortChk교부액 · 내용연수로 상각액 재계산범주와 별개로 금액을 점검합니다
서비스ZUI_GRANTCAT_O2서비스 정의와 바인딩(OData V2)계약 이름 grantcat_srv 를 맞춥니다
권한ZI_GrantLine(DCL)회사코드 권한집계를 읽는 자리에 걸어야 새지 않습니다

① 유형 · 구성요소 → 범주 매핑 표

회사의 분류 정책이 이 표에 있습니다. 운영 전환에서 가장 먼저 합의해야 하는 항목이며, 복합 목적(M)은 일부러 범주를 비워 확인 필요로 흘립니다.

@EndUserText.label : '정부보조금 유형·구성요소 → 손익 범주'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED      " SM30 뷰를 함께 만든다
define table zgrant_catmap {
  key mandt      : mandt not null;
  key grant_type : abap.char(1) not null;    " A 수익관련 B 자산관련 C 이자보전 D 투자자산 E 중단영업 M 복합
  key comp_type  : abap.char(1) not null;    " G 보조금수익 S 이연수익상각 B 그밖
  valid_from     : abap.dats;
  exp_cat        : abap.char(3);             " OPR INV FIN DSC — M 유형은 비워 둔다
  need_confirm   : abap.char(1);             " X = 규칙으로 정할 수 없어 확인 필요
}

② 손익 건 기본 뷰

ACDOCA 에서 보조금 번호가 붙은 손익 라인을 읽어 장부 기록 범주를 붙입니다. 장부 범주를 어디서 읽을지(계정 → 범주 매핑인지, 별도 필드인지)는 회사마다 다르므로 합의해야 하는 두 번째 항목입니다.

@AbapCatalog.viewEnhancementCategory : [#NONE]
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '보조금 손익 건 (장부 기록 범주)'
define view entity ZI_GrantLine
  as select from acdoca as a
  inner join zgrant_master as m
    on  m.bukrs   = a.rbukrs
    and m.grantno = a.zz_grantno             " 확인 : 보조금 번호를 담는 필드 이름
{
  key a.rldnr                        as Rldnr,
  key a.rbukrs                       as Bukrs,
  key a.gjahr                        as Gjahr,
  key a.belnr                        as Belnr,
  key a.docln                        as Docln,
      m.grantno                      as GrantNo,
      m.grant_type                   as GrantType,
      a.zz_comp_type                 as CompType,   " 확인 : 구성요소 필드
      a.budat                        as PostDate,
      @Semantics.amount.currencyCode : 'Waers'
      a.hsl                          as Amount,
      a.rhcur                        as Waers,
      a.zz_pl_cat                    as BookedCat   " 확인 : 장부 범주(없으면 계정 매핑으로)
}
where a.rldnr = '0L'

③ 재계산 범주와 점검 코드

매핑을 붙여 재계산 범주를 정하고, 장부와 다르면 코드를 답니다. 이 뷰가 점검의 심장입니다. A09 는 매핑에서 need_confirm 이 켜진 건이고 이동 필요 금액은 계산하지 않습니다.

@EndUserText.label : '보조금 손익 건 점검 (재계산 범주·코드)'
define view entity ZI_GrantLineChk
  as select from ZI_GrantLine as l
  left outer join zgrant_catmap as c
    on  c.grant_type = l.GrantType
    and c.comp_type  = l.CompType
{
  key l.Bukrs, key l.Gjahr, key l.GrantNo, key l.Belnr, key l.Docln,
      l.GrantType, l.CompType, l.PostDate, l.Amount, l.BookedCat,
      c.exp_cat                                   as ExpectCat,
      case
        when c.need_confirm = 'X'                 then 'A09'   " 복합 목적 — 확인 필요
        when l.BookedCat is initial               then 'A05'   " 범주 미지정
        when l.BookedCat = c.exp_cat              then 'A00'
        when l.GrantType in ('A','B')             then 'A01'   " 영업이어야 하는데 아님
        when l.GrantType = 'C'                    then 'A02'   " 재무이어야 하는데 아님
        when l.GrantType = 'D'                    then 'A03'   " 투자이어야 하는데 아님
        when l.GrantType = 'E'                    then 'A06'   " 중단영업이어야 하는데 아님
        else 'A00'
      end                                         as CheckCode,
      case
        when c.need_confirm = 'X' or l.BookedCat = c.exp_cat then 0
        else l.Amount
      end                                         as MoveAmt
}

④ 범주별 합계 큐브

장부와 재계산을 같은 키에 올려 놓아야 차이가 한 번에 나옵니다. 장부 열과 재계산 열을 따로 만들면 키가 어긋나 합이 틀립니다.

@Analytics.dataCategory : #CUBE
@EndUserText.label : '보조금 손익 범주 큐브'
define view entity ZI_GrantCatCube
  as select from ZI_GrantLineChk
{
  key Bukrs, key Gjahr,
  key BookedCat                      as Cat,
      sum(Amount)                    as BookAmt,
      count(*)                       as LineCnt,
      sum(case when CheckCode in ('A01','A02','A03','A05','A06') then 1 else 0 end) as FlagCnt
}
group by Bukrs, Gjahr, BookedCat
" 재계산 금액 열(ExpAmt)은 ExpectCat 기준으로 같은 방식으로 집계한 뷰를 union 한다.
" 이 union 이 어긋나면 대사식 R05 (장부 − 재계산 합 = 0) 가 먼저 알려 준다.

⑤ 이연수익 상각 재계산

범주 점검과 따로 금액을 점검합니다. 정액 상각을 가정한 단순식이며, 자산을 중간에 취득했다면 MonthsYr 에 그 사실이 반영돼야 합니다.

@EndUserText.label : '이연수익 상각 재계산'
define view entity ZI_GrantAmortChk
  as select from zgrant_master as m
  association [0..*] to ZI_GrantLine as _line
    on  _line.GrantNo  = m.grantno
    and _line.CompType = 'S'
{
  key m.bukrs, key m.gjahr, key m.grantno,
      m.grant_amt                                          as GrantAmt,
      m.use_months                                         as UseMonths,
      m.months_yr                                          as MonthsYr,
      cast( m.grant_amt * m.months_yr / m.use_months as abap.curr(15,0) ) as CalcAmort,
      sum( _line.Amount )                                  as BookAmort,
      cast( sum( _line.Amount ) - ( m.grant_amt * m.months_yr / m.use_months )
            as abap.curr(15,0) )                           as DiffAmt
}
where m.use_months > 0
group by m.bukrs, m.gjahr, m.grantno, m.grant_amt, m.use_months, m.months_yr

⑥ 권한 정의(DCL)

집계를 읽는 자리에 회사코드 권한을 걸어야 개별 건으로 내려가도 같은 범위만 보입니다. 점검 결과 전용 권한 객체를 따로 두는 회사도 있습니다.

@EndUserText.label : '보조금 손익 건 — 회사코드 권한'
@MappingRole : true
define role ZI_GRANTLINE {
  grant select on ZI_GrantLine
    where ( Bukrs ) = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' );
}

⑦ 서비스 정의와 바인딩

화면이 부르는 이름은 grantcat_srv 입니다. 서비스 정의에서 엔티티셋 이름을 계약대로 노출하고, 바인딩은 OData V2 UI 로 만듭니다.

@EndUserText.label : '정부보조금 수익 범주 귀속 점검'
define service ZUI_GRANTCAT_O2 {
  expose ZC_GrantLineChk    as LineSet;
  expose ZC_GrantChk        as GrantSet;
  expose ZI_GrantCatCube    as CatSet;
  expose ZI_GrantAmortChk   as AmortSet;
  expose ZC_GrantReconChk   as ReconSet;
}
" 서비스 바인딩 : 유형 OData V2 - UI, 이름 grantcat_srv
" FlagCount(Gjahr, Bukrs) 는 ABAP 클래스(IF_SADL_EXIT_*)로 구현하고 Edm.Int32 를 돌려준다.

운영 작업 목록

작업누가언제비고
유형 · 구성요소 → 범주 매핑 합의회계팀 · 감사인전환 전정책 문서와 함께 표 한 장으로 확정
보조금 마스터의 유형 코드 보완회계팀전환 전비어 있으면 모두 범주 미지정으로 떨어짐
장부 범주를 읽는 방법 결정IT · 회계팀전환 전필드로 읽을지 계정 매핑으로 읽을지
CDS 뷰 · 서비스 바인딩 작성IT전환 중View Browser 로 필드 이름 확인
DCL 권한 부여IT · 권한 담당전환 중회사코드 단위, 필요하면 점검 결과 전용 객체
정합성 대사 여섯 식 차이 0건 확인회계팀전환 후 첫 마감차이가 있으면 점검 결과를 쓰지 않음

자주 묻는 질문

도입 상담과 데모에서 받을 만한 질문들을 24개로 정리했습니다.

정부보조금 수익은 왜 손익 범주를 따로 점검해야 합니까?

IFRS 18 은 손익계산서의 수익과 비용을 영업 · 투자 · 재무 · 중단영업 범주로 나누고 영업손익 소계를 표시하도록 요구합니다. 정부보조금은 성격에 따라 들어갈 범주가 갈리는데, 장부에는 계정과 관행으로 한 곳에 몰아 기록해 두는 일이 많습니다.

범주가 어긋나면 영업이익 소계가 달라집니다. 숫자의 총액은 같아도 영업이익이 바뀌므로 점검 대상이 됩니다. 이 앱은 총액이 아니라 어느 범주에 놓였는가만 따로 떼어 견줍니다.

이 앱이 회계기준을 대신 판단해 줍니까?

아닙니다. 화면 맨 위에도 적어 두었듯 분류 정책은 회사가 정하고 최종 판단은 회사와 감사인이 합니다. 이 앱은 회사가 정한 규칙(보조금 유형과 구성요소별 범주 매핑)을 기계적으로 적용해, 장부와 다른 건을 빠짐없이 가려 주는 도구입니다.

규칙은 매핑 테이블 한 장에 있어서 정책이 바뀌면 그 표만 고칩니다. 판단이 필요한 복합 목적 보조금은 범주를 단정하지 않고 확인 필요로 남깁니다.

재계산 범주는 어떤 규칙으로 정합니까?

보조금 유형(수익관련 A, 자산관련 B, 이자 보전 C, 투자자산 관련 D, 중단영업 사업 E, 복합 목적 M)과 구성요소(보조금 수익 G, 이연수익 상각 S, 그 밖의 B)를 키로 매핑 테이블을 찾습니다.

예를 들어 A · B 유형의 수익과 상각은 영업범주, C 유형은 재무범주, D 유형은 투자범주, E 유형은 중단영업입니다. M 유형은 목적별 구분 근거가 있어야 하므로 매핑에 범주를 두지 않고 확인 필요(A09)로 올립니다.

점검 필요와 확인 필요는 무엇이 다릅니까?

점검 필요는 규칙으로 정한 범주와 장부 범주가 다르다고 확정된 건입니다. 이동 필요 금액이 붙고 코드 A01 · A02 · A03 · A05 · A06 중 하나가 달립니다. 이 자료에서는 11건이고 합계 142,750,000원입니다.

확인 필요는 규칙만으로는 맞다 틀리다를 말할 수 없는 건입니다. 복합 목적 보조금(A09) 3건이 여기에 해당하고, 이동 필요 금액을 계산하지 않습니다. 둘을 섞으면 ‘틀린 건’ 의 숫자가 부풀어 회의가 길어집니다.

범주 이동 필요 금액은 어떻게 계산합니까?

점검 필요 건의 손익 금액입니다. 장부에 영업범주로 기록됐는데 재무범주여야 하는 건이면 그 건의 금액 전부가 이동 필요 금액입니다. 건별 값을 보조금별로 더한 것이 보조금별 이동 필요 금액이고, 전체 합이 요약의 142,750,000원입니다.

대사식 R08 이 ‘이동 필요 금액이 0이 아닌 건수 11’ 과 ‘보조금별 합계와의 일치’ 를 함께 확인하므로 건별 값과 보조금별 값이 어긋나면 화면에서 바로 드러납니다.

범주를 옮겨도 총액이 같다는 것은 어떻게 확인합니까?

범주별 합계 탭의 ‘장부 − 재계산’ 열을 회사별로 더하면 0이어야 합니다. 이것이 대사식 R05 입니다. 1000 회사는 영업 -39,250,000, 투자 -18,000,000, 재무 +76,850,000, 중단영업 -19,600,000 으로 더하면 0 입니다.

R02 · R03 은 건별 손익 금액 합계 755,150,000원이 장부 기준 합계와 재계산 기준 합계와 각각 같은지 봅니다. 어느 한쪽이 건을 빠뜨리거나 두 번 세면 여기서 걸립니다.

이연수익 상각은 어떻게 다시 계산합니까?

자산관련 보조금은 교부액을 자산의 내용연수 개월 수로 나눈 월 상각액에 당기 사용 개월 수를 곱합니다. G10003 스마트공장 설비 보조금은 720,000,000원 ÷ 60개월 × 9개월 = 108,000,000원입니다.

정액 상각을 가정한 단순식입니다. 자산을 중간에 취득했거나 내용연수를 바꿨다면 당기 사용 개월과 내용연수 개월에 그 사실이 반영돼 있어야 하고, 이 앱은 그 두 값을 입력으로 받아 계산만 합니다.

상각액 차이 1,250,000원은 어디서 생깁니까?

G10005 에너지 효율 설비 보조금의 장부 상각액이 손익 세 건을 15,000,000 · 15,000,000 · 16,250,000원으로 기록해 합계 46,250,000원이 되었습니다. 재계산은 360,000,000 ÷ 72 × 9 = 45,000,000원이라 1,250,000원이 많습니다.

이 자료의 의도적인 예외 건입니다. 실제 업무에서는 월 상각 전표 한 장이 잘못 올라갔거나 내용연수 변경이 장부에만 반영된 경우가 흔합니다. 대사식 R07 이 참고 대사로 차이 1건을 따로 보여 줍니다.

정합성 대사 여섯 식은 무엇을 지켜 줍니까?

점검 결과가 믿을 만한 숫자 위에 서 있는지를 지킵니다. R01 건별 합계 = 보조금별 합계, R02 건별 합계 = 범주별 장부 합계, R03 건별 합계 = 범주별 재계산 합계, R04 범주별 장부 분해 합 = 보조금별 합계, R05 장부 − 재계산 합 = 0, R06 상각 건 합 = 장부 상각액입니다.

여섯 식이 모두 차이 0건일 때만 점검 필요 목록을 그대로 믿고 쓰도록 했습니다. 하나라도 어긋나면 요약의 ‘정합성 대사 차이 건수’ 칸이 먼저 알려 줍니다.

참고 대사 두 식은 왜 차이가 0이 아닌데 정상입니까?

R07 과 R08 은 일부러 넣은 예외 건을 세는 식이기 때문입니다. R07 은 재계산 상각액과 장부 상각액이 다른 건 수(1건), R08 은 이동 필요 금액이 0이 아닌 건 수(11건)입니다.

정합성 대사는 ‘0이어야 맞다’ 이고 참고 대사는 ‘몇 건이 걸렸나’ 입니다. 둘을 같은 줄에 두면 빨간 숫자가 정상인지 비정상인지 헷갈리므로 구분 열을 따로 두고 화면에서 나눠 보입니다.

복합 목적 보조금은 어떻게 다룹니까?

하나의 교부금이 인건비 지원과 설비 투자 지원처럼 목적이 섞인 경우입니다. 목적별로 금액을 나눈 근거가 있어야 범주를 정할 수 있어서 자동으로 단정하지 않고 A09 확인 필요로 올립니다. 이 자료에는 G10010 복합 목적 지원금의 세 건이 있습니다.

근거를 받아 목적별로 쪼갠 뒤 구성요소를 나눠 다시 올리면 확인 필요에서 빠지고 일반 규칙으로 점검됩니다. 쪼개는 일은 회계 판단이라 앱이 대신하지 않습니다.

범주가 비어 있는 건은 왜 문제입니까?

범주가 지정되지 않으면 손익계산서에서 어느 소계에 넣을지 정해지지 않습니다. 영업손익 소계를 표시해야 하는 IFRS 18 에서는 소계가 비어 보이거나 총액이 소계에 안 잡힐 수 있습니다. 코드 A05 가 이 경우이며 2000 회사의 8,800,000원 한 건이 해당합니다.

범주별 합계 탭에서 ‘범주 미지정’ 행으로 따로 잡히기 때문에, 이 행에 금액이 있으면 먼저 지정부터 해야 합니다.

중단영업 사업의 보조금은 왜 따로 봅니까?

중단영업으로 분류된 사업에서 생긴 손익은 영업 · 투자 · 재무 범주에 섞이지 않고 중단영업 범주로 모아야 합니다. 매각 대상 사업의 연구 지원금(E 유형)이 영업범주에 남아 있으면 계속영업 이익이 부풀려 보입니다.

코드 A06 이 이 경우를 잡습니다. 이 자료에서는 G10009 보조금의 손익 두 건 19,600,000원이 영업범주에 기록되어 있어 점검 필요로 뜹니다.

이자 보전 효익은 왜 재무범주입니까?

정책자금 대출의 이자를 정부가 대신 부담해 주는 효익은 차입에 따른 금융원가를 줄이는 성격이라 재무범주에 놓는 것이 자연스럽습니다. 영업범주에 보조금 수익으로 잡아 두면 영업이익이 이자 효익만큼 늘어 보입니다.

코드 A02 가 이 경우이며 3건입니다. 정책은 회사가 정하므로 다른 입장을 택한다면 매핑 테이블에서 C 유형의 범주를 바꾸면 됩니다.

데이터는 어디서 가져옵니까?

이 화면은 OData V2 서비스 grantcat_srv 의 다섯 엔티티셋(LineSet · GrantSet · CatSet · AmortSet · ReconSet)을 읽습니다. 데모에서는 서비스 엔진이 정해진 자료를 돌려주고, 운영에서는 같은 계약 위에 CDS 뷰를 올려 ACDOCA 와 보조금 마스터를 읽게 합니다.

화면은 서비스 구현이 무엇인지 모릅니다. 계약(엔티티 · 키 · 필터 · 함수 하나)만 지키면 구현을 바꿔도 화면을 고치지 않습니다.

OData 서비스 계약에는 무엇이 있습니까?

서비스 이름은 소문자 grantcat_srv, 상대 경로는 ./odata/grantcat_srv/ 입니다. 엔티티셋은 LineSet(키 Gjahr · Bukrs · GrantNo · SeqNo), GrantSet(키 Gjahr · Bukrs · GrantNo), CatSet(키 Gjahr · Bukrs · Cat), AmortSet(키 Gjahr · Bukrs · GrantNo), ReconSet(키 Gjahr · ReconNo)입니다.

조회는 $filter 로 회계연도 · 회사 · 점검 코드 · 보조금 유형 · 전기일 범위를 걸고, FunctionImport FlagCount(Gjahr, Bukrs) 가 점검 필요 건수(A01 · A02 · A03 · A05 · A06)를 Edm.Int32 로 돌려줍니다. 요약의 ‘점검 필요’ 칸이 이 함수의 결과입니다.

점검 필요 건수 함수는 왜 따로 있습니까?

요약 칸은 조회 결과 전체를 내려받아 세는 것이 아니라 서버가 세어 주는 숫자를 쓰기 위해서입니다. 조회가 페이지 단위로 바뀌어도 요약은 전체 기준으로 맞아야 하기 때문입니다.

세는 기준은 점검 필요 코드 다섯 가지(A01 · A02 · A03 · A05 · A06)이고 A09 확인 필요와 A04 상각 차이는 포함하지 않습니다. 화면과 서비스가 같은 기준을 쓰는지는 단위 시험으로 확인했습니다.

권한은 어떻게 걸어야 합니까?

보조금 점검은 회사코드 단위 민감 정보입니다. 집계 뷰를 읽는 자리에 회사코드 권한(DCL)을 걸어야 개별 건으로 내려가도 같은 범위만 보입니다. 아래 CDS 구성의 ⑥번 코드가 그 예입니다.

이동 필요 금액처럼 ‘틀렸다’ 는 판단이 담긴 숫자는 읽는 사람을 더 좁히는 것이 좋아, 점검 결과 전용 권한 객체를 따로 두는 회사도 있습니다.

CSV 내려받기는 무엇을 담습니까?

지금 표에 보이는 조건 그대로의 결과를 열 제목과 함께 내려받습니다. 현재 탭의 열을 따르므로 보조금별 점검 탭에서는 보조금 단위, 손익 건별 탭에서는 건 단위 파일이 나옵니다.

감사인에게 ‘점검 필요 건 목록’ 을 넘길 때는 점검 코드로 조회한 뒤 내려받으면 됩니다. 금액은 원 단위 숫자로 나가 엑셀에서 바로 합산됩니다.

회사나 회계연도를 바꾸면 어떻게 됩니까?

조회조건의 회계연도 4자리와 회사를 바꾸고 조회를 누르면 같은 조건으로 다시 읽습니다. 연도 형식이 틀리면 조회를 보내지 않고 안내를 띄우며, 전기일 시작이 종료보다 늦어도 마찬가지입니다.

조회조건은 다섯 탭이 함께 쓰므로 탭마다 조건을 따로 넣을 필요가 없습니다.

기존 SAP 표준 거래를 대체합니까?

대체하지 않습니다. 개별 항목 확인과 전표 조회는 표준 거래가 맡고, 이 앱은 ‘범주 귀속이 맞는가’ 라는 표준에 없는 질문을 한 화면에 올립니다. 아래 확장 포인트 표에 표준과 겹치는 자리와 이 앱이 이어 붙이는 자리를 정리했습니다.

법정 공시용 숫자는 표준 보고서에서 만들고, 이 앱은 그 숫자를 만들기 전에 범주를 바로잡는 마감 점검 용도로 쓰는 편이 안전합니다.

운영 전환에서 가장 먼저 합의할 것은 무엇입니까?

보조금 유형과 구성요소를 범주에 맞추는 매핑 표입니다. 이 표가 곧 회사의 분류 정책이기 때문입니다. 어느 유형이 영업범주이고 어느 유형이 재무범주인지를 회계팀과 감사인이 먼저 합의해야 점검 결과가 의미를 갖습니다.

그다음은 보조금 마스터의 유형 코드가 비어 있지 않은지(비어 있으면 모두 범주 미지정으로 떨어집니다), 내용연수 개월이 자산 마스터와 같은지 순서로 봅니다.

모바일이나 좁은 화면에서도 쓸 수 있습니까?

OpenUI5 표준 컨트롤과 반응형 표를 썼기 때문에 창이 좁아지면 열이 접히고 조회조건은 아래로 쌓입니다. 점검 대상 선별은 휴대폰으로도 하되, 건별 비교와 대사 확인은 넓은 화면에서 하는 것이 편합니다.

소개 영상과 화면 캡처는 1600×1000 기준입니다.

현재 SAP 환경에 적용하려면 어떻게 시작합니까?

먼저 보조금 마스터와 손익 전표에서 유형 · 구성요소를 읽을 수 있는지 확인합니다. 읽을 수 있으면 매핑 표 합의, CDS 뷰 작성, 서비스 바인딩, 권한 순서로 진행하고, 화면은 서비스 이름만 바꿔 연결합니다. 현재 SAP 환경(S/4HANA · ECC)에 어떻게 맞출지는 문의하기로 남겨 주시면 함께 확인해 드립니다.