SAP ABAP – REDUCTION OPERATOR ( REDUCE )

ABAP ile tablolar arası hesaplamalar yaparken sık sık kullandığımız döngüler için bazı küçük alternatifler bulunmaktadır. Özellikle matematiksel işlemler için tablolar arası, veri hesaplamaları için döngülere büyük önemde bağlıyızdır. Ancak Performans açısından olaya baktığımız zaman durum biraz farklılaşabiliyor. İç içe yaptığımız döngüler veya döngü sayısı arttıkça performans aynı oranda düşebiliyor. Hele ki çok büyük veri içeren tablolarda yapılan işlemlerde bu sorunlarla sıkça karşılaşabiliriz.

Bu gibi durumlarda, bazı matematiksel işlemler için tablo içerisinde ki veriyi kendi istediğimiz koşullara indirgeyerek istediğimiz tipte bir değer alınmasını sağlayan yapı bulunmaktadır. REDUCTION OPERATOR (REDUCE) anahtar kelimesi ile bir tablo içerisinde bir veya birden fazla koşula bağlı olan ve dönüş tipini istediğimiz bir tipe atayabileceğiniz kümülatif toplam değerlerini alabileceğiniz bir yapı sunmaktadır.

Aşağıda yer alan örnekte bu konuyla ilgili daha net bir sonuç elde edebiliriz.

Bir malzeme listesinin, üretim yeri ve malzeme türlerine göre fiyatlarının bulunduğu bir diğer listede ki değerlerine göre toplam maliyetlerini çıkartmak istesek nasıl bir yöntem izleyebiliriz ?

Bu gibi senaryolar için REDUCE yöntemini şu şekilde kullanmaktayız.  İlk olarak malzeme ve üretim yeri eşleşmesi olan bir tablo oluşturalım ;

TYPES:
  BEGIN OF Y_MALZEME_HEADER,
    URETIM_YERI  TYPE WERKS_D,
    MALZEME_TURU TYPE KSCHL,
    FIYAT        TYPE NETWR,
  END OF Y_MALZEME_HEADER.
DATA : LT_MALZEME_HEADER TYPE TABLE OF Y_MALZEME_HEADER.

LT_MALZEME_HEADER =
  VALUE #(
    ( URETIM_YERI = '1000' MALZEME_TURU = 'AAAA'    )
    ( URETIM_YERI = '1000' MALZEME_TURU = 'BBBB'    )
    ( URETIM_YERI = '2000' MALZEME_TURU = 'CCCC'    )
    ( URETIM_YERI = '3000' MALZEME_TURU = 'DDDD'    ) ).

oluşturduğumuz bu tablo aşağıdaki gibi bir sonuç elde etmemizi sağlar,

Üretim yeri ve Malzeme türlerinin detayında fiyatlarının belirtildiği başka bir tablo oluşturalım,

TYPES : BEGIN OF Y_MALZEME_DETAY,
          URETIM_YERI  TYPE WERKS_D,
          MALZEME_TURU TYPE KSCHL,
          MALZEME      TYPE MATNR,
          FIYAT        TYPE NETWR,
        END OF Y_MALZEME_DETAY.
DATA : LT_MALZEME_DETAY TYPE TABLE OF Y_MALZEME_DETAY.

LT_MALZEME_DETAY =
  VALUE #(
    ( URETIM_YERI = '1000'  MALZEME_TURU = 'AAAA' MALZEME = '0000000001' FIYAT = '10.00'  )
    ( URETIM_YERI = '1000'  MALZEME_TURU = 'AAAA' MALZEME = '0000000002' FIYAT = '350.00' )
    ( URETIM_YERI = '1000'  MALZEME_TURU = 'BBBB' MALZEME = '0000000003' FIYAT = '2.00'   )
    ( URETIM_YERI = '2000'  MALZEME_TURU = 'CCCC' MALZEME = '0000000004' FIYAT = '3.50'   )
    ( URETIM_YERI = '2000'  MALZEME_TURU = 'CCCC' MALZEME = '0000000005' FIYAT = '400.00' )
    ( URETIM_YERI = '2000'  MALZEME_TURU = 'DDDD' MALZEME = '0000000006' FIYAT = '5.00'   )
    ( URETIM_YERI = '3000'  MALZEME_TURU = 'EEEE' MALZEME = '0000000007' FIYAT = '165.00' )
    ( URETIM_YERI = '3000'  MALZEME_TURU = 'FFFF' MALZEME = '0000000008' FIYAT = '98.00'  )
    ( URETIM_YERI = '3000'  MALZEME_TURU = 'AAAA' MALZEME = '0000000009' FIYAT = '28.00'  ) ).

oluşturduğumuz bu tablo da aşağıdaki gibi bir sonuç elde etmemizi sağlar,

Oluşturduğumuz bu iki tablo içerisinde anahtar olan üretim yeri ve malzeme türüne göre toplam fiyatları çıkartmamız gerektiğinde REDUCE devreye girmektedir.

Bunun için ilk tablomuza bir döngü yaparken anahtar koşulları ile diğer tablodaki fiyat alanlarının toplamlarını REDUCE ile alarak ana yine ilk tabloya yerleştirebiliriz. Bunun için iç içe loop yapmak yerine bu yöntemle hem daha hızlı hem daha kolay işlem sağlanmış olacaktır.

LOOP AT LT_MALZEME_HEADER ASSIGNING FIELD-SYMBOL(<FS_HEADER>).

  <FS_HEADER>-FIYAT = REDUCE NETWR( INIT VAL TYPE NETWR
                         FOR WA IN LT_MALZEME_DETAY
                       WHERE ( URETIM_YERI  EQ <FS_HEADER>-URETIM_YERI
                         AND   MALZEME_TURU EQ <FS_HEADER>-MALZEME_TURU )
                        NEXT VAL = VAL + WA-FIYAT ).
ENDLOOP.

Yukarıdaki gibi tek satırda bir operasyonla kümülatif olarak aynı üretim yerindeki aynı malzeme türündeki malzemelerin toplam fiyatlarını alabildik. bu işlem sonucunda aşağıdaki sonuç ortaya çıkmaktadır.

Umarım faydalı bir bilgi olabilmiştir.


SAP ABAP – REDUCTION OPERATOR ( REDUCE )” için bir yanıt

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s