hesap hareketleri borç bakiye, alacak bakiye

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

hesap hareketleri borç bakiye, alacak bakiye

Mesaj gönderen erdogan_ozkaya »

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.

Resim

EXCEL DOSYA (FORMÜLÜ ):
http://dosya.co/vw2jndukb48s/ÖRNEK.xls.html
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: hesap hareketleri borç bakiye, alacak bakiye

Mesaj gönderen erdogan_ozkaya »

unutmadan,

bir işlem yapılışken fiş işlenirken SON_BAKIYE die bir alana son bakiye yi atıyorum
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: hesap hareketleri borç bakiye, alacak bakiye

Mesaj gönderen ertank »

Merhaba,

-Kullandığınız database sürümünü,
- Tablo yapınızı
- INSERT komutları şeklinde örnek verilerinizi

paylaşabilir misiniz?
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: hesap hareketleri borç bakiye, alacak bakiye

Mesaj gönderen erdogan_ozkaya »

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

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


ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: hesap hareketleri borç bakiye, alacak bakiye

Mesaj gönderen ertank »

Örnek veri de gönderebilir misiniz?
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: hesap hareketleri borç bakiye, alacak bakiye

Mesaj gönderen erdogan_ozkaya »

öyle elimde dolu bir veri yok ama

excel de yükledim zaten orda da formül var


Resim
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: hesap hareketleri borç bakiye, alacak bakiye

Mesaj gönderen ertank »

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ü?

Kod: Tümünü seç

select * from HESAP_HAREKETLERI
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.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: hesap hareketleri borç bakiye, alacak bakiye

Mesaj gönderen erdogan_ozkaya »

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

erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: hesap hareketleri borç bakiye, alacak bakiye

Mesaj gönderen erdogan_ozkaya »

hocam eki indirirseniz excel tablosunda ne istediğim var zaten onun aynısını yapmak istiyorum
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: hesap hareketleri borç bakiye, alacak bakiye

Mesaj gönderen ertank »

Merhaba,

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
)
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

Kod: Tümünü seç

borcbakiye
alacakbakiye
Yazılması gereken kod:
Formun tanımları içine

Kod: Tümünü seç

  private
    { Private declarations }
    MevcutBakiye: Currency;
Query bileşeni BeforeOpen() olayına:

Kod: Tümünü seç

procedure TForm2.UniQuery1BeforeOpen(DataSet: TDataSet);
begin
  MevcutBakiye := 0;
end;
Query bileşeni OnCalcFields() olayına:

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;
Aşağıdaki veriler için:

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
Ekran çıktısı şöyle olacaktır:
Resim

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.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: hesap hareketleri borç bakiye, alacak bakiye

Mesaj gönderen erdogan_ozkaya »

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
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: hesap hareketleri borç bakiye, alacak bakiye

Mesaj gönderen erdogan_ozkaya »

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':
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: hesap hareketleri borç bakiye, alacak bakiye

Mesaj gönderen ertank »

'Satış Farurası' tablo içinde hangi alanda kayıtlı?
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ı
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: hesap hareketleri borç bakiye, alacak bakiye

Mesaj gönderen erdogan_ozkaya »

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ışı
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: hesap hareketleri borç bakiye, alacak bakiye

Mesaj gönderen ertank »

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.

Kod: Tümünü seç

select * from fisturleri
- 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:

Kod: Tümünü seç

if QRY2.Active then QRY2.Refresh();
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:

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;
NOT: OnClacFields() kodu test edilmemiştir.
Cevapla