20 Şubat 2015 Cuma

Menü sorgu yönetimi

Menü sorgu yönetimi, kullanıcılarımızın hazırlamış oldukları SQL sorgularının belirlenen paremetreler doğrultusunda farklı formatlar şeklinde görüntülenebilmesini sağlar.
Tasarlanan SQL sorgularının içerisine veri tabanında kayıtlı olan tablolardan değerler seçtirilip, sonuçların buna göre analiz edilmesi sağlanabilir.

Operasyon ekleme seçeneği ile operasyon ekranları hazırlanabilir ve yazılabilir kolon ekleme seçeneği ile tanımlanan operasyonlarda kullanılmak için oluşacak ekranlardan veri girişi sağlanabilir.

Ayrıca menü sorgu yönetimi ile tasarlanan SQL sorguları kullanıcı menülerine eklenebilir, kullanıcılar bazında sınıflandırılabilir.

Şimdi basit bir örnek ile menü sorgu yönetimi sayesinde ilk kod, son kod ve kod yapısı kriterlerini verebileceğimiz bir stok listesi hazırlayacağız.

Bunun için Menü sorgu yönetimi butonunu tıklıyoruz.

Açılan pencerede bulunan Başlık kısmına raporumuzun görünecek ismini yazalım.

Örneğimiz için basit anlamda stok kartlarımızın ve isimlerinin STOK tablosunda gelebilmesi için bir SQL sorgusu yazmamız gerekmektedir.

Bunun için SQL Server Management Studio’yu kullanabilirsiniz.

SQL Server Management Studio ile yazmış olduğumuz kodu Menü sorgu yönetimi penceresine kopyalıyoruz.

Select sto_kod,sto_isim From STOKLAR

