Iki tarih arasi bakiyeli cari ve stok hareketleri
Nereden Yazdırıldığı: ERP Nedir? | Türkiye'nin ERP Forum Platformu
Kategori: SQL
Forum Adı: SQL Veri Tabanı İşlemleri
Forum Tanımlaması: Table,View,Trigger,SELECT,UPDATE,INSERT...
URL: http://www.erpne.org/forum_posts.asp?TID=3104
Tarih: 21 Şubat 2025 Saat 21:05 Program Versiyonu: Web Wiz Forums 11.10 - http://www.webwizforums.com
Konu: Iki tarih arasi bakiyeli cari ve stok hareketleri
Mesajı Yazan: Merkez
Konu: Iki tarih arasi bakiyeli cari ve stok hareketleri
Mesaj Tarihi: 26 Mayıs 2012 Saat 12:30
Merhaba,
Forumda soracagim sorunun cevabini aradim ama bulamadim. Umarim tekrar ediyor olmam.
Temel olarak yapmak istedigim sey stok ve cari modüllerdeki tarih aralikli icmal listelerini raporlastirmak. Benim tanimlayacagim iki tarih arasindaki ya da içinde bulundugumuz ayin stok ya da cari hareketleri görmek istiyorum. Bir view yazip bunu Smart Agent programinda düzenli gönderilen bir rapor haline dökmek istiyorum.
View sonucu söyle bir sey olmali
cari kod, cari isim, ilk tarih bakiye, iki tarih arasi toplam borç, iki tarih arasi toplam alacak, son tarih bakiye.
ya da
stok kodu, stok adi, ilk tarih bakiye, iki tarih arasi toplam giris, iki tarih arasi toplam çikis, son tarih bakiye.
yardimci olabilecek birileri çikarsa sevinirim.
|
Cevaplar:
Mesajı Yazan: mbaykan
Mesaj Tarihi: 26 Mayıs 2012 Saat 15:42
CREATE FUNCTION UFN_STOK_DONEM_OZET(@TRH1 DATETIME,@TRH2 DATETIME) RETURNS TABLE RETURN ( WITH CTE1 AS ( SELECT STOK_KODU, SUM(CASE WHEN STHAR_GCKOD='G' THEN STHAR_GCMIK ELSE -STHAR_GCMIK END) DEVIR FROM TBLSTHAR (NOLOCK) WHERE STHAR_TARIH < @TRH1 AND STOK_KODU IN (SELECT DISTINCT STOK_KODU FROM TBLSTHAR WHERE STHAR_TARIH BETWEEN @TRH1 AND @TRH2) GROUP BY STOK_KODU ), CTE2 AS (SELECT STOK_KODU,SUM(CASE WHEN STHAR_GCKOD='G' THEN STHAR_GCMIK ELSE 0 END) GIRIS, SUM(CASE WHEN STHAR_GCKOD='C' THEN STHAR_GCMIK ELSE 0 END) CIKIS FROM TBLSTHAR (NOLOCK) WHERE STHAR_TARIH BETWEEN @TRH1 AND @TRH2 GROUP BY STOK_KODU )
SELECT S2.STOK_KODU,B.STOK_ADI,ISNULL(DEVIR,0) DEVIR,GIRIS,CIKIS,ISNULL(DEVIR,0) + GIRIS - CIKIS AS KALAN FROM CTE2 S2 LEFT JOIN CTE1 S1 ON S1.STOK_KODU=S2.STOK_KODU LEFT JOIN TBLSTSABIT B ON S2.STOK_KODU=B.STOK_KODU )
CREATE FUNCTION UFN_CARI_DONEM_OZET(@TRH1 DATETIME,@TRH2 DATETIME) RETURNS TABLE RETURN ( WITH CTE1 AS ( SELECT CARI_KOD, SUM(BORC - ALACAK) BAKI1 FROM TBLCAHAR A (NOLOCK) WHERE TARIH < @TRH1 AND A.CARI_KOD IN (SELECT DISTINCT CARI_KOD FROM TBLCAHAR WHERE TARIH BETWEEN @TRH1 AND @TRH2) GROUP BY CARI_KOD ), CTE2 AS (SELECT CARI_KOD,SUM(BORC) BORC,SUM(ALACAK) ALACAK FROM TBLCAHAR (NOLOCK) WHERE TARIH BETWEEN @TRH1 AND @TRH2 GROUP BY CARI_KOD )
SELECT C2.CARI_KOD,B.CARI_ISIM,ISNULL(BAKI1,0) BAKI1, BORC, ALACAK, ISNULL(BAKI1,0) + BORC - ALACAK AS BAKIYE FROM CTE2 C2 LEFT JOIN CTE1 C1 ON C1.CARI_KOD=C2.CARI_KOD LEFT JOIN TBLCASABIT B ON C2.CARI_KOD=B.CARI_KOD )
Stok raporu için SELECT * FROM DBO.UFN_STOK_DONEM_OZET('2012-01-01','2012-01-31')
Cari raporu için SELECT * FROM dbo.UFN_CARI_DONEM_OZET('2012-01-01','2012-01-31')
------------- Mehmet Baykan
|
Mesajı Yazan: Merkez
Mesaj Tarihi: 26 Mayıs 2012 Saat 16:26
Tam da istedigim gibi bir sonuç verdi. Çok tesekkür ederim. Ama yazdiginiz kod benim anlayabilecegimden daha karmasik.
Ben söyle bir sey yazmistim.
declare @fromdate date=convert(date,convert(varchar(7),getdate(),102)+'.01') declare @todate date=getdate()-1
select CARI_KOD,CARI_ISIM,C.ACIK1 AS TABELA_ADI, C.RAPOR_KODU1 AS RUT_KODU,GRUP_ISIM AS RUT_ADI, ISNULL((SELECT SUM(BORC)-SUM(ALACAK) FROM TBLCAHAR H WHERE H.TARIH<@fromdate AND C.CARI_KOD=H.CARI_KOD AND H.PROJE_KODU='1'),0) AS DEVIR, ISNULL((SELECT SUM(BORC) FROM TBLCAHAR H WHERE H.TARIH BETWEEN @FROMDATE AND @todate AND C.CARI_KOD=H.CARI_KOD AND H.PROJE_KODU='1'),0) AS BORC, ISNULL((SELECT SUM(ALACAK) FROM TBLCAHAR H WHERE H.TARIH BETWEEN @FROMDATE AND @todate AND C.CARI_KOD=H.CARI_KOD AND H.PROJE_KODU='1'),0) AS ALACAK, ISNULL((SELECT SUM(BORC)-SUM(ALACAK) FROM TBLCAHAR H WHERE H.TARIH<@todate AND C.CARI_KOD=H.CARI_KOD AND H.PROJE_KODU='1'),0) AS BAKIYE from TBLCASABIT C left outer JOIN TBLCARIKOD1 ON C.RAPOR_KODU1=TBLCARIKOD1.GRUP_KOD
bu, görebileceginiz üzere sadece ay içi durumu getiriyor ve disaridan ek bir tarih girisi yapmaya gerek kalmiyor. bu da isimi görebilir ama tblcasabit'ten tblcahar'a gittigim için cari hareketi olmayan müsterileri de getiriyor. bunlarin sayilari da çok fazla.
tblcahar'dan select yapsam her kolon için ayri kosullari nasil belirleyebilecegimi bulamadim.
|
Mesajı Yazan: mbaykan
Mesaj Tarihi: 26 Mayıs 2012 Saat 22:22
yaptigim karmasik degil. CTE.. ile sanal tablolar yapip bunlari sorgumda kullaniyorum. parametrik view olusturmak Sql'de kullanici tanimli fonksiyonlardan Table valued function (sonucu tablo olan fonksiyon)'la mümkün bu sorgunuzu daha güçlü yapar ve kullanimi bir tablo ya da view'dan farksizdir
SELECT * FROM dbo.Fonksiyon(parametre1,parametre2, ...)
sizin TBLCAHAR ile baslayip TBLCASABIT ve digerleri ile INNER JOIN yaptiginiz sorgunuzda istedeginiz döneme ait kayitlari göstermeniz tabii ki TBLCAHAR.CARI_KOD kolonuna göre GROUP BY'i da sorgunuza koyup BORC,ALACAK gibi kolonlari toplamaniz gerekir. Ben de sorgumda bunu yapiyorum. Sizin CASABIT ve diger talolardan almak istediginiz bilgiler için de yazidgimi fonksiyon su sekilde kullanilabilir
select A.CARI_KOD,A.CARI_ISIM,C.ACIK1 AS TABELA_ADI, C.RAPOR_KODU1 AS RUT_KODU,GRUP_ISIM AS RUT_ADI, A.BAKI1 AS DEVIR, A.BORC, A.ALACAK, A.BAKIYE from dbo.UFN_CARI_DONEM_OZET('2012-01-01','2012-01-31') A INNER JOIN TBLCASABIT C ON C.CARI_KOD=A.CARI_KOD left outer JOIN TBLCARIKOD1 ON C.RAPOR_KODU1=TBLCARIKOD1.GRUP_KOD
------------- Mehmet Baykan
|
Mesajı Yazan: Merkez
Mesaj Tarihi: 27 Mayıs 2012 Saat 00:24
Benim seviyem icin karmasik icin oldugunu düsünmüstüm yazdiginiz kodun, ama biraz daha dikkatle inceleyince daha anlasilir hale geliyor. Tekrar ilginiz icin tesekkür ederim.
|
Mesajı Yazan: abastas
Mesaj Tarihi: 03 Mayıs 2013 Saat 12:29
DBO.UFN_STOK_DONEM_OZET viewlardamidir acaba ben göremedim
tesekkürler
|
Mesajı Yazan: mbaykan
Mesaj Tarihi: 03 Mayıs 2013 Saat 13:17
VERITABANI'niz > Programmability > Functions > Scalar valued Functions
altindadir.
------------- Mehmet Baykan
|
Mesajı Yazan: abastas
Mesaj Tarihi: 03 Mayıs 2013 Saat 16:44
tesekkürler bu verilere depo kodunu grup kodunu ve birim fiyatini nasil ekleyebilirim
|
Mesajı Yazan: mbaykan
Mesaj Tarihi: 04 Mayıs 2013 Saat 08:06
birim fiyat'tan hangi fiyati kasdediyorsunuz. Stok kartindaki alis veya satis fiyatlarindan biri ise kolay
ben satis fiyat-1 'e göre fonksiyonu degistirdim
ALTER FUNCTION UFN_STOK_DONEM_OZET(@TRH1 DATETIME,@TRH2 DATETIME)
RETURNS TABLE
RETURN (
WITH CTE1 AS (
SELECT STOK_KODU, DEPO_KODU DEPO,SUM(CASE WHEN STHAR_GCKOD='G' THEN STHAR_GCMIK ELSE -STHAR_GCMIK END) DEVIR
FROM TBLSTHAR (NOLOCK)
WHERE STHAR_TARIH < @TRH1 AND STOK_KODU IN (SELECT DISTINCT STOK_KODU FROM TBLSTHAR WHERE STHAR_TARIH BETWEEN @TRH1 AND @TRH2)
GROUP BY STOK_KODU,DEPO_KODU
),
CTE2 AS (SELECT STOK_KODU, DEPO_KODU DEPO, SUM(CASE WHEN STHAR_GCKOD='G' THEN STHAR_GCMIK ELSE 0 END) GIRIS,
SUM(CASE WHEN STHAR_GCKOD='C' THEN STHAR_GCMIK ELSE 0 END) CIKIS
FROM TBLSTHAR (NOLOCK)
WHERE STHAR_TARIH BETWEEN @TRH1 AND @TRH2
GROUP BY STOK_KODU,DEPO_KODU
)
SELECT ISNULL(B.GRUP_KODU,C.GRUP_KODU) GRUP_KODU,ISNULL(S2.STOK_KODU,S1.STOK_KODU) KOD,ISNULL(B.STOK_ADI,C.STOK_ADI) STOK_ADI,ISNULL(S2.DEPO,S1.DEPO) DEPO,B.SATIS_FIAT1 BIRIM_FIYAT,
ISNULL(DEVIR,0) DEVIR,GIRIS,CIKIS,ISNULL(DEVIR,0) + GIRIS - CIKIS AS KALAN
FROM CTE2 S2
FULL JOIN CTE1 S1 ON S1.STOK_KODU=S2.STOK_KODU AND S1.DEPO=S2.DEPO
LEFT JOIN TBLSTSABIT B ON S2.STOK_KODU=B.STOK_KODU
LEFT JOIN TBLSTSABIT C ON S1.STOK_KODU=C.STOK_KODU
)
------------- Mehmet Baykan
|
|