*&---------------------------------------------------------------------*
*& Report  ZREP_LCLCLASS
*&---------------------------------------------------------------------*
*& Demonstrates modern ABAP syntax: REDUCE, FILTER, FOR expressions
*&---------------------------------------------------------------------*

REPORT zrep_lclclass.

*----------------------------
* Example 1: REDUCE Operator
*----------------------------
TYPES: BEGIN OF ty_order,
         id     TYPE i,
         amount TYPE i,
       END OF ty_order.

DATA: lt_orders TYPE STANDARD TABLE OF ty_order WITH EMPTY KEY,
      lv_total  TYPE i.

lt_orders = VALUE #(
  ( id = 1 amount = 100 )
  ( id = 2 amount = 250 )
  ( id = 3 amount = 150 )
).

lv_total = REDUCE i( INIT sum = 0
                     FOR order IN lt_orders
                     NEXT sum = sum + order-amount ).

WRITE: / '--- REDUCE Example ---',
       / 'Total Amount:', lv_total.

*----------------------------
* Example 2: FILTER Operator
*----------------------------
TYPES: BEGIN OF ty_user,
         name   TYPE string,
         status TYPE string,
       END OF ty_user.

DATA: lt_users TYPE STANDARD TABLE OF ty_user WITH EMPTY KEY,
      lt_active_users TYPE STANDARD TABLE OF ty_user WITH EMPTY KEY.

lt_users = VALUE #(
  ( name = 'Alice'   status = 'ACTIVE' )
  ( name = 'Bob'     status = 'INACTIVE' )
  ( name = 'Charlie' status = 'ACTIVE' )
).

lt_active_users = FILTER #( lt_users WHERE status = 'ACTIVE' ).

WRITE: / '--- FILTER Example ---'.

LOOP AT lt_active_users INTO DATA(user).
  WRITE: / user-name, user-status.
ENDLOOP.

*------------------------------------------------------
* Example 3: FOR Expression - Extract Specific Fields
*------------------------------------------------------
DATA: lt_names TYPE STANDARD TABLE OF string WITH EMPTY KEY.

lt_names = VALUE string_table(
  FOR user IN lt_users
  WHERE ( status = 'ACTIVE' )
  ( user-name )
).

WRITE: / '--- FOR Expression Example ---'.

LOOP AT lt_names INTO DATA(name).
  WRITE: / name.
ENDLOOP.
 

This creates a new string table containing only the names of users whose status = 'ACTIVE'—short, clean, and readable.

— REDUCE Example —
Total Amount: 500

Output:

— FILTER Example —
Alice ACTIVE
Charlie ACTIVE

— FOR Expression Example —
Alice
Charlie

Newsletter