26 Aralık 2008 Cuma

ABAP : Internal Table tipleri , ozellikleri ve teknik bilgiler

Merhabalar,
Bu yazıda basit olarak internal table özellikleri, tipleri ve onlara özgü durumları anlatacağım. Daha çok teknik tarafı ile ilgilidir, yani bir ITAB nasıl kullanılır veri nasıl atılır , okunur ve değiştirilebilir yazısı değildir.



Internal tableları index table ve hashed table diye ikiye ayırabiliriz. Yine Index tablelar kendi içinde, standard ve sorted olarak ikiye ayrılır. Hepsinin kendine has özellikleri mevcuttur, veri okuma, yazma, arama hızları hepsinin farklıdır. Yine alanlara ulaşım, tekil kayıtlılık, çok kayıtlılık özellikleri yine hepsinin farklıdır. Bunlara kısa kısa değinmeye çalışacağım.

Standard ve Sortab tablolar için en hızlı ulaşım index ile ulaşımdır. Sorted tablo her zaman verileri sıralanmış olarak tutar ve ulaşım için "binary search" metodunu kullanır. Verilere ulaşım hızı, kayıt sayısına bağlı olmakla birlikte logaritmik bir artış gösterir. Hashed tablolarda ise durum farklıdır, verilere ulaşım sadece anahtar alan ile olur ve kayıt sayısı önemli değildir, sabittir. Hashed tablolarda verilere ulaşım hızını etkileyen faktör key alanın uzunluğudur.

Programlarımızda, DATA diye başlayıp tablo tanımladığımızda tüm özelliklerini, key alanlarını vermemiz gerekir yani bir "complete type definition" yapılması gerekir. Sadece STANDARD TABLE tanımı yapılırken buna gerek yoktur,


Örneğin,

DATA: ITAB type table of struc dediğimizde aslında bu

DATA : ITAB TYPE STANDARD TABLE of struc WITH NON-UNIQUE DEFAULT KEY ile aynı anlama gelmektedir.


HASHED tablolar mutlaka UNIQUE tanımlanmalıdır, SORTED tablolar ise hem UNIQUE hemde NON-UNIQUE tanımlanabilir.


Tabloları okurken, WITH KEY metodu kullanımına dikkat etmemiz gerekir. Çünkü burada herhangi bir alanı kullanabilir, eğer kullandığımız alan gerçekten KEY değilse, o zaman sorted ve hashed tablolara ulaşım hızı standard tablolara ulaşım hızıyla aynı olacaktır ve yavaş olacaktır. Anahtar alanı tanımlanmış tablolarda okuma yapılacaksa, WITH TABLE KEY metodu kullanılmalıdır, eğer KEY alan tanımlanmamışsa ve bu metod kullanılmak istenirse Syntax error hatası görülecektir.


ITAB'larla alakalı bazı teknik bilgilier

- 32 bitlik mimaride, teorik maksimum boyut 2 GB olabilir.
- Pratikte, 500 MB veri tutabilir.
- Tablo başına 4.000.000.000 satır veri tutulabilir.

RAM'inizin yetmediği durumlarda, karşılaşacağınız ABAP hatası ;
TSV_TNEW_PAGE_ALLOC_FAILED.

ITAB'ımızın , bellekte ne kadar yer tuttuğunu merak ediyorsak, SETTINGS sekmesinden, table memory display seçeneğini aktif etmemiz gerekir. DEBUG ederken, aşağıdaki gibi ITAB'ın bellekte ne kadar yer kapladığını görmemiz mümkündür.




Bir sonraki yazımda, bu ITAB tiplerinin performanslarını karşılaştıracağız.

iyi çalışmalar.

Attığınız şutlara paslara dikkat edin.


20 Aralık 2008 Cumartesi

ABAP : Satinalma Siparisi Yaratma

Satınalma siparişini yaratmak için Batch Input yerine BAPI kullanmak en mantıklı ve en hızlı yoldur.
Dolduracağımız bir kaç ana tablonun dışında tek yapmamız gereken, BAPI_PO_CREATE fonksiyonunu çağırmaktır.
Örnek;

Data: int_pohead like BAPIEKKOC,
int_poitem like BAPIEKPOC occurs 0 with header line,
int_posched like BAPIEKET occurs 0 with header line,
int_ret like BAPIRETURN occurs 0 with header line.
Data: d_purchord like BAPIEKKOC-PO_NUMBER.

Move: 'NB' to int_pohead-DOC_TYPE,
'1000' to int_pohead-PURCH_ORG,
'001' to int_pohead-PUR_GROUP,
'0000001234' to int_pohead-vendor,


'00010' to int_poitem-po_item,
'Material' to int_poitem-material,
'Material' to int_poitem-pur_mat,
'1000' to int_poitem-plant,


'00010' to int_posched-PO_ITEM,
'20080531' to int_posched-DELIV_DATE,
'2' to int_posched-QUANTITY.
* Miktarları he zaman schedule tablolarına giriyoruz
hem Satınalma Siparişi BAPI si için hemde satış siparişi bapileri için.


Append int_poitem.
Clear int_poitem.
APPEND int_posched.
CLEAR int_posched.

CALL FUNCTION 'BAPI_PO_CREATE'
EXPORTING
PO_HEADER = int_pohead
SKIP_ITEMS_WITH_ERROR = ' '
IMPORTING
PURCHASEORDER = d_purchord
TABLES
PO_ITEMS = int_poitem
PO_ITEM_SCHEDULES = int_posched
RETURN = int_ret .


16 Aralık 2008 Salı

ABAP : POPUP ile ekrandan deger alma

Rapor ekranımızda, örneğin ALV ekranında bir işlem öncesi bazı değerleri almamız gerekebilir.
Satış siparişi yarattığımızı varsayalım;
ALV de ilgili satır için girilmesi gereken başlık verilerini POPUP ile kullanıcıya sorup rahat bir şekilde gereken değerleri alabiliriz.
Kullanacağımız fonksiyon POPUP_GET_VALUES


Örnek kod:

*Fields tablosunu, ekrana koyacağımız parametreler için kullanıyoruz.

data : fields like sval occurs 0 with header line .

fields-tabname = 'VBAK' .
fields-fieldname = 'AUART' .
fields-field_obl = 'X' .
append fields . clear fields .

fields-tabname = 'VBAK' .
fields-fieldname = 'VKORG' .
fields-field_obl = 'X' .
append fields . clear fields .

fields-tabname = 'VBAK' .
fields-fieldname = 'VTWEG' .
fields-field_obl = 'X' .
append fields . clear fields .

fields-tabname = 'VBAK' .
fields-fieldname = 'SPART' .
fields-field_obl = 'X' .
append fields . clear fields .

call function 'POPUP_GET_VALUES'
exporting
popup_title = 'Ek değerleri giriniz'
start_column = '5'
start_row = '5'
tables
fields = fields[]
exceptions
error_in_fields = 1
others = 2.

* Değerleri okumak için tanımladığımız değişkkenlere, read table
* metoduyla değerlerimizi atarız


if fields[] is not initial.

read table fields with key fieldname = 'AUART' .
gv_auart = fields-value .
read table fields with key fieldname = 'VKORG' .
gv_vkorg = fields-value .
read table fields with key fieldname = 'VTWEG' .
gv_vtweg = fields-value .
read table fields with key fieldname = 'SPART' .
gv_spart = fields-value .
endif.