Stok cari

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
isahin474650
Üye
Mesajlar: 28
Kayıt: 22 Eki 2017 11:05

Stok cari

Mesaj gönderen isahin474650 »

Merhaba Arkadaşlar Projemi Tekrar paylaşmak istiyorum
Yardımlarınıza ihtiyacım var
1.Fatura bölümünde kdv hesapladım ama bunu dip toplama atamadım atıyorum ama her girdiğimde tutar değişiyor

2. Faturanın genel toplamını carihareket işlemesini istiyorum Fatura Tarihi, Belge No, Gibi

Bu kısmı öğrenirsem ilerliyecegime inanıyorum Lütfen yardım edin
Veri tabanı Firbird


Fatura silme işlemini çözdüm faturayı sildigimde o faturada girilen stokları siliyor onu veri tabanı kısmında yaptım o faturaya id ait olan stokları siliyor
Dosya ekleri
PKTS.rar
(209.88 KiB) 166 kere indirildi
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Re: Stok cari

Mesaj gönderen mussimsek »

Merhaba,

* Fatura işlemlerinde trigger işinizi çok kolaylaştırır.
* Cari harekette KDV alanı ekleyin. Stok hareketlerinde KDV'yi 2 haneye yuvarlayarak ekleyin ve bunları toplayın. Toplam her seferinde değişmez. Eğer harekette değişiklik yaparsanız, yine gidip KDV'yi güncelleyin.

Kolay gelsin.
isahin474650
Üye
Mesajlar: 28
Kayıt: 22 Eki 2017 11:05

Re: Stok cari

Mesaj gönderen isahin474650 »

Malesef hocam çözemedim yadimci olabilirmisiniz
isahin474650
Üye
Mesajlar: 28
Kayıt: 22 Eki 2017 11:05

Re: Stok cari

Mesaj gönderen isahin474650 »

Konu hakkında yardımlarınıza ihtiyacım var konu başında projem mevcut kaynak kodlar yazılı
isahin474650
Üye
Mesajlar: 28
Kayıt: 22 Eki 2017 11:05

Re: Stok cari

Mesaj gönderen isahin474650 »

Akdaslar yardımını bekliyorum projem ekli tam 5 gündür ne yaptıysam çözemedim
isahin474650
Üye
Mesajlar: 28
Kayıt: 22 Eki 2017 11:05

Re: Stok cari

Mesaj gönderen isahin474650 »

Yardım arkadaşlar fatura toplamını veremedim birde stok fatura başlığını cari harekete nasıl atarım bunla ilgi örnek bir yazılım varsa oda olur inceleme yapmam için
Dosya ekleri
PKTS.rar
(209.88 KiB) 130 kere indirildi
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Stok cari

Mesaj gönderen ertank »

Database dosyasının SQL veya FirebirdSQL 3 uyumlu halini paylaşabilir misiniz?
isahin474650
Üye
Mesajlar: 28
Kayıt: 22 Eki 2017 11:05

Re: Stok cari

Mesaj gönderen isahin474650 »

Data dosya içerisinde mevcut
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Stok cari

Mesaj gönderen ertank »

Dosya içerisinde mevcut olan FirebirSQL 2.5 veya daha önceki sürümlere ait bir database dosyası.
- Database oluşturmak için gerekli SQL komutlarını içeren bir bilgi yok.
- Database dosyasının taşınabilir (transportable) yedeği yok.
- Database dosyasının FirebirdSQL 3.0 uyumlu hali yok.

FirebirdSQL 3.0 uyumlu datbase dosyası veya database dosyasını, GBAK ile oluşturulmuş database yedeği veya database'i sıfırdan oluşturmak için gerekli SQL komutlarını paylaşabilir misiniz?
isahin474650
Üye
Mesajlar: 28
Kayıt: 22 Eki 2017 11:05

Re: Stok cari

Mesaj gönderen isahin474650 »

Ekte
Dosya ekleri
db.rar
(3.12 KiB) 128 kere indirildi
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Stok cari

Mesaj gönderen ertank »

TPL_CRHAREKET ve ilgili generator bilgileri dosya içinde mevcut değil. Bunun dışında unutulmuş tablo veya başka bir tanımda olabilir.

Mümkünse aşağıdaki komutu çalıştırıp oluşan dosyayı sıkıştırarak paylaşabilir misiniz?

Öncelikle DOS komut satırına girin. data.fdb olan dizine gelin. Aşağıdaki komutu çalıştırın.

Kod: Tümünü seç

gbak -t -user SYSDBA -password masterkey DATA.FDB data.fbk
gbak.exe dosyası search path içinde değil ise aşağıdaki gibi bir komut çalıştırmanız gerekebilir

Kod: Tümünü seç

C:\Program Files\Firebird\Firebird_2_5\bin\gbak -t -user SYSDBA -password masterkey DATA.FDB data.fbk
isahin474650
Üye
Mesajlar: 28
Kayıt: 22 Eki 2017 11:05

Re: Stok cari

Mesaj gönderen isahin474650 »

Malesef hocam dediğiniz işlemleri yapamadım fazla bir tablo yok içerisinde yeniden oluşturan bilir yada başka veri tabanına geçebiliriz
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Stok cari

Mesaj gönderen ertank »

TPL_CRHAREKET tablosu SQL komutunu paylaşabilir misiniz?
isahin474650
Üye
Mesajlar: 28
Kayıt: 22 Eki 2017 11:05

Re: Stok cari

Mesaj gönderen isahin474650 »

Ekledim hocam
Dosya ekleri
db2.rar
(5.5 KiB) 116 kere indirildi
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Stok cari

Mesaj gönderen ertank »

Merhaba,

Uygulamanızda yapısal hatalar mevcut. Bunları yeniden kurgulamadan ilerlemeniz çok güç. İlk etapta gözüme çarpanlar:
1- Kullandığınız formların tamamını uygulama ilk çalıştığı anda otomatik oluşturuyorsunuz. Bu sizin kontrolünüzü oldukça zorlaştırır. Kullanıcı kayıt giriş işlemi ortasında iken işlemi yarıda bırakıp başka ekrana geçmesi ve geri gelmesi halinde mevcut kontrolleriniz çok yetersiz kalacak ve sorunlar yaşayacaksınız.

Bunun yerine otomatik oluşturulan form sadece ana form olup kullanmak istediği ekranı seçen kullanıcıya ilgili ekranı hafızada oluşturup gösterir iseniz ve kapattığında hafızadan siler iseniz şu anda kullanılan kodu yorumladığım kadarıyla sorun yaşadığınız transaction, kayıt giriş modunda olma vb. konularını çok rahat bir şekilde yönetebilirsiniz.

2- Uygulama açılır açılmaz bütün tabloları açıyorsunuz. Database kullanımı açısından sadece ihtiyacınız olan veriye erişim sağlamanız uygulamanın performansını ve database sisteminin çok daha sağlıklı çalışmasını sağlar. Bu kullanım alışkanlığınız yüksek ihtimalle yukarıdaki kullanım alışkanlığınızdan kaynaklanıyor. İkisini birden değiştirmenizde fayda var.

3- Database bileşeni olarak Query yerine Table tercih ediyorsunuz. Aslında SQL tabanlı database sistemleri için kullanılan Table bileşenleri arka planda Query bileşeni kullanır. Esas farkı ilgili tablo içindeki tüm veriyi açıyor olmasıdır. İlerleyen zamanlarda stok hareket tablosu kayıt sayısı arttıkça tablonun açılma süresi bir o derece yavaşlayacaktır. Mümkün olan her yerde Query bileşeni kullanmanızda fayda var. Query bileşenleri de (içindeki SQL komutu bu noktada önemlidir) sizin Append(), Edit(), Post(), Delete() metodlarını kullanmanıza izin verirler.

4- Master/Detail yapıyı anlayamamış gözüküyorsunuz. Zira Satış Faturası ekranında tblStok bileşeni DataSet bağlantısı DM.StokHRBaslik olarak seçilmiş. Ancak içine girilen kayıtlar ekranın altındaki DBGrid kayıtları. Diğer bir deyiş ile detay kayıtları. Yani detay ve başlık kayıtları karışmış gibi.

Öncelikle master/detail yapı nedir? Nasıl kullanılır? İki tablo arasındaki ilişki nasıl kurulur üzerine çalışmanızı öneririm. İlginç bir şekilde Database içinde master/detail için gerekli alt yapı kurulu olduğu halde uygulama içinde bunu oturtamamışsınız gözüküyor.

5- Günümüz uygulamalarında kaydet demeden önce kaydedililecek bilgilerin neler olduğunu kullanıcılar görmek isterler. Sizin uygulamanızda hesaplamalar kaydet butonu tıklandıktan sonra veya detay bilgi girilir iken ikinci satır bilgi girilmek istenildiği sırasında yapılıyor. DBGrid.DataSource.OnDataChange() olayını kullanarak aşağıdaki gibi hesaplamayı anlık yaptırmanız mümkün olabilir. Örnek içinde değerlerin sıfır olması veya NULL olması halinde gerekli kontroller yoktur. Bunları eklemeniz gerekir.

Kod: Tümünü seç

procedure TFaturaSatis.dsDetayDataChange(Sender: TObject; Field: TField);
begin
  if Field.DataSet.State in [dsEdit, dsInsert] then
  begin
    tblStokTOPLAM_TUTAR.Value := tblStokMIKTAR.Value * tblStokBIRIM_FIYAT.Value;  // Burada Adet İle Birimi Çaptırdım
    tblStokISKTUTAR.Value     := tblStokTOPLAM_TUTAR.Value * (tblStokISKONTOYUZDESI.Value)/ 100 ;    // Burada Toplam Ne kadar İskonto Yaptığını Gösterdim
    tblStokTOPLAM_TUTAR.Value := tblStokTOPLAM_TUTAR.Value * (100 - tblStokISKONTOYUZDESI.Value)/ 100 ;  // Burada İskontodan Sonra Kalan Tutar Çıktı
    tblStokKDVTUTAR.Value     := tblStokTOPLAM_TUTAR.Value *(tblStokKDV_YUZDESI.Value / 100);      // Buda Ne Kadar Kdv Olduğunu Hesapladı
  end;
