연결·지분법 회계

SAP 관계기업 거래 미실현손익 제거 점검 — IAS 28, 상향·하향 거래 차익의 투자자 지분 몫을 다시 계산해 장부와 맞춰본다

거래별 제거 대상 재계산 · 기초 + 발생 − 실현 = 기말 롤포워드 · 장부 제거 잔액과의 대조 · 점검 코드 R01~R05 · 대사식 9종 · OData 서비스 계약 — 소개 영상과 실제 화면 6종, 그리고 CDS 코드까지

소개 영상블로그 목차 순서대로 · 자막 포함8개 장면세 질문 → 핵심 포인트 → 화면 6종 → 점검 코드 → 대사식 → SAP 표준 연계 → 검증

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

관계기업과 거래한 해의 결산에서 반복되는 질문은 세 가지입니다. 제거해야 할 미실현손익이 얼마인가, 그중 올해 실현돼 돌려놓을 몫은 얼마인가, 장부에 남아 있는 제거 잔액이 그 숫자와 같은가. 지금 이 세 답은 엑셀 계산서 · 전표 조회 · 담당자의 기억에 흩어져 있습니다. 이 앱은 세 답을 거래 한 건 단위로 한 화면에 붙입니다.

한 줄 요약 — 투자자와 관계기업 사이 거래에서 생긴 차익 가운데 아직 외부에 실현되지 않은 부분은 투자자 지분 몫만큼 제거해야 합니다(IAS 28). 이 앱은 그 금액을 거래별로 다시 계산하고, 기초 + 당기 발생 − 당기 실현 = 기말로 이어 붙인 다음, 장부에 남아 있는 제거 잔액과 비교해 어긋난 거래에 점검 코드를 붙입니다. 판단은 사람이 하고, 앱은 어디를 볼지만 알려 줍니다.

핵심 포인트 여섯 가지

포인트고객이 얻는 것지금 방식이라면
① 거래 한 건에서 지분 몫을 다시 계산거래 차익 = 매각 대가 − 장부금액, 제거 대상 = 차익 × 투자자 지분율 ÷ 100 을 거래마다 계산합니다. 관계기업마다 지분율이 달라도 같은 규칙으로 나옵니다.엑셀 한 장에 거래를 모아 지분율을 곱하고, 지분율이 바뀌면 수식을 손으로 고칩니다.
② 기초에서 기말까지 네 단계로기초 미실현 → 당기 발생 → 당기 실현(환입) → 기말 미실현을 한 줄로 보여 줍니다. 재고자산은 외부 판매율, 유형자산은 상각 경과율로 실현분을 가릅니다.올해 환입할 몫을 따로 계산하고, 작년 잔액과 이어지는지는 사람이 맞춰 봅니다.
③ 장부 제거 잔액과 바로 대조재계산 기말과 장부 제거 잔액이 다르면 그 거래에 점검 코드를 붙이고 차이 금액을 보여 줍니다. 이 사례에서는 40건 중 6건, 차이 합계 −17.0백만 원입니다.합계만 맞춰 보고 넘어가거나, 맞지 않으면 전표를 처음부터 뒤집니다.
④ 점검 코드는 단정하지 않는다R01 실현분 반영 누락 · R02 제거 누락 · R03 지분율 상이 · R04 전액 제거 · R05 손실 거래 손상 증거. 모두 "점검 필요" · "확인 필요"로만 표시하고 원인은 확정하지 않습니다.원인을 짐작해 수정 분개부터 만들고 나중에 되돌립니다.
⑤ 상향·하향, 재고·유형을 한 화면에서관계기업별 · 방향·계정별 집계가 거래별 명세와 같은 숫자에서 나와 합계가 갈라지지 않습니다. 대사식이 매번 확인합니다.상향은 한 파일, 하향은 다른 파일로 관리해 합산이 어긋납니다.
⑥ 감사인에게 보여 줄 근거대사 결과 탭과 CSV 내려받기로 계산 근거를 그대로 넘깁니다. 대사식과 검사 건수가 숫자와 함께 남습니다.설명용 자료를 결산 때마다 새로 만듭니다.

사례로 보는 효과 — 장부는 전액을 걷어 냈다

마루디바이스(지분 35%)에 판 전장 하네스 하향 거래 T34는 매각 대가 570,000,000원, 장부금액 444,000,000원으로 차익이 126,000,000원입니다. 투자자 지분 몫으로 제거할 금액은 44,100,000원이고, 기말까지 62%가 실현되어 미실현 잔액은 16,758,000원이어야 합니다. 그런데 장부에는 47,880,000원이 남아 있습니다. 차이 −31,122,000원. 점검 코드 R04 — 전액 제거: 투자자 지분 몫이 아니라 차익 전체를 기준으로 제거한 모양입니다.

합계 화면만 보았다면 전체 차이는 −17.0백만 원입니다. 이 가운데 T34 한 건이 −31.1백만 원이고, 다른 거래의 차이가 반대 방향으로 상쇄되어 작아 보입니다. 거래별로 보지 않으면 큰 오류가 작은 합계 차이에 숨습니다.

거래 i 마다
차익 = 매각 대가 − 장부금액  ·  제거 대상 = 차익 × 지분율 ÷ 100

기말 미실현 = 기초 + 당기 발생 − 당기 실현  ·  장부 점검 = 기말 미실현 − 장부 제거 잔액

다만 손상 증거가 있는 손실 거래는 제거 대상이 0 입니다. 손실은 자산 손상을 반영한 것이므로 투자자 지분 몫으로 걷어 내지 않습니다.

도입하면 달라지는 것

  • 결산 점검 시간 — 거래별 재계산과 장부 대조가 한 번의 조회로 끝나 엑셀 취합이 사라집니다.
  • 회의의 주제 — 합계가 맞느냐가 아니라 어느 거래의 어느 단계가 어긋났느냐를 이야기합니다.
  • 전기와의 연결 — 기초 미실현이 직전 기말 잔액으로 이어지는지를 같은 화면에서 봅니다.
  • 감사 대응 — 점검 코드와 대사식, CSV 가 근거로 남습니다.

이런 회사에 맞습니다

관계기업 · 공동기업에 투자하면서 투자자와 거래(재고 매입 · 설비 매각 · 용역)가 있는 회사, 지분법 결산을 엑셀로 하고 있는 연결회계팀, 그리고 결산 후 감사인에게 제거 금액의 산출 근거를 설명해야 하는 재무 조직에 맞습니다. 반대로 거래가 없거나 지분법 대상이 없다면 쓸 일이 없습니다.

사용 방법

  1. 기준 연월(필수, 6자리)을 넣고 조회를 누릅니다. 관계기업 · 거래 방향 · 자산 구분 · 거래 품목 · 점검 코드 · 점검 결과는 선택 조건이며, 화면이 열릴 때 한 번 자동으로 조회됩니다.
  2. 위쪽 요약 지표 일곱 개를 먼저 봅니다 — 거래 건수, 제거 대상, 기말 미실현손익, 장부 제거 잔액, 재계산−장부 차이, 점검 필요 거래, 정합성 대사 차이 건수.
  3. 탭을 거래별 명세 → 관계기업별 집계 → 방향·계정별 집계 → 대사 결과 순으로 넘기며 넓은 곳에서 좁은 곳을 거쳐 대사까지 봅니다.
  4. 점검 결과를 점검 필요로 두고 조회하면 어긋난 거래만 남습니다.
  5. 행을 누르면 거래 상세가 열려 기초 → 발생 → 실현 → 기말 네 단계와 점검 내용을 보여 줍니다.
  6. 보고 있는 탭은 CSV로 내려받아 감사 자료에 붙입니다.

숫자를 믿을 수 있는가 — 검증 결과

가장 비싼 질문은 “이 숫자 맞아?” 입니다. 그래서 대사식을 먼저 세워 두고 전수로 돌렸습니다. 01~06은 계산이 서로 맞물리는지를, 07~09는 계산 결과가 장부와 같은지를 봅니다.

대사식검사 건수차이 건수최대 차이
01 거래 차익 = 매각 대가 − 장부금액4000
02 제거 대상 = 차익 × 투자자 지분율4000
03 기초 + 당기 발생 − 당기 실현 = 기말4000
04 거래별 합계 = 관계기업별 합계500
05 관계기업별 합계 = 방향·계정별 합계400
06 지분법손익 조정 = 당기 실현 − 당기 발생500
07 기말 미실현손익 = 장부 제거 잔액40631,122,000원
08 거래 지분율 = 원장 지분율4015.00%p
09 손실 거래 — 손상 증거와 제거 여부21420,000원

정합성 대사 여섯 가지는 차이 0 입니다. 장부 점검 대사의 차이는 의도적으로 넣은 예외 거래 6건(R01 2건 · R02 1건 · R03 1건 · R04 1건 · R05 1건)에서 나온 것이며, 이 앱이 그것을 실제로 찾아내는지를 보여 줍니다. 화면 쪽은 브라우저 자동화로도 확인했고, 데이터는 가상의 관계기업 5곳 · 거래 40건의 검증용 샘플입니다.

무엇으로 만들었나

구분내용
화면OpenUI5 1.120 · sap_horizon 테마 · 표준 컨트롤만 사용(외부 차트 라이브러리 없음)
데이터OData V2 — 엔티티셋 5개(TxnSet · AssocSet · DirSet · RlzSet · ReconSet). 화면은 서비스 주소만 알고 데이터 파일을 직접 읽지 않습니다.
서비스 구현service.js — Node 로 구현한 서비스 엔진. 필터 · 정렬 · 건수 · 키 조회를 처리합니다.
설명서앱 안의 설명서(readme) — 화면 · 규칙 · 대사식 · OData 계약 · 검증 결과
소개 영상1분 37초 · 장면 8개 · 자막 문장 21개 · 용량 약 3MB

도입 후 쓰는 순서

  1. 결산 마감 직후 기준 연월로 조회하고 요약 지표의 정합성 대사 차이가 0 인지 먼저 봅니다.
  2. 점검 필요로 좁혀 차이가 큰 거래부터 상세를 엽니다.
  3. 점검 코드가 가리키는 대로 FAGLL03 · FS10N · AW01N · MB51 에서 전표와 잔액, 자산, 자재 문서를 확인합니다.
  4. 원인이 확인되면 정정 분개는 SAP 표준 거래에서 입력하고, 이 앱은 다시 조회해 차이가 줄었는지 봅니다.
  5. 마지막으로 대사 결과 탭과 CSV 를 감사 자료로 넘깁니다.

실행 화면

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

처음 열었을 때

조회 직후 — 요약 지표와 거래별 명세
조회 직후 — 요약 지표와 거래별 명세 — 기준 연월 202609 로 한 번 자동 조회된 화면입니다. 위쪽에 거래 40건 · 제거 대상 819.7백만 원 · 기말 미실현손익 329.6백만 원 · 장부 제거 잔액 346.6백만 원 · 재계산−장부 차이 −17.0백만 원 · 점검 필요 6건이 먼저 보이고, 아래에 거래별 명세가 놓입니다.

숫자 일곱 개를 먼저 보여 주는 이유는 "장부와 맞는가" 가 가장 먼저 나오는 질문이기 때문입니다. 재계산 기말 329.6과 장부 346.6의 차이 −17.0백만 원이 곧 이 화면이 찾는 대상이고, 정합성 대사 차이 0건은 그 재계산 자체는 흔들리지 않는다는 뜻입니다.

관계기업 단위로 묶어 보기

관계기업별 집계 — 롤포워드 한 줄
관계기업별 집계 — 롤포워드 한 줄 — 관계기업 다섯 곳을 지분율, 상향·하향 건수, 제거 대상, 기초 미실현, 당기 발생, 당기 실현, 기말 미실현, 장부 제거 잔액까지 한 줄로 보여 줍니다.

관계기업마다 지분율이 다르므로 같은 차익이라도 제거 금액이 달라집니다. 다온물류(40%)는 거래 8건에서 제거 대상 242.8백만 원이 나오고, 라온소재(20%)는 86.0백만 원입니다. 한 줄에서 기초 + 발생 − 실현 = 기말을 눈으로 따라갈 수 있습니다.

상향·하향, 재고·유형으로 나누기

방향·계정별 집계 — 어디서 제거되는가
방향·계정별 집계 — 어디서 제거되는가 — 상향 재고자산 · 상향 유형자산 · 하향 재고자산 · 하향 유형자산 네 줄입니다. 제거 계정이 재고자산 · 유형자산 · 지분법투자 중 어디인지가 함께 표시됩니다.

상향 거래(관계기업이 투자자에게 파는 것)는 투자자가 들고 있는 자산에서, 하향 거래(투자자가 관계기업에 파는 것)는 지분법투자에서 제거하는 것이 일반적입니다. 다만 계정 표시는 회사 정책 확인이 필요한 항목이라 화면에도 그렇게 적었습니다.

숫자가 서로 맞는지 대사식으로 확인하기

대사 결과 — 정합성 6종과 장부 점검 3종
대사 결과 — 정합성 6종과 장부 점검 3종 — 대사 9건이 좌변·우변·검사 건수·점검 필요 건수·최대 차이·대사식으로 나열됩니다. 01~06은 정합성 대사로 모두 0, 07~09는 장부 점검 대사입니다.

정합성 대사는 계산이 서로 맞물리는지를 보는 것이고, 장부 점검 대사는 계산 결과가 장부와 같은지를 보는 것입니다. 둘을 같은 표에 두되 구분 열을 따로 둔 이유는, 앞의 0은 "계산이 맞다"이고 뒤의 6·1·1은 "장부를 보라"는 뜻이기 때문입니다.

점검이 필요한 거래만 보기

점검 결과 = 점검 필요로 좁히기
점검 결과 = 점검 필요로 좁히기 — 점검 결과 선택 목록을 "점검 필요"로 고르고 조회하면 6건만 남고 요약 지표도 6건 기준으로 다시 계산됩니다.

R01 두 건(T05 · T14), R02 한 건(T19), R03 한 건(T22), R05 한 건(T28), R04 한 건(T34)이 남습니다. 이 여섯 건의 재계산−장부 차이 합이 −17.0백만 원이고, 점검 대상 기말 미실현손익은 93.9백만 원, 장부 제거 잔액은 110.9백만 원입니다.

행 하나를 열어 변동 보기

거래 상세 — 기초에서 기말까지 네 단계
거래 상세 — 기초에서 기말까지 네 단계 — T05(가온정밀, 상향 재고자산)를 열면 거래 정보 열여섯 항목과 미실현손익 변동 4단계가 보입니다. 기초 미실현 5,226,000 → 당기 발생 0 → 당기 실현 −5,226,000 → 기말 0 입니다.

이 거래는 장부 제거 잔액이 5,226,000으로 남아 있어 재계산(0)과 5,226,000 차이가 납니다. 점검 코드 R01 — 당기 실현분 반영 누락. 기초 시점의 실현율 33%만 반영한 채 외부 판매로 100% 실현된 뒤에도 잔액을 줄이지 않은 모양입니다. 원인은 단정하지 않고 확인을 요청합니다.

SAP 표준 기능 확장 포인트

이 앱은 SAP 표준을 대체하지 않습니다. 표준이 이미 잘하는 일은 표준에 맡기고, 표준에 없는 "제거 금액의 재계산과 장부 대조"만 이어 붙이는 쪽으로 만들었습니다. 먼저 기준서가 요구하는 것을 적고, 그다음 표준 T-code 와의 관계를 적습니다.

기준서 요구사항과 대응 기능

기준서요구사항대응 기능원천 데이터비고
IAS 28 관계기업과 공동기업에 대한 투자(K-IFRS 제1028호)상향·하향 거래에서 생긴 손익은 관련 없는 투자자의 지분 한도로만 인식 — 투자자 지분 몫 제거제거 대상 = 차익 × 지분율거래 명세(매각 대가 · 장부금액) · 원장 지분율제거 계정 표시는 회사 정책 확인 필요
IAS 28 (같은 기준서)제거한 미실현손익은 외부 판매·상각 등으로 실현되는 시점에 환입기초 + 발생 − 실현 = 기말 롤포워드외부 판매율 · 상각 경과율실현율 증빙은 회사가 확인
IAS 28 (같은 기준서)양도 자산에 손상 증거가 있으면 손실은 제거하지 않고 인식손상 증거 손실 거래의 제거 여부 대조(R05)손상 증거 구분 값손상 판단은 회사와 감사인
IAS 28 (같은 기준서)관계기업 손익 중 투자자 지분을 지분법손익에 반영제거 조정액 = 당기 실현 − 당기 발생지분법손익(제거 전) 샘플 값제거 전 손익은 샘플 값

문단번호는 원문을 직접 확인한 항목만 적어야 하므로 이 표에는 적지 않았습니다. 이미 적용 중인 기준서의 요구사항이며, 새 기준서 대응이 아닙니다.

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

하고 싶은 일SAP 표준표준에서 걸리는 자리이 앱이 하는 일
제거 분개 전표 확인FAGLL03전표 라인은 보여 주지만 어느 거래의 제거인지는 사람이 짝지어야 합니다거래 번호 기준으로 재계산 금액을 보여 주어 전표를 찾을 기준을 줍니다
계정 잔액 확인FS10N잔액은 나오지만 "맞아야 할 잔액"이 어디에도 없습니다재계산 기말 미실현손익과 장부 제거 잔액을 나란히 둡니다
상향 거래 취득 자산 확인AW01N자산별 상각 경과는 보이나 거래와 묶여 있지 않습니다상각 경과율을 실현율로 써서 환입 몫을 계산합니다
상향 거래 재고 입출고 확인MB51자재 문서 목록이라 외부 판매율을 따로 계산해야 합니다외부 판매율을 실현율로 써서 환입 몫을 계산합니다
미실현손익 제거 금액 재계산없음표준에 없습니다. 보통 엑셀로 만듭니다차익 × 지분율 → 롤포워드 → 장부 대조를 거래별로 합니다
제거 후 지분법손익없음조정 금액은 결산 수작업입니다조정 = 당기 실현 − 당기 발생 으로 계산해 보여 줍니다

어디에 붙이나

이 앱은 읽기 전용입니다. 전표를 만들거나 고치지 않고, OData 서비스 하나가 원천을 읽어 주면 화면이 그대로 돕니다. 붙는 자리는 세 곳입니다 — 거래 명세(매각 대가 · 장부금액 · 지분율), 실현율(재고는 자재 문서, 유형자산은 자산 상각), 장부 제거 잔액(ACDOCA 의 제거 계정). 확정되지 않은 필드는 아래 CDS 스케치에 주석으로 표시했습니다.

CDS 구성

이 사례의 화면은 샘플 40건을 서비스 엔진이 들고 있습니다. 데모라서 되는 일이고, 운영 데이터에서는 그렇게 하지 않습니다. 운영으로 올릴 때는 거래 · 실현율 · 장부 잔액 세 원천을 CDS 로 내려 서비스가 읽게 합니다. 아래는 그때 만드는 뷰들을 레이어 순서대로 적은 것입니다.

