- Tarih
Corresponding fields of kullanımı
- Yazarlar
- Ad-Soyad
- Ahmet Ertürk
- @aesatiroglu
ABAP programlarını yazarken veritabanındaki verileri direkt olarak değiştirmeyiz. SELECT komutu ile veritabanından istediğimiz verileri çeker internal table dediğimiz bir yapının içerisinde saklar ardından ihtiyacımız olduğunda onlar üzerinde işlem yapar ve son olarak da veritabanını bu internal table içeriğindeki verilerle güncelleriz.
SELECT ile veritabanından veri çekerken her zaman bir tablodan veri çekmeyiz. Genelde 2,3, hatta 4,5 tablodan aynı anda veri çekip bu verileri bir internal table’a aktarırız. Fakat bu seçme işlemi sırasında her tablonun yapısı aynı olmadığı için veriler doğru bir şekilde internal table’a aktarılamayabilir. Yapı farklılığı ile söylemek istediğim aslında; seçilen 2 ya da daha fazla tablonun alanlarının ve alanlarının sırasının farklı olmasıdır.
Örnek olarak standart bir select ile tablodan çekilen verinin internal table’a aktarılmasını görelim:
report zae_corresponding.
data: gt_scarr type table of scarr,
gs_scarr type scarr.
start-of-selection.
select * from scarr
into table gt_scarr.
break-point.
Yukarıdaki sorgunun sonucu aşağıdaki gibidir.
Bütün alanları seçtiğimiz için itab içine “into table gt_scarr” ile aktarabiliyoruz sorunsuz bir şekilde.
Yukarıdaki örnekte bütün alanları seçip gt_scarr içeriğine attığımız için hiçbir sorun yaşamadık. Peki, gt_scarr’a sadece 2 alanın verilerini çekip aktarmak isteseydik neyle karşılaşırdık? Örnek olması açısından aşağıdaki kodumuzu inceleyelim.
report zae_corresponding.
data: gt_scarr type table of scarr,
gs_scarr type scarr.
start-of-selection.
select carrid carrname
from scarr
into table gt_scarr.
break-point.
Yukarıdaki 2 alan seçilmiş sorgumuzun görüntüsü aşağıdaki gibi olur.
mandt alanında carrid’yi sığdırmaya, carrid alanına da carrname’i sığdırmaya çalıştırdığı için bu şekilde bir sorunla karşılaşıyoruz.
scarr tablosundaki alanlarda kayma, sorun olmaması için aşağıdaki gibi bir kod yazarız. burada kullandığımız “into corresponding fields of table” ifadesi aşağıdaki sorguya göre şu anlama gelir; scarr’a git carrid ve carrname alanlarını seç, sonra bunları gt_scarr’da carrid ve carrname alanları var ise gt_scarr’a aktar.
report zae_corresponding.
data: gt_scarr type table of scarr,
gs_scarr type scarr.
start-of-selection.
select carrid carrname
from scarr
into corresponding fields of table gt_scarr.
break-point.
into corresponding fields of table ifadesini belirterek yazmış olduğumuz kodumuzun çalıştırılması sonrasında aşağıdaki gibi görüntü elde ederiz ve beklediğimiz gibi doğru çalışmış olur.
Sonuç.
Oluşturduğunuz bir internal table içerisine her zaman itab yapısındaki bütün alanları select ile seçip atmazsınız. Yeri gelir bir kaç alanı seçersiniz. Böyle bir durumda oluşabilecek kolon/veri kaymasını; “into table” yerine “into corresponding fields of table” yapısını kullanarak engelleyebilirsiniz.
Sizin bu konuda karşılaştığınız zorluklar var mı?
SAP resmi kaynaklarında ise bu konuyu buraya tıklayarak okuyabilirsiniz.