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.

4 Kasım 2008 Salı

ABAP : Dinamik Select Sorgusu

Sorgumuzda ki alanları dinamik olarak oluşturmamız ve select sorgusunu buna göre yapmamız gerekebilir.
Bunun için yapmamız gerken;
stype_fields
tipinde bir tablo yaratmak ve sütun isimlerini içine eklemektir.

Örnek;

TYPES :
BEGIN OF stype_fields,
fieldname TYPE name_feld,
END OF stype_fields

*ITAB ımızı tanımlayalım.
DATA:
gt_itab type standard table of MSEG with header line.


* Dinamik sorgu için kullanacağımız field isimlerinin bulunduğu
* tablo
data : g_t_fields type standard table of stype_fields.

* burada sütun isimlerini kafamıza göre belirliyoruz

append 'MSEG~ANLN1' to g_t_fields.
append 'MSEG~ANLN2' to g_t_fields.
append 'MSEG~APLZL' to g_t_fields.
append 'MSEG~AUFNR' to g_t_fields.
append 'MSEG~AUFPL' to g_t_fields.


* Select sorgumuz

select (g_t_fields)
into corresponding fields of table gt_itab
from MSEG.


İyi çalışmalar & attığınız paslara şutlara dikkat edin. :=)

ABAP : ALV ' de trafik isiklari kullanimi

ALV ekranında trafik ışıkları kullanımının iki tane yolu vardır. Bu metodlardan en kolayı, ALV çağırırken kullandığımız is_layout parametresini kullanmaktır.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING
it_fieldcat = gt_fcat

is_layout = layout

....
.... Internal table tanımlanırken, trafik ışıklarını göstermemiz için ek bir alan koymamız gerekir;
DATA : layout TYPE slis_layout_alv . "alv grid'in layout parametresi için.
DATA:
begin of gt_itab occurs 0,

icon_field(1) type c,
...

...
...
yapmamız gereken, internal tablomuzda LOOP yapıp, icon_field alanını doldurmaktır.


gt_itab-icon_field = 3. "yeşil ışık
gt_itab-icon_field = 2. "sarı ışık

gt_itab-icon_field = 1. "kırmızı ışık


Daha sonra yapmamız gereken, ALV_GRID i çağırmadan önce,

layout değişkenimiz için;

layout-lights_tabname = 'GT_ITAB'.
layout-lights_fieldname = 'ICON_FIELD'.


değerlerini göndermektir.

11 Ekim 2008 Cumartesi

ABAP : Submit Report Via Selection Screen

Bir rapor içerisinden başka bir raporu çağırmak istediğimiz de; yani çağırıp sonucu görüntülemek veya çağırıp ekran değerlerini set etmek istediğimizde kullanmamız gereken metod;


SUBMIT

VIA SELECTION SCREEN

WITH SELECTION-TABLE

AND RETURN.


*programda back tuşuna basıldığında progamdan çıkmayıp ana ekranı görüntülemesi *için RETURN kullanılmalı.


Yukarıda ki kod; raporu çağıracak ekran değerlerini et edecek ve duracaktır. Eğer; SUBMIT edip raporu görüntülemesini istiyorsak ; "VIA SELECTION SCREEN" kısmını kaldırmamız gerekecektir. Böylece, bir raporun içersinden başka bir raporu çağırmış ve raporun çıktısını görüntülemiş oluruz.

kısmı ise, diğer raporun ekranında bulunan seçimleri set etmek için kullanılan tablodur.


DATA:

seltab TYPE TABLE OF rsparams,

seltab_line LIKE LINE OF seltab .


*Örneğin ekranımızda so_tarih isminde bir select-option olsun ve çağıracağımız programda so_date isminde bir select-option olsun;


seltab_line-selname = 'SO_DATE'.

seltab_line-kind = 'S'.

*buradan aşağısı için, tanımladığınız select-option da

*loop yaparak move-corresponding de diyebilirsiniz

seltab_line-sign = 'I'.

seltab_line-option = 'BT'.

seltab_line-low = so_tarih-low.

seltab_line-high = so_tarih-high.

APPEND seltab_line TO seltab.


*Ayarları set ettikten sonra programı çağırmak kalacaktır


SUBMIT rapor_denem_1

VIA SELECTION SCREEN

WITH SELECTION-TABLE seltab

AND RETURN.


Örnek;


SUBMIT RFSSLD00 WITH SD_KTOPL-LOW = P_KTOPL
WITH SD_SAKNR IN S_RACCT
WITH SD_BUKRS-LOW = P_BUKRS
WITH B_MONATE IN S_MONAT
WITH SD_GJAHR-LOW = P_GJAHR
WITH P_ZMIZAN = 'X'
AND RETURN .



İyi çalışmalar & attığınız paslara şutlara dikkat edin.

1 Ekim 2008 Çarşamba

.NET : Function Grabber

Merhabalar,
ABAP programcılarının çok işine yarayacağını düşündüğüm Function Grabber'ı yakında buradan yayınlıyacağım. Program şuanda bitmiş durumda , sadece nasıl süslesem diye bakıyorum :).
Program; SAP a bağlanıp ekrana girdiğiniz fonksiyon tüm Import Export ve Table parametrelerini okuyarak, ilgili değişkenleri otomatik olarak tanımlamakta ve isterseniz tabloları dolduracak formlarıda otomatik olarak yazmaktadır. Aşağıya birkaç tane resim ekliyorum bakabilirsiniz.



İyi çalışmalar & Attığınız paslara, şutlara dikkat edin!