[9기 SAP방] SAP ABAP 공부 F1 도움말 예제프로그램중 초급 10가지 먼저 공부해보기

https://chat.openai.com/share/6e64c59f-1783-4234-b371-2c9335d010a5

SAP ABAP을 공부하려는데 어디서부터 뭐부터 공부할지 막막했는데, 오늘 랭체인 부트캠프에서 문서를 같이 읽어보고싶다는 말을 듣고, SAP ABAP 랭귀지도 F1누르면 문서가 정리가 잘되있는데 안읽어본다는 말을 들은것이 생각나서 그 예제프로그램을 사례발표로 하면 좋겠다는 아이디어가 떠올랐습니다. 그래서 A ~ Z 문자순으로 되어있어서 챗지피티에 초급자가 가장먼저 실습하면 좋을 우선순위 10개를 뽑아달라고 했습니다.

그랬더니 다음과 같이 우선순위 리스트를 뽑아주었습니다.



소스코드

REPORT demo_data_calculate.

CLASS demo DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS main.
ENDCLASS.

CLASS demo IMPLEMENTATION.
  METHOD main.
    DATA num1 TYPE decfloat34.
    cl_demo_input=>add_field( CHANGING field = num1 ).
    DATA num2 TYPE decfloat34.
    cl_demo_input=>request(   CHANGING field = num2 ).

    TRY.
        cl_demo_output=>new(
          )->write( |{ num1 } +   { num2 } = { num1 +   num2 }|
          )->write( |{ num1 } -   { num2 } = { num1 -   num2 }|
          )->write( |{ num1 } *   { num2 } = { num1 *   num2 }|
          )->write( |{ num1 } /   { num2 } = { num1 /   num2 }|
          )->write( |{ num1 } DIV { num2 } = { num1 DIV num2 }|
          )->write( |{ num1 } MOD { num2 } = { num1 MOD num2 }|
          )->write( |{ num1 } **  { num2 } = { num1 **  num2 }|
          )->display( ).
      CATCH cx_sy_arithmetic_error INTO DATA(exc).
        cl_demo_output=>display( exc->get_text( ) ).
    ENDTRY.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  demo=>main( ).

실행결과

소스 풀이


이 ABAP 소스 코드는 간단한 산술 연산 및 예외 처리를 수행하는 프로그램입니다. 아래는 코드의 주요 부분에 대한 해석입니다:

CLASS demo DEFINITION. 및 CLASS demo IMPLEMENTATION.: demo 클래스를 정의하고 구현합니다.

METHOD main.: demo 클래스 내에 main 메서드를 정의합니다.

DATA num1 TYPE decfloat34. 및 DATA num2 TYPE decfloat34.: decfloat34 형식의 두 변수 num1과 num2를 선언합니다. decfloat34는 ABAP에서 고정 소수점 숫자를 나타내는 데이터 형식입니다.

cl_demo_input=>add_field( CHANGING field = num1 ). 및 cl_demo_input=>request( CHANGING field = num2 ).: cl_demo_input 클래스의 add_field 및 request 메서드를 사용하여 사용자에게 값을 입력받습니다.

TRY. ~ CATCH cx_sy_arithmetic_error INTO DATA(exc).: 산술 연산 중에 발생할 수 있는 예외를 처리하기 위해 TRY-CATCH 블록을 사용합니다. cx_sy_arithmetic_error 예외가 발생하면 해당 예외를 처리하고 exc라는 데이터 변수에 저장합니다.

산술 연산 및 결과 출력:

cl_demo_output=>new()->write( |{ num1 } + { num2 } = { num1 + num2 }| )->write( ... )->display( ).: 두 숫자의 덧셈, 뺄셈, 곱셈, 나눗셈, 정수 나눗셈, 나머지 연산 및 거듭제곱을 수행하고 그 결과를 화면에 출력합니다.
CATCH cx_sy_arithmetic_error INTO DATA(exc).: 산술 연산 중에 발생할 수 있는 예외를 처리하는 부분입니다. 예외가 발생하면 해당 예외를 exc 변수에 저장하고 출력합니다.

START-OF-SELECTION.: 프로그램의 시작 지점으로 정의되어 있으며, 여기에서 demo 클래스의 main 메서드가 실행됩니다.

이 프로그램은 사용자로부터 두 개의 숫자를 입력받아 산술 연산을 수행하고, 예외가 발생할 경우 해당 예외를 처리하여 오류 메시지를 출력하는 간단한 산술 계산 프로그램입니다.


SAP trial 서버에서 se80 티코드로 이동한뒤에 f1를 누르면 도움말 창이 나옵니다.