코드는 스케치입니다. 필드 이름과 표준 뷰 이름은 릴리스·환경에 따라 다르므로, 그대로 붙여 넣기 전에 View Browser(F2170) 로 실제 이름을 확인해야 합니다. 확인이 필요한 자리는 주석에 적어 두었습니다.

뷰 레이어 구성

레이어뷰하는 일왜 나누나
기준ZUNR_TXN관계기업 거래 명세 · 손상 증거 구분 · 거래 시점 지분율표준에 거래 단위 지분율이 없으므로 고객 테이블로 둡니다.
기준ZUNR_LEDGPCT원장 지분법 지분율(유효기간 포함)거래 지분율과 원장 지분율을 비교(R03)하려면 둘 다 필요합니다.
실현율ZI_UnrRealization재고는 외부 출고수량 ÷ 입고수량, 유형자산은 상각 경과월 ÷ 내용연수월실현율 산식이 자산 종류마다 달라 한 뷰에 모읍니다.
장부ZI_UnrBookBalance제거 계정의 장부 제거 잔액(ACDOCA 집계)장부 쪽 숫자를 한 곳에서만 읽습니다.
계산ZI_UnrealizedElim차익 · 제거 대상 · 기초 · 발생 · 실현 · 기말화면과 CSV 가 같은 계산을 쓰게 합니다.
점검ZC_UnrealCheck재계산 − 장부 차이와 점검 코드(R01~R05)점검 규칙이 바뀌면 이 뷰만 고칩니다.
권한ZI_UNRELIMINATE (DCL)회사코드 · 관계기업 기준 접근 제한집계를 읽는 자리에 걸어야 합계로 새지 않습니다.

① 거래 명세 테이블

거래 단위 지분율과 손상 증거 구분이 어디에도 없으므로 고객 테이블에 둡니다. 운영에서는 연결 시스템이나 투자 관리 자료를 옮겨 담습니다. 제거 계산의 출발점이라 가장 먼저 합의해야 하는 항목입니다.

" ────────────────────────────────────────────────────────────────
"  ZUNR_TXN — 관계기업 거래 명세 (투명 테이블)
"  거래 시점 지분율을 거래에 박아 두는 이유 : 이후 지분율이 바뀌어도
"  과거 거래의 제거 금액이 흔들리지 않게 하기 위해서다.
" ────────────────────────────────────────────────────────────────
@EndUserText.label : '관계기업 거래 명세'
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #ALLOWED
define table zunr_txn {
  key mandt    : mandt not null;
  key bukrs    : bukrs not null;          " 투자자 회사코드
  key txn_no   : abap.char(10) not null;  " 거래 번호
  assoc_code   : abap.char(10);           " 관계기업 코드 (거래 상대 회사 필드는 확인 필요)
  dir          : abap.char(2);            " UP 상향 / DN 하향
  asset_kind   : abap.char(3);            " INV 재고자산 / PPE 유형자산
  txn_date     : abap.dats;
  sale_price   : abap.curr(18,2);         " 매각 대가
  carry_amt    : abap.curr(18,2);         " 매각 측 장부금액 — 확인 필요
  own_pct      : abap.dec(5,2);           " 거래 시점 투자자 지분율
  impair_flag  : abap.char(1);            " 손상 증거 Y/N
  waers        : waers;
}

② 원장 지분율

거래 지분율과 원장 지분법 지분율이 다르면 R03 으로 올라옵니다. 유효기간을 두어 지분율이 바뀐 시점을 따라갑니다.

@EndUserText.label : '원장 지분법 지분율'
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
define table zunr_ledgpct {
  key mandt      : mandt not null;
  key bukrs      : bukrs not null;
  key assoc_code : abap.char(10) not null;
  key valid_from : abap.dats not null;    " 유효 시작일
  ledg_pct       : abap.dec(5,2);         " 원장 지분법 지분율 — 회사 기준정보와 확인 필요
}

③ 실현율 — 재고와 유형자산을 한 뷰로

재고는 입고수량 대비 외부 출고수량, 유형자산은 내용연수 대비 상각 경과월로 실현율을 만듭니다. 자재 문서와 자산 연도별 값을 읽는 자리이므로 필드 이름은 환경에서 확인해야 합니다.

