stok hareketleri ile ilgili

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

stok hareketleri ile ilgili

Mesaj gönderen selman »

s.a
Herkese iyi çalışmalar diliyorum.Benim takıldığım bir nokta var .Bu takıldığım nokta aslında ileride çok kayıt girildiğinde herhangi bir sorun çıkartmaması için en güzel yöntemi öğrenmek.Şöyle ki

Benim 3 ad. tablom var.
1.s_kartı-------->stok kartlarının tutulduğu tablom
2.s_islemleri----->stok işlemlerimi tutulduğu fişlerim master tablom
3.malalim--------->stok alış,stok satış işlemlerinin gerçekleştiği tablom
bu detay tablom
olay aslında basit fakat nasıl yabacağımı tam kestiremedim.Şimdi
ilk önce şunu söyliyim benim s_kartımda bir fieldimdaha var ekranda gösterdiğim Miktar bölümü. Olay şu stok ürünlerimin kalan miktarlarını bu hanede göstermek.nasıl yapabilrim. en mantıklı yolu nedir. ben yaptımda fakat tam gönlüm kanaat getirmedi.Yardımcı olursanoz sevinirim.Şimdiden herkese tşkler.
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1269
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Mesaj gönderen ALUCARD »

hocam veritabano olarak ne kullanıyorsun

eğer firebird kullanmıyorsan bunu SP ile kolaylıkla yapabilirsin

veya tabloya bi tane calc alan ekleyim hesaplamayı runtime de yapabbilirsin
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

veritabanım firebird. de artı böyle bir durum için firebirde göre bir sp yazamazmıyız. otomatik veritabanından göstersin delphi içerisinden yapmasın.bence daha iyi olur gibime geliyor.Hemde hızlı çalışır proğramımız.Ama nasıl yapacağız acık bir şekilde yazabilirseniz sevinirim.İyi çalışmalar
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1269
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Mesaj gönderen ALUCARD »

viewtopic.php?t=3138

hocam bu başlık işini görür zannedersem

bi zamanlar bende çok uğraşmıştım bu konnularda
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

s.a söylediğim konuyla alakalı bir trigger örneği verebilrmisiniz.İlginiz için tşkederim. Kolay gelsin.
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Trigger ile yapacak olursanız Insert, Edit ve Delete işlemleri için ayrı ayrı trigger yazacaksınız.

Tablonuzun yapısına göre yazacağınız trigger'lar değişecek. Örneğin stok hareket tablonuzda 'Miktar' ve 'İşlem türü' alanları varsa farklı, 'giriş miktarı', 'çıkış miktarı' alanları varsa farklı olur. İkisi için de Insert ile tetiklenecek Trigger örneği:

Edit:

Kod: Tümünü seç

AS
begin
  update S_Karti
  set
    miktar = miktar + new.gmiktar - new.cmiktar
  where
    Ad = new.StokAdi;
end
u'lu coder editden önce yazdı:

Kod: Tümünü seç

AS
begin
  update s_karti
    (miktar)
  values
    (miktar + new.girisMiktari - new.CikisMiktari);
end

Kod: Tümünü seç

AS
  declare variable ISLEMMIKTARI integer;
begin
  if IslemTuru = 'G' then
    ISLEMMIKTARI = new.Miktar
  else
    ISLEMMIKTARI = - new.Miktar;

  update s_karti
    (miktar)
  values
    (miktar + ISLEMMIKTARI);
  
end
gibi.
View konusunu da bi araştırın derim.

Kolay gelsin...
En son ulu coder tarafından 24 May 2007 09:55 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

s.a
Ulucoder hocam cevabınız için tşkederim
fakat ben

Kod: Tümünü seç

AS
begin
  update s_karti 
   (miktar)
  values 
    (miktar + malalim.gmiktar - malalim.cmiktar);


  /* Trigger text */
end
çalıştıramadım.
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

:shock:

Dehşet bir hata yapmışım, özür diliyorum.
update sorgusuna where eklememişim!
Bu durumda tüm stokların miktarını değiştirecek.

ikinci olarak, "update" ile "insert into"nun kullanımlarını da karıştırmışım.

Kod: Tümünü seç

update s_karti
  set 
    miktar = miktar + new.gmiktar - new.cmiktar
  where
    adi = new.stokAdi;
eklenen kayıttaki değerleri almak için "new." yazacaksınız.

İlk cevaptaki hatalar için tekrar özür diliyorum, aklım nerelerde bilmiyorum :(
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

s.a
Ama burda bir druum var new ile sadece s_kartında ki değerleri alabiliyoruz.
Nıormalde Gmiktar,Cmiktar----->malalim tablosunuda kusura bakmayın yine çalıştıramadım .
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

trigger'ı s_kartı için değil hareket tablosu için yazın. Zaten hareket tablosuna kayıt eklendiğinde tetiklenecek, değil mi?
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

s.a kusura bakmayın yine rahatsız ediyorum Hakkınızı helal edin.Evet Malalim tablom stok hareketidir.Yalnız burda yine bir durum gözüküyor gibi.
Biz burda (Miktar)yazan yeri tanımlamıyacağızmı veya s_kartına ait miktar bölümü olmayacakmı.
yazılıan kod şu:

Kod: Tümünü seç

AS
begin
 update malalim
  set 
   miktar =miktar+new.gmiktar - new.cmiktar
  where 
    adi = new.stokkodu;

end
neden olmuyor bu bende anlamadım.herhalde rahatsızlık verdim kusura bakmayın .çözmem lazım tekrardan hakkınızı helal edin.
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Stok kartında miktar alanı olduğunu varsayarak cevap yazmıştım. Yani evet, miktar alanı olmalı.

Bu arada, burası delphi forumu, sorular sorulacak, cevaplar yazılacak tabi ki. Rahatsızlık ne demek... :)

Kolay gelsin...
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

s.a
yaa bende mi birşey var yoksa verdiğiniz kodmu bende çalışmıyor Ulucoder hocam olmadı yaa. :(
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Hocam tablolarınızdaki alanları tam olarak yazın, yapalım. Söz, aynı tabloları oluşturup, test edip sonra cevaplayacağım :roll:

Olmadı dediniz ama ne olmadı, nerde hata verdi, yanlış mı hesapladı, bi şey anlamadım ki...
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

s.a

Kod: Tümünü seç

AS
begin
 update s_karti
  set 
    s_karti.miktar=s_karti.miktar+(new.gmiktar-new.cmiktar)
   where
   new.stokkodu=s_karti.s_kodu;


  /* Trigger text */
end
bu trigger gayet güzel çalışıyor fakat bir sorun var
mesela malalimde bir kayıt girmişim o kayıtta gmiktar:=100 diyelim sonra kaydediyorum s_kartı tablomdaki miktar bölümüne atıyor. sonra aynı kaydın üzerine geliyorum.gmiktar=100 düye bunu 200 yapıyorum normalde oraya 200 atması gerekirken 200+100=300 atıyor ve bu her değişiklikde üstüne ekleyerek gidiyor. Bunu nasıl önleyebilirim.kolay gelsin
Cevapla