Eğer ekranda tabloyla ilgili bağlantı, analiz ve yönetim menülerinin çalışması istenirse tablo seçim kutusundan ilgili tabloyu seçiyoruz. Eğer tablo seçimi yaparsak sorgumuzun ilk alanının mutlaka kayıt No (RECNo) alanı olması gerekir ve “AS [#msg_S_0088]” ifadesi kullanılmalıdır. Bu durumda sorgumuz aşağıdaki şekilde olmalıdır.

Select sto_RECno AS [#msg_S_0088], sto_kod,sto_isim From STOKLAR

Bu aşamadan sonra “Parametre” başlıklı menüdeki Ekle butonun altında bulanan ok işaretini tıklayıp, Tarama kriterleri sekmesinde bulunan Stok kartları tablosunu seçiyoruz. Seçimimiz tamamlandıktan sonra, ekranın sol tarafında parametreler oluşacaktır.

Oluşan parametrelerin detaylarını incelemek için Değiştir butonuna basıyoruz veya ilgili parametreye çift tıklıyoruz. İlk önce Parametre uzunluğu ayarlanmalı, sonrasında Seçilebilir Parametre kutucuğu tıklanmalıdır. Bu aşamadan sonra seçimlerin hangi görünümden yapılacağı ve referans alınacak alanlar belirlenmelidir.

Örneğimiz gereği kriterler belirlenirken çoklu seçime ihtiyacımız olmadığı için Çoklu seçim yapılabilir kutucuğunu işaretlemiyoruz. Fakat F10 zorunlu kutucuğunu işaretlememiz gerekir. Bu kutucuk işaretli olduğu durumlarda stok kartlarımızda kayıtlı olmayan bir stok kodunu manuel yazdığımızda imleç devam etmeyecektir ve bir uyarı karşınıza gelecektir. Bu kutucuk işaretlenmez ise tanımlı olmayan bir stok kodunu kriter olarak yazdığımızda program raporun sonucun getirmeye çalışacaktır fakat tanımsız bir kod yazıldığı için ekranınıza herhangi bir bilgi gelmeyecektir. Bu tarz bir durum analizlerinizi yanlış yorumlamanıza sebep olacaktır.

Bahsetmiş olduğumuz kriterlerin detay bilgilerini istendiği taktirde programa manuel de ekleyebiliriz. Fakat programda bulunan “Parametre” başlıklı menüdeki Ekle butonu altındaki şablonlar sayesinde tanımlarımızı sıfırdan ayarlamak yerine uygun şablonları kullanarak tasarlayabiliriz.

Şimdi SQL kodlamamızda ufak bir eşleşme yapıp işlemimizi sonlandıracağız. Tasarlamış olduğumuz kriterlerin SQL sorgumuz ile ilişkilerini kurmamız gerekmektedir. Bunun için ekranın sağ tarafında bulunan SQL cümleciğinin son satırına where ile başlayan bir satır ekliyoruz ve hangi alanın, hangi kriterimiz ile bağlanacağını belirliyoruz.

where (sto_kod >=(@P1) AND sto_kod <=(@P2)) OR (sto_kod=(@P3)) (Bu ifade yanlış, aşağıdaki doğrusudur)

WHERE ((ISNULL(@P1,'') = '') or (sto_kod >= @P1)) AND
              ((ISNULL(@P2,'') = '') or (sto_kod <= @P2)) AND
              ((ISNULL(@P3,'') = '') or (sto_kod like @P3+'%'))

Bu satırı yazarken kullanılabilecek parametre ifadelerini elle yazabildiğimiz gibi Ctrl+Space tuş kombinasyonu ile seçim penceresi açıp burada listelenen açıklamalardan seçim yapabiliriz. Seçtiğimiz açıklamaya ait yazılması gereken ifade otomatik oluşacaktır.

Artık tasarımımız hazır. Şimdi sonucu nasıl izleyeceğimizi göreceğiz.

Menü sorgu yönetimi ile tasarlamış olduğumuz sorguların sonuçlarını üç farklı yöntem ile görüntüleyebiliriz. Bunlar sırası ile Rapor, Görünüm ve Küp formatlarıdır.

Örneğimiz gereği yapmış olduğumuz tasarımda herhangi bir değer yani miktar, tutar vs. gibi bir bilgi olmadığı için sorgumuzun sonucunu küp formatında görüntülememizin bir anlamı bulunmamaktadır.

Rapor seçeneğini tıklıyoruz ve kriterlerimizi girip, sorgumuzun sonuçlarını görüntülüyoruz.

Görünüm seçeneğini tıklıyoruz ve kriterlerimizi girip, sorgumuzun sonuçlarını görüntülüyoruz.

Örneğimizi biraz daha detaylandırıp stok listemizde stok ana grupların ve stok depo miktarlarımızı görelim.

Bunun için SQL sorgumuza bir iki alan ilave etmemiz gerekiyor.

Select sto_kod AS[STOK KODU],sto_isim AS [STOK İSMİ],
       dbo.fn_AnaGrupIsmi(sto_anagrup_kod)AS [ANAGRUP İSMİ],
       dbo.fn_EldekiMiktar(sto_kod)AS [ELDEKI MİKTAR]
From STOKLAR
where (sto_kod >=(@P1) AND sto_kod <=(@P2)) OR (sto_kod=(@P3)) (Bu ifade yanlış, aşağıdaki doğrusudur)
WHERE ((ISNULL(@P1,'') = '') or (sto_kod >= @P1)) AND
              ((ISNULL(@P2,'') = '') or (sto_kod <= @P2)) AND
              ((ISNULL(@P3,'') = '') or (sto_kod like @P3+'%'))


Rapor seçeneğini tıklıyoruz ve kriterlerimizi girip, sorgumuzun sonuçlarını görüntülüyoruz.

Görünüm seçeneğini tıklıyoruz ve kriterlerimizi girip, sorgumuzun sonuçlarını görüntülüyoruz.

Küp seçeneğini tıklıyoruz ve kriterlerimizi girip, sorgumuzun sonuçlarını görüntülüyoruz.

Artık SQL sorgumuzun sonuçlarını Küp olarak da izleyebiliriz. Dilersek küpümüzde alt grup detaylarına göre analizimizi boyutlandırabiliriz.

Şimdi de aynı örnek üzerinden devam ederek bir operasyon ekranı hazırlayalım. Sorgumuza birkaç alan daha ilave edelim.

Select sto_RECno AS [#msg_S_0088],
       sto_kod AS[STOK KODU],sto_isim AS [STOK ISMI],
       dbo.fn_AnaGrupIsmi(sto_anagrup_kod)AS [ANAGRUP ISMI],
       dbo.fn_EldekiMiktar(sto_kod)AS [ELDEKI MIKTAR],
       sto_standartmaliyet AS [STOK KARTINDAKİ STANDART MALİYET],
  ISNULL((select top 1 dbo.fn_StokHareketNetDeger(sth_tutar,
                               sth_iskonto1,sth_iskonto2,sth_iskonto3,sth_iskonto4,sth_iskonto5,sth_iskonto6,
                               sth_masraf1,sth_masraf2,sth_masraf3,sth_masraf4,
                               sth_otvtutari,sth_oivtutari,sth_tip,0,
                               sth_har_doviz_kuru,sth_alt_doviz_kuru,sth_stok_doviz_kuru)
          from dbo.STOK_HAREKETLERI
          WHERE sth_stok_kod=sto_kod AND (sth_evraktip in (3,16) or (sth_evraktip=13 and sth_fat_recid_recno>0))
          order by sth_tarih desc,sth_lastup_date desc),0.0) as [STOKUN SON GİRİŞ DEĞERİ]
From STOKLAR
WHERE ((ISNULL(@P1,'') = '') or (sto_kod >= @P1)) AND
              ((ISNULL(@P2,'') = '') or (sto_kod <= @P2)) AND
              ((ISNULL(@P3,'') = '') or (sto_kod like @P3+'%'))

“Operasyon” başlıklı menüdeki “Ekle” butonuna basarak operasyonun tanımlanması için gereken bilgilerin girildiği pencereyi açıyoruz. Açıklama alanına operasyonun görünmesini istediğimiz başlığını yazıyoruz (Örnek: STOK KARTINDAKİ MALİYET ALANINI GÜNCELLE). Kısayol tuşu alanına bu operasyonun hangi tuş kombinasyonu ile çalışmasını istiyorsak o tuş kombinasyonunu yazıyoruz (Örneğin Ctrl+M). Operasyon alanına ise bu operasyon çalıştırıldığında gerçekleşmesini istediğimiz SQL sorgusunu yazıyoruz. Örneğimiz için bu bölüme;

UPDATE STOKLAR SET  sto_standartmaliyet = ISNULL((select top 1 dbo.fn_StokHareketNetDeger(sth_tutar,
                               sth_iskonto1,sth_iskonto2,sth_iskonto3,sth_iskonto4,sth_iskonto5,sth_iskonto6,
                               sth_masraf1,sth_masraf2,sth_masraf3,sth_masraf4,
                               sth_otvtutari,sth_oivtutari,sth_tip,0,
                               sth_har_doviz_kuru,sth_alt_doviz_kuru,sth_stok_doviz_kuru)
          from dbo.STOK_HAREKETLERI
          WHERE sth_stok_kod=sto_kod AND (sth_evraktip in (3,16) or (sth_evraktip=13 and sth_fat_recid_recno>0))
          order by sth_tarih desc,sth_lastup_date desc),0.0)
WHERE ((ISNULL(@P1,'') = '') or (sto_kod >= @P1)) AND
              ((ISNULL(@P2,'') = '') or (sto_kod <= @P2)) AND
              ((ISNULL(@P3,'') = '') or (sto_kod like @P3+'%'))

İstenirse operasyon sorgusu yazılmadan “Tamam” tuşuna basılıp ana ekrana dönülebilir ve Operasyonlar bölümündeki listeden eklemiş olduğumuz operasyon seçilip sorgu bu ekrandaki Operasyon Sorgusu bölümüne yazılabilir. Eğer Operasyon Sorgusu bölümü kullanılırsa yukarıdaki gibi sorgu içinde yer alan @P1 gibi parametre ifadelerini elle yazabildiğimiz gibi Ctrl+ Space tuş kombinasyonu ile seçim penceresi açıp burada listelenen açıklamalardan seçim yapabiliriz. Seçtiğimiz açıklamaya ait yazılması gereken ifade otomatik oluşacaktır.

Artık yönetim ekranımız da hazır. Oluşturduğumuz yönetim ekranında menüde operasyon başlığı görünecek ve bu başlık altında STOK KARTINDAKİ MALİYET ALANINI GÜNCELLE başlıklı bir operasyon yer alacaktır. Bu operasyon çalıştırıldığında yukarıda yazış olduğumuz sorgu çalışacak ve STOKLAR tablosunda girmiş olduğumuz parametrelere uyan kayıtların standart maliyet alanını, son alış fiyat bilgisi ile güncelleyecektir. İşlemin ardından liste otomatik yenilecek ve en son eklemiş olduğumuz [STOK KARTINDAKİ STANDART MALİYET] alanında güncellemiş bilgiler görünecektir.

Şimdi bir adım daha ileri gidelim ve operasyonun listede seçtiğimiz satırlar için uygulanmasını sağlayalım. Bunun için bir önceki örnekte yazmış olduğumuz operasyon sorgusunun WHERE cümlesi,

“WHERE sto_RECno in ($SECILISATIRLAR)” ifadesi ile değiştirilir. Değiştirme işlemini operasyon sorgusunun göründüğü ana ekrandaki bölümden direkt olarak değiştirebildiğimiz gibi, Operasyonlar bölümündeki listeden çift tıklayarak veya “Operasyon” başlıklı menüdeki değiştir butonuna tıklayarak operasyon detayı görüntülenip buradan sorgu cümlesi ve istenirse diğer bilgileri düzenleyebiliriz.

Düzenleme sonrasında operasyon sorgumuz aşağıdaki halini alıyor.

UPDATE STOKLAR SET  sto_standartmaliyet = ISNULL((select top 1 dbo.fn_StokHareketNetDeger(sth_tutar,
                               sth_iskonto1,sth_iskonto2,sth_iskonto3,sth_iskonto4,sth_iskonto5,sth_iskonto6,
                               sth_masraf1,sth_masraf2,sth_masraf3,sth_masraf4,
                               sth_otvtutari,sth_oivtutari,sth_tip,0,
                               sth_har_doviz_kuru,sth_alt_doviz_kuru,sth_stok_doviz_kuru)
          from dbo.STOK_HAREKETLERI
          WHERE sth_stok_kod=sto_kod AND (sth_evraktip in (3,16) or (sth_evraktip=13 and sth_fat_recid_recno>0))
          order by sth_tarih desc,sth_lastup_date desc),0.0)
WHERE sto_RECno in ($SECILISATIRLAR)

Bu ifadeyi yazarken seçili satırlar ifadesini ve kullanılabilecek diğer ifadeleri Ctrl+Alt+Space tuş kombinasyonu ile açılan seçim penceresinde listelenen açıklamalardan seçip yapabiliriz. Yazılması gereken ifade otomatik eklenecektir.
Bu aşamadan sonra oluşturmuş olduğumuz menüde ilgili operasyonu çalıştırdığımızda sadece listeden seçmiş olduğumuz kayıtlar için operasyonumuz çalışmış olacak.

Son olarak güncelleyeceğimiz alanın ekranda elle giriş yaptığımız verilerle güncellenmesini sağlayalım. Bunun için öncelikle ekranda hangi alanlara elle giriş yapmak istiyorsak bu alanları yazılabilir kolonlar bölümüne eklememiz gerekiyor. Kolon eklemek için “Yazılabilir Kolon” başlıklı menüdeki Ekle tuşuna basıyoruz. Açılan pencerede sorgumuzda var olan kolonların listesinden seçim yapıyoruz. Örneğimiz için “STOKUN SON GİRİŞ DEĞERİ “ kolonunu seçiyoruz. Devam tuşuna bastığımızda seçmiş olduğumuz kolon Yazılabilir Kolon bölümünde listeye &E1 ismi ile eklenmiş olacaktır. Bu işlemden sonra operasyon sorgumuzun yeni halini yazıyoruz.


UPDATE STO
  SET sto_standartmaliyet = &E1
  FROM STOKLAR STO
  INNER JOIN $TABLO ON sto_RECno=[#msg_S_0088]
  WHERE &E1 > 0.0

Bu sorguda yer alan $TABLO ifadesi ekranda oluşacak olan tabloyu temsil ediyor. &E1 ifadesi ise bir önceki işlem ile eklemiş olduğumuz yazılabilir kolonun kodudur. &E1 ifadesi yerine kolonun ismini yani [STOKUN SON GİRİŞ DEĞERİ] yazabiliriz. &TABLO ve &E1 gibi ifadeleri elle yazabildiğimiz gibi Ctrl+Alt+Space tuş kombinasyonu ile açılan seçim penceresinde listelenen açıklamalardan seçim yaparak da otomatik oluşmasını sağlayabiliriz.

Artık son örneğimizde hazır. Operasyon ekranı çalıştırıldığında [STOKUN SON GİRİŞ DEĞERİ] kolonu elle yazılabilir durumdadır. Buradan istenilen satırlar değiştirilebilir. Operasyonun ugulanmasını istemediğimiz satırlarda bu kolona operasyon sorgusunda 0 dan büyük kontrolü olduğu için 0 yazılabilir. Operasyon çalışıtırıldığan bu kolonda 0’dan büyük değer olan satırlar için operasyon çalışmış olacaktır. İstersek “WHERE &E1 > 0.0” ifadesini
“ WHERE (sto_RECno in ($SECILISATIRLAR)) AND ([STOKUN SON GİRİŞ DEĞERİ] > 0.0) AND (&E1 > 0.0)” olarak değiştirip operasyonun aynı zamanda seçili satırlar için uygulanmasını da sağlayabiliriz.

Menü sorgu yönetimi ile tasarlamış olduğumuz SQL sorgularına ait script’leri program menülerimize de ekleyebiliriz. 

Stok yönetimi üzerinde mouse’umuzun sağ tuşunu tıklıyoruz. Menü ekle\Bir alt seviyeye son menü olarak seçeneğini seçiyoruz.

Stok Yönetimi menüsünün altına Yeni menü isimli bir menü eklenecektir.

Yeni menü seçeneği üzerinde mouse’umuzun sağ tuşuna basıyoruz ve karşımıza gelen listeden dilersek; Görüntü sorgu dosyası bağla, Veri kübü sorgu dosyası bağla ya da rapor sorgu dosyası bağla seçeneklerini seçerek işlemimizi sonlandırıyoruz.

Örnekleri aşağıdaki linklerden indirip inceleyebilirsiniz. Ekteki dosyaları mouse'un sağ tuşuna basıp farklı kaydet ile SQL uzantısı vererek kaydediniz.


MikroQuery1

MikroQuery2
MikroQuery3