end;
6- Kullanım alışkanlığınız "TDataSet.Field.Value" kullanarak değer okumak ve kaydetmek şeklinde. Bunu ilgili veri türlerine göre aşağıdaki gibi değiştirmenizde büyük faydalar var. Sadece NULL kullanımı gereken yerlerde VALUE kullanarak atama yapmanızı tavsiye ederim.

Kod: Tümünü seç

procedure TFaturaSatis.dsDetayDataChange(Sender: TObject; Field: TField);
begin
  if Field.DataSet.State in [dsEdit, dsInsert] then
  begin
    tblStokTOPLAM_TUTAR.AsFloat := tblStokMIKTAR.AsFloat * tblStokBIRIM_FIYAT.AsFloat;  // Burada Adet İle Birimi Çaptırdım
    tblStokISKTUTAR.AsFloat     := tblStokTOPLAM_TUTAR.AsFloat * (tblStokISKONTOYUZDESI.AsFloat) / 100 ;    // Burada Toplam Ne kadar İskonto Yaptığını Gösterdim
    tblStokTOPLAM_TUTAR.AsFloat := tblStokTOPLAM_TUTAR.AsFloat * (100 - tblStokISKONTOYUZDESI.AsFloat)/ 100 ;  // Burada İskontodan Sonra Kalan Tutar Çıktı
    tblStokKDVTUTAR.AsFloat     := tblStokTOPLAM_TUTAR.AsFloat *(tblStokKDV_YUZDESI.AsFloat / 100);      // Buda Ne Kadar Kdv Olduğunu Hesapladı
  end;
end;

Bunlar dışında aşağıdaki konulara da dikkat etmelisiniz.
A- Ana form kapatılması kontrolü hatalı. Kapatmak *istemiyorum* seçildiği zaman uygulama kapatılıyor. Kodunuzu aşağıdaki şekilde düzeltebilirsiniz. Ekstra "C" değişkeni kullanmanıza gerek yok.

Kod: Tümünü seç

  if Application.MessageBox('Program kapatılacak! Emin misiniz?',' Uyarı..?',mb_yesno) = mrYes then
  begin
    Close();
  end;
B- Kullandığınız TJvMemoryData bileşeni Delphi 10.2 ile sorun çıkarıyor (Access Violation hatası veriyor). Bunun yerine farklı bir Memory Table bileşeni kullanmanızı öneririm. En çok bilinenlerden bir tanesi kbmMemoryTable bileşenidir.
C- Kullandığınız Delphi sürümü günümüzde çok eski. Mümkün ise en son sürümlerden bir tanesine geçmenizde büyük faydalar var. Yeni sürümlerin belli "edition" seçeneğinde bulunan FireDAC bileşenleri birçok farklı database sistemine erişebilme dışında kullanabileceğiniz bir MemoryTable bileşeni de içermektedir.
D- Kullandığınız database sistemi yerine ETA, LOGO gibi firmaların da kullandıkları SQL Server Express (ticari kullanımı ücretsiz) database sistemi kullanabilirsiniz. SQL Server dünya genelinde en çok kullanılan database sistemleri içinde 2-3 sıralardadır. (Kaynak: https://db-engines.com/en/ranking) Bunun dışında PostgreSQL, MySQL gibi günümüzde daha çok tercih edilen ve özellik olarak daha ileri database sistemlerine geçebilirsiniz. Eğer alışkanlık ve bilgi birikimi olarak FirebirdSQL sizin için daha rahat ise en son sürüm olan 3.0 sürüme geçmenizi şiddetle tavsiye ederim.

Yukarıdaki tavsiyeler ışığında alt yapısı çok daha sağlıklı bir uygulama geliştirebilirsiniz.

Uygulamanızda yapısal sorunlar olması sebebi ile esas sorunuza cevap vermek mümkün olamıyor. Zira esas sorunuzu düzeltmek için uygulama arka plan kodlarını ciddi derecede değiştirmek gerekiyor ki bunu yapmak sizin göreviniz.

Son tavsiye olarak; sorularınızı mümkün olduğunca spesifik olarak sormanızda fayda var. Böylece bütün projeyi paylaşmadan (ki birçok kişi için bütün bir proje incelemek kavramı dahi sorunuza detaylı şekilde bakmasına engel olur) sadece ilgili bölümün kodunu paylaşarak ve her soru sorduğunuzda sorunun ne olduğunu, yaptığınız denemeleri, aldığınız hata mesajlarını, kullandığınız Delphi sürümü vb. bilgileri ekleyerek sormanızı öneririm.
Cevapla