trigerla stok veya cari karta bakiye hesaplatma..

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

trigerla stok veya cari karta bakiye hesaplatma..

Mesaj gönderen serkan »

slm arkadaşlar..

malumunuz bir ticari programda (ERP-MRP de olabilir) stok hareketleri ve cari hareketleri olur bunların bakiyesi 2 yöntemle hesaplanabilir biri stok hareketlerinden toplam giren ve toplam çıkanı hesaplatıp birbirinden çıkarırız diğeride trigerlarla hareketlere kayıt girme,silme,güncelleme olduğunda stok kartındaki bakiye alanına yazarız..
şimdi ben ilk şekilde yapıyorum ama eminim hareketlerdeki kayıt sayısı arttıkça program kafayı yiyecek stok bakiyesi gözüken bir ekranı açtığımda..
triger işine gelince satır bazında depo seçtiriyorum irsaliye veya faturada o işi nasıl yaparım acaba.bi alım faturasına adam iki satırada örn:kola yazıp birini depo-1'e diğerinide depo-2 ye atabiliyor.

bu işi nasıl yaparım ben şöyle düşündüm yine toplam bakiyeyi trigerla yapayım depo bazında rapor alınacaksa onuda stok hareketlerinden sadece seçilen depoya ait hareketlerden giren-çıkan yapıp bakiyeyi hesaplatayım.doğru bir yöntemmi acaba sizler nasıl yapıyorsunuz.
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

s.a kendi yazdığım stok ve carihareketleri ile tam 6 trigger örneğini veiryorum size.

Kod: Tümünü seç

//carihareket delete triggera
AS
begin
   if (old.alacak=0) then  begin
     update carikartlari set
    carikartlari.borc=carikartlari.borc-old.borc
    where
  old.ckodu=carikartlari.c_kodu;

          update carikartlari set
      carikartlari.bakiye=carikartlari.borc-carikartlari.alacak
      where
    old.ckodu=carikartlari.c_kodu;
       end
   if (old.borc=0) then  begin
  update carikartlari set
  carikartlari.alacak=carikartlari.alacak-old.alacak
   where
   old.ckodu=carikartlari.c_kodu;
             update carikartlari set
      carikartlari.bakiye=carikartlari.borc-carikartlari.alacak
      where
    old.ckodu=carikartlari.c_kodu;


   end
  /* Trigger text */
end
//Carihareket insert triggera
AS
begin
     if (new.alacak=0) then begin
  update carikartlari set
  carikartlari.borc=carikartlari.borc+new.borc

  where
     new.ckodu=carikartlari.c_kodu;

           update carikartlari set
    carikartlari.bakiye=carikartlari.borc-carikartlari.alacak

  where
     new.ckodu=carikartlari.c_kodu;
       end
   else
  if (new.borc=0) then begin
      update carikartlari set
    carikartlari.alacak=carikartlari.alacak+new.alacak
    where
    new.ckodu=carikartlari.c_kodu;

           update carikartlari set
       carikartlari.bakiye=carikartlari.borc-carikartlari.alacak
    where
    new.ckodu=carikartlari.c_kodu;


  end
  /* Trigger text */
end
////Cari hareket update triggera....
AS
begin

        if (old.alacak=0) then  begin
              update carikartlari set
               carikartlari.borc=carikartlari.borc-old.borc
               where
              old.ckodu=carikartlari.c_kodu;
                 
                update carikartlari set
               carikartlari.bakiye=carikartlari.borc-carikartlari.alacak
              where
             old.ckodu=carikartlari.c_kodu;
          end
        if (new.alacak=0) then begin
                  update carikartlari set
              carikartlari.borc=carikartlari.borc+new.borc
             where
             new.ckodu=carikartlari.c_kodu;

                   update carikartlari set
                 carikartlari.bakiye=carikartlari.borc-carikartlari.alacak
                where
               new.ckodu=carikartlari.c_kodu;
           end
      else

        if (old.borc=0) then   begin
                 update carikartlari set
               carikartlari.alacak=carikartlari.alacak-old.alacak
               where
               old.ckodu=carikartlari.c_kodu;
                  update carikartlari set
               carikartlari.bakiye=carikartlari.borc-carikartlari.alacak
              where
             old.ckodu=carikartlari.c_kodu;
            end
        if (new.borc=0) then  begin
         update carikartlari  set
         carikartlari.alacak=carikartlari.alacak+new.alacak
         where
           new.ckodu=carikartlari.c_kodu;
                update carikartlari set
                 carikartlari.bakiye=carikartlari.borc-carikartlari.alacak
                where
               new.ckodu=carikartlari.c_kodu;

        end
---------------------------------------------------------------------------------
//şimdi stokareket triger delete
AS
begin

     if (old.t='8') then   begin
        update carikartlari set
    carikartlari.alacak=carikartlari.alacak-old.tutari

    where
  old.ckod=carikartlari.c_kodu;


          update carikartlari set
      carikartlari.bakiye=carikartlari.borc-carikartlari.alacak
      where
    old.ckod=carikartlari.c_kodu;
        end

   if (old.t='9') then  begin
  update carikartlari set
  carikartlari.borc=carikartlari.borc-old.tutari

   where
   old.ckod=carikartlari.c_kodu;
             update carikartlari set
      carikartlari.bakiye=carikartlari.borc-carikartlari.alacak
      where
    old.ckod=carikartlari.c_kodu;
  end


  /* Trigger text */
end
/// Stok hareket trigger insert örneği
AS
begin
      if (new.t='8') then
      begin
       update carikartlari set
      carikartlari.alacak=carikartlari.alacak+new.tutari
      where
      new.ckod=carikartlari.c_kodu;

         update carikartlari  set
        carikartlari.bakiye=carikartlari.borc-carikartlari.alacak
        where
        new.ckod=carikartlari.c_kodu;
        end
       else
    if (new.t='9') then
      begin
      update carikartlari set
     carikartlari.borc=carikartlari.borc+new.tutari
     where
     new.ckod=carikartlari.c_kodu;
       update carikartlari  set
        carikartlari.bakiye=carikartlari.borc-carikartlari.alacak
        where
        new.ckod=carikartlari.c_kodu;

     end

  /* Trigger text */
end
//stok hareket update triggarı
AS
begin
 update s_karti 
  set 
    s_karti.miktar=s_karti.miktar -
                           (old.gmiktar - old.cmiktar)

   where
   old.stokkodu=s_karti.s_kodu;

 update s_karti 
  set
  s_karti.miktar=s_karti.miktar+(new.gmiktar-new.cmiktar)
  where
  new.stokkodu=s_karti.s_kodu;
   /* Trigger text */
 /* Trigger text */
end







kolay gelsin[quote][/quote]
Cevapla