Merhabalar
Tarih----G_Miktar--G_Bfiyat--G_Tutar--------C_Miktar--C_Bfiyat--_Tutar
01.01--------10---------2------- 20
02.01----------------------------------------3---------3---------9 (kar 3)
03.01----------------------------------------6---------4---------24 (kar 12)
04.01--------5--------3--------15
05.01----------------------------------------4---------5---------20( kar 9)
Yukarıdakine benzer bir tablom var bu tablodan
fifo ve lifo göre kar zararı çıkarmam gerekiyor delphi de tamamda sql de nasıl yapılır bu tecrübesi olan varmıdır 2 gündür uğraşıyorum.
FIFO LIFO Procedure
FIFO LIFO Procedure
Evrende Ulaşılamayacak Tepe Yoktur !!!!
Yeterki İnsan Ulaşmak İstesin !!!!
http://www.maxiteknik.com
Yeterki İnsan Ulaşmak İstesin !!!!
http://www.maxiteknik.com
Re: FIFO LIFO Procedure
Kimse Yok mu ?
Evrende Ulaşılamayacak Tepe Yoktur !!!!
Yeterki İnsan Ulaşmak İstesin !!!!
http://www.maxiteknik.com
Yeterki İnsan Ulaşmak İstesin !!!!
http://www.maxiteknik.com
Re: FIFO LIFO Procedure
bildiğim kadarıyla cevap vermeye çalışayım;
Direk tek query ile yapman zor. ama cursor ile bir döngü oluşturup normalde prg içerisinde nasıl yapıyosan sql ile de aynısını yapabilirsin.
Direk tek query ile yapman zor. ama cursor ile bir döngü oluşturup normalde prg içerisinde nasıl yapıyosan sql ile de aynısını yapabilirsin.
Re: FIFO LIFO Procedure
m_ekici
cursor ile denedim fakat başarılı olmadım 2-3 gündür ara verdim sürekli uğraşınca insan hep aynı şeyleri denemeye başlıyor.
tecrübesi olan arkdaşlar varsa paylaşırlarsa sevinirimn
cursor ile denedim fakat başarılı olmadım 2-3 gündür ara verdim sürekli uğraşınca insan hep aynı şeyleri denemeye başlıyor.
tecrübesi olan arkdaşlar varsa paylaşırlarsa sevinirimn
Evrende Ulaşılamayacak Tepe Yoktur !!!!
Yeterki İnsan Ulaşmak İstesin !!!!
http://www.maxiteknik.com
Yeterki İnsan Ulaşmak İstesin !!!!
http://www.maxiteknik.com
- loribnaczo54
- Üye
- Mesajlar: 60
- Kayıt: 24 Nis 2006 07:42
- Konum: Bahçelievler/İst.
Re: FIFO LIFO Procedure
forumda bu konu hayli konuşulmuştu, anlatımlı örneklerde mevcut sanıyorum.lazymule yazdı:m_ekici
cursor ile denedim fakat başarılı olmadım 2-3 gündür ara verdim sürekli uğraşınca insan hep aynı şeyleri denemeye başlıyor.
tecrübesi olan arkdaşlar varsa paylaşırlarsa sevinirimn
şöyle bir örnek verebilirim. benim uyguladığım sistemde iki tablo var.
1. tablo stok hareket tablosu (giriş-çıkış hareketlerinin bulunduğu tablo)
2. tablo stok cıkış hareketi yardımcı tablosu
mantalitesi ; stok hareket tablosunda, bir çıkış kaydı işlendiğinde ( insert trigger) veya belirli çıkış hareketlerin ( bir form aracılığıyla kriter belirleyerek süzülebilir.) bilgilerini aşağıdaki stored procedure gönderiyoruz. procedure çıkan miktara göre giren miktarları listeliyor ve cursor yardımıyla döndürerek, ikinci tablomuza (cikis yardımcı tablosu)
giriş hareketinin id sini kaydediyor. böylelikle giriş hareketinin miktarı eritilmiş oluyor.
umarım bir fikir verebilir. kolay gelsin.
Kod: Tümünü seç
CREATE procedure spFIFO_DON
@stok_kodu varchar(30),
@c_hareket_no bigint,
@c_gelis_karti varchar(10),
@c_miktar float,
@mikbrcarpan float,
@tarih datetime,
@kayit_id bigint
as
set nocount on
declare
@maliyet_hesap_sekli varchar(30)
---- burada farklı maliyetlendirme sistemi kullanmak istenildiğinde parametre formundan sorgulanabilir.
if @maliyet_hesap_sekli = '' set @maliyet_hesap_sekli='Fifo'
declare
@hes_giren float,
@fiyat float,
@tutar float,
@toplam float,
@kullanilabilir_mik float,
@cikan_mik float,
@tarih1 datetime,
@hartar datetime,
@g_kayit_id bigint
DELETE FROM M_stokHarCikisDetay WHERE c_kayit_id = @kayit_id
declare FifoCursor cursor
for
SELECT DISTINCT A.tarih, A.hartar, A.kayit_id, A.stok_kodu, A.hes_giren,
(SELECT SUM(miktar)
FROM M_stokHarCikisDetay
WHERE A.gelis_karti = g_gelis_karti AND A.hareket_no = g_hareket_no AND A.stok_kodu = stok_kodu) AS CikanMik
FROM M_stok_hareket_listesi A LEFT OUTER JOIN
M_stokHarCikisDetay B ON A.kayit_id=B.g_kayit_id
WHERE (A.stok_kodu = @stok_kodu) AND (A.hes_giren > 0)
ORDER BY A.tarih, A.hartar
open FifoCursor
fetch next from FifoCursor into @tarih1, @hartar, @g_kayit_id, @stok_kodu, @hes_giren, @cikan_mik
while (@@FETCH_STATUS = 0) begin
if isnumeric(@c_miktar) = 0 begin set @c_miktar = 0 end
if isnumeric(@cikan_mik) = 0 begin set @cikan_mik = 0 end
set @kullanilabilir_mik = @hes_giren - @cikan_mik
if @c_miktar > 0
begin
if @kullanilabilir_mik > 0
begin
if @kullanilabilir_mik > @c_miktar
begin
INSERT INTO M_stokHarCikisDetay
(c_hareket_no, c_gelis_karti, stok_kodu, miktar, mikbr_carpan, tarih, c_kayit_id, g_kayit_id)
VALUES
(@c_hareket_no, @c_gelis_karti, @stok_kodu, @c_miktar, @mikbrcarpan, @tarih, @kayit_id, @g_kayit_id)
set @c_miktar = 0
end
if @kullanilabilir_mik <= @c_miktar
begin
INSERT INTO M_stokHarCikisDetay
(c_hareket_no, c_gelis_karti, stok_kodu, miktar, mikbr_carpan, tarih, c_kayit_id, g_kayit_id)
VALUES
(@c_hareket_no, @c_gelis_karti, @stok_kodu, @kullanilabilir_mik, @mikbrcarpan, @tarih, @kayit_id, @g_kayit_id)
set @c_miktar = @c_miktar - @kullanilabilir_mik
end
end
end
fetch next from FifoCursor into @tarih1, @hartar, @g_kayit_id, @stok_kodu, @hes_giren, @cikan_mik
end
close FifoCursor
deallocate FifoCursor
GO
Re: FIFO LIFO Procedure
loribnaczo54
3 kere okudum ama anlamadım.
ilgin için teşekkürler hafta sonu bir daha rüyasına yatayım
2 tane cursor gerekmezmi biri girişlerde dönerken diğeri çıkışlarda dönmesi için
20 gelmiş 5 bir çıkmış 10 bir daha çıkmış ?
kağıt üzerinde çok basit lakin sql ye geçince kafa çalışmadı.
en yakın bulduğum örnek lakin inglizcem yetmedi.
http://ask.sqlservercentral.com/questio ... oblem/1099
3 kere okudum ama anlamadım.
ilgin için teşekkürler hafta sonu bir daha rüyasına yatayım
2 tane cursor gerekmezmi biri girişlerde dönerken diğeri çıkışlarda dönmesi için
20 gelmiş 5 bir çıkmış 10 bir daha çıkmış ?
kağıt üzerinde çok basit lakin sql ye geçince kafa çalışmadı.
en yakın bulduğum örnek lakin inglizcem yetmedi.
http://ask.sqlservercentral.com/questio ... oblem/1099
Evrende Ulaşılamayacak Tepe Yoktur !!!!
Yeterki İnsan Ulaşmak İstesin !!!!
http://www.maxiteknik.com
Yeterki İnsan Ulaşmak İstesin !!!!
http://www.maxiteknik.com
- loribnaczo54
- Üye
- Mesajlar: 60
- Kayıt: 24 Nis 2006 07:42
- Konum: Bahçelievler/İst.
Re: FIFO LIFO Procedure
mrb. ben biraz karışık anlatmış olabilirim. (zaman darlığından).lazymule yazdı:loribnaczo54
3 kere okudum ama anlamadım.
ilgin için teşekkürler hafta sonu bir daha rüyasına yatayım
2 tane cursor gerekmezmi biri girişlerde dönerken diğeri çıkışlarda dönmesi için
20 gelmiş 5 bir çıkmış 10 bir daha çıkmış ?
kağıt üzerinde çok basit lakin sql ye geçince kafa çalışmadı.
en yakın bulduğum örnek lakin inglizcem yetmedi.
http://ask.sqlservercentral.com/questio ... oblem/1099
şöyle özetlemeye çalışayım. örneğin stok_hareket_tablo suna 1 kayit işlendiğinde buradaki insert trigger i çalışır ve FIFO strored procedure ne değer yollar.
örneğin; (cikis_id, cikis_mik, stok_id, cikis_tarihi...vb gibi).
top şimdi procedure de.
Procedure cikan stok id sinin aktif girenlerini tarih sırasına göre listeler. ve bir döngü içinde miktarlarını eriterek, eriyen giriş hareketini yardımcı tablo olan cikis_detay tablosuna kaydeder.
örneğin; cikis_detay_tablosu alanları -> (cikis_id, cikis_mik, giris_id, giristen_kullanilan_mik, giris_tar...) vs...
Not: cikan stok_id sinin aktif girenlerini cümlesinden kastım. döngüyü başlatırken bir select cümleciği oluşur. amacı aynı stok_id sine ait giriş hareketlerinin henüz kullanılmamış miktarlarını tespit eder. örneğin;
Kod: Tümünü seç
SELECT DISTINCT A.tarih, A.kayit_id, A.stok_kodu, A.giren_mik,
(SELECT SUM(miktar)
FROM M_stokHarCikisDetay
WHERE A.gelis_karti = g_gelis_karti AND A.hareket_no = g_hareket_no AND A.stok_kodu = stok_kodu) AS CikanMik
FROM M_stok_hareket_listesi A LEFT OUTER JOIN
M_stokHarCikisDetay B ON A.kayit_id = B.g_kayit_id
WHERE (A.stok_kodu = @stok_kodu)
ORDER BY A.tarih
trigger+procedure olması biraz kafa karıştırıcı olmuş olabilir ama ben bu sistemin perfonmansından oldukça memnumum.