전체 글 32

Internal Table의 개념과 구성 요소(Feat. Table Category)

SAP ABAP의 핵심 기능 중 하나인 인터널 테이블(Internal Table)은 프로그램 내에서 데이터를 임시로 저장하고 처리할 수 있게 해주는 유연한 자료구조이다. 이를 쉽게 이해하기 위해 엑셀 문서를 생각해 보자. 엑셀 시트는 여러 줄의 데이터를 저장하고 필터링하거나 정렬할 수 있다. 인터널 테이블도 이와 비슷하게 작동한다. 각각의 테이블은 데이터를 담는 그릇이며, 이 그릇이 어떤 모양인지, 그리고 그 모양에 따라 어떤 기준으로 데이터를 넣고 꺼낼 수 있는지 알아보도록 하자.1. 인터널 테이블을 구성하는 요소 – 엑셀 시트와 비교해 보자!ABAP에서 인터널 테이블은 다음 세 가지 요소로 정의된다.  📌Line Type (행 타입)엑셀의 "한 행"에 해당함. 각 행은 문자열, 숫자, 날짜 등 다양..

SAP 3-Tier 구조 쉽게 이해하기

SAP를 처음 배우거나 ABAP 프로그래밍을 시작했다면 한 번쯤 이런 말을 들어봤을 것이다. SAP는 3-Tier 구조로 되어 있어요. 근데 그게 도대체 무슨 뜻이지? 프레젠테이션? 애플리케이션? 데이터베이스? 컴퓨터 전공자가 아니라면, 말만 들어도 머리가 아프다. 과거에 Easy ABAP 서적이 처음 나왔을 때도 3-Tier Architecture 설명이 처음에 나오는 바람에  첫 장을 읽고 큰 벽을 느꼈던 사람이 많았는지 2.0 으로 책이 개편되면서 해당 내용은 제일 마지막 챕터로 변경되었었다.  그래서 이번 포스팅에서는, SAP 3-Tier 구조에 대해 기술적으로 깊게는 아니지만 큰 그림을 보면서 쉽게 이해해보자는 차원에서 햄버거 가게로 SAP의 3-Tier 구조를 설명해볼까 한다. 1. 햄버거 가..

Function Module 파라미터 종류와 인터페이스 방식

ABAP 개발을 하다 보면 반드시 접하게 되는 Function Module (함수 모듈)의 중요한 개념 중 하나가 바로 Parameter Interface (파라미터 인터페이스)이다.이번 포스팅에서는 ABAP 함수 모듈에서 사용하는 다양한 파라미터 타입( IMPORTING, EXPORTING, CHANGING, TABLES )의 차이점과 특징, 사용 시 ❗주의사항을 설명해 보도록 하겠다. 실무에서는 파라미터를 잘못 이해해서 잘못된 값이 나오거나 잘못 사용하는 경우가 있으니 주의사항을 유심히 보도록 하자. 📌 Function Module (함수 모듈)이란?함수 모듈은 공통 기능을 캡슐화하여 재사용할 수 있도록 만들어진 ABAP의 기능이자 ABAP에서 로직을 모듈화(Modulization) 하는 방법 중 ..

Parameter 전달 방식 Pass by Value 와 Pass by Reference

프로그래밍을 하다 보면 서브루틴이나 함수 또는 클래스의 메소드에 변수를 전달할 일이 많다. 이때 전달 방식에 따라 넘겨지는 변수의 변경 여부가 다르게 작동하는데 이 두 가지 방식으로 전달되어 진다. ✅ Pass by Value (값에 의한 전달)✅ Pass by Reference (참조에 의한 전달)✅ Pass by Value란?Pass by Value는 데이터를 서브루틴이나 함수(메서드)에 값을 전달할 때 복사본을 넘겨주는 방식이다.친구에게 중요한 서류를 보여주고 싶지만, 잃어버릴까 걱정돼서 복사본을 줬다고 해보자. 친구가 복사본에 낙서를 하든 찢든, 원본 서류에는 전혀 영향을 받지 않는다. 바로 이게 Pass by Value이다. 📌 컴퓨터 메모리 관점해당 루틴이 호출될 때, 전달된 변수의 값을 복..

ABAP Initial Value 와 Null 의 차이

ABAP을 하면 가끔 질문하는 것이 있다. ABAP에서 Null이랑 Initial Value는 뭐가 다른 거야?프로그래밍을 처음 접하는 분들이나 다른 언어(Java, Python 등)에서 넘어온 분들에게 이 개념은 혼란스러울 수 있다. 특히 SQL을 다뤄본 사람들은 ‘NULL’을 익숙하게 여기지만, ABAP에서는 그게 잘 보이지 않는다. 오늘은 이 두 개념의 차이를 마치 빈 상자와 존재하지 않는 상자로 쉽게 풀어보도록 하겠다.📌  상자로 이해하는 Initial Value vs Null상자를 하나 준비했다고 생각해 보자.이 상자는 우리가 사용하는 ‘변수’를 비유한 것이다. Initial Value는 상자 안에 아무것도 안 들어있지만, 상자 자체는 있는 상태를 말한다.즉, "값은 없지만 초기 값은 존재한다..

