Kodbank İndir

! CODEBANK 2012 !

İNDİRMEK&DETAYLI BİLGİ ALMAK İÇİN BURAYI TIKLAYINIZ.

ÖNEMLİ AÇIKLAMA: MUTLAKA OKUYUNUZ!

Gönderen Konu: ADOQuery ile Sadece Borcu Olan Müşteriler  (Okunma sayısı 888 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı ramcet

  • Yeni Üye
  • *
  • İleti: 10
  • Rep: +0/-0
ADOQuery ile Sadece Borcu Olan Müşteriler
« : 22 Temmuz 2010 12:57:00 »
Arkadaşlar, Access'de detay tabloların dışında üç adet önemli tablom var. musteri, odemeler, isler tabloları. ben rave de sadece borcu olan müşterileri vermek için bunu tek sql'de bitirmek için tırmalıyorum.

Detaylara geçecek olursak, musteri tablosunda müşterilerin bilgileri var. odemeler de yapılan ödemeler. isler ise biraz karışık.

isler tablosunda alış, alış iade, satış, satış iade değerlerini alabilecek bir bölüm var. ben buradan satış olanların sip_tutar ve kdv_tutar bölümlerini borç olarak alıp satış iade olanlar ile de odemeleri toplayıp borçlu olanları çıkartmak istiyorum.

tek sql de mümkün müdür? ve eğer mümkün ise nasıl olur?

Çevrimdışı maydin60

  • Kıdemli Üye
  • *****
  • İleti: 76
  • Rep: +0/-0
  • Cinsiyet: Bay
Ynt: ADOQuery ile Sadece Borcu Olan Müşteriler
« Yanıtla #1 : 22 Temmuz 2010 14:03:55 »
işlemi sadece "ISLER" tablosun damı yapacaksınız.
yoksa
diğer tablolarla  ilişki olup, joın işleminden sonramı borç ları çıkarmak istiyorsunuz
Nokta Kadar Menfaat için Virgül Kadar Eğilme...

Çevrimdışı barutali

  • Administrator
  • *****
  • İleti: 2.117
  • Rep: +51/-0
  • Cinsiyet: Bay
  • Falan filan ...
Ynt: ADOQuery ile Sadece Borcu Olan Müşteriler
« Yanıtla #2 : 22 Temmuz 2010 14:17:09 »
SQL de JOIN komutlarını araştırınız..
Bkz :
Inner Join
Outer Join
Cross Join
Left Join
Right Join
vs vs ..


aşağıdaki linkten ulaşabilirsiniz..
http://www.sql-tutorial.net/SQL-JOIN.asp



Amatör Küme Programcı

Çevrimdışı ramcet

  • Yeni Üye
  • *
  • İleti: 10
  • Rep: +0/-0
Ynt: ADOQuery ile Sadece Borcu Olan Müşteriler
« Yanıtla #3 : 22 Temmuz 2010 14:24:59 »
müşteri tablosunda, işler tablosunda ve ödemeler tablosunda musteri_kodu ortak olarak var. bağlantıyı buradan kurmayı umuyorum. ben borcu sıfır olan müşterileri adoquery e aktarıp rvdatasetconnect ile rave'de rapor oluşturacağım.

@barutali
kaynak için teşekkürler.

Çevrimdışı maydin60

  • Kıdemli Üye
  • *****
  • İleti: 76
  • Rep: +0/-0
  • Cinsiyet: Bay
Ynt: ADOQuery ile Sadece Borcu Olan Müşteriler
« Yanıtla #4 : 22 Temmuz 2010 20:38:06 »
SELECT
     A.CARI_KODU,
     A.CARI_ISMI,
     B.ISLEM_TARIHI,
     B.BAKIYE,
     C.ISTENILEN_ALAN
 FROM MUSTERI A
LEFT OUTER JOIN ODEME B
ON
B.CARI_KODU =A.CARI_KODU

LEFT OUTER JOIN ISLER C
ON
C.CARI_KODU = B.CARI_KODU
WHERE
B.BAKIYE = 0
OR
B.BAKIYE IS NULL
// NVL(B.BAKIYE,0) =0 BU ORACLE KULLANILIYOR NULL DEGERLERINI YERINE 0(SIFIR) ATA ; 0(SIFIR) A EŞİT OLANLARI GETİR DEMEK
AMA DB IN SENIN ACCSESS NVL KOMUTU  ÇALIŞMAZ BUYUK IHTIMALLLE
AMA LÜTFEN BİRAZ DAHA GÜÇLÜ OLAN DATABASELERE GEÇİŞ YAPINN...
ÇOK SIKINTISINI YASARSINIZ
gibi SQL kodu işini gorebilir
« Son Düzenleme: 22 Temmuz 2010 21:00:09 by maydin60 »
Nokta Kadar Menfaat için Virgül Kadar Eğilme...

Çevrimdışı ramcet

  • Yeni Üye
  • *
  • İleti: 10
  • Rep: +0/-0
Ynt: ADOQuery ile Sadece Borcu Olan Müşteriler
« Yanıtla #5 : 23 Temmuz 2010 08:31:44 »
hocam iyi güzel yazmışsın da bakiye diye bir şey yok ki tabloda. ben bakiyeyi hesaplattırma derdindeyim. yani istiyorum ki, odemeler tablosunda odeme toplamını alsın, isler tablosundan borç toplamını ve iadeler toplamını alsın bu üç değerden bakiyeyi hesaplasın ve bakiyesi sıfır olmnayanları bulsun.

Çevrimdışı ramcet

  • Yeni Üye
  • *
  • İleti: 10
  • Rep: +0/-0
Ynt: ADOQuery ile Sadece Borcu Olan Müşteriler
« Yanıtla #6 : 23 Temmuz 2010 16:19:56 »
ADOQuery1.SQL.Add('select musteri_kodu, (SUM(O.odeme_tutar) as O.MUSTODEMELER), ');
ADOQuery1.SQL.Add('(SUM(I.sip_tutar2) as I.BORC where I.islem_turu = "Satış"), ');
ADOQuery1.SQL.Add('(SUM(I.sip_tutar2) as I.IADE where I.islem_turu = "Satış İade"), ');
ADOQuery1.SQL.Add('from musteri M, odemeler O, isler I where O.MUSTODEMELER+I.IADE-I.BORC<>0 group by musteri_kodu');

bunu deniyorum ve hata alıyorum. buradan bir çıkış bulabilir miyim acaba?

Çevrimdışı ramcet

  • Yeni Üye
  • *
  • İleti: 10
  • Rep: +0/-0
Ynt: ADOQuery ile Sadece Borcu Olan Müşteriler
« Yanıtla #7 : 26 Temmuz 2010 09:06:17 »
arkadaşlar bahsettiğim şey mümkün değil mi?

Çevrimdışı maydin60

  • Kıdemli Üye
  • *****
  • İleti: 76
  • Rep: +0/-0
  • Cinsiyet: Bay
Ynt: ADOQuery ile Sadece Borcu Olan Müşteriler
« Yanıtla #8 : 27 Temmuz 2010 10:59:23 »
SELECT
     A.CARI_KODU,
     A.CARI_ISMI,
     SUM(B.ODEME_TUTAR) AS ALACAK1,
     SUM (C.SIPARI_TUTAR)  AS BORC1,
     SUM(C.IADE_TUTAR) AS ALACAK2,
     (SUM(B.ODEME_TUTAR) +SUM(C.IADE_TUTAR)-
     SUM (C.SIPARI_TUTAR) ) AS BAKIYE
 FROM MUSTERI A
LEFT OUTER JOIN ODEME B
ON
B.CARI_KODU =A.CARI_KODU

LEFT OUTER JOIN ISLER C
ON
C.CARI_KODU = B.CARI_KODU
WHERE
B.BAKIYE > 0
OR
B.BAKIYE IS NOT NULL
group by A.CARI_KODU,
     A.CARI_ISMI

boyle bir şey işini gorur
« Son Düzenleme: 28 Temmuz 2010 13:08:05 by maydin60 »
Nokta Kadar Menfaat için Virgül Kadar Eğilme...

Çevrimdışı ramcet

  • Yeni Üye
  • *
  • İleti: 10
  • Rep: +0/-0
Ynt: ADOQuery ile Sadece Borcu Olan Müşteriler
« Yanıtla #9 : 27 Temmuz 2010 12:33:27 »
abi Allah razı olsun iyi güzel yazıyorsun da hala b.bakiye diye bir şeyden bahsediyorsun.

1 - iade bölümü diye bir şey yok, onun için

LEFT OUTER JOIN ISLER D
ON
D.CARI_KODU = B.CARI_KODU and D.islem_turu = 'Satış İade'

şeklinde bir kod yazıp orada SUM (D.sip_tutar) as iade eklentisini yapacağım.

2 - (SUM(B.ODEME_TUTAR) AS ALACAK1+SUM(C.IADE_TUTAR) AS ALACAK2)-
     SUM (C.SIPARI_TUTAR)  AS BORC1

bölümünü -şairin burada çok karmaşık şeylerden bahsetmiş-  SUM(ODETOP+IADE-BORC) as BAKIYE

şeklinde düzeltip en altta B.BAKIYE değil BAKIYE yazacağım. inşaallah olur.

Çevrimdışı maydin60

  • Kıdemli Üye
  • *****
  • İleti: 76
  • Rep: +0/-0
  • Cinsiyet: Bay
Ynt: ADOQuery ile Sadece Borcu Olan Müşteriler
« Yanıtla #10 : 28 Temmuz 2010 09:02:53 »
SUM(ODETOP+IADE-BORC) as BAKIYE şeklinde ddediğin gibi olmaz..

JOIN işlemine tabi tuttugun tabloların takma adları ile birlikte ayrı ayrı toplama ve çıkarma işlemi yapman gerekiyor
ben yukarıdaki satırı duzelttımm.
Nokta Kadar Menfaat için Virgül Kadar Eğilme...

Çevrimdışı maydin60

  • Kıdemli Üye
  • *****
  • İleti: 76
  • Rep: +0/-0
  • Cinsiyet: Bay
Ynt: ADOQuery ile Sadece Borcu Olan Müşteriler
« Yanıtla #11 : 28 Temmuz 2010 13:24:32 »
"LEFT OUTER JOIN ISLER D
ON
D.CARI_KODU = B.CARI_KODU and D.islem_turu = 'Satış İade'

şeklinde bir kod yazıp orada SUM (D.sip_tutar) as iade eklentisini yapacağım"

böye yaparsan ISLER tablosunda "Satış iade" olanların tutarını bulursun
Ama anladıgım kadarıyla ISLER tablosunda Sipariş edilen tutarları   Yani "Sip_Tutar" alanınındaki degerleri hiçe saymış olursunn
yanlış rakam verir sana
onun için;


SELECT
     A.CARI_KODU,
     A.CARI_ISMI,
     SUM(B.ODEME_TUTAR) AS ALACAK1,
     SUM (D.SIPARIS_TUTAR)  AS BORC1,
     SUM(C.SATIS_IADE) AS ALACAK2,
     (SUM(B.ODEME_TUTAR) +SUM(C.SATIS_IADE)-
     SUM (D.SIPARIS_TUTAR) ) AS BAKIYE_X
 FROM MUSTERI A
LEFT OUTER JOIN ODEME B
ON
B.CARI_KODU =A.CARI_KODU

LEFT OUTER JOIN ISLER C
ON
C.CARI_KODU = A.CARI_KODU
AND
 C.islem_turu = 'Satış İade'

LEFT OUTER JOIN ISLER D
ON
D.CARI_KODU = A.CARI_KODU
AND
 D.islem_turu = 'Sipariş Satış'
WHERE
A.BAKIYE > 0
OR
A.BAKIYE IS NOT NULL
group by A.CARI_KODU,
               A.CARI_ISMI

MUSTERI tablosuna Cari hareketleri işlerken (Satış,iade,Tahsilat vs)
Ana Tablona Yani MUSTERI tablosuna BORC, ALACAK , BAKIYE bilgilerinin son güncel halini İnsert etmen gerekir ki
Cariye ait borç bakiye bilgilerini çok rahat ulaşabilesin
« Son Düzenleme: 28 Temmuz 2010 18:06:53 by maydin60 »
Nokta Kadar Menfaat için Virgül Kadar Eğilme...

Çevrimdışı ramcet

  • Yeni Üye
  • *
  • İleti: 10
  • Rep: +0/-0
Ynt: ADOQuery ile Sadece Borcu Olan Müşteriler
« Yanıtla #12 : 28 Temmuz 2010 16:55:27 »
teşekkür ederim, alakanızdan ötürü. başka bir çözüme odaklandım ama deneyeceğim.

lakin kafama takılan bir nokta var bir toplama sonucu olarak elde ettiğimiz BAKIYE yi neden A.BAKIYE olarak yazıyorsun. bu neticeyi ana tablomuza ait olarak mı görüyor yoksa elde edeceğimiz yeni tablonun mu?

Çevrimdışı maydin60

  • Kıdemli Üye
  • *****
  • İleti: 76
  • Rep: +0/-0
  • Cinsiyet: Bay
Ynt: ADOQuery ile Sadece Borcu Olan Müşteriler
« Yanıtla #13 : 28 Temmuz 2010 18:08:08 »
A. BAKIYE kısmı Ana tablodan gelen kısım(MUSTERI Tablosu)
Diğer tablolardan toplayıp  çıkardıgım sonuc ise
A.BAKIYE_X diye DEĞİŞTİREBİLİRİZ..
dediğiniz doğru

 (SUM(B.ODEME_TUTAR) +SUM(C.SATIS_IADE)-
     SUM (D.SIPARIS_TUTAR) ) AS BAKIYE
kısmı yanlış yazıldı..

yukarıda düzelttimmm.Aslında cok karmaşık degıl,
Ama Programın yapısı Ne kadar moduler olursa ..
verileri çekmen o kadar kolay olur...

Mesela
cari hareket kısmı 3-4 ayrı tabloyu ılgılendıren bır kısım dır
bu işlemleri datamodul de yapınız bir procedure olarak

Örnek:
Procedure TDatamodule1.CariHareketKaydet(Qu:TQuery);
var
...
...

begin

//Cari bilgi oku
// Cari Kodunu Cari bilgileri formundan cagır
Cari hareket yapılacak işlem formunu cagır
1)Sipariş girişi(tek tek malz girişi birim fiyatları ile birlikte.)
2)satış İade girişi
3)Para Tahsilatı
4)çek girişi
5)Alış(faturalı veya faturasız  malzeme girişi)
6) alış iade girişi
Para tahsilatı veya çek girişi olursa
MUSTERI_TAHSILAT tablosuna kaydet
sipariş bilgileri
MUSTERI_HAREKET tablosuna kaydet...
Malzemeleri işlemen için STOKBILGILERI tablosunu çagır
malzemeleri (yanı senın tabirinle sipariş girişi) işle
ve
 MUSTERI tablosuna diğer yansımaları kaydet..(BAKIYE, ALACAK, BORC)








end;

 

İnş. kafanı karıştırmamaışımdır...
Kolay gelsın
« Son Düzenleme: 28 Temmuz 2010 18:29:15 by maydin60 »
Nokta Kadar Menfaat için Virgül Kadar Eğilme...