이렇게 계속 선언할 수 없어서 structure를 쓰는거라합니다.
INITIALIZATION.
AT SELECTION-SCREEN OUTPUT. "PBC
AT SELECTION-SCREEN. "PAI
START-OF-SELECTION.
위에 무슨 말일까요?
뤼튼아 도와줘
1. INITIALIZATION
INITIALIZATION 블록은 프로그램이 시작될 때 한 번만 실행되는 부분입니다. 이곳에서는 선택 화면의 기본 값을 설정하거나 초기화 작업을 수행합니다. 예를 들어, 사용자가 선택 화면을 열었을 때 보여줄 기본값을 지정할 수 있습니다.
2. AT SELECTION-SCREEN OUTPUT
AT SELECTION-SCREEN OUTPUT는 선택 화면이 출력될 때 실행되는 이벤트 블록입니다. 이곳에서는 선택 화면이 사용자에게 보여지기 전에 추가적인 조작을 할 수 있습니다. 예를 들어, 특정 필드의 가시성을 제어하거나, 동적으로 선택 화면의 요소를 수정할 수 있습니다.
3. AT SELECTION-SCREEN
AT SELECTION-SCREEN는 사용자가 선택 화면에서 데이터를 입력하고 "실행" 버튼을 클릭했을 때 발생하는 이벤트입니다. 이 블록에서는 입력된 데이터에 대한 검증을 수행하거나, 추가적인 처리를 할 수 있습니다. 즉, 사용자가 입력한 값이 유효한지 확인하고, 필요에 따라 오류 메시지를 표시할 수 있습니다.
4. START-OF-SELECTION
START-OF-SELECTION 블록은 사용자가 선택 화면에서 "실행" 버튼을 클릭한 후에 실행되는 블록입니다. 이곳에서는 주로 데이터베이스에서 데이터를 조회하거나 비즈니스 로직을 수행하는 코드가 위치합니다. 이 블록이 실행되면, 사용자가 입력한 조건에 따라 데이터 처리가 시작됩니다.
이러한 이벤트 블록들은 SAP ABAP에서 프로그램의 흐름을 제어하고, 사용자와의 상호작용을 관리하는 데 중요한 역할을 합니다.
코드가 조금이라도 길어지면 서브루틴 쓰기.
아래처럼
커스텀 T-code 쓰는 이유 중 하나.
내코드에서 바로돌렸을때 에러뜨면 나가진다.
그래서 돌리는건 커스텀 T코드로 하면 좋다.
Using과 changing 같이쓰면 using 먼저쓰기
어제 내용 복습
gv가져와서 form 에선 cv로 받아준다.
changing 이니까 한번 clear 해준다.
이렇게 해서 변수가 되는거다 changing.
gv_stdno는 using이니깐 값을 가져와야 해서 갱신해주고
나머지는 그대로쓰고 참좋죠?
그리고 perform에서는 가져오는 변수의 정확한 명칭을 기입해야하지만
form에서는 내가 원하는 대로 변경가능하다.
why? perform과 form의 변수대응은 위치로 정한다.
폼안에 선언해서 쓰는 변수는 로컬변수다.
만약 로컬변수와 전역변수의 이름이 같은경우에 로컬변수가 우의에 있습니다.
폼안에서만 살아있습니다.
아맞다 여기서 말하고 싶었던거는
폼에서 using이나 changing을 쓸때 type을 같이 쓸수 있어요.
이런 경우에 다른 타입의 값을 쓰게되면 오류가 됩니다.
그럼 안쓰는 경우는 뭐냐? type any로 뭐든 받아들여도 오류가 나지 않습니다.
그래서 보통은 type을 잘 작성하지 않습니다.
se93 새로운 T코드 커스텀 t코드를 수정해준다.
여기서
이건 아래와 같다.
그런데 아래의 경우도 같아서 아래의 경우를 더많이 쓴다.
그런데 아래의 경우로 수업할때 하시오!
structure type 만들기
/nSe11 들어가기
structure 로 만들어서 정보 입력하기
완성!
top을 이렇게 만들면
이렇게 프로그램 변수를 쓰면 된다.
types begim of 와 Data begim of 의 차이점은
타입스는 정의하고 데이터를 하나둘 말하는거지만
데이터는 바로하나를 만들어버림 + 다른건 Like로 정의
나는 그래서 데이터로 바로 선언하는 방식을 사용허고 싶으나
쓰지 말라고 하셨으니까 types써야겠다.
i 타입은 이니셜벨류가 0
date 타입은이니셜벨류가 00000000
clear gs_flight
clear gs_flight-connid
차이점 위는 벨류 다지우기 밑은 connid만
TYPES :BEGIN OF ts_info,
stdno TYPE zts5a0003-stdno,
lname TYPE zts5a0003-lname,
fname TYPE zts5a0003-fname,
END OF ts_info.
이건 글로벌 타입스? 로컬타입스?
뭔가 이게로컬 타입으로 말해주는것같은데 흠...
뤼튼한테 물어봐야겠다.
글로벌 타입스 vs 로컬 타입스
로컬 타입스: 프로그램 또는 리포트 내에서만 사용되는 타입입니다. 해당 프로그램이 종료되면 타입도 소멸합니다.
글로벌 타입스: 여러 프로그램에서 재사용할 수 있는 타입으로, 보통 데이터 사전(Data Dictionary)에 정의됩니다.
이 코드에서 TYPES 문은 타입을 정의하는 문법입니다. ts_info는 특정 프로그램 내에서 정의된 타입으로, 다른 프로그램에서는 사용할 수 없습니다. 따라서 이 타입은 로컬 타입스로 분류됩니다.
결론적으로, 이 구조체는 로컬 타입이며, 해당 프로그램 내에서만 사용될 수 있습니다.
글로벌타입스 = 데이터딕셔너리에 정의한 스트럭처를 가져오기,
데이터딕셔너리에 정의한 테이블을 스트럭처로 가져오기.
로컬타입스 = 프로그램내에서 types begim of로 선언하는거랑 Data begim of로 선언하는것.
더나아가서 내가 헷갈렸던부분
why 로컬타입스는 로컬임에도 프로그램전체에서 사용??
1. 로컬 변수
정의: 로컬 변수는 특정 서브루틴이나 폼 내에서만 유효한 변수입니다. 이 변수는 해당 범위를 벗어나면 접근할 수 없습니다.
범위: 예를 들어, FORM 또는 METHOD 내에서 선언된 로컬 변수는 그 FORM 또는 METHOD 내에서만 사용할 수 있으며, 다른 FORM이나 METHOD에서는 사용할 수 없습니다.
2. 로컬 타입스
정의: 로컬 타입스는 특정 프로그램 내에서 정의된 데이터 구조입니다. 즉, 프로그램의 전체 범위에서 사용할 수 있는 타입입니다.
범위: 로컬 타입스는 프로그램 내에서 정의되면, 그 프로그램의 모든 부분에서 접근하여 사용할 수 있습니다. 이는 로컬 변수가 아니라 프로그램 단위로 사용되기 때문에, 서브루틴이나 FORM, METHOD 등에서 자유롭게 사용할 수 있습니다.
왜 로컬 타입스는 프로그램 전체에서 사용 가능한가?
로컬 타입스는 특정 프로그램 내에서 정의되며, 그 프로그램의 모든 부분에서 사용할 수 있도록 설계되었습니다. 이렇게 함으로써, 데이터 구조를 일관되게 유지하고, 코드 재사용성을 높이는 데 기여합니다. 로컬 타입스는 특정 프로그램의 범위 내에서 다양한 서브루틴 또는 메서드 간에 공유할 수 있는 데이터 구조를 제공합니다.
결론
로컬 변수: 서브루틴이나 폼 내에서만 유효하며, 그 범위를 벗어나면 사용할 수 없습니다.
로컬 타입스: 특정 프로그램 내에서 정의되며, 그 프로그램의 모든 부분에서 사용할 수 있습니다.
이렇게 두 개념은 서로 다른 범위를 가지며, 각각의 사용 목적에 따라 적절히 선택할 수 있도록 설계된 것입니다.
type scarr / 트랜스페런트 테이블
= scarr 이라는 stucture 타입이에요
즉 structure를 직접 생성해서 만들어서 type에 쓰거나
테이블로 만들어둔것을 structure로써 사용한다.
structure타입이다른 데이터를 선언한 이후에
두개의 데이터에 벨류를 채워넣었다.
이때 move-corresponding A to B를 사용하면
대응(일치)되는 컴포넌트의 내용들이 옮겨진다.
*빈곳은 공백처리
zs5a12102라는 스트럭처를 정의했고 gs_std를 가져왔습니다.
그리고 해당 스트럭처의 속성들을 참고한 테이블, gt_std를 만들었습니다.
gs_std 스트럭처를 먼들고 gt_std에 append(추가)해줍니다.
clear하고 gs_std 스트럭처를 또 먼들고 gt_std에 append(추가)해줍니다.
그럼 튜플이 2개인 테이블이 출력됩니다.
DATA gs_std TYPE zs5a12102. <- 애는 도구
DATA gt_std LIKE TABLE OF gs_std. <- 애가 진짜배기
스트럭처 타입은 초기값을 가진 한줄이다.
테이블타입은 초기값을 가지지않고 튜플이 하나도 없는 이터널 테이블이다.
애도 같은 출력을 갖는 방법입니다. 근데 좀 다르게 생겼죠?
type table of 로 미리 테이블을 정의하고
그 테이블의 속성값을 가지는 스트럭처를 만드는 방법이 Line of 입니다!
sy-tabix는 테이블인덱스다.
즉, 튜블에 넣어진 순서를 말합니다.
궁금한거있습니다!!
칼럼을 추가하는 경우엔 꼭 스트럭처정의한곳에 넣어줘야 하나요?
코드에서는 칼럼추가 못하나요?
뤼튼님 도와주세요
자 하드스킬 들어갑니다.LOOP AT gt_std INTO gs_std. ENDLOOP.해당 코드는 반복문입니다.
gs_std를 하나씩 꺼내보는... gt_std에서