Makale Özeti

Merhaba arkadaşlar, Temel Yapı ile başlayan Navision Programlama yazı dizisine Finansal işlemler ile devam ediyorum.

Makale

Merhaba arkadaşlar,

Temel Yapı ile başlayan Navision Programlama yazı dizisine Finansal işlemler ile devam ediyorum.

Bütün Giriş tablolarının birincil anahtarı “Entry No.” dur. Genel Muhasebe ve KDV ile ilgili işlemlere ait hareketler "G/M Girişi" ve "KDV Girişi" tablolarında tutulur. Müşteri ile ilgili bütün fatura, ödeme vs. hareketi "Müşteri Defter Girişi" tablosundadır.  Yaşlandırma raporları bu tablo üzerinden alınır. Bu tablodaki her hareketin daha detaylı tutulduğu 1:N ilişkili bir “Ayrıntılı Mşt. Deft. Girişi” tablosu daha vardır. Bu tabloda fatura ile ödeme arasındaki uygulama hareketleri, kur farkından dolayı ortaya çıkan kazanç veya kayıpların kaydı vs. bulunur. Müşteri Defter Girişlerindeki en önemli alan “Kalan Tutar” (“Remaining Amount”) alanıdır, fatura tutarının ne kadarının ödenip ödenmediğini (veya uygulanıp uygulanmadığını) Ayrıntılı Müşteri Defter Girişleri’ nden toplayarak getiren bir “FlowField”alandır.

// CALCFIELDS FONKSİYONU VARIADIC BİR FONKSİYONDUR
"Cust. Ledger Entry".CALCFIELDS("Remaining Amount","Remaining Amt. (LCY)");

Yeri gelmişken yazılımcılar açısından unutulmaması gereken bir nokta da, Form veya Raporlar dışında “FlowField” alanlarının verileri toplama, sayma, gösterme (lookup) işlemlerini otomatik olarak yapmadığıdır. Bu durumlarda hesaplama yapılabilmesi için “CALCFIELDS” fonksiyonunu kullanmak gerekir.

FlowField alanları Navision programını öne çıkaran için önemli özelliklerdendir. Veritabanı Tablolarında fiziksel olarak bulunmazlar, kullanılma nedenleri hesaplamadır. Bu alanları hepimizin bildiği Excel programındaki pivot tablolara benzetebiliriz. "FlowFilter" alanlar da aynı şekilde önemlidir. Bu alanlar genellikle isimlendirilirken “Filter” ibaresi içerdikleri için (“Date Filter” gibi) kolayca farkedilirler. Bir tabloya FlowFilter eklemek için “Table Designer” içerisinde “FieldClass” özelliğini “FlowFilter” seçmelisiniz.

Örnek olarak bir Müşteri Yaşlandırma Raporu üzerinde çalıştığımızı düşünelim. Rapor, kullanıcının belirlediği bir tarihe göre müşterinin borcunu filtreleyerek 30-60-90 günlük dönemlerde ödenmesi gereken tutarları göstersin. Bu tarz raporlar, geçmiş dönem sonu bilançosunu göstermek için sıkça kullanılırlar. Navision üzerinde böyle bir raporu çok az kod yazarak kısa sürede hazırlayabilirsiniz.

Araçlar >> “Nesne Tasarımcısı” nı açıp “Report” sekmesinden yeni bir rapor oluşturabilirsiniz. Rapor tasarımcısında “Müşteri Defter Girişi” tablosunu seçip, rapor yaratma sihirbazını kullanarak hızlı bir şekilde gerekli alanları ekleyebilirsiniz. Daha önce de belirttiğim gibi müşteri bakiyesini gösterecek alan tablodaki “Kalan Tutar” (“Remaining Amount”) alanıdır.

“Müşteri Defter Girişi” tablosunun özelliklerinde “Deftere Nakil Tarihi” (“Posting Date”) tarih alanını ve “Tarih Filtresi” (“Date Filter”) flowfield alanını RequisitionFilterFields özelliğinde seçerek tek satır kod yazmadan işlemi bitirebilirsiniz. Haziran Dönem sonu itibariyle rapor alınmak istendiğinde kullanıcı “Deftere Nakil Tarihi” alanına “<30062012” filtresi vererek bu tarih öncesindeki bütün müşteri hareketlerini ve “Tarih Filtresi” alanına da aynı filtreyi vererek sadece bu tarihten önceki ödemelere göre Kalan Tutarları filtrelemiş olur.

 

Aynı işlemi kullanıcıya tek bir filtre verdirerek de yaptırmak mümkündür. Bunun için biraz kod yazmak yeterlidir. FilterDate isimli bir tarih değişkeni tanımlayıp, Müşteri Defter Girişi tablosu - OnAfterGetRecord() tetikleyicisinde:

// TABLO İLGİLİ ALAN İLE FİLTRELENİR
SETRANGE("Posting Date",0D,FilterDate);
SETRANGE("Date Filter",0D,FilterDate);
// FLOWFILTER DEĞİŞTİĞİ İÇİN FLOWFIELD ALANLARIN YENİLENMESİ GEREKİR
CALCFIELDS("Remaining Amount","Remaining Amt. (LCY)");
// KALAN TUTARI BULUNMAYAN FATURALAR RAPOR DIŞI BIRAKILIR
IF "Remaining Amount" = 0 THEN
  CurrReport.SKIP;

…

“Satıcı Defter Girişleri” de Müşteri Defter Girişleri ile tamamen aynı mantıkta çalışır. Satıcı raporlamasını da yukarıda belirtilen konuları kullanarak yapabilirsiniz.