İçeriğe atla
Yiğit Tenekeci
CV

Muhasebe & Finans

SAP'te ay sonu: VBA makrolarıyla kapanış kayıtları

Ay sonu kapanışı, muhasebede tekrarlı işin en yoğun hali. Takvim ayın sonuna yaklaştığında masamda hep aynı sahne kuruluyordu: SAP açık, Excel açık, bir de kapanış listesi. İşin zor kısmı kayıt girmek değildi; kaydı girmeden önce doğru veriyi doğru yerden toplamaktı. Kapanış kaydı için gereken her destek — bakiye, açık kalem, önceki dönemle karşılaştırma — aynı raporlardan geliyor ve o veriyi toplamak her ay aynı adımlarla tekrarlanıyordu.

Sorun: aynı rapor, aynı ritüel

SAP’te bir raporu çalıştırmak basittir: transaction kodunu yaz, parametreleri gir, çalıştır. Ama ay sonu tek raporla bitmiyor. Her biri için aynı ritüel: raporu aç, dönemi ve şirketi gir, sonucu dışa aktar, Excel’de aç, biçimlendir, kullanılabilir hale getir. Adımlar tek tek basit; rapor sayısı ve şirket sayısı çarpılınca ortaya çıkan şey, saatler süren bir kopyala-yapıştır maratonu.

Bu işin sıkıcı olması kadar tehlikeli bir tarafı da var. Yanlış dönemden veri çekmek ya da bir raporu atlamak, kapanışın sonunda yakalanması en zor hatalardan. Rapor dışa aktarıldığında Excel’in dosyayı doğru açmaması, sütunların kayması derken, en masum görünen adım bile hataya açık hale geliyor.

Karar: GUI’nin scripting tarafı

SAP ile Excel arasında veri taşımanın “temiz” yolları backend erişimi ister: RFC, BAPI, OData. Benim masamda o erişim yok; normal olarak SAP’in ön yüzüyle çalışıyorum. Ama SAP GUI’nin bir scripting tarafı var: açık oturuma dışarıdan komut gönderebiliyorsun, tıpkı Excel’i VBA ile yönetmek gibi. Excel’deki makro, SAP’in açık oturumuna bağlanıp transaction açabiliyor, raporu çalıştırıp gelen tabloyu okuyabiliyor. Karar bu oldu: veriyi SAP’ten ben değil, makro çeksin.

Scripting’in önce bir anahtarı var: SAP GUI ayarlarında scripting’e izin verilmediyse makro çalışmaz. Çoğu şirket bu ayarı kullanıcıya kapalı tutar; bizde açıktı, o yüzden iş IT ile yazışmaya gitmeden başlayabildim. Makroyu sıfırdan yazmadım: SAP GUI’nin kendi kaydedicisi var, yaptığın tıklamaları script’e çeviriyor. Onu başlangıç noktası aldım, sonra elle temizledim. Kayıt iyi bir başlangıç ama kötü bir final; içinde gereksiz tıklamalar ve sabit beklemeler barındırıyor.

Çalışan makro şuna benziyor: açık SAP oturumuna bağlan, transaction kodunu gir, ekranın açılmasını bekle, parametreleri doldur, raporu çalıştır, grid’deki satırları oku, Excel’e yaz. Dışa aktarılan dosyayla uğraşmıyorum; veri doğrudan grid’den geliyor. En kritik kısım bekleme: ekran açılmadan Enter göndermek makroyu bozar. Sabit süre beklemek yerine ekranın başlığını kontrol ediyorum — “bu ekran geldiyse devam et” mantığı, uyku sürelerinden çok daha sağlam.

Veri Excel’e inince iş bitmiyor. Makro, çektiği veriyi kontrol kalıplarından geçiriyor: tutar sütununun toplamı SAP’te gördüğüm toplamla uyuşuyor mu, dönem doğru mu, boş satır var mı. Veri yanlışsa süreç daha baştan duruyor. Kapanışta hata, veriyi çekmekte değil; çekilen verinin yanlış dönemden ya da eksik olmasında.

Power Automate: sıradaki adım nerede

VBA veriyi ayağıma getiriyordu ama ay sonu süreci tek makrodan ibaret değil. Sıralı adımlar var: veriyi çek, kontrol et, eksikse ara, onayla, kaydet. Bu sırayı takip etmek için Power Automate akışları kurdum. Takvim tetikleyicisi ay sonunu hatırlatıyor, kapanış kontrol listesini güncelliyor, çekilen verileri ilgili kişilere ulaştırılacak hale getiriyor. İnsan onayı gereken adımda akış duruyor ve haber veriyor. Kapanışta “akış çalıştı, her şey tamam” mesajı, insan gözünden geçmemiş bir kaydın yerini tutmaz.

Sınır: ekran otomasyonu API değil

Bu yöntemin bir API olmadığını baştan kabul etmek gerekiyor. Ekran otomasyonunun sözleşmesi yok: biri SAP’te bir kolonun yerini değiştirse, makro o gün çalışmaz. Bu yüzden makroları “veriyi getiren” kısımda tuttum; karar verme ve kaydı onaylama insanda kaldı. Otomasyonun sınırını doğru çizmek, kapsamını genişletmekten daha değerli.

Neyi farklı yapardım

İlk makroya her şeyi gömmüştüm: şirket kodu, dönem, rapor parametreleri. Farklı bir şirket için çalıştırmak istediğimde kodu açıp değiştirmem gerekiyordu. Şimdi olsa parametreleri Excel’de bir ayar sayfasına koyar, makro oradan okurdu. Böylece makroya dokunmadan her ayın ve her şirketin verisi çekilirdi.

Bu işten çıkardığım ders şu: SAP gibi kapalı bir sistemde otomasyona başlamanın en hızlı yolu, elindeki arayüzü kullanmak — erişim beklemek değil. GUI Scripting kusurlu ama bugün çalışıyor; IT’den RFC erişimi istemek aylar sürebilir. Bir de tekrarlı işi küçümsememek lazım: her ay aynı raporu çekmek “küçük bir iş” gibi görünür, ama o iş kapanışın en kritik gününde insanı asıl işten — analizden ve kontrolden — çalar.