borçlular listesinde aynı kişiyi ikinci kez göstermesin

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Serim
Üye
Mesajlar: 194
Kayıt: 08 Ara 2004 03:32
Konum: Konya

borçlular listesinde aynı kişiyi ikinci kez göstermesin

Mesaj gönderen Serim »

mrb arkadaşlar,
sorumu kısaca şöyle anlatıyım:
bir müşteriye 3 ayrı iş yaptık ve bu 3 iştende kalan borçları var.bu kalan borçlarını toplattırıp müşterinin toplam borcunu buldum.bu toplam borçtan bi miktarını ödedikten sonra toplam kalan borcunuda hesaplattım.
bu işlemleri datasetin afterinsert,beforeinsert,datachange vs.. hangi eventta denediysemde olmadı yada hata verdi ve en sonunda kaydet butonunun onclick olayına yazdığım zaman kodları istediğim işlemi yaptı.kodlar aşağıda:

Kod: Tümünü seç

procedure Tisform.kaydetbtnClick(Sender: TObject);
begin
      dm.ISDATA.Post;
      dm.ISDATA.Edit;
      dm.sorgu2.DataSource:=dm.MUSDS;
      dm.sorgu2.Close;
      dm.sorgu2.SQL.Clear;
      dm.sorgu2.SQL.Text:='Select sum(TOPLAM_ODENEN_PARA) from YAPILAN_IS where IS_NO=:MUSTERI_PK';
      dm.sorgu2.Open;
      dm.sorgu.DataSource:=dm.MUSDS;
      dm.sorgu.Close;
      dm.sorgu.SQL.Clear;
      dm.sorgu.SQL.Text:='Select sum(KALAN_PARA) from YAPILAN_IS where IS_NO=:MUSTERI_PK';
      dm.sorgu.Open;
      If dm.sorgu2.Fields[0].asfloat<>0 then
          dm.ISDATA.FieldByName('TOPLAM_KALAN_PARA').AsFloat:=dm.sorgu.Fields[0].asfloat-dm.sorgu2.Fields[0].asfloat;
      else
      If dm.sorgu2.Fields[0].asfloat=0 then
          dm.ISDATA.FieldByName('TOPLAM_KALAN_PARA').AsFloat:=dm.sorgu.Fields[0].asfloat;
      dm.ISDATA.Post;
end;
bu şekildeyken istediğim işlemi yapıyor."sorgu" da toplam borcunu bulduruyorum, "sorgu2" de toplam ödediği parayı bulduruyorum, toplam kalan parayı hesaplatırkende toplam borctan toplam ödenen parayı çıkartıyorum. buraya kadar güzel. ama bu hesapları yapması için önce dm.ISDATA.Post; kodunu yazmam gerekiyor,sonra o hesaplamalar için tekrar edit moduna alıp sonra yine post diyorum.Başka bi formda borçlu müşterileri listeleteceğim zamanda aynı kişiyi iki defa gösteriyor.ama birinde kalan_borcu alanı, ödeme yapmadan önceki miktarsa ikincisi ödeme yaptıktan sonraki kalan miktar. yani aynı kişiyi iki defa borçlandırmış oluyorum.
şimdi ilk sorum şu:bu hesapları kaydet butonun içinde yazmazsam nerde yazacam?(ilk önce tabloya post etmem gerekiyor ama:(yoksa toplam_kalan_para alanına direk 0 atıyor )
ikinci sorum ise hesaplamaları düzgün yaptığı için kodlar kaydet butonunun içinde dursun ama borçluları listeletirken nasıl bi kod yazmalıyımki aynı kişiyi iki kez göstermesin ve en son borcu ne kadarsa onu göstersin?
benim şuanki borçluları listeletmede kullandığım kod aşağıda:

Kod: Tümünü seç

    dm.borcsorgu.DataSource:=dm.MUSDS;
    dm.borcsorgu.Close;
    dm.borcsorgu.SQL.Clear;
    dm.borcsorgu.SQL.Text:='select TOPLAM_KALAN_PARA,ISYERI_ADI, YETKILI_ADI, YETKILI_SOYADI,TEL1,TEL2,GSM,PARA_BIRIMI from MUSTERI,YAPILAN_IS where TOPLAM_KALAN_PARA<>0 and IS_NO=MUSTERI_PK';
    dm.borcsorgu.Open;
biraz karışık gibi ama umarım anlatabilmişimdir.kolay gelsin..
Bilginin temelini sağlam at depremde zarar görmesin
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Anlamak çok zor baya bir karışık daha farklı bir açıklama yöntemin olamazmı acaba.Belkide kimse anlayamadığı için sornu cevap yazamadı.Koılay gelsin
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
spoke25
Üye
Mesajlar: 434
Kayıt: 16 May 2005 04:06
Konum: Bolu

Mesaj gönderen spoke25 »

ikincii sorunuun cevabımıı bilmem ama egerr tek Tek tekrarlıı kayıtları bir tane olarak listelemk istiyorsan Slect ifadesinden sonra DISTINC Komutunuu kullanman lazım.. :idea:

İkincii olarakk bence mantık hatan var Nedenmii Sorunun mantık Cari fatura mantığından farklı değil. Bu yuzden tablo yapılarını baştan bii gozden gecir..

Yanii Duz mantıkla soyliyeyimm sana..

yapılan iş
yapılan iş hareket tablon yapılan işlerin detaiyı olacakk odeme detayı..

odemelerr detay tablodan toplanım borc ve kalan kısmına kayıt edilecek.
cari tablon ve cari tablonun hareketlerii olacak

carii hareket tablonda yapılan tablondan alacağı kalan ve odeme miktarlarını cari tablondaki kalan veya borç kısmına yazacak..

Kolay gelsin.
Başlayan Herşey Birgün Bitmek Zorundadır.
Kullanıcı avatarı
AliErdem
Üye
Mesajlar: 157
Kayıt: 16 Nis 2006 02:57

Mesaj gönderen AliErdem »

selam arkadaşım aslında sorunun hepsini bir anda değilde tek tek yazsan çöze çöze gidersiniz hem daha kolay olur basamak basamak ;)

kolay gelsin
Kullanıcı avatarı
Serim
Üye
Mesajlar: 194
Kayıt: 08 Ara 2004 03:32
Konum: Konya

Mesaj gönderen Serim »

selam,
sorumun karışık olduğunun farkındaydım, ilginize tşkler.
şu şekilde bi sorguyla sorunumu hallettim:

Kod: Tümünü seç

    dm.borcsorgu.DataSource:=dm.MUSDS;
    dm.borcsorgu.Close;
    dm.borcsorgu.SQL.Clear;
    dm.borcsorgu.SQL.add('Select sum(y.kalan_para-y.toplam_odenen_para) as kalanborc,m.ISYERI_ADI,m.YETKILI_ADI,m.YETKILI_SOYADI,m.TEL1,m.TEL2,m.GSM,y.PARA_BIRIMI,y.TOP_BORC_ODENECEK_TAR from MUSTERI m,YAPILAN_IS y');
    dm.borcsorgu.SQL.Add('where TOPLAM_KALAN_PARA<>0 and y.IS_NO=m.MUSTERI_PK group by m.ISYERI_ADI,m.YETKILI_ADI,m.YETKILI_SOYADI,m.TEL1,m.TEL2,m.GSM,y.PARA_BIRIMI,y.TOP_BORC_ODENECEK_TAR ');
    dm.borcsorgu.Open;
artık listelerken müşterinin toplam borcunu yalnız bir kez gösteriyo.
kolay gelsin..
Bilginin temelini sağlam at depremde zarar görmesin
Cevapla