SOBJ로 운영 OB08 잠금 풀기 — V_TCURR 현재세팅 해제 방법

안녕하세요. 아는 형입니다.

프로젝트를 수행할때 자금파트에서 가장 중요하게 생각하는 마스터는  환율만큼 매일 신경 써야 하는 게 없습니다. 프로젝트 개발 및 테스트시에는 문제가 없다가 Open하고 똑같이 설정을 했는데 운영 서버에 환율이 안들어온 상황이  그거 해결하느라 하루 종일 붙잡고 있었던 이야기를 오늘 좀 풀어보려고 합니다. 결과적으로는 SOBJ라는, 평소엔 거의 마주칠 일 없는 트랜잭션까지 열어보게 됐는데요. 순서대로 한번 가보겠습니다.

환율(Exchange Rate) 관리, 왜 이렇게 중요할까

환율이 SAP 전체 시스템의 “기준점”인 이유

SAP에서 환율은 단순히 “오늘 달러가 얼마다” 하는 참고 정보가 아닙니다. 외화가 개입되는 모든 거래의 원화 환산 기준이 되거든요.

비유를 하나 들어보면, 환율 테이블(TCURR)은 회사 전체가 참조하는 하나의 “공용 저울”과 같습니다. FI에서 외화 채권·채무를 원화로 환산할 때도, TR에서 외환(FX) 거래의 평가손익을 계산할 때도, 심지어 MM에서 해외 구매 단가를 환산할 때도 전부 이 저울 하나를 보는 겁니다.

저울이 틀어지면 회사 전체 숫자가 같이 틀어집니다. 그래서 환율 갱신은 겉보기엔 단순 반복 작업 같아도, 실제로는 재무제표 정확성의 출발점이라고 보시면 됩니다.

그러다보니 당일 환율이 안들어온 경우 외화 전표를 치지 못하도록 Exit을 설정하는 회사도 많이 있습니다.

환율이 실제로 쓰이는 곳 — FI와 TR 양방향

영역 환율이 쓰이는 시점 영향
FI-GL/AP/AR 외화 전표 입력 시, 월말 외화평가(F.05/FAGL_FC_VAL) 시 원화 환산액, 외화환산손익 계정
TR-TM FX/파생상품 평가(TPM1), 딜링레이트와 시장레이트 비교 미실현평가손익, Mark-to-Market
TR-CM 다통화 자금계획 통합 시 자금 포지션 원화 환산

OB08에 환율이 늦게 들어가거나 잘못 들어가면, 그날 발생한 모든 외화 전표의 환산액이 부정확해집니다. 그리고 그게 월말 평가(F.05, TPM1 등)에서 재작업이 필요한 상황으로 이어지는 연쇄 반응이 생기죠. 그래서 자금팀 입장에서는 “환율을 매일, 정확한 시간에, 끊김 없이” 넣는 것 자체가 리스크 관리의 핵심 업무가 됩니다.

다만 이 부분은 펌뱅킹 등을 통해 자동화되어있어 사용자가 실제로 신경을 쓰는 경우는 적은 편입니다.

환율 테이블 구조와 OB08의 역할

  • 테이블: TCURR(환율), TCURV(환율유형), TCURF(환산비율)
  • T-Code: OB08 — 환율 직접 입력 화면. 사실상 TCURR 테이블에 대한 UI 창구입니다.
  • 환율 유형(Exchange Rate Type): 보통 M(월말/표준 환산용), EURX(ECB 기준) 등을 회사 정책에 맞게 구분해서 관리합니다.

여기서 중요한 포인트가 하나 있는데요, OB08은 IMG 커스터마이징 화면이 아니라 “테이블에 데이터를 넣는 입구”라는 점입니다. 이 성격 때문에 이번에 겪은 문제, 즉 “Change Request가 있어야만 화면이 열리는가” 하는 이슈가 발생하게 됩니다. Customizing 성격의 화면이라 SCC4(클라이언트 설정)의 ‘변경 불가’ 옵션에 걸려버리는 거죠.

환율 갱신 방식 3가지 비교

방식 특징 장단점
수동 OB08 입력 담당자가 직접 타이핑 소량일 때만 현실적, 매일 반복 시 비효율
BAPI (BAPI_EXCHRATE_CREATE 등) 프로그램적으로 TCURR에 직접 값 반영 Change Request 여부와 무관하게 동작 가능
BDC (Batch-Input) OB08 화면을 프로그램이 대신 조작(화면을 흉내내어 입력) 화면 자체를 통과해야 하므로 화면이 열려야만 동작

여기서 핵심 차이가 나옵니다. BAPI는 화면을 거치지 않고 테이블 레벨·함수 레벨로 접근하기 때문에 SCC4의 클라이언트 변경 통제와 상대적으로 무관하게 동작할 여지가 있습니다. 반면 BDC는 실제 OB08 화면 자체를 열고 그 위에서 입력을 흉내내는 방식이라, 화면이 잠겨 있으면 원천적으로 막히게 됩니다.

운영 서버에서 OB08이 막혀버린 이유

환율을 인터페이스로 받아서 Standard Table TCURR에 업데이트하는 방법에는 BAPI를 이용하거나 BDC를 통해 입력하는 두 가지 방법이 존재합니다.

그런데 BDC를 통해서 업데이트하는 경우에는 T-code OB08이 수정 가능한 상태로 열려야만 시스템에서 환율을 순차적으로 입력하게 됩니다. 문제는 운영서버의 경우 보통 SCC4에서 ‘수정 불가’로 설정해두고, Change Request 자체를 생성하지 못하도록 막아두는 게 일반적이라는 거였습니다. 이 상태에서는 방금 말씀드린 BDC 로직으로는 환율 등록이 사실상 불가능한 상황이었습니다.

그래서 운영에서도 OB08을 호출해서 BDC로 직접 데이터를 넣을 수 있는 부분을 고려해야 했고, “SAP에서 운영이 수정 불가 상태여도 해당 화면에 들어가서 수정할 수 있는 방법이 있을까”를 찾기 시작했습니다.

혹시 이런 상황 겪어보신 분 계신가요? 운영 클라이언트가 잠겨 있는 게 원칙적으로는 맞는데, 매일 들어가야 하는 환율 같은 데이터 때문에 그 원칙이랑 실무가 부딪히는 순간이요.

그렇게 찾다 보니 선배 컨설턴트가 이런 방법을 알려줬습니다.

T-code: SOBJ를 활용하세요.

SOBJ가 뭐지, 하고 궁금해지기 시작했습니다.

SOBJ (Maintenance Object Attributes), 이게 뭔가요

개념부터 짚고 가겠습니다

화면에 보이는 “뷰 클러스터 편집: 초기 화면”이 힌트입니다. SOBJ는 사실 SM34(뷰클러스터 유지보수 도구)를 통해 “SOBJ”라는 이름의 뷰클러스터를 여는 트랜잭션입니다. 즉 SOBJ라는 코드를 치면, 내부적으로는 SM34가 뷰클러스터 SOBJ를 불러오는 구조인 거죠.

쉽게 비유하면 이렇습니다. SAP 시스템 안의 모든 커스터마이징 오브젝트(테이블, 뷰클러스터 등)를 트랜스포트(이관)시킬 때, “이 오브젝트는 어떤 테이블들로 구성되어 있고, 이관될 때 어떤 순서와 방식으로 처리해야 하는가”를 정의해둔 일종의 설계도 정의서 같은 겁니다.

  • 정식 명칭: Maintenance Object Attributes (전송 오브젝트 속성 유지)
  • 모듈: BC(Basis) — BC-CTS-ORG (Change & Transport System – Organizer)
  • 실행 프로그램: SAPMTOBJ
  • 패키지: SCTS_OBJ

왜 이런 게 존재하는가

SAP는 IMG 커스터마이징이나 마스터데이터를 DEV → QAS → PRD로 이관할 때, 시스템이 “이 테이블·뷰클러스터가 통째로 하나의 논리적 단위(오브젝트)인지, 어떻게 이관 요청서(Transport Request)에 담아야 하는지”를 알아야 합니다.

이때 사용되는 개념이 전송 오브젝트(Transport Object, TADIR 오브젝트 타입)이고, SOBJ는 이 전송 오브젝트의 “속성 정의서”를 유지보수하는 곳입니다. 흐름으로 보면 대략 이렇습니다.

커스텀 테이블/뷰클러스터 생성
        ↓
SOBJ에서 "이 오브젝트가 어떤 테이블로 구성되고,
어떤 방식으로 트랜스포트 될 것인가" 정의
        ↓
SE54(뷰 생성 시 자동 생성) 또는 SM30/SM34에서
실제 데이터 변경 시 이 정의를 참조하여
트랜스포트 요청서에 담김

화면 구성

항목 설명
뷰클러스터 SOBJ 고정값 (SM34로 SOBJ 뷰클러스터를 여는 것)
조건 입력 특정 조건(예: 오브젝트 타입 범위)으로 필터링해서 조회할지 여부
조회(돋보기) 표시만 가능, 변경 불가
편집(연필) 실제로 값을 추가·수정 가능 (변경 권한 필요)

SOBJ를 열면 보통 다음 구조로 들어갑니다.

V_TOBJ (오브젝트 헤더: 오브젝트명, 타입, 텍스트 등)
   └ V_TOBJT (텍스트)
   └ V_TOBJT_TX (테이블 리스트, 키 필드 매핑)
        └ 각 테이블별 Import/Export 시 처리 방식(Before/After Import 함수모듈 등)

실무에서 언제 마주치게 되나

FI/TR 기능 컨설턴트이면서 ABAP 개발도 겸하고 있다면, SOBJ를 마주치는 경우는 보통 다음과 같습니다.

  1. 커스텀 테이블·뷰클러스터를 새로 만들었을 때: SE54로 뷰를 생성하면 시스템이 자동으로 전송 오브젝트를 만들어주는데, 이걸 SOBJ에서 확인·수정
  2. 뷰클러스터(SM34)를 직접 설계했을 때: 새 뷰클러스터를 트랜스포트 가능하게 만들려면 SOBJ에 등록되어 있어야 함
  3. After Import Method(이관 후 자동실행 로직)를 지정해야 할 때
  4. 트랜스포트 이슈 분석 시: “이 테이블이 왜 트랜스포트에 안 담기지?”를 확인할 때

참고로 FCLM_BAM_GLBL_SETTINGS 테이블을 SE16N으로 직접 수정하신 것처럼, 향후 해당 테이블 값을 트랜스포트에 자동으로 포함되도록 뷰클러스터화하고 싶다면 SOBJ·SM34·SE54를 함께 사용하게 됩니다.

V_TCURR 조회, 그리고 찾아낸 해법

어쨌든 1차 조회 결과에서 오브젝트에 V_TCURR을 넣고 조회를 해보니 다음과 같은 View를 찾을 수 있었고, 운영에서 직접 수정을 위해 설정이 필요한 오브젝트의 세부 사항을 확인할 수 있었습니다.

여기서 진짜 눈여겨봐야 할 부분이 나옵니다. 오브젝트 속성 화면 하단을 보면 “현재세팅(Current Setting)”이라는 체크박스가 있는데, 이게 기본적으로 체크되어 있습니다.

이 체크가 되어 있으면 이 오브젝트는 “현재 세팅(Current Setting)” 성격으로 분류됩니다. 그리고 이 분류 자체가 SCC4에서 클라이언트를 PRODUCT(운영) 상태로 걸어놨을 때, 화면 자체가 잠기게 만드는 조건 중 하나로 작동하고 있었던 겁니다.

그래서 이 현재세팅 체크를 해제해봤습니다. 그랬더니 SCC4의 클라이언트 상태값이 여전히 PRODUCT로 걸려 있는데도, 직접 수정할 수 있게 IMG 화면(OB08)이 열리는 것을 확인할 수 있었습니다.

정리하면, SCC4에서 클라이언트를 잠가둔 상태 자체를 건드린 게 아니라, SOBJ에서 V_TCURR이라는 오브젝트가 “Current Setting” 카테고리로 취급되지 않도록 속성을 바꿔준 겁니다. 그러니까 잠금장치를 부순 게 아니라, 잠금장치가 이 문 앞에서는 작동하지 않도록 문의 종류를 바꿔준 셈이죠.

이게 진짜 웃긴 게, OB08은 매일 쓰는 익숙한 화면인데 정작 그 뒤에서 화면을 열고 닫는 스위치가 SOBJ라는, 평소엔 Basis 담당자나 만질 법한 트랜잭션 안에 숨어 있었다는 거였습니다. 여기서 삽질 좀 했습니다. 처음엔 권한 문제인가 싶어서 PFCG 쪽을 한참 들여다봤거든요.

물론 이 방식을 적용하실 때는 주의할 점이 있습니다. “현재세팅” 해제는 해당 오브젝트 전체의 트랜스포트·잠금 성격을 바꾸는 커스터마이징 오브젝트 속성 변경이라, 회사 정책상 이런 변경 자체를 직접 수정 못하도록 내부통제에 의거해 설정되어있을 겁니다. 저희는 자금팀 운영 필요성과 Basis팀 협의를 거쳐서 진행했다는 점, 참고하시면 좋겠습니다.

오늘은 여기까지입니다. 환율 하나 넣으려다가 SOBJ까지 열어보게 될 줄은 몰랐는데, 이런 게 또 SAP 실무의 재미인 것 같습니다. 비슷한 상황 겪고 계신 분들께 조금이라도 도움이 됐으면 좋겠습니다

댓글 남기기