SAP

계정유형 섞어쓰기 그만 — 전기키 갈리는 기준 #shorts #SAP #FI

📖 개요 — 이 글에서 얻을 수 있는 것

SAP FI에서 전표를 입력하다 보면 "이 전기키로는 이 계정을 쓸 수 없습니다" 같은 메시지에 자주 부딪힙니다. 그 뿌리에는 계정유형(Account Type) S·D·K·M·A라는 다섯 글자가 있습니다. 이 글은 계정유형이 전기키(Posting Key), 전표유형(Document Type), 필드상태(Field Status)를 어떻게 제한하는지, 그리고 왜 한 전표 안에서 특정 조합만 허용되는지를 초심자 눈높이에서 풀어냅니다.

  • S·D·K·M·A 다섯 계정유형의 역할과 보조원장 구조 이해
  • 전기키 번호대(01~99)와 계정유형의 1:1 귀속 관계 파악
  • 전표유형별 허용 계정유형(T003-KOARS) 확인 방법 습득
  • 계정유형 불일치 오류의 원인 진단 절차 정리

📚 읽기 전에 갖추면 좋은 배경

차변/대변 개념과 복식부기의 기본(전표 합계는 항상 0)을 알고 있으면 충분합니다. FB50이나 FB01로 전표를 한 번이라도 입력해 봤다면 더 빠르게 따라올 수 있습니다. ABAP 코드는 읽기 예제 수준이므로 개발 경험이 없어도 무방합니다.

🔧 환경 · 버전 · 준비물

이 글의 화면·테이블 구조는 SAP S/4HANA(온프레미스 2022/2023 기준)와 SAP ERP ECC 6.0에서 일반적으로 동일하게 적용됩니다. S/4HANA에서는 명세 테이블이 ACDOCA로 통합되었지만, 계정유형 필드(KOART)와 통제 로직 자체는 그대로 유지됩니다. 확인에 사용할 트랜잭션은 다음과 같습니다.

  • FS00 — G/L 계정 마스터, 필드상태그룹 확인
  • OB41 — 전기키 정의(계정유형·차대변 귀속)
  • OBA7 — 전표유형별 허용 계정유형
  • FB01 / FB50 / FB70 — 전표 입력 테스트
  • 조회 권한: 테이블 T003, TBSL, BSEG(또는 ACDOCA)

💡 핵심 개념 — 다섯 개의 게이트

계정유형은 공항의 탑승 게이트에 비유할 수 있습니다. 승객(전표 라인)은 여권 종류(계정유형)에 따라 들어갈 수 있는 게이트(전기키)가 정해져 있고, 항공편(전표유형)마다 태울 수 있는 여권 종류가 제한됩니다.

  • S (G/L) — 총계정원장 계정에 직접 전기. 비용·수익·현금 등 대부분의 일반 라인.
  • D (Customer) — 고객 보조원장. 채권(미수금) 라인. 조정계정을 통해 G/L에 자동 반영.
  • K (Vendor) — 공급업체 보조원장. 채무(미지급금) 라인.
  • M (Material) — 자재 라인. MIGO 같은 물류 트랜잭션에서 계정결정(OBYC)을 거쳐 생성되며, FI에서 직접 입력하는 경우는 거의 없습니다.
  • A (Asset) — 고정자산 보조원장. 취득·감가상각 라인.

세 겹의 통제가 이 게이트를 지킵니다. 첫째, 전기키는 OB41에서 정확히 하나의 계정유형과 차/대변에 귀속됩니다. 01~19는 고객(D), 21~39는 공급업체(K), 40/50은 G/L(S), 70/75는 자산(A), 89/99는 자재(M)가 대표적입니다. 그래서 전기키 01 화면에 G/L 계정을 넣으면 즉시 거부됩니다. 둘째, 전표유형은 T003의 허용 계정유형 마스크(KOARS)로 라인 구성을 제한합니다. 예를 들어 고객송장 유형은 일반적으로 D+S만, 공급업체송장 유형은 K+S(설정에 따라 A·M 추가)를 허용합니다. 셋째, 필드상태가 화면을 결정합니다. S 라인은 G/L 계정의 필드상태그룹(FS00·OBC4)이, D/K 라인은 전기키의 필드상태와 조정계정 설정이 함께 화면 필드를 결정합니다. 두 상태가 "숨김 vs 필수"로 충돌하면 그 자체가 오류가 됩니다. 즉 "한 전표에 고객 라인 + G/L 라인"이 되는 이유는 전표유형이 D와 S를 함께 허용하기 때문이고, 같은 전표에 자산 라인이 막히는 이유는 그 유형의 마스크에 A가 없기 때문입니다.

💻 실전 예제 3단계

1단계 — 기본: 전표 라인의 계정유형 직접 확인. 고객송장(채권 1,100 / 매출 1,000 / 부가세 100)을 FB70으로 전기한 뒤, 어떤 라인이 어떤 계정유형으로 저장됐는지 조회합니다.

REPORT zfi_koart_check.
PARAMETERS: p_belnr TYPE belnr_d OBLIGATORY,
            p_bukrs TYPE bukrs DEFAULT '1000',
            p_gjahr TYPE gjahr DEFAULT '2026'.

SELECT buzei, bschl, koart, shkzg, wrbtr
  FROM bseg
  WHERE bukrs = @p_bukrs AND belnr = @p_belnr AND gjahr = @p_gjahr
  INTO TABLE @DATA(lt_lines).

LOOP AT lt_lines INTO DATA(ls).
  " 예상 결과: 라인1 BSCHL=01 KOART=D(채권), 라인2 BSCHL=50 KOART=S(매출)
  WRITE: / ls-buzei, ls-bschl, ls-koart, ls-shkzg, ls-wrbtr.
ENDLOOP.

2단계 — 실무 시나리오: BAPI 전기와 오류 로깅. 판매 정산 인터페이스에서 고객 라인과 G/L 라인을 함께 전기하는 상황입니다. 계정유형별로 별도 테이블(ACCOUNTRECEIVABLE / ACCOUNTGL)에 담는 구조 자체가 계정유형 분리를 강제한다는 점에 주목하세요.

DATA: ls_header TYPE bapiache09,
      lt_ar     TYPE TABLE OF bapiacar09,
      lt_gl     TYPE TABLE OF bapiacgl09,
      lt_amt    TYPE TABLE OF bapiaccr09,
      lt_return TYPE TABLE OF bapiret2.

ls_header-doc_type   = 'DR'.        " 고객송장: 일반적으로 D+S 허용
ls_header-comp_code  = '1000'.
ls_header-doc_date   = sy-datum.
ls_header-pstng_date = sy-datum.

APPEND VALUE #( itemno_acc = 1 customer = 'CUST8801' ) TO lt_ar.      " D 라인
APPEND VALUE #( itemno_acc = 2 gl_account = '0041001000' ) TO lt_gl.  " S 라인
APPEND VALUE #( itemno_acc = 1 currency = 'KRW' amt_doccur = '1100' ) TO lt_amt.
APPEND VALUE #( itemno_acc = 2 currency = 'KRW' amt_doccur = '1100-' ) TO lt_amt.

CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
  EXPORTING documentheader = ls_header
  TABLES    accountreceivable = lt_ar
            accountgl         = lt_gl
            currencyamount    = lt_amt
            return            = lt_return.

LOOP AT lt_return INTO DATA(ls_ret) WHERE type CA 'EA'.
  " 오류 전문을 남겨야 "계정유형 불일치"인지 "필드상태 충돌"인지 추적 가능
  MESSAGE ID ls_ret-id TYPE 'I' NUMBER ls_ret-number
    WITH ls_ret-message_v1 ls_ret-message_v2.
ENDLOOP.
IF sy-subrc <> 0.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'.
ENDIF.

3단계 — 프로덕션: 사전 검증·권한·테스트. 운영 인터페이스라면 전기 전에 전표유형 마스크를 미리 검사해 불필요한 실패 호출을 줄이는 것이 권장됩니다. 계정유형별 권한 객체 F_BKPF_KOA도 함께 점검해야 합니다(권한이 없으면 문제없는 조합도 거부됩니다).

" 전표유형 'DZ'가 자산(A) 라인을 허용하는지 사전 체크
SELECT SINGLE koars FROM t003 WHERE blart = 'DZ' INTO @DATA(lv_mask).
IF lv_mask NA 'A'.
  " 마스크에 A가 없으므로 자산 라인 포함 요청은 큐에서 반려 + 알림
  RAISE EXCEPTION TYPE zcx_fi_acct_type_blocked.
ENDIF.

" 단위 테스트에서는 실제 전기 대신 BAPI_ACC_DOCUMENT_CHECK로
" 시뮬레이션만 수행해 데이터 오염 없이 조합 검증을 자동화한다.

⚠️ 자주 나는 오류와 진단 FAQ

Q1. "전표유형에 대해 계정유형이 정의되지 않았습니다"류의 오류가 납니다. 전표유형 마스크에 해당 계정유형이 빠진 경우입니다. OBA7에서 해당 전표유형을 열어 허용 계정유형 체크박스를 확인하세요. 임의로 추가하기보다, 목적에 맞는 전표유형(예: 자산이면 AA)으로 바꾸는 편이 일반적으로 안전합니다.

Q2. 전기키 40으로 고객 번호를 넣었더니 계정을 찾지 못합니다. 40은 계정유형 S 전용이라 입력값을 G/L 계정번호로 해석하기 때문입니다. 고객 라인은 01~19(OB41에서 확인) 중에서 골라야 합니다. 전기키를 바꾸면 화면 필드 구성 자체가 달라지는 것도 이 귀속 때문입니다.

Q3. 채권 조정계정에 FB50으로 직접 전기하려니 막힙니다. 조정계정은 보조원장(D/K/A)의 합계를 비추는 거울이라 직접 전기가 차단됩니다. FS00에서 "조정계정 유형"이 지정된 계정인지 확인하고, 반드시 고객/공급업체 번호를 통한 라인으로 전기하세요.

Q4. 자재(M) 라인을 FI에서 만들 수 있나요? 일반적으로 불가합니다. M 라인은 자재이동(MIGO 등)에서 계정결정(OBYC)을 거쳐 자동 생성됩니다. FI에서 재고 금액을 조정해야 한다면 재고 계정에 대한 S 라인 전기가 아니라 MM 측 절차를 먼저 검토하는 것이 권장됩니다.

🚀 이어서 학습하면 좋은 주제

  • 특별 G/L 지시자(Special G/L Indicator) — 선수금·보증금처럼 같은 D/K라도 다른 조정계정으로 갈라지는 구조
  • 필드상태 변형(OBC4)과 전기키 필드상태의 우선순위 규칙
  • 자동 계정결정(OBYC) — M 라인이 태어나는 곳
  • S/4HANA ACDOCA 통합 원장 — BSEG와의 관계와 KOART의 위치

📚 더 깊이 볼 자료

댓글 0

아직 댓글이 없습니다.