@AbapCatalog.viewEnhancementCategory: [#NONE]
@EndUserText.label: '미실현손익 실현율'
define view entity ZI_UnrRealization
  as select from zunr_txn as t
  left outer join mseg as m  on  m.matnr = t.matnr_ref     " 확인 필요: 거래-자재 연결 필드
{
  key t.bukrs, key t.txn_no,
  case t.asset_kind
    when 'INV' then
      cast( case when sum( m.menge_in ) = 0 then 0
                 else sum( m.menge_out ) * 100 / sum( m.menge_in ) end
            as abap.dec(5,2) )                             " 외부 판매율 — 수량 필드는 확인 필요
    else
      cast( 0 as abap.dec(5,2) )                           " 유형자산은 상각 경과월 ÷ 내용연수월 (ANLC 연결, 확인 필요)
  end                                                      as rlz_close
}
group by t.bukrs, t.txn_no, t.asset_kind

④ 장부 제거 잔액

장부 쪽 숫자를 읽는 유일한 자리입니다. 제거 계정의 잔액을 거래 번호 기준으로 모아야 하므로, 전표 라인에 거래 번호를 어떻게 남겼는지가 도입 전에 정해져야 합니다.

@AbapCatalog.viewEnhancementCategory: [#NONE]
@EndUserText.label: '장부 제거 잔액'
define view entity ZI_UnrBookBalance
  as select from acdoca as a
{
  key a.rbukrs                 as bukrs,
  key a.zuluz_txn_ref          as txn_no,       " 확인 필요: 거래 번호를 담는 전표 필드(참조 · 지정 · 사용자 필드)
  sum( a.hsl )                 as book_elim     " 제거 계정(FS10N 기준) 잔액
}
where a.racct in ( 'ELIM_INV', 'ELIM_PPE', 'ELIM_EQMT' )   " 확인 필요: 회사 계정 체계
  and a.rldnr = '0L'
group by a.rbukrs, a.zuluz_txn_ref

⑤ 제거 금액 계산

이 앱의 핵심입니다. 차익 · 제거 대상 · 롤포워드를 한 곳에서 정의해 화면과 CSV 가 같은 계산을 쓰게 합니다. 손상 증거가 있는 손실 거래는 제거 대상이 0 입니다.

@AbapCatalog.viewEnhancementCategory: [#NONE]
@EndUserText.label: '미실현손익 제거 계산'
define view entity ZI_UnrealizedElim
  as select from zunr_txn as t
  association [0..1] to ZI_UnrRealization as _r on _r.bukrs = t.bukrs and _r.txn_no = t.txn_no
{
  key t.bukrs, key t.txn_no, t.assoc_code, t.dir, t.asset_kind,
  t.sale_price - t.carry_amt                                     as gross_gain,
  case when t.sale_price - t.carry_amt < 0 and t.impair_flag = 'Y' then 0
       else cast( ( t.sale_price - t.carry_amt ) * t.own_pct / 100 as abap.curr(18,2) )
  end                                                            as elim_total,
  _r.rlz_close,
  _r
}

⑥ 점검 코드

재계산 기말 미실현손익과 장부 제거 잔액을 비교해 점검 코드를 붙입니다. 원인은 단정하지 않으므로 코드 이름도 "점검 필요"에 머뭅니다.

@AbapCatalog.viewEnhancementCategory: [#NONE]
@EndUserText.label: '미실현손익 점검'
define view entity ZC_UnrealCheck
  as select from ZI_UnrealizedElim as e
  left outer join ZI_UnrBookBalance as b on b.bukrs = e.bukrs and b.txn_no = e.txn_no
{
  key e.bukrs, key e.txn_no,
  e.elim_total, e.close_unreal, b.book_elim,
  e.close_unreal - coalesce( b.book_elim, 0 )                    as diff_amt,
  case
    when e.close_unreal = coalesce( b.book_elim, 0 )             then 'I00'
    when e.close_unreal > 0 and coalesce( b.book_elim, 0 ) = 0   then 'R02'   " 제거 누락
    when e.own_pct <> e.ledg_pct                                 then 'R03'   " 지분율 상이
    when e.gross_gain < 0 and e.impair_flag = 'Y'
         and coalesce( b.book_elim, 0 ) <> 0                     then 'R05'   " 손실 거래 손상 증거
    else 'R01'                                                               " R04 전액 제거 판정은 장부 잔액이 차익 전체 기준인지로 별도 분기(생략)
  end                                                            as check_code
}

⑦ 접근 제어

집계를 읽는 자리에 걸어야 합니다. 상세 행에만 걸면 합계 차이로 다른 회사의 숫자를 추정할 수 있습니다.

@EndUserText.label: '미실현손익 점검 접근 제어'
@MappingRole: true
define role ZI_UNRELIMINATE {
  grant select on ZC_UnrealCheck
    where ( bukrs ) = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' );
}

운영 시점에 해야 할 일

해야 할 일하지 않으면결정 주체
거래 번호를 전표에 남기는 방식장부 제거 잔액을 거래별로 읽을 수 없고 합계로만 비교하게 됩니다회계팀 · 연결회계
거래 시점 지분율 관리 주체거래 지분율과 원장 지분율의 비교(R03)가 의미를 잃습니다연결회계팀
실현율 증빙 방식실현율이 추정치로 남아 환입 금액을 감사인이 받아들이지 않습니다회계팀 · 물류
손상 증거 판정 절차손실 거래의 제거 여부(R05)가 사람마다 달라집니다회계팀 · 감사인
제거 계정 체계재고 · 유형 · 지분법투자 구분이 회사 정책과 어긋납니다회계팀
접근 권한 범위합계 화면으로 다른 회사 숫자가 드러납니다보안 · 권한

위 여섯 가지는 코딩이 아니라 합의입니다. 합의가 끝나면 기술 작업은 CDS 뷰를 만들고 서비스 경로를 바꾸는 일입니다. 화면 코드는 서비스 경로를 하드코딩하지 않으므로, manifest.json 의 서비스 주소만 바꾸면 됩니다.

자주 묻는 질문

도입 상담과 데모에서 받을 만한 질문을 네 묶음으로 나눠 적었습니다.

기준서와 범위

이 화면은 어떤 요구사항을 점검하나요?

IAS 28 관계기업과 공동기업에 대한 투자(K-IFRS 제1028호)의 상향·하향 거래 미실현손익 제거 요구사항입니다. 이미 적용 중인 기준서의 요구사항이며, 이 화면의 범위는 거래 단위 제거 금액 재계산과 장부 대사입니다. 지분법 손상이나 영향력 상실은 범위에 포함하지 않습니다.

상향 거래와 하향 거래는 무엇이 다릅니까?

상향 거래는 관계기업이 투자자에게 파는 거래이고, 하향 거래는 투자자가 관계기업에 파는 거래입니다. 어느 쪽이든 미실현 차익 가운데 투자자 지분 몫을 제거합니다. 제거하는 계정이 상향은 투자자가 들고 있는 재고자산·유형자산, 하향은 지분법투자로 표시되는 것이 일반적이지만, 회사 정책에 따라 달라질 수 있어 화면에서도 확인 필요 항목입니다.

왜 지분율을 곱합니까?

관계기업의 손익은 투자자 지분만큼만 지분법손익에 들어옵니다. 따라서 거래에서 생긴 차익도 투자자 몫만 아직 실현되지 않은 것으로 걷어 냅니다. 지분 30% 라면 차익 26,000,000원 가운데 7,800,000원이 제거 대상입니다.

관계기업 외에 공동기업도 됩니까?

기준서가 같은 규칙을 적용하므로 구조는 같습니다. 다만 이 사례 데이터는 관계기업 다섯 곳으로 만들었고, 공동기업 구분 열은 두지 않았습니다. 필요하면 구분 열을 하나 더해 필터에 올리면 됩니다.

지분법 손상이나 영향력 상실도 봅니까?

보지 않습니다. 이 화면은 거래 단위 제거 금액 재계산과 장부 대사만 다룹니다. 손상검사나 영향력 상실은 다른 점검 화면의 범위입니다.

계산과 점검 코드

기초 · 발생 · 실현 · 기말은 어떻게 이어집니까?

기초 미실현은 직전 기말 잔액, 당기 발생은 당기 거래분의 투자자 지분 몫, 당기 실현은 외부 판매·상각 경과분으로 환입하는 금액, 기말은 기초 + 발생 − 실현 입니다. 40건 모두 이 등식이 맞는지를 대사 03 이 확인하고, 변동 4단계 160행도 합계가 맞습니다.

실현율은 어떻게 정합니까?

재고자산은 외부 판매율(외부로 나간 수량 ÷ 들어온 수량), 유형자산은 상각 경과율(상각 경과월 ÷ 내용연수월)을 씁니다. 당기 실현 = 제거 대상 × (기말 실현율 − 기초 실현율) 입니다. 실현율의 증빙은 회사가 확인해야 하는 값입니다.

점검 코드 R01~R05 는 각각 무엇입니까?

R01 당기 실현분 반영 누락(장부가 기초 시점 실현율만 반영), R02 제거 누락(재계산 기말이 0 보다 큰데 장부 잔액이 0), R03 지분율 상이(거래 지분율 ≠ 원장 지분율), R04 전액 제거(장부가 투자자 지분이 아니라 차익 전체 기준), R05 손실 거래 손상 증거(손상 증거가 있는 손실이 장부에서 제거돼 있음). 정상은 I00 입니다.

"점검 필요"가 나오면 장부가 틀린 것입니까?

아닙니다. 재계산 금액과 장부 금액이 다르다는 사실만 보여 주며 원인은 단정하지 않습니다. 재계산에 쓴 실현율이나 지분율이 틀렸을 수도 있습니다. 최종 판단은 회사와 감사인이 합니다.

손실 거래는 왜 제거하지 않습니까?

양도 자산에 손상 증거가 있으면 그 손실은 이미 자산 가치 하락을 반영한 것이므로 투자자 지분 몫으로 걷어 내지 않고 그대로 인식합니다. 이 사례에서 T28(손상 증거 있음)은 제거 대상이 0 이고, 장부에 420,000원이 제거돼 있어 R05 로 올라옵니다. 손상 증거가 없는 손실(T11)은 정상 규칙을 적용합니다.

재계산 합계와 장부 합계의 차이가 작은데 왜 거래별로 봅니까?

차이가 서로 반대 방향으로 상쇄되기 때문입니다. 이 사례의 합계 차이는 −17.0백만 원이지만 T34 한 건만 −31.1백만 원입니다. 합계만 보면 큰 오류가 작아 보입니다.

대사 01~06 이 모두 0 이면 장부와도 맞는 것 아닙니까?

아닙니다. 01~06 은 재계산 안에서 서로 맞물리는지를 보는 것입니다. 장부와 같은지는 07~09 가 보며, 이 사례에서는 의도적으로 넣은 예외 때문에 07 이 6건 차이입니다.

데이터와 OData 서비스

데이터는 실제 회사의 것입니까?

아닙니다. 가상의 관계기업 5곳 · 거래 40건(상향 20 · 하향 20, 재고자산 · 유형자산)으로 만든 검증용 샘플이며 금액 단위는 원입니다. 실제 회사의 계정체계나 금액이 아닙니다.

화면이 부르는 OData 는 무엇입니까?

엔티티셋 다섯 개입니다 — TxnSet(거래별 명세 40) · AssocSet(관계기업별 5) · DirSet(방향·계정별 4) · RlzSet(변동 4단계 160) · ReconSet(대사 9). 조회조건은 표준 쿼리 옵션($filter · $orderby · $top)으로만 보내고, "전체"는 조건을 보내지 않습니다.

service.js 는 무슨 일을 합니까?

Node 로 만든 서비스 엔진으로 $metadata 와 엔티티셋 응답을 만듭니다. 필터 · 정렬 · 건수를 처리하고, 응답은 OData V2 형식({"d":{"results":[…]}})입니다. 운영에서는 이 자리에 실제 서비스를 두면 됩니다.

운영 데이터로 쓰려면 무엇을 바꿉니까?

OData 서비스를 실제 데이터 소스에 연결하고 manifest.json 의 서비스 경로만 바꿉니다. 화면 코드는 서비스 경로를 하드코딩하지 않습니다. 원천은 CDS 구성 절의 뷰들입니다.

검증용 샘플 데이터와 앱 본체는 분리되어 있습니까?

앱 본체는 서비스 주소로만 데이터를 읽습니다. 검증용 샘플 데이터 파일은 test/ 아래에만 있고, 서비스에 연결되지 않으면 오류 안내 창을 띄웁니다.

운영과 도입

제거 계정은 어떻게 정합니까?

화면의 제거 계정(재고자산 · 유형자산 · 지분법투자) 표시는 일반적인 구분을 보여 주는 값이며 회사 회계정책에 따라 달라질 수 있습니다. 도입 때 회계팀과 먼저 합의해야 합니다.

거래 번호는 SAP 어디에 남깁니까?

표준 전표에는 관계기업 거래 번호라는 필드가 없습니다. 참조 · 지정 · 사용자 필드 중 무엇을 쓸지 정해 전표에 남겨야 장부 제거 잔액을 거래별로 읽을 수 있습니다. 이것이 도입에서 가장 먼저 합의할 항목입니다.

표준 T-code 와는 어떻게 함께 씁니까?

점검 코드가 가리키는 대로 FAGLL03(제거 분개 전표) · FS10N(계정 잔액) · AW01N(자산 상각 경과) · MB51(재고 입출고)에서 근거를 확인합니다. 정정 분개는 표준 거래에서 입력하고, 이 앱은 다시 조회해 차이가 줄었는지만 봅니다.

감사인에게는 무엇을 보여 줍니까?

대사 결과 탭(대사식 · 검사 건수 · 최대 차이)과 CSV 를 근거로 넘길 수 있습니다. 다만 이 화면은 점검 도구이며 공시 · 감사 대응 숫자를 만드는 것은 아닙니다.

동시에 몇 건까지 됩니까?

샘플은 40건이라 제한이 없습니다. 운영 규모에서는 조회조건으로 기준 연월과 관계기업을 좁히고 서비스에서 $top 으로 끊는 것이 기본입니다. 집계를 CDS 로 내리면 화면은 요약 행만 받습니다.

새 기준서나 정책이 바뀌면 어디를 고칩니까?

판정 규칙은 점검 뷰(ZC_UnrealCheck) 한 곳에 있고 화면은 그 결과를 보여 주기만 합니다. 규칙이 바뀌면 이 뷰와 설명서의 점검 코드 표를 함께 고칩니다.

이 앱을 바로 쓸 수 있습니까?

검증용 샘플 위에서 돌아가는 사례입니다. 운영에 쓰려면 원천 연결과 위의 합의 여섯 가지가 필요합니다. 도입이 궁금하시면 왼쪽 문의하기로 남겨 주세요.