Kaynak: KB-v1
08_SupportPlaybooks/Processes/PROC-190.md←Surecler/*.doc(destek süreç dokümanı; parola/IP/terminal maskelenmiş). Gerçeklik: DOCUMENTED — kodla doğrulanmış değil.
ERP Devir Süreci v3
Kimlik: PROC-190 · Ürün: ERPGOLDV2 · Kategori: Devir ve yıl sonu · Katalog: ERP Devir Süreci v3
Kaynak: AifaSoft destek süreç dokümanı (Word). Şifre, kullanıcı adı, terminal no ve IP bilgileri kaynak aşamasında maskelenmiştir; görseller resimli süreç kitabındadır.
ERPGOLDV2 DEVİR SÜRECİ V3.0
Doküman TipiERPGOLDV2Doküman No03HazırlayanMünür SEZERYayın Tarihi29.12.2022
ERPGOLD programı; belirli bir tarihten öncesini devir etmek istenirse aşağıdaki query çalıştırılacaktır.
Aşağıdaki query çalıştırılmadan önce dikkat edilecek hususlar;
- Backup alınız.
Not: Hata olursa geri dönülecek, işlem tamamlanırsa arşiv olarak Sql’ e restore edilecek.
- Devir alınacak günün Takoz Stokları tamamen SIFIR olmak zorundadır.
NOT: Eğer takoz varsa bir cari karta çıkış yapılarak stoğu boşaltınız. Devirden sonra takozları çıkış yaptığınız cari karttan geri alınız ve Takoz Stoklarının eski haline geldiğini kontrol ediniz.
NOT: Eğer örneğin; 31 Aralık’ ta alınan takozlar 2 Ocak’ ta çıkış yapılmış. Devir’ i ise 1 Ocak’ tan itibaren almak istiyorsunuz. 31 Aralık’ ta alınan takozlar devirin içine gireceği için Bilanço tutmayacaktır ve takoz stok -1 adet olarak yansıyacaktır. Bu yüzden örnekte verilen işleme uygun takozların çıkışını takoz girişinin yapıldığı tarihe yapınız.
- Devir alınacak günün Çeşni Stokları tamamen SIFIR olmak zorundadır.
NOT: Eğer çeşni varsa bir cari karta çıkış yapılarak stoğu boşaltınız. Devirden sonra çeşnileri çıkış yaptığınız cari karttan (Takoz ağırlığı 0,01 yapabilirsiniz) geri alınız ve Çeşni Stoklarının eski haline geldiğini kontrol ediniz.
- Devir alınacak günün Maden Stokları TEK KASA olmak zorundadır.
Not: Eğer birden fazla kasa ise tek kasaya gerekli transferleri yapınız. Devirden sonra tekrar transferleri yaparak stokların eski haline geldiğini kontrol ediniz.
- Devir alınacak gün ile son günün Nakit ve Maden Stokları (operasyonel görünüm ve belgelendirilmiş görünüm) (maliyeti göster ile) not ediniz.
Not: Devirden sonra kontrol edilecektir.
- Bilançoyu son kez alıp kaydediniz ve listeden son bilançoyu not ediniz. (En alt satır)
Not: Devirden sonra kontrol edilecektir.
- Bilanço ekranının sol tarafında bulunan Bakiyeler, Stoklar ve İşçilik alanlarını not ediniz.
Not: Devirden sonra kontrol edilecektir.
- Query nin ilk satırında yer alan Declare @Tarih Date='2022-12-31' alanında devir edilecek tarihi giriniz. Örneğin bu kodda 1 Ocak 2023 öncesi devir edilecektir.
NOT 1: Arşiv veri tabanı içerisinde işlem yapılmasını engellemek için aşağıdaki kod bloğu çalıştırılır.
ALTER Trigger [Cari].[AcceptTransaction] ON [Cari].[Islemler] AFTER INSERT,UPDATE,DELETE
AS
BEGIN
RAISERROR('BU VERI TABANI ISLEME KAPATILMISTIR. ',16,1)
ROLLBACK
END
NOT 2: Arşiv veri tabanını görmek için;
-
ERPGLOBAL adında veri tabanı oluşturularak Company tablosu oluşturulur.
-
Company ve DBName adlarındaki sütunlar nvarchar(50) veri tipiyle oluşturulur.
-
Company tablosuna veri tabanlarının adları eklenerek müşteriye kolay giriş imkanı sunulur.
NOT 3: Stoklarda ya da bakiyelerde olası bir tutarsızlık olursa; Stok.StokHaraketleri tablosu ve/veya Cari.BakiyeIslem tablosunda Tarih alanı Null olan kayıtlar vardır. Manuel olarak giriş çıkış yapılarak tutarsızlık düzeltilir.
NOT 4: İşlem yapıldıktan sonra fiş verirken eski bakiye yazmıyor ise aşağıdaki kod bloğu çalıştırılır.
ALTER Function [Bakiye].[GetBakiyeFisNo] (@HesapType int,@HesapId int,@FisNo int)
RETURNS TABLE
as
return
Select top 10000 Kod.Kodu as BAKIYE, Case When Bakiye \< 0 Then Abs(Bakiye) else null end as ALACAK, Case When Bakiye> 0 Then Bakiye else null end as BORC,IsNull((Bakiye *-1) * KurA.Alis ,0) as NET
From Cari.BakiyeKodlari Kod
Left Join
(
Select B.BirimId as BakiyeId,Sum(Bakiye) as Bakiye
from Cari.BakiyeIslem B
Left Join Cari.Islemler I on B.IslemId=I.Id
Where (B.HesapType =@HesapType And B.HesapId =@HesapId) And (I.FisNo\<=@FisNo or B.IslemId =-1)
Group By B.BirimId
) Bak on Bak.BakiyeId =Kod.Id
Left Join Sistem.GetKurListesi (GETDATE()) KurA on KurA.BirimId =Kod.Id
Where (Kod.IsStatic='False' And Bakiye\<>0) or Kod.IsStatic='True' order by Kod.IsStatic desc, Kod.SiraNo asc
DEVİR QUERY
Declare @Tarih Date='2023-01-01'
print 'Triggerlar Disable Ediliyor.'
Alter Table Cari.Islemler DISABLE TRIGGER ALL
print 'Geçici Tablolar Oluşturuluyor.'
IF OBJECT_ID(N'tempdb..#TBLDevirBakiye') IS NULL
BEGIN
CREATE TABLE #TBLDevirBakiye(IslemID int,Tarih Date,HesapType int,HesapId int,KasaId int,BirimId int,Bakiye decimal(18,2),RefNo nvarchar(36)) ON [PRIMARY]
END
ELSE
BEGIN
TRUNCATE TABLE #TBLDevirBakiye
END
IF OBJECT_ID(N'tempdb..#TBLDevirStok') IS NULL
BEGIN
CREATE TABLE #TBLDevirStok(IslemID int,Bolum int,IslemTuru int,Tarih Date,SubeId int,KasaId int,StokTipi int,StokId int,Adet int,Miktar Decimal(18,2),Milyem Decimal(18,5),Has Decimal(18,2),Maliyet Decimal(18,2),VaryantId int) ON [PRIMARY]
END
ELSE
BEGIN
TRUNCATE TABLE #TBLDevirStok
END
print 'Devir Bakiyeleri Geçici Dosyalara Yazılıyor.'
INSERT INTO #TBLDevirBakiye
Select -1 as IslemId,DATEADD (day, -1,@Tarih) as Tarih,0 as HesapType,HesapId ,KasaId,BirimId ,Sum(Bakiye) as Bakiye,NEWID() from Cari.BakiyeIslem Where Tarih <@Tarih
group by HesapId,KasaId ,BirimId Having SUM(Bakiye)\<>0
print 'Devir Stokları Geçici Dosyalara Yazılıyor.'
INSERT INTO #TBLDevirStok
--Select -1 as IslemId,Bolum,H.IslemTuru ,DATEADD (day, -1,@Tarih),H.SubeId ,H.KasaId ,H.StokTipi ,H.StokId ,SUM(H.Adet) as Adet,SUM(H.Miktar) as Miktar,Fn.Bol(SUM(H.Has),Sum(H.Miktar)) as Milyem,Sum(H.Has) as Has , SUM(H.Maliyet) as Maliyet,H.VaryantId from Stok.StokHaraketleri H Left Join Cari.Islemler I on I.Id=H.IslemId Where IsNull(I.Tarih,Convert(date,I.InsertDate)) <@Tarih And StokTipi in (1,2)
--Group by Bolum ,H.IslemTuru ,H.SubeId ,H.KasaId ,H.StokTipi ,H.StokId ,H.VaryantId
Select -1 as IslemID,0 as Bolum,Case When (Miktar) >0 Then 0 Else 1 End as IslemTuru,@Tarih as Tarih,SubeId,KasaId,1 as StokTipi,M.Id as StokId,Adet ,Miktar ,Milyem,Has,Convert(Decimal(18,2), (M.Maliyet * K.Alis)) as Maliyet,IsNull(VaryantId,0) as VaryantId from Stok.GetMadenStoklari (0,0,DATEADD (day,-1,@Tarih),0) M Left Join Sistem.GetKurListesi (DATEADD (day,-1,@Tarih)) K on K.Birim =M.Birim
UNION ALL
Select -1 as IslemId,0 as Bolum,Case When Sum(H.Miktar) >0 Then 0 Else 1 End as IslemTuru,DATEADD (day, -1,@Tarih),H.SubeId ,H.KasaId ,H.StokTipi ,H.StokId ,SUM(H.Adet) as Adet,SUM(H.Miktar) as Miktar,Fn.Bol(SUM(H.Has),Sum(H.Miktar)) as Milyem,Sum(H.Has) as Has , SUM(H.Maliyet) as Maliyet,H.VaryantId from Stok.StokHaraketleri H Left Join Cari.Islemler I on I.Id=H.IslemId Where IsNull(I.Tarih,Convert(date,I.InsertDate)) <@Tarih And StokTipi =2
Group by H.SubeId ,H.KasaId ,H.StokTipi ,H.StokId ,H.VaryantId having sum(H.Miktar)<>0
print 'İşlemler ve Bilançolar Arşivleniyor.'
Delete From Cari.Islemler Where Tarih <@Tarih
Delete From Cari.History Where Tarih <@Tarih
Delete From Cari.Transferler Where Tarih <@Tarih
Delete From Cari.IslemDetaylari Where IslemId not in (Select Id From Cari.Islemler)
Delete From Bilanco.Bilancolar Where Tarih <@Tarih
print 'Stoklar Arsivleniyor.'
Delete From Stok.StokHaraketleri Where (IslemId not in (Select Id From Cari.Islemler) OR Tarih <@Tarih ) OR Bolum<>0
Delete From Cari.BakiyeIslem Where IslemId not in (Select Id From Cari.Islemler)
print 'Bakiyeler ve Stoklar Aktarılıyor.'
Insert Into Cari.BakiyeIslem Select * from #TBLDevirBakiye
Insert Into Stok.StokHaraketleri Select * from #TBLDevirStok
print 'Gecmis Kurlar Temizleniyor.'
Delete FRom Sistem.Kurlar Where Tarih <@Tarih
print 'Triggerlar Enable Ediliyor.'
Alter Table Cari.Islemler ENABLE TRIGGER ALL
GO
print 'Procedurler Güncelleniyor.'
GO
ALTER Function [Stok].[GetMadenMaliyeti] (@SubeId int,@KasaId int,@StokId int,@Tarih as Date,@StokMiktar Decimal(18,2))
returnS Decimal(18,2)
as
BEGIN
Declare @IscTur int=0
Declare @BirimId int =0
Select @IscTur=IscTuru,@BirimId =MaliyetBirimId From Stok.Maden Where Id=@StokId
Declare @Miktar Decimal(18,2)=0
Declare @Maliyet Decimal(18,2)=0
Declare @ToplamMiktar Decimal(18,2)=0
Declare @ToplamMaliyet Decimal(18,2)=0
Declare @IsExit as int =0
DECLARE CRS_MadenBirimMaliyetTL CURSOR FOR
Select top 5000 Case When @IscTur =0 Then H.Adet Else H.Miktar End as Miktar, Fn.Bol(Maliyet,Kur.Alis) as Maliyet
FRom Stok.StokHaraketleri H
Left Join Sistem.Kurlar Kur on Kur.Tarih =H.Tarih and Kur.BirimId =@BirimId
Where ( H.Tarih<=@Tarih or @Tarih is null) and (H.SubeId=@SubeId or @SubeId =0) And (H.KasaId =@KasaId Or @KasaId =0) And H.StokId=@StokId and StokTipi =1 And H.IslemTuru =0
Order By IslemId Desc
OPEN CRS_MadenBirimMaliyetTL
FETCH NEXT FROM CRS_MadenBirimMaliyetTL INTO @Miktar,@Maliyet
WHILE @@FETCH_STATUS =0 and @IsExit =0
BEGIN
if (@ToplamMiktar + @Miktar)<=@StokMiktar
BEGIN
set @ToplamMiktar +=@Miktar
Set @ToplamMaliyet +=@Maliyet
END
ELSE
BEGIN
Set @ToplamMaliyet +=FN.Bol (@Maliyet ,@Miktar) * (@StokMiktar - @ToplamMiktar)
Set @ToplamMiktar = @StokMiktar
SET @IsExit =1
END
FETCH NEXT FROM CRS_MadenBirimMaliyetTL INTO @Miktar,@Maliyet
END
CLOSE CRS_MadenBirimMaliyetTL
DEALLOCATE CRS_MadenBirimMaliyetTL
RETURN CONVERT(Decimal(18,2), @ToplamMaliyet)
END
UPDATE Stok.StokHaraketleri SET KasaId=1
Kaynaklar
- SRC-PROC-DOC — süreç dokümanı #190
