Makale Özeti

Bu makalemizde Navision’da denetim amaçlı kullanımı öngörülen Kayıt Kontrol Numarası sistemini geliştireceğiz.

Makale

Kayıt Kontrol Numarası  

Bu makalemizde Navision’da denetim amaçlı kullanımı öngörülen Kayıt Kontrol Numarası sistemini geliştireceğiz.

Senaryo 

1 sıra no'lu bilgisayarlı muhasebe programları standartları genel tebliğ taslağı uyarınca tüm muhasebe işlemlerinin bir kayıt kontrol numarası ile takip edilmesi ve ay sonunda bu numaraların toplamlarının ilgili makama raporlanması istenmektedir.

Kayıt kontrol numarası aşağıdaki algoritmaya göre oluşturulacaktır: 

Ana Hesap Kodu * Tutar * 100

Yıl içinde verilen raporlarda her bir ayın ve o yılın toplamı (kümülatif toplam)  görüntülenmelidir.

Çözüm Kurgusu 

Tüm muhasebe işlemleri sonucunda ilgili kaydın oluşturulabilmesi için kullanılabilecek en pratik yöntem, bu kayıtların tutulduğu G/L (General Ledger - Genel Muhasebe)  Entry tablosunun kullanılmasıdır. Bu tabloya herhangi bir kayıt yazıldığı zaman yukarıdaki algoritmaya göre hesaplama yapan bir fonksiyonun çalıştırılması uygun bir çözüm olarak gözükmektedir.

Çözüm 

Tablo Değişiklikleri

İlgili tabloda değişiklik yapmak için 

Araçlar → Object Designer → Table → G/L Entry

Design düğmesine tıklanarak tablo tasarımına girilir.  G/L Entry tablosunda Kayıt Kontrol No. adında yeni bir alan tanımlanır. Veri tipi olarak Integer seçilir. 

Dikkat: Kullanıcı tanımlı alanların 50000 – 99999 arasında olması gerekmektedir.

 

 

Daha sonra ilgili fonksiyonu tanımlayacağımız global değişkenler alanına geçmemiz gerekmektedir.  Görüntüle → C/AL Globals

Burada fonksiyonlar sekmesine tıklayarak fonksiyonumuzun adını vereceğiz. 

 

Daha sonra Locals düğmesine tıklayarak fonksiyonumuzda kullanacağımız değişkenleri belirteceğiz.

 

Bu işlemleri tamamladıktan sonra kodumuzu yazmaya başlayabiliriz.

Koda erişmek için: Görüntüle → C/AL Code 

Tablo tetikleyicilerinin en altında biraz önce tanımladığımız fonksiyonun olduğunu görebilirsiniz.

 

Şimdi tek tek bu  kod satırlarını inceleyeceğiz.

Hesap := COPYSTR("G/L Account No.",1,3); 

Fonksiyonumuzun değişkenlerinde tanımladığımız hesap değişkenini, ilgili işlemde kullanılan ana muhasebe hesabını almak için kullanmak istiyoruz.

Bu nedenle COPYSTR işlevini kullanıyoruz. Aşağıda COPYSTR işlevinin sözdizimi görüntülenmektedir. 

  NewString := COPYSTR(String, Position [, Length])

String, içinden belli bir kısmın kopyalanacağı metin, Position ilgili metnin kaçıncı karakterinden itibaren kopyalama yapılacağını gösteren sayısal ifade, Length ise isteğe bağlı olarak, belirtilen noktadan itibaren kaç karakterlik bir kısmın kopyalanacağını gösterir.   

Örnek:

String = 120.01.001

COPYSTR(String,1)              → 120.01.001

COPYSTR(String,5)              → 01.001

COPYSTR(String,1,3)           → 120

COPYSTR(String,5,2)           → 01 

Biz ana hesabı almak istediğimiz için Position’a 1, Length’e 3 değerini veriyoruz.

Tutar := ABS(Amount);  

G/L Entry tablosunda borç tutarlar pozitif değerlerle saklanırken, alacak tutarlar negatif değerlerle saklanmaktadır. Amount alanındaki değerin mutlak değerine gereksinim duyduğumuz için bu fonksiyonu kullanıyoruz.

EVALUATE(IntHesap,Hesap); 

Hesap değişkeninin veritipinin code olması bu değişkenin aritmetik işlemlerde kullanılmasını engellemektedir. Code veritipi bir string olarak işlem görür ve Integer veya Decimal tipindeki verilerle aritmetik işlemler içinde kullanılamaz. Ancak Evaluate işlevi string türündeki değişkenlerin Integer türüne dönüştürülmesine izin vermektedir.

Kayıt kontrol numarası tamsayı değerinde olacağından, Hesap değişkeninin veritipini Integer’a çevirebiliriz. Unutulmaması gereken nokta Integer tipindeki alanların maksimum 2,147,483,647 değerine sahip olabileceğidir. Eğer bu değer sizin için yetersiz görünüyorsa, bu durumda IntHesap değişkenini veritipini Decimal olarak ayarlayabilirsiniz. Bu durumda 10+E63’e kadarlık bir aralıkta değerler kullanabilirsiniz. 

Yukarıdaki kod satırında IntHesap bir integer değişkeni, Hesap ise code veritipindeki bir değişkeni göstermektedir. Bu şekilde code değişkenini, integer türündeki bir değişkene atayabiliriz.

IF (Hesap <> '') AND (Tutar <> 0) THEN 

Yukarıdaki bileşik sorgu, fonksiyonumuzun sadece ilgili parametreler sağlandığı zaman işlem yapmasını sağlamaktadır. Tutar ve Hesap alanlarının boş olması durumunda Kayıt Kontrol Numarası oluşturulmamaktadır.

 "Kayıt Kontrol No." := IntHesap * (Tutar * 100); 

Son olarak ilgili tebliğde belirtilen algoritmaya göre hesaplama yapıyoruz. Bu hesaplama sonucunda G/L Entry tablosundaki Kayıt Kontrol No. alanına ilgili değer atanmaktadır.

Öneri: 

Yaptıklarınızı kontrol etmek için genel günlüklerden bir nakil işlemi gerçekleştirebilir ve daha sonra G/L Entry tablosunu çalıştırarak, sonuçların doğruluğunu kontrol edebilirsiniz. Ya da General Ledger Entries tablosuna Kayıt Kontrol No. alanını ekleyerek kayıtlar arasında gezerken de bu alanın görüntülenmesini sağlayabilirsiniz.

 

Bir sonraki makalemizde kayıt kontrol numaralarını içeren raporun nasıl hazırlanabileceği konusunda bir çalışma yapacağız.

 Ufuk Aşçı