hesap hareketleri borç bakiye, alacak bakiye
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
hesap hareketleri borç bakiye, alacak bakiye
Arkadaşlar,
HESAP_HAREKETLERI die bir tablom var ve içinde çeşitli bilgilerle birlikte TOPLAM_BORC ve TOPLAM_ALACAK alanı var fiş tipine göre (alış, şatış, nakit giriş, nakit çıkış) TOPLAM_BORC ve TOPLAM_ALACAK tutarları hanelerine giriyorum.
buraka kadar bir sorun yok.
Cari ekstresini görmek istediğim zaman TOPLAM_BORC ve TOPLAM_ALACAK sütunları topluyorum ekstreyi çıkartıyorum bende sadece Borç ve Alacak var
Aşağıdaki ekrandaki gibi borç bakiye alacak bakiye eklemek istiyorum
Aşağıdaki gibi
fikir ve yardımlarınız için teşekkürler.
EXCEL DOSYA (FORMÜLÜ ):
http://dosya.co/vw2jndukb48s/ÖRNEK.xls.html
HESAP_HAREKETLERI die bir tablom var ve içinde çeşitli bilgilerle birlikte TOPLAM_BORC ve TOPLAM_ALACAK alanı var fiş tipine göre (alış, şatış, nakit giriş, nakit çıkış) TOPLAM_BORC ve TOPLAM_ALACAK tutarları hanelerine giriyorum.
buraka kadar bir sorun yok.
Cari ekstresini görmek istediğim zaman TOPLAM_BORC ve TOPLAM_ALACAK sütunları topluyorum ekstreyi çıkartıyorum bende sadece Borç ve Alacak var
Aşağıdaki ekrandaki gibi borç bakiye alacak bakiye eklemek istiyorum
Aşağıdaki gibi
fikir ve yardımlarınız için teşekkürler.
EXCEL DOSYA (FORMÜLÜ ):
http://dosya.co/vw2jndukb48s/ÖRNEK.xls.html
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
Re: hesap hareketleri borç bakiye, alacak bakiye
unutmadan,
bir işlem yapılışken fiş işlenirken SON_BAKIYE die bir alana son bakiye yi atıyorum
bir işlem yapılışken fiş işlenirken SON_BAKIYE die bir alana son bakiye yi atıyorum
Re: hesap hareketleri borç bakiye, alacak bakiye
Merhaba,
-Kullandığınız database sürümünü,
- Tablo yapınızı
- INSERT komutları şeklinde örnek verilerinizi
paylaşabilir misiniz?
-Kullandığınız database sürümünü,
- Tablo yapınızı
- INSERT komutları şeklinde örnek verilerinizi
paylaşabilir misiniz?
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
Re: hesap hareketleri borç bakiye, alacak bakiye
Merhaba
MSSQL 2012 Kullanıyorum, delphi 7 kullanıyorum.
bir fiş hareketi yaparken son bakiyeyi alıp son bakiye alanına ekliyorum.
sql tablosu aşağıdaki gibi gereksizleri çıkarttım
teşekkürler
MSSQL 2012 Kullanıyorum, delphi 7 kullanıyorum.
bir fiş hareketi yaparken son bakiyeyi alıp son bakiye alanına ekliyorum.
sql tablosu aşağıdaki gibi gereksizleri çıkarttım
teşekkürler
Kod: Tümünü seç
/****** Object: Table [dbo].[HESAP_HAREKETLERI] Script Date: 01.08.2017 15:23:10 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[HESAP_HAREKETLERI](
[HAREKET_KIMLIK] [int] IDENTITY(1,1) NOT NULL,
[CARI_KART_KIMLIK] [varchar](50) NULL,
[FIS_NO] [varchar](50) NULL,
[FIS_GENEL_TOP_ALACAK] [float] NULL,
[FIS_GENEL_TOP_BORC] [float] NULL,
[FIS_TIPI] [varchar](50) NULL,
[ONCEKI_BAKIYENIZ] [float] NULL,
CONSTRAINT [PK_HESAP_HAREKETLERI] PRIMARY KEY CLUSTERED
(
[HAREKET_KIMLIK] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[HESAP_HAREKETLERI] ADD CONSTRAINT [DF_Table_1_Fis_Genel_Toplami_Alacak] DEFAULT ((0)) FOR [FIS_GENEL_TOP_ALACAK]
GO
ALTER TABLE [dbo].[HESAP_HAREKETLERI] ADD CONSTRAINT [DF_Table_1_Fis_Genel_Toplami_Borc] DEFAULT ((0)) FOR [FIS_GENEL_TOP_BORC]
GO
ALTER TABLE [dbo].[HESAP_HAREKETLERI] ADD CONSTRAINT [DF_HESAP_HAREKETLERI_ONCEKI_BAKIYENIZ] DEFAULT ((0)) FOR [ONCEKI_BAKIYENIZ]
GO
Re: hesap hareketleri borç bakiye, alacak bakiye
Örnek veri de gönderebilir misiniz?
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
Re: hesap hareketleri borç bakiye, alacak bakiye
öyle elimde dolu bir veri yok ama
excel de yükledim zaten orda da formül var
excel de yükledim zaten orda da formül var
Re: hesap hareketleri borç bakiye, alacak bakiye
Excel dosyası alanları ile tablo alanları uyuşmuyor. Örnek olarak, tablo içinde tarih alanı yok, Excel dosyasında cari alanı yok.
Mevcut tablo tanımını olduğu gibi iletmeniz ve aşağıdaki sql komutu çıktısınıda göndermeniz mümkün mü?
Bunun dışında bakiye alanını tek alan olarak takip edip pozitif değer alacak, negatif değer borç şeklinde tanımlamanız mümkün olabilir. Bu şekilde yapmanız gereken bazı kontrolleri azaltabilirsiniz.
Mevcut tablo tanımını olduğu gibi iletmeniz ve aşağıdaki sql komutu çıktısınıda göndermeniz mümkün mü?
Kod: Tümünü seç
select * from HESAP_HAREKETLERI
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
Re: hesap hareketleri borç bakiye, alacak bakiye
ilginiz için çok teşekkür ederim sql tablosu aşağıdaki gibi.
Kod: Tümünü seç
USE [master]
GO
/****** Object: Database [TEST] Script Date: 01.08.2017 18:24:49 ******/
CREATE DATABASE [TEST]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'TEST', FILENAME = N'c:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\TEST.mdf' , SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'TEST_log', FILENAME = N'c:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\TEST_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
ALTER DATABASE [TEST] SET COMPATIBILITY_LEVEL = 110
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [TEST].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [TEST] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [TEST] SET ANSI_NULLS OFF
GO
ALTER DATABASE [TEST] SET ANSI_PADDING OFF
GO
ALTER DATABASE [TEST] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [TEST] SET ARITHABORT OFF
GO
ALTER DATABASE [TEST] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [TEST] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [TEST] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [TEST] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [TEST] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [TEST] SET CURSOR_DEFAULT GLOBAL
GO
ALTER DATABASE [TEST] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [TEST] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [TEST] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [TEST] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [TEST] SET DISABLE_BROKER
GO
ALTER DATABASE [TEST] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [TEST] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [TEST] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [TEST] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [TEST] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [TEST] SET READ_COMMITTED_SNAPSHOT OFF
GO
ALTER DATABASE [TEST] SET HONOR_BROKER_PRIORITY OFF
GO
ALTER DATABASE [TEST] SET RECOVERY SIMPLE
GO
ALTER DATABASE [TEST] SET MULTI_USER
GO
ALTER DATABASE [TEST] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [TEST] SET DB_CHAINING OFF
GO
ALTER DATABASE [TEST] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF )
GO
ALTER DATABASE [TEST] SET TARGET_RECOVERY_TIME = 0 SECONDS
GO
USE [TEST]
GO
/****** Object: Table [dbo].[HESAP_HAREKETLERI] Script Date: 01.08.2017 18:24:49 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[HESAP_HAREKETLERI](
[KIMLIK] [int] IDENTITY(1,1) NOT NULL,
[CARI_KOD] [varchar](50) NULL,
[FIS_TIPI] [varchar](50) NULL,
[FIS_NO] [varchar](50) NULL,
[FIS_TARIHI] [date] NULL,
[BORC] [float] NULL,
[ALACAK] [float] NULL,
[ONCEKI_BAKIYE] [float] NULL,
CONSTRAINT [PK_HESAP_HAREKETLERI] PRIMARY KEY CLUSTERED
(
[KIMLIK] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
SET IDENTITY_INSERT [dbo].[HESAP_HAREKETLERI] ON
GO
INSERT [dbo].[HESAP_HAREKETLERI] ([KIMLIK], [CARI_KOD], [FIS_TIPI], [FIS_NO], [FIS_TARIHI], [BORC], [ALACAK], [ONCEKI_BAKIYE]) VALUES (1, N'1', N'Satış Faturası', N'1', CAST(0x1D3D0B00 AS Date), 100, 0, 0)
GO
INSERT [dbo].[HESAP_HAREKETLERI] ([KIMLIK], [CARI_KOD], [FIS_TIPI], [FIS_NO], [FIS_TARIHI], [BORC], [ALACAK], [ONCEKI_BAKIYE]) VALUES (2, N'1', N'Satış Faturası', N'2', CAST(0x1D3D0B00 AS Date), 50, 0, 100)
GO
INSERT [dbo].[HESAP_HAREKETLERI] ([KIMLIK], [CARI_KOD], [FIS_TIPI], [FIS_NO], [FIS_TARIHI], [BORC], [ALACAK], [ONCEKI_BAKIYE]) VALUES (3, N'1', N'Alacak Fişi', N'3', CAST(0x1D3D0B00 AS Date), 0, 100, 50)
GO
INSERT [dbo].[HESAP_HAREKETLERI] ([KIMLIK], [CARI_KOD], [FIS_TIPI], [FIS_NO], [FIS_TARIHI], [BORC], [ALACAK], [ONCEKI_BAKIYE]) VALUES (4, N'1', N'Alış Faturası', N'4', CAST(0x1D3D0B00 AS Date), 0, 250, -200)
GO
INSERT [dbo].[HESAP_HAREKETLERI] ([KIMLIK], [CARI_KOD], [FIS_TIPI], [FIS_NO], [FIS_TARIHI], [BORC], [ALACAK], [ONCEKI_BAKIYE]) VALUES (5, N'1', N'Alış Faturası', N'5', CAST(0x1D3D0B00 AS Date), 0, 50, -250)
GO
INSERT [dbo].[HESAP_HAREKETLERI] ([KIMLIK], [CARI_KOD], [FIS_TIPI], [FIS_NO], [FIS_TARIHI], [BORC], [ALACAK], [ONCEKI_BAKIYE]) VALUES (6, N'1', N'Alış Faturası', N'6', CAST(0x1D3D0B00 AS Date), 0, 150, -400)
GO
INSERT [dbo].[HESAP_HAREKETLERI] ([KIMLIK], [CARI_KOD], [FIS_TIPI], [FIS_NO], [FIS_TARIHI], [BORC], [ALACAK], [ONCEKI_BAKIYE]) VALUES (7, N'1', N'Borç Fişi', N'7', CAST(0x1D3D0B00 AS Date), 150, 0, -250)
GO
INSERT [dbo].[HESAP_HAREKETLERI] ([KIMLIK], [CARI_KOD], [FIS_TIPI], [FIS_NO], [FIS_TARIHI], [BORC], [ALACAK], [ONCEKI_BAKIYE]) VALUES (8, N'1', N'Satış Faturası', N'8', CAST(0x1D3D0B00 AS Date), 100, 0, -150)
GO
SET IDENTITY_INSERT [dbo].[HESAP_HAREKETLERI] OFF
GO
ALTER TABLE [dbo].[HESAP_HAREKETLERI] ADD CONSTRAINT [DF_HESAP_HAREKETLERI_BORC] DEFAULT ((0)) FOR [BORC]
GO
ALTER TABLE [dbo].[HESAP_HAREKETLERI] ADD CONSTRAINT [DF_HESAP_HAREKETLERI_ALACAK] DEFAULT ((0)) FOR [ALACAK]
GO
ALTER TABLE [dbo].[HESAP_HAREKETLERI] ADD CONSTRAINT [DF_HESAP_HAREKETLERI_BAKIYE] DEFAULT ((0)) FOR [ONCEKI_BAKIYE]
GO
USE [master]
GO
ALTER DATABASE [TEST] SET READ_WRITE
GO
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
Re: hesap hareketleri borç bakiye, alacak bakiye
hocam eki indirirseniz excel tablosunda ne istediğim var zaten onun aynısını yapmak istiyorum
Re: hesap hareketleri borç bakiye, alacak bakiye
Merhaba,
Tablo yapısı:
Yukarıdaki tablo yapısında HAREKET_TURU alanına ya G (giriş) ya da C (çıkış) değerlerini otomatik olarak sizin kod kullanarak kaydetmeniz gerekli. Bu kolon kullanıcıya açık olmayacak.
Query bileşeni ayarlamaları:
Fields Editor kısmına girerek iki tane CalculatedField ekleyin. Bu alanların isimleri aşağıdaki gibi olsun
Yazılması gereken kod:
Formun tanımları içine
Query bileşeni BeforeOpen() olayına:
Query bileşeni OnCalcFields() olayına:
Aşağıdaki veriler için:
Ekran çıktısı şöyle olacaktır:
Kurmak istediğiniz yapı ile ilgili aşağıdaki konuları yeniden düşünmenizde fayda var:
- Borç ve alacak kolonlarını ayrı değil tek kolon olarak bakiye kolonu şeklinde gösterin.
- Borç bakiye ve alacak bakiye kolonlarını ayrı değil tek kolon olarak yürüyen bakiye kolonu şeklinde gösterin.
Böylece;
a- disk alanını daha az kullanırsınız ve database işlem performansı artar.
b- iki kolon olduğu halde kullanmanız gereken birkaç tane "if then else" ifadesini kaldırarak basit bir toplama işlemi ile uygulama performansını iyileştirirsiniz.
Son olarak, bu işi yıllardır yapan forum üyeleri olduğunu düşünüyorum. Kendilerinin önerileri daha sağlıklı olacaktır. Ancak şahsi görüşüm borç ve alacak bakiyelerini "önceki bakiye" şeklinde database içine kaydetmek doğru olmayacaktır. Eğer eski tarihli bir fiş kaydı girilmek istenir ise fiş tarihinden sonraki tüm kayıtları güncellemek gerekecektir ki fiş adedine göre çok uzun sürebilir bu işlem.
Tablo yapısı:
Kod: Tümünü seç
CREATE TABLE [HESAP_HAREKETLERI](
[KIMLIK] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[CARI_KOD] [varchar](50) NULL,
[FIS_TIPI] [varchar](50) NULL,
[HAREKET_TURU] [char](1) NULL,
[FIS_NO] [varchar](50) NULL,
[FIS_TARIHI] [date] NULL,
[BORC] [money] NULL,
[ALACAK] [money] NULL
)
Query bileşeni ayarlamaları:
Fields Editor kısmına girerek iki tane CalculatedField ekleyin. Bu alanların isimleri aşağıdaki gibi olsun
Kod: Tümünü seç
borcbakiye
alacakbakiye
Formun tanımları içine
Kod: Tümünü seç
private
{ Private declarations }
MevcutBakiye: Currency;
Kod: Tümünü seç
procedure TForm2.UniQuery1BeforeOpen(DataSet: TDataSet);
begin
MevcutBakiye := 0;
end;
Kod: Tümünü seç
procedure TForm2.UniQuery1CalcFields(DataSet: TDataSet);
begin
case DataSet.FieldByName('HAREKET_TURU').AsString[1] of
'G':
begin
MevcutBakiye := MevcutBakiye - DataSet.FieldByName('ALACAK').AsCurrency;
end;
'C':
begin
MevcutBakiye := MevcutBakiye + DataSet.FieldByName('BORC').AsCurrency;
end;
else
begin
raise Exception.Create('Hatalı hareket türü bulundu. Lütfen yetkiliye haber verin.' + sLineBreak + 'Hareket türü: ' + DataSet.FieldByName('HAREKET_TURU').AsString);
end;
end;
if MevcutBakiye < 0 then
begin
DataSet.FieldByName('alacakbakiye').AsCurrency := Abs(MevcutBakiye);
end
else if MevcutBakiye > 0 then
begin
DataSet.FieldByName('borcbakiye').AsCurrency := MevcutBakiye;
end;
end;
Kod: Tümünü seç
KIMLIK CARI_KOD FIS_TIPI HAREKET_TURU FIS_NO FIS_TARIHI BORC ALACAK
1 abc nakit G 1 2017-06-01 NULL 10,00
2 abc nakit G 2 2017-06-02 NULL 10,00
3 abc nakit C 3 2017-06-03 5,00 NULL
4 abc nakit C 4 2017-06-03 10,00 NULL
5 abc nakit C 5 2017-06-04 20,00 NULL
6 abc nakit C 6 2017-06-05 5,00 NULL
7 abc nakit G 7 2017-06-07 NULL 25,00
8 abc nakit G 8 2017-06-08 NULL 10,00
9 abc nakit C 9 2017-06-10 100,00 NULL
Kurmak istediğiniz yapı ile ilgili aşağıdaki konuları yeniden düşünmenizde fayda var:
- Borç ve alacak kolonlarını ayrı değil tek kolon olarak bakiye kolonu şeklinde gösterin.
- Borç bakiye ve alacak bakiye kolonlarını ayrı değil tek kolon olarak yürüyen bakiye kolonu şeklinde gösterin.
Böylece;
a- disk alanını daha az kullanırsınız ve database işlem performansı artar.
b- iki kolon olduğu halde kullanmanız gereken birkaç tane "if then else" ifadesini kaldırarak basit bir toplama işlemi ile uygulama performansını iyileştirirsiniz.
Son olarak, bu işi yıllardır yapan forum üyeleri olduğunu düşünüyorum. Kendilerinin önerileri daha sağlıklı olacaktır. Ancak şahsi görüşüm borç ve alacak bakiyelerini "önceki bakiye" şeklinde database içine kaydetmek doğru olmayacaktır. Eğer eski tarihli bir fiş kaydı girilmek istenir ise fiş tarihinden sonraki tüm kayıtları güncellemek gerekecektir ki fiş adedine göre çok uzun sürebilir bu işlem.
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
Re: hesap hareketleri borç bakiye, alacak bakiye
hocam ilginiz ve bilgilendirme için çok teşekkür ederim azda olsa çok da olsa biraz kayıt var ve tabloda değişiklik yapamam.
case DataSet.FieldByName('HAREKET_TURU').AsString[1] of
'G':
begin
bu kısma nasıl bir ekleme yapabilirim ?
aşağıdaki gibi nasıl yapabilirim ?
case DataSet.FieldByName('HAREKET_TURU').AsString[1] of
'Satış Farurası' or Nakit Çıkışı:
begin
case DataSet.FieldByName('HAREKET_TURU').AsString[1] of
'G':
begin
bu kısma nasıl bir ekleme yapabilirim ?
aşağıdaki gibi nasıl yapabilirim ?
case DataSet.FieldByName('HAREKET_TURU').AsString[1] of
'Satış Farurası' or Nakit Çıkışı:
begin
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
Re: hesap hareketleri borç bakiye, alacak bakiye
kodu denedim de bu şekilde olmaz ya
bu kısma bir çözüm bulmalıyım nasıl birşey yapabilir acaba ?
case DataSet.FieldByName('HAREKET_TURU').AsString[1] of
'G':
bu kısma bir çözüm bulmalıyım nasıl birşey yapabilir acaba ?
case DataSet.FieldByName('HAREKET_TURU').AsString[1] of
'G':
Re: hesap hareketleri borç bakiye, alacak bakiye
'Satış Farurası' tablo içinde hangi alanda kayıtlı?
Kayıtlar aşağıdaki gibi değişkenlik gösteriyor mu?
Kayıtlar aşağıdaki gibi değişkenlik gösteriyor mu?
Kod: Tümünü seç
Satış Farurası
SATIŞ Faturası
SATIŞ FATURASI
satış faturası
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
Re: hesap hareketleri borç bakiye, alacak bakiye
Fiş Tipinde kayıtlı sabit hepsi,
fiş tipleri aşağıdaki gibi
Alış Faturası
Satış Faturası
Firma Borç Fişi
Firma Alacak Fişi
Firma Zimmet
Personel Borç Fişi
Personel Alacak Fişi
Personel Zimmet
Proje Borç Fişi
Proje Alacak Fişi
Proje Zimmet
Restoran Satışı
Firma Gelen Havale
Firma Giden Havale
Proje Gelen Havale
Proje Giden Havale
Personel Gelen Havale
Personel Giden Havale
Araç Borç Fişi
Araç Alacak Fişi
Firma Çek Girişi
Firma Çek Çıkışı
Proje Çek Girişi
Proje Çek Çıkışı
Personel Çek Girişi
Personel Çek Çıkışı
fiş tipleri aşağıdaki gibi
Alış Faturası
Satış Faturası
Firma Borç Fişi
Firma Alacak Fişi
Firma Zimmet
Personel Borç Fişi
Personel Alacak Fişi
Personel Zimmet
Proje Borç Fişi
Proje Alacak Fişi
Proje Zimmet
Restoran Satışı
Firma Gelen Havale
Firma Giden Havale
Proje Gelen Havale
Proje Giden Havale
Personel Gelen Havale
Personel Giden Havale
Araç Borç Fişi
Araç Alacak Fişi
Firma Çek Girişi
Firma Çek Çıkışı
Proje Çek Girişi
Proje Çek Çıkışı
Personel Çek Girişi
Personel Çek Çıkışı
Re: hesap hareketleri borç bakiye, alacak bakiye
Fiş tiplerinin kayıtlı olduğu bir tablonuz vardır.
- Bu tabloya kolon ekleyin HAREKET_TURU şeklinde.
- Her bir fiş türü için tanımlama yapın G veya C şeklinde.
- Fiş giriş ekranına yeni bir Query bileşeni ekleyin (Biz adına QRY2 diyelim). Fiş türü listesini HAREKET_TURU ile birlikte listelesin.
- Fiş giriş/çıkış ekranına gelindiği zaman QRY2 bileşenini açın ve sürekli açık kalsın.
- Eğer Fiş giriş ekranı kullanıcıya ShowModal() değil Show() şeklinde gösteriliyor ise; yani çalışma zamanında bir defa oluşturuluyor ve uygulama açık olduğu sürece sürekli hafızada kalıyor ise OnShow() içinde aşağıdaki gibi bir kontrol ekleyin:
böylece fiş tipleri tablosuna eklenen/çıkarılan türlerden haberiniz olur. Hatalı kayıt yapılmasına izin vermemiş olursunuz.
- OnCalcFields() olayını aşağıdaki şekilde düzenleyin:
NOT: OnClacFields() kodu test edilmemiştir.
- Bu tabloya kolon ekleyin HAREKET_TURU şeklinde.
- Her bir fiş türü için tanımlama yapın G veya C şeklinde.
- Fiş giriş ekranına yeni bir Query bileşeni ekleyin (Biz adına QRY2 diyelim). Fiş türü listesini HAREKET_TURU ile birlikte listelesin.
Kod: Tümünü seç
select * from fisturleri
- Eğer Fiş giriş ekranı kullanıcıya ShowModal() değil Show() şeklinde gösteriliyor ise; yani çalışma zamanında bir defa oluşturuluyor ve uygulama açık olduğu sürece sürekli hafızada kalıyor ise OnShow() içinde aşağıdaki gibi bir kontrol ekleyin:
Kod: Tümünü seç
if QRY2.Active then QRY2.Refresh();
- OnCalcFields() olayını aşağıdaki şekilde düzenleyin:
Kod: Tümünü seç
procedure TForm2.UniQuery1CalcFields(DataSet: TDataSet);
begin
if QRY2.Locate('FIS_TIPI', DataSet.FieldByName('FIS_TIPI').AsString, []) then
begin
case QRY2.FieldByName('HAREKET_TURU').AsString[1] of
'G':
begin
MevcutBakiye := MevcutBakiye - DataSet.FieldByName('ALACAK').AsCurrency;
end;
'C':
begin
MevcutBakiye := MevcutBakiye + DataSet.FieldByName('BORC').AsCurrency;
end;
else
begin
raise Exception.Create('Fiş tipi tablosunda hatalı veri. Lütfen yetkiliye haber verin.' + sLineBreak + 'Fiş Tipi: ' + QuotedStr(DataSet.FieldByName('FIS_TIPI').AsString) + sLineBreak + 'Hareket Türü: ' + QuotedStr(QRY2.FieldByName('HAREKET_TURU').AsString));
end;
end
else
begin
raise Exception.Create('Fiş tipi bulunamıyor. Lütfen yetkiliye haber verin.' + sLineBreak + 'Fiş Tipi: ' + QuotedStr(DataSet.FieldByName('FIS_TIPI').AsString));
end;
end;
if MevcutBakiye < 0 then
begin
DataSet.FieldByName('alacakbakiye').AsCurrency := Abs(MevcutBakiye);
end
else if MevcutBakiye > 0 then
begin
DataSet.FieldByName('borcbakiye').AsCurrency := MevcutBakiye;
end;
end;