하단에 ABAP example이 있습니다. 거기서

Arithmetic Calculations: 산술 연산에 대한 기본적인 문법 및 계산 예제. 를 실습해 보았습니다.


2번째 예제

REPORT demo_cmax_cmin.

CLASS demo DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS main.
ENDCLASS.

CLASS demo IMPLEMENTATION.
  METHOD main.
    DATA:  txt TYPE string,
           max TYPE string,
           min TYPE string,
           msg TYPE string.
    txt = `one two three four five six seven eight nine ten`.
    max = | |.
    min = |§|.
    DO.
      TRY.
          max = cmax( val1 = max
                      val2 = segment( val   = txt
                                      index = sy-index sep = ` ` ) ).
          min = cmin( val1 = min
                      val2 = segment( val   = txt
                                      index = sy-index sep = ` ` ) ).
        CATCH cx_sy_strg_par_val.
          EXIT.
      ENDTRY.
    ENDDO.
    cl_demo_output=>display(
      |Maximum is { max } and minimum is { min }| ).
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  demo=>main( ).

소스풀이

CLASS demo DEFINITION. 및 CLASS demo IMPLEMENTATION.: demo 클래스를 정의하고 구현합니다.

METHOD main.: demo 클래스 내에 main 메서드를 정의합니다.

DATA: txt TYPE string, max TYPE string, min TYPE string, msg TYPE string.: 문자열과 최대값, 최소값, 그리고 메시지를 저장할 변수들을 선언합니다.

txt = one two three four five six seven eight nine ten.: 문자열 변수 txt에 "one two three four five six seven eight nine ten"을 할당합니다.

max = | |. 및 min = |§|.: 최대값과 최소값을 초기화합니다.

DO. ~ ENDDO.: DO 루프를 사용하여 문자열을 공백을 기준으로 분할하고, 각 세그먼트에 대해 최대값과 최소값을 계산합니다.

TRY. ~ CATCH cx_sy_strg_par_val.: TRY-CATCH 블록을 사용하여 문자열을 숫자로 변환하고, 변환 중에 오류가 발생하면 해당 오류를 처리합니다.

max = cmax( val1 = max val2 = segment( val = txt index = sy-index sep = ) ).: cmax 함수를 사용하여 현재까지의 최대값을 계산합니다.

min = cmin( val1 = min val2 = segment( val = txt index = sy-index sep = ) ).: cmin 함수를 사용하여 현재까지의 최소값을 계산합니다.

cl_demo_output=>display( |Maximum is { max } and minimum is { min }| ).: 최종적으로 계산된 최대값과 최소값을 출력합니다.

START-OF-SELECTION.: 프로그램의 시작 지점으로 정의되어 있으며, 여기에서 demo 클래스의 main 메서드가 실행됩니다.

이 프로그램은 문자열을 분할하여 숫자로 변환하고, 변환이 성공할 때마다 최대값과 최소값을 갱신하여 최종적으로 화면에 출력하는 예제입니다.


결과값

결과값이 Maximum is two and minimum is eight 나왔습니다. 왜 max가 two이고 min이 eight인지 설명해줘

결과풀이


소스 코드를 다시 살펴보면 DO 루프를 통해 문자열 "one two three four five six seven eight nine ten"을 공백을 기준으로 분할하고 각 세그먼트에 대해 최대값과 최소값을 계산합니다. cmax 함수는 입력된 두 값 중에서 큰 값을 반환하고, cmin 함수는 입력된 두 값 중에서 작은 값을 반환합니다.

초기값으로 max 변수는 빈 문자열 | |.로 설정되어 있습니다. 그리고 min 변수는 |§|.로 초기화되어 있습니다.

여기서 루프는 첫 번째 세그먼트 "one"을 처리할 때 cmax와 cmin 함수를 호출하여 max와 min을 갱신합니다. 그리고 두 번째 세그먼트 "two"를 처리할 때에도 cmax와 cmin 함수를 호출하여 갱신합니다.

루프의 마지막에서 최종적으로 cl_demo_output=>display( |Maximum is { max } and minimum is { min }| ).를 통해 최대값과 최소값이 출력됩니다.

따라서 "two"가 최대값이 되고, "eight"이 최소값이 되는 것은 문자열에서 각각 더 큰 값과 작은 값으로 갱신되었기 때문입니다. 이는 문자열 내의 각 숫자가 문자열 비교 기준에 따라 크기를 가지기 때문입니다.


계속 이어서 내일 사례 포스팅..

#9기 SAP방

3
1개의 답글

👉 이 게시글도 읽어보세요