durumumu da anlatıcam.
şimdi veritabanına ürün fiyatlarını ya KDV dahil ya da KDV hariç olarak kaydettirip. yanına KDV oranı fieldı açıcam. (bu kısımdan başlıyor olabilir hata)
şimdi;
------
kullanıcı KDV dahil fiyatı girip, ben veritabanında sadece KDV hariç kısmını kaydedersem;
100TL yazıyor, DB'ye bunun yansıması 84,75TL olarak oluyor. (100/1.18)
Daha sonra ben bunu listelemelerde KDV dahil olarak göstermeyi denediğimde 100,01TL olarak gösteriyor. (100,005'i 100,01'e yuvarlıyor)
Yani kayma oluyor.
----
Bunun tam tersini yaparsam, bu sefer KDV hariç tutar tam eşleşmeyebiliyor.
aklımdaki çözümlerden;
1. decimal olarak virgülden sonra 4 basamak getirtmek. (ama yine de çok küsuratlı tutarlarda sorun olur kesin)
2. db'deki kaydım kdv'siz fiyat - kdv_orani olarak yer alıyor. bunların yanında kdv_tutari diye sütun açmak. (böylelikle toplam tutarı her zaman doğru getirtebilirim)
ama bunların hepsinde küsuratlarla ilgili soru işaretleri kalıyor kafamda. kdv deki 1 kuruşluk kaymalar arıza yaşatmasın istiyorum.
ne yapmak gerekiyor, ne önerirsiniz?
1. Bence kullanıcı ürünleri KDV hariç olarak ekleyecek daha sonra KDV'sini de seçip, KDV dahil olarak göreceği şekilde düzenlenmeli. KDV oranları değişebilir, o zaman kullanıcı sadece bir KDV oranı değişimi ile benzer tüm ürünleri değiştirir. Tersi durumunda KDVsiz fiyatları teker teker yeniden girmek zorunda kalır.
2. Ondalık olayını da, aynen hesap makinesinde çarpma yapar gibi, gördüğün sonucun son iki hanesini yukarı yuvarlayarak yapabilirsin. Excel vb. için bu "göründüğü gibi hesapla" diyerek yapılıyor. Programlama dilinde karşılığı nedir bilemiyorum. Ama döviz bazlı bazı sektörler proforma için son dört hane falan yapıyorlar. Onu bilemem.
kdv hariç olanlarda sıkıntı olmaması lazım. genelde dahil girilenlerde kuruş farkı oluyor. biz logo programını kullanıyoruz.logo'da faturanın içinde "kd düzenleme" diye bir seçenek var. oradan kdv kuruş farkını düzeltebiliyoruz. genel toplam değişmiyor ama farkı matrahtan düşüyor ya da ilave ediyor.
bunun galiba çözümü yok. mali müşavirlerin kullandığı en popüler programlardan biri olan zirve müşavir isimli programımda denedim şimdi.
100 lira yazıp kdv dahil içinden ayır diyince 84,75 + 15,25 = 100 yapıyor. 84,75 kdv hariç diyince 84,75 + 15,26 = 100,01 yapıyor. 84,74 kdv hariç diyince 84,74 + 15,25 = 99,99 yapıyor. kdv hariç yaparak 100 lirayı tutturamıyorum. programa ikiden fazla ondalık girmeye de izin vermiyor.
Bu biraz kullanılan programla alakalı.
Kurumda kullanılan program SAP tabanlı ve virgülden sonra iki rakamla çalışıyor ama gelen faturalarda virgülden sonra üç rakamla çalışıyor dolayısıyla kuruşluk farklar oluşuyor. Daha sonra elle düzeltme seçeneği ile düzeltiyoruz.
bu muhasebe programlarında bile durum buysa, ayvayı yedik gerçekten :)
floating point sayilarla para islemleri yapma kesinlikle. integer kullanacaksin.
derdiniz hep yukarı yuvarlamasıysa rounddown yaparsınız aşağıya yuvarlar
@robokot,
etkisini ölçmedim ama;
100,00 yerine; 10000 kaydettim diyelim.
kdv'siz halini bulduğumda:
10000/1.18 = 8474,576 çıkacak sonuç.
bu noktaya geldiğimde bunu db ye yuvarlayarak atarsak 8475 çıkacak, yuvarlamadan atarsam 8474.
8474 olarak atarsam, bunun kdv'li halini gösterirken; 9999 olarak gözükecek (son iki basamağa virgül atmam hiçbir şey değiştirmeyecek 99,99)
8475 olarak alırsam (yani site geneli yukarı yuvarlama kullanırsam); 10000,5 olarak alacak. bunu da yukarı yuvarlayarak göstereceğimi düşünürsek yine 100,01 elde edeceğim.
yani integer tutmam halinde nasıl bir standard elde etmem gerektiği konusunda tam doğru cevabı bulamadım şuan.
hesaplama esnasında yukarı mı yuvarlayacağım, yoksa virgülden sonrasını hiç görmeyecek miyim?
hangi standardı kabul edersem edeyim yine doğru cevap alamıyorum.
Brut fiyat, net fiyat, kdv oranı, kdv dahil hariç gibi değişkenler ile hesaplama yaparak sonuca ulaşabilirsin.
Bir erp firmasında şu şekilde bir yapı var.
1 - Fiyat bilgisinde kdv dahil mi değil mi bilgisi tutuluyor. (4 haneye kadar detaylı tutulabiliyor.) Zaten genelde satış fiyatları kdv dahil, alış fiyatları kdv hariç giriliyor.
2 - Ürün kartında kdv oranı tutuluyor.
3 - kdv hesapları da fiş girişinde hesaplanıyor.
4 - 84,75 sorunu bazen alış fişlerinde manuel fiyat girişlerinde problem oluyor. Onlarda da alış tutarı vergi dahil olarak girdirilip matrah hesaplanıp daha sonra bu tutardan kdv elde ediliyor. Yani yuvarlama farkı yediriliyor. (Yani kişinin elinde bir fatura var ve sisteme girmesi gerek. 100 TL tutar 84,75 fiyat ve 15,25 kdv. direkt 84,75 fiyat girdiğinde 100,01 oluyor ancak firma diyor ki böyle fark olduysa vergi dahil tutarı 100 gir, program sana ordan 84,75 ve 15,25'i bulsun.)