SAP sistemleri, şirketlerin nerede ise bütün bilgilerinin yer aldığı ve buna bağlı olarak bütün raporların veri kaynağı konumundadır. Ancak gerek kimi kurumlarda güvenlik sebebi ile veri tabanlarının dışardan erişime kapalı olması, gerekse SAP veri tabanının yoğun veriler içermesinden dolayı raporlama ekranları uzun sürebilmektedir. Özellikle yönetime sunulan raporlarda nerede ise sistemdeki bütün verinin işlenmesi gerektiğinden bu çalışma süresi çok daha uzun olmaktadır.
Bu yazımızda elimizdeki imkanlar ile normalde dışarıdan ulaşıma kapalı olan bir SAP sistemine ait SQL Server üzerinde raporlama yapacağız.
İşlemimiz 3 aşamadan oluşmaktadır. Aşamalar;
- SAP tarafında yapılacak işlemler
- SQL Server tarafından yapılacak işlemler
- Kullanılacak raporlama aracıyla rapor tasarımı
SAP Tarafında Yapılacak İşlemler
SAP tarafında işleme ilgili raporu ham olarak oluşturacak olan programı yazmakla başlıyoruz. Bu raporda yapılacak işlemler şöyle olabilir:
- Birim dönüşümleri
- Rapora bağlı olan bilgilerin kolon olarak alınması
- Para birimlerinin dönüşümü
- Müşteri bilgileri
- Malzeme Bilgileri
- …
Bu şekilde rapor ham hali ile ekrana ALV Grid olarak yazılıp bilgilerin doğruluğu teyit edildikten sonra bu işlenmiş rapor verisinin veri tabanına kaydına sıra geliyor.
ALV kolonlarına uygun şekilde SAP veri tabanında bir tablo oluşturulur. Rapor verileri ABAP programında ALV’ye gösterilmeden önce veriler bu tabloya işlenir. Burada dikkat edilmesi gereken nokta: İşlenen veriye göre mevcut verileri tabloya işlemeden önce eski verilerin nasıl işleneceğidir. Örneğin rapor bir stok raporu ise mevcut verilerin tablodan silinip yeni verileri öyle eklemek gerekebilir. Silme demişken ciddi bir uyarı yapayım burada; silinmesi gerekebilir dediğim veriler ALV sonucunun kaydedildiği tablodur. Aman diyeyim SAP verilerini silmeyelim. Sipariş veya fatura raporu gibi bir veri ise de öncekileri silmek yerine yenileri tabloya ekleyip öncekileri MODIFY ile güncelleme yeterli olacaktır.
Buraya kadar geldiğimize göre şimdi de bu rapor için gerekiyorsa seçim varyantı oluşturulur.
SAP tarafındaki son adım olarak da bu programımızı bir joba bağlayarak işlemi tamamlıyoruz ve SQL Server tarafına geçiyoruz.
SQL Tarafında Yapılacak İşlemler
Bu adımda yapacağımız işlem de aslında ALV sonuçlarını kaydettiğimiz tablonun verilerini dışardaki bir veri tabanına taşımaktır. Bunu yapma sebebimiz de SAP veri tabanının dışarıdan erişime kapalı olması ve SAP veri tabanı erişim bilgilerini sistem dışında kullanmamaktır.
İlk işlem olarak dışarıdaki SQL Server üzerinde tablomuzun yapısı ile birebir aynı olacak şekilde bir tablo oluşturuyoruz. Birebir aynı olması verileri aktarırken kolaylık sağlayacaktır. Birebir aynısını oluşturmak için benim takip ettiğim aşağıdaki gibidir.
SAP veri tabanı üzerinde ilgili tabloya sağ tıklayıp aşağıdaki yolu izliyorum. Böylece SSMS bana tabloyu oluşturmak için gerekli T-SQL scriptini oluşturuyor. Scripti alıp dışarda verileri aktaracağınız SQL Server’da çalıştırarak tablonun aynısını oluşturabiliriz. SAP veri tabanında tarih verisi nvarchar(8) olarak tutulduğundan tarih olan kolonların tiplerini scriptte date veya datetime olarak değiştirip sonra çalıştırmak daha faydalı olacaktır. Kullanacağımız raporlama aracının bu kolonları tarih olarak görüp ona göre işlemesi için bu adım önemlidir.
Dışardaki SQL sistemimizde de tablomuzu oluşturduğumuza göre şimdi de sıra geldi asıl SAP SQL Server’ına. Bu server dışarıdan erişime kapalı olduğundan demek oluyor bizim verileri içeriden dışarıya göndermemiz gerekiyor. Bunun için de iki seçenek var:
- Bir program yazıp SQL Server veri tabanından verileri okuyup dışarda ki SQL Server’ımıza bu veri ile aktarmak
- Dışarıdaki SQL Server’ımızı SAP SQL Server’a linked server olarak ekleyip direk SQL Server’ları konuşturmak
Biz burada ikinci seçeneği tercih ediyoruz.
Linked Server ile SAP SQL Server’dan dışarıdaki SQL Server’a ulaşmak için dışarıdaki SQL Server’da gerekli yetkilere sahip bir kullanıcı oluşturulur. SAP SQL Server’a linked server eklerken bu bilgi bize gerekecektir.
SQL Server’da kullanıcı oluşturmak için aşağıdaki videoya göz atabililirsiniz.
Linked Server’da oluşturduktan sonra şimdi de sıra verileri dışarıdaki veri tabanına aktaracak stored procedurda.
Bu rapor için son 390 günün verisi ile çalışıldığından 6. satırda 390 gün öncesinin tarihi bulunuyor önce.
8. satırda 390 günden yeni olan veriler öncelikle dışarıdaki SQL Server’dan siliniyor.
SAP boş tarihleri metin olarak 00000000 şeklinde tuttuğundan önce SAP SQL Server tablomuzda bu verileri kendimize göre eski bir tarihe atıyoruz. null değer olarak da atanabilirdi ancak biz sistemimizde zaten olmayan 2000 yılını tercih ettik.
Son olarak 23 ve 24. satırlarda verileri SAP SQL Server’ından SELECT edip linked server olarak eklediğimiz dışarıdaki SQL Server’a INSERT ediyoruz.
Bütün bu işlemlerden sonra artık SAP SQL Server’a yazdığımız bu stored procedürü de otomatik çalıştıracak bir job ayarlanır ve işlem tamamlanır. SAP SQL Server’a tanımlanan bu jobın çalışma zamanı çok önemli. Mutlaka ABAP tarafında ki raporumuzun çalışmasının bittiği zamandan sonra çalışması gerekiyor ki güncel verileri aktarsın.
Raporlama Aracı ile Rapor Tasarımı
Bu adımda artık excel ile bile verileri aktardığımız dışarıdaki SQL Server’ımıza bağlanarak istediğimiz raporlamayı yapabiliriz.