|ALV| cl_salv_bs_runtime_info으로 타 프로그램 ALV Data 가져오기 ( feat. SUBMIT )

프로그램을 개발하다 보면 다른 프로그램의 결과 데이터를 그대로 가져오고 싶은 경우가 있다. 해당 프로그램이 Function이나 Method 로 모듈화가 잘 되어 있다면 그대로 가져와 약간의 수정으로 동일한 결과를 얻을 수 있을 것이다. 하지만 분석조차 힘든 복잡하고 긴 로직이라면 쉽지 않을 것이다. ABAP MEMORY( EXPORT / IMPORT )를 이용하여 데이터를 가져오기도 하는데, 기존 프로그램에도 Export 로직을 추가 수정해야 하는 번거로움이 있다. 만약 레포트 결과물이 ALV 로 보여진다면, CLASS cl_salv_bs_runtime_info 와 SUBMIT을 이용해 쉽게 ALV의 결과 데이터를 스냅샷 해올 수 있다. 사용방법은 다음과 같다. Step 1. ALV 결과 데이터와 메타 ..

|ALV| Event 메서드 에서 2개 이상의 ALV GRID 제어 방법 ( feat. SENDER 파라미터 )

ALV Event 구현 메소드에서 여러 ALV GRID를 제어하는 방법을 알아보도록 하겠다. ALV CLASS에서 이벤트를 제어하는 방법은 다음과 같다. STEP 1. ALV 에서 사용할 이벤트에 대한 이벤트 리시버 클래스 구현 1-1. 리시버 클래스 정의부엔 사용할 이벤트 핸들러 메소드 선언 1-2. 리시버 클래스 구현부엔 해당 핸들러 메소드에 대한 로직 구현 STEP 2. ALV 클래스 에서 인스턴스화 하여 ALV 객체 생성 STEP 3. 이벤트 리시버 클래스 에서 인스턴스화 하여 이벤트 리시버 객체 생성 STEP 4. ALV 객체와 이벤트 리시버 객체와 연결 ( SET HANDLER ~ ) STEP 2 에서 ALV 객체를 여러개 생성한다면, STEP 3 에서도 해당 이벤트 리시버 객체를 여러번 생성..

Selection Screen DATE + TIME 조회 조건 구현시 주의

타 시스템과 Interface 또는 Background Job을 수행하는 트랜잭션 같은 경우 그 이력을 확인하기 위해 Monitoring 프로그램을 개발하게 된다. 이러한 Monitoring 프로그램에서 빠질 수 없는 조건이 바로 Period 기간인데, 일반적으로는 해당 트랜잭션이 발생한 날짜( Date )만 조회 조건에 넣지만 분/초 단위로 수시로 수행하는 트랜잭션인 경우에는 시간( Time )까지 조회조건을 넣게 된다. 날짜와 시간조건을 넣어달라는 개발 SPEC을 보고 항상 해오듯 의식의 흐름대로(?) 선택화면을 구현했다면, 위와 같이 구현을 했을 것이고, 데이터를 가져오는 부분 또한 의식의 흐름대로 SQL을 작성했다면 다음과 같을 것이다. SELECT ~ FROM 트랜잭션 테이블 WHERE date..

|ALV| 선택 필드(Remark field) Checkbox 구현 시 주의

ALV 에는 다음과 같이 행 앞에 네모난 Remark Field (선택 박스) 를 기본으로 제공한다. 선택된 라인의 정보 (INDEX)는 METHOD GET_SELECTED_ROWS 이용하여 찾아올 수 있다. 실무에서 컨설턴트 또는 현업한테 이런 요청을 받는 경우가 종종 있다. 선택 박스를 Checkbox로 구현해 주세요. 이 때는 해당 ALV Output 인터널테이블에 Character 1자리 Remark용 필드를 추가 선언 하여 ALV Fieldcatalog 의 Checkbox 속성을 이용하여 구현할 수 있다. 선택된 데이터의 후속처리는에 추가된 Remark 필드의 'X' 인 데이터만 찾아서 처리하면 된다. Remark 필드를 Checkbox 로 수동 구현하면 항상 따라오는 추가 요청사항이 있다. 전..

|ALV| Column Optimize ( After ALV Refresh )

ALV에서 Column Size를 Optimzize 하기 위해서 다음과 같다. SAP ALV Documnet에 나와 있듯이 ALV LAYOUT 의 CWIDTH_OPT 속성으로 Column Size Optimize 를 활성화 할 수 있다. ( Value Range : SPACE(사용안함), 'X'(사용) ) ALV Optimize 후엔 위와 같이 데이터 값 또는 컬럼 헤더의 텍스트 중 길이가 긴 것을 기준으로 Optimize 된 것을 볼 수 있다. 이 때 한가지 문제가 있는데, 데이터 변경으로 인해 ALV를 Refersh (Method REFRESH_TABLE_DISPLAY 호출 ) 하게 되면, 변경된 값 기준으로 Column의 Optimize가 재조정되지 않는다. 위와 같이 ALV에서 BAPI, BDC,..