oncalcfields hesaplamasını durdurma
-
- Üye
- Mesajlar: 386
- Kayıt: 02 Tem 2007 09:43
oncalcfields hesaplamasını durdurma
değerli arkadaşlar;
master detail tablolarım var. detail tabloda bakiye sütunu oluşturarak borc alacak bakiye olayını gerçekleştiriyorum. oncalcfields le bakiyeyi hesaplıyorum. ancak detail tabloda filitreleme yapınca bakiyedeki hesaplamalar bozuluyor. filitreleme yapınca oncalcfileds detail tablonun tamamı için hesaplamayi gerçekleştiriyor o zaman bakiye sonuçları bozuluyor.
oncalcfileds'i kodla durdurmak mümkünmü, yada filitreleme yapınca bakiyenin bozulmamasını nasıl sağlayabilirim. kayıtları filitrelemenin (filter)'den başka bir yöntemi varmı.
kolay gelsin,
master detail tablolarım var. detail tabloda bakiye sütunu oluşturarak borc alacak bakiye olayını gerçekleştiriyorum. oncalcfields le bakiyeyi hesaplıyorum. ancak detail tabloda filitreleme yapınca bakiyedeki hesaplamalar bozuluyor. filitreleme yapınca oncalcfileds detail tablonun tamamı için hesaplamayi gerçekleştiriyor o zaman bakiye sonuçları bozuluyor.
oncalcfileds'i kodla durdurmak mümkünmü, yada filitreleme yapınca bakiyenin bozulmamasını nasıl sağlayabilirim. kayıtları filitrelemenin (filter)'den başka bir yöntemi varmı.
kolay gelsin,
İsteyen, yapabildiğinden daha fazlasını yapar.
Re: oncalcfields hesaplamasını durdurma
s.a.
oncalc fields olayında tablonun filtrelenmiş olup olmadığını kontrol edebilirsiniz.
yada tablonun autocalcfields propertysini false yaparsın.
kolay gelsin.
oncalc fields olayında tablonun filtrelenmiş olup olmadığını kontrol edebilirsiniz.
yada tablonun autocalcfields propertysini false yaparsın.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
-
- Üye
- Mesajlar: 386
- Kayıt: 02 Tem 2007 09:43
Re: oncalcfields hesaplamasını durdurma
autocalcfields'in dediğiniz olayını uyguladım. false yapınca hesaplamayı iptal ediyor hesaplama yapmıyor bakiye sutunu boş çıkıyor. Tam olarak yapmayı istediğim şey şu filitreleme yapınca autocalcfields'in hesaplamayı yeniden yapmaması bakiye sütunundaki değerlerin ilk halinde değişmeden kalması. Hesaplama filitrelenen alana göre yapıldığı için sonuçlar hatalı çıkıyor. filitreleme tarihe göre yapılıyor.
İsteyen, yapabildiğinden daha fazlasını yapar.
Re: oncalcfields hesaplamasını durdurma
s.a.
autocalc i false yapınca değerleri manuel atmanız lazımdı yanlış hatırlamıyorsam.
autocalc i false yapınca değerleri manuel atmanız lazımdı yanlış hatırlamıyorsam.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
-
- Üye
- Mesajlar: 386
- Kayıt: 02 Tem 2007 09:43
Re: oncalcfields hesaplamasını durdurma
tabloda bakiye alanı oluşturup bakiyeyi hesapladıktan sonra filitreleme yaptığım zaman her hangi bir hesap hatası oluşmuyordu ama işlem çok yavaş oluyordu.
manuel olayının tam çözemedim. filitrelemeden sonra bakiyeyi tek tek elle mi yazacağız? yoksa AutoCalcFields:=true mi yapacağız true yapınca hesaplamayı tekrar yapmıyor.
manuel olayının tam çözemedim. filitrelemeden sonra bakiyeyi tek tek elle mi yazacağız? yoksa AutoCalcFields:=true mi yapacağız true yapınca hesaplamayı tekrar yapmıyor.
İsteyen, yapabildiğinden daha fazlasını yapar.
Re: oncalcfields hesaplamasını durdurma
s.a.
true yaptıktan sonra tabloyu refresh yapman lazım. hesaplamayı yeniden yapması için.
ama filitreleme yaptığın için gene hesaplamayı yanlış yapabilir.
bu arada hesaplama işini nasıl yaptın. normalde filitrelemeden kaynaklı bir problem olmaması lazım.
kolay gelsin.
true yaptıktan sonra tabloyu refresh yapman lazım. hesaplamayı yeniden yapması için.
ama filitreleme yaptığın için gene hesaplamayı yanlış yapabilir.
bu arada hesaplama işini nasıl yaptın. normalde filitrelemeden kaynaklı bir problem olmaması lazım.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
-
- Üye
- Mesajlar: 386
- Kayıt: 02 Tem 2007 09:43
Re: oncalcfields hesaplamasını durdurma
oncalcfields'e aşağıdaki kodu yazıyorum.
IF DM1.TBLTUMKAY.RecNo=1 THEN B:=0;
B:=B+DM1.TBLTUMKAYTUBORC.Value-DM1.TBLTUMKAYTUALACAK.Value;
DM1.TBLTUMKAYBAKIYE.value:=B;
birde değişkeni de tanımlıyorum.
var
B : CURRENCY;
implementation
filitrelemeyi de tarih alanına göre yapıyorum filitreleme için kullandığım komut;
dm1.TBLTUMKAY.Filter:='TUTARIH>='+#39+cxdateEDIT1.text+#39;
dm1.TBLTUMKAY.Filtered:=True;
IF DM1.TBLTUMKAY.RecNo=1 THEN B:=0;
B:=B+DM1.TBLTUMKAYTUBORC.Value-DM1.TBLTUMKAYTUALACAK.Value;
DM1.TBLTUMKAYBAKIYE.value:=B;
birde değişkeni de tanımlıyorum.
var
B : CURRENCY;
implementation
filitrelemeyi de tarih alanına göre yapıyorum filitreleme için kullandığım komut;
dm1.TBLTUMKAY.Filter:='TUTARIH>='+#39+cxdateEDIT1.text+#39;
dm1.TBLTUMKAY.Filtered:=True;
İsteyen, yapabildiğinden daha fazlasını yapar.
Re: oncalcfields hesaplamasını durdurma
s.a.
filitrelemeye yapınca calculatedin sapıtması normal çünkü filitrelenen kayıtlar için oncalcfields olayı çalışmayacak dolayısı ile de toplam hatalı çıkacaktır.
birde doğru hesaplamanın sizin istediğniz sonucu vereceğinden eminmisiniz.
zira arada gösterilmeyen kayıtlar olmasına rağmen bakiye değişecek buda kullanıcıda ister istemez bir şüphe uyandıracaktır.
Ben olsaydım calc fields da ayrı bir query ile aktif kayıttan önceki kayıtların (muhtemelen tarih sırasına göre id de araya eklenen kayıtlar sorun çıkartabilir) bakiyesini hesaplatır (yani B yi) sonrada onu aktif kayıtla işleme tabitutar sonucu öyle buldururdum. Böylelikle filitrelemelerden de etkilenmezdi.
umarım anlatabilmişimdir.
kolay gelsin.
filitrelemeye yapınca calculatedin sapıtması normal çünkü filitrelenen kayıtlar için oncalcfields olayı çalışmayacak dolayısı ile de toplam hatalı çıkacaktır.
birde doğru hesaplamanın sizin istediğniz sonucu vereceğinden eminmisiniz.
zira arada gösterilmeyen kayıtlar olmasına rağmen bakiye değişecek buda kullanıcıda ister istemez bir şüphe uyandıracaktır.
Ben olsaydım calc fields da ayrı bir query ile aktif kayıttan önceki kayıtların (muhtemelen tarih sırasına göre id de araya eklenen kayıtlar sorun çıkartabilir) bakiyesini hesaplatır (yani B yi) sonrada onu aktif kayıtla işleme tabitutar sonucu öyle buldururdum. Böylelikle filitrelemelerden de etkilenmezdi.
umarım anlatabilmişimdir.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
-
- Üye
- Mesajlar: 386
- Kayıt: 02 Tem 2007 09:43
Re: oncalcfields hesaplamasını durdurma
sen iyi anlatmışsın ama ben anlattığını işleme dökecek kadar anlamadım.
aslında hesaplanan bir bakiye alanı değilde tabloya normal bir bakiye alanı eklediğim zaman bakiyeyi alıyorum ve filitrelemeden etkilenmiyor.
ancak bu durumda da işlemler her kayıt için yeniden hesaplanıp veri tabanına yazıldığı için hem çok yavaş oluyor hemde veri tabanı hata veriyor. o yüz den kullanamıyorum.
aslında hesaplanan bir bakiye alanı değilde tabloya normal bir bakiye alanı eklediğim zaman bakiyeyi alıyorum ve filitrelemeden etkilenmiyor.
ancak bu durumda da işlemler her kayıt için yeniden hesaplanıp veri tabanına yazıldığı için hem çok yavaş oluyor hemde veri tabanı hata veriyor. o yüz den kullanamıyorum.
İsteyen, yapabildiğinden daha fazlasını yapar.
-
- Üye
- Mesajlar: 386
- Kayıt: 02 Tem 2007 09:43
Re: oncalcfields hesaplamasını durdurma
değerli kardeşim dediğini ozaman pek anlamamıştım. geçen onca zamandan sonra mesajını terar okudum birşeyler anladım, ama yine dediğinmidir demediğinmidir bilmiyorum. anladığım bilgiler ışığında bakiye işlemini şöyle yapmaya çalıştım ve karşılaştığım sorun şu;
master tablo için query1 ve datasource1 (müşteri tablosu)
detail tablo için query2 ve datasource2 (hareket tablosu, hesaplanan alan BAKİYE ismiyle tanımlı) bu alan için aşağıdaki kodu kullanıyorum
oncalcfields e bu kodu yazdım
Query2bakiye.AsCurrency:=Query3bakiye.AsCurrency;
sonra detail tablo için tekrar query ve datasource aşağıdaki gibi oluşturdum
detail tablo için query3 ve datasource3 (hareket tablosu, hesaplanan alan BAKİYE ismiyle tanımlı) bu tabloda aşağıdaki kodu kullanıyorum
oncalcfields e bu kodu yazdım
IF QUERY3.RecNo=1 THEN B:=0; B:=B+QUERY3BORC.Value-QUERY3ALACAK.Value; QUERY3BAKIYE.value:=B;
buraya kadar işlemler tamam fakat query3 te oluşan bakiye alanındaki bilgiyi bu ( Query2bakiye.AsCurrency:=Query3bakiye.AsCurrency;) kodla Query2 deki bakiye sutununa aktarıyorum. bilgisayar sadece query3 ün birinci satırdaki bakiye bilgisini query2 nin bütün satırlarındaki bakiye alanlarına aynı bilgiyi aktarmakta query3BAKIYE alınındaki bilgileri query2BAKIYE alanına nasıl aktarabilirim. nerede hata yapıyorum. yardımcı olursanız memnun olurum.
master tablo için query1 ve datasource1 (müşteri tablosu)
detail tablo için query2 ve datasource2 (hareket tablosu, hesaplanan alan BAKİYE ismiyle tanımlı) bu alan için aşağıdaki kodu kullanıyorum
oncalcfields e bu kodu yazdım
Query2bakiye.AsCurrency:=Query3bakiye.AsCurrency;
sonra detail tablo için tekrar query ve datasource aşağıdaki gibi oluşturdum
detail tablo için query3 ve datasource3 (hareket tablosu, hesaplanan alan BAKİYE ismiyle tanımlı) bu tabloda aşağıdaki kodu kullanıyorum
oncalcfields e bu kodu yazdım
IF QUERY3.RecNo=1 THEN B:=0; B:=B+QUERY3BORC.Value-QUERY3ALACAK.Value; QUERY3BAKIYE.value:=B;
buraya kadar işlemler tamam fakat query3 te oluşan bakiye alanındaki bilgiyi bu ( Query2bakiye.AsCurrency:=Query3bakiye.AsCurrency;) kodla Query2 deki bakiye sutununa aktarıyorum. bilgisayar sadece query3 ün birinci satırdaki bakiye bilgisini query2 nin bütün satırlarındaki bakiye alanlarına aynı bilgiyi aktarmakta query3BAKIYE alınındaki bilgileri query2BAKIYE alanına nasıl aktarabilirim. nerede hata yapıyorum. yardımcı olursanız memnun olurum.
İsteyen, yapabildiğinden daha fazlasını yapar.
Re: oncalcfields hesaplamasını durdurma
s.a.
query2 nin bakiye alanına değer atmadan önce query3 de ilgili satırı seçmen lazım sanırım.
fazla detaylı bakamadım eski mesajlarada şu an pek müsait olmadığım için.
query2 nin bakiye alanına değer atmadan önce query3 de ilgili satırı seçmen lazım sanırım.
fazla detaylı bakamadım eski mesajlarada şu an pek müsait olmadığım için.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim