# Native Code > برنامه نویسی در Delphi > ابزارهای گزارش سازی در دلفی >  اضافه کردن ستون مانده حساب با جمع تجمعی در FastReport

## M@hdi

با عرض سلام و تبریک عید فطر به دوستان
من در FastReport دو ستون دریافت و پرداخت دارم . میخوام یک ستون اضافه بشه به نام مانده که حاصل  تفریق این دو فیلد در اون قرار بگیره و در ردیفهای بعد به صورت تجمعی اضافه بشه ( یعنی مقدارش با ردیف قبل جمع بشه ) . 
با تشکر

----------


## Babak-Aghili

مگه با تعریف کردن Calculated Field  مشکلت حل نمیشه ؟

----------


## M@hdi

بابک جان میشه توضیح بدی چطوری میتونم این فیلد را تعریف کنم

----------


## Babak-Aghili

به کتاب دلفی رجوع کنی بهتره ولی حالا ... 

روی کامپوننت Table... ‌دابل کلیک و AddAllFileds  ... بعدش هم AddNew Field ....   در دیالوگ جدید ، یک فیلد Calculted تعریف میکنیم ...

سپس در رویداد OnCalcRecord - یا اسمی مشابه همین بودش ) .. عملیات ریاضی مورد نظر را  مینویسیم .. ..

More Info ??

----------


## M@hdi

فکر کنم منظور سوال من را نگرفتید . اجازه بدید یک مثال بزنم مثلا در جدول دو فیلد 1 و 2 را داریم و میخواهیم فیلد 3 را به صورت زیر داشته باشیم :

        1 *********** 2 *************  3
   دریافت ********  پرداخت  ********   مانده
   1000  *******       0      *******      1000  = 1-2
   1000  *******       0      *******      2000  = 1-2+3
     0     *******       500   *******      1500 =  1-2+3

اگه امکان داره کدش را بنویسید . من با Calculated F فقط تونستم حاصل تفریق دو ستون 1و 2 را بدست بیارم.

----------


## fahimi

متاسفانه من این مشکل را دارم ولی متاسفانه جوابی برای آن پیدا نکرده ام فعلا از  quick report  در این مورد خاص استفاده میکنم عمده استفاده جمع تجمعی در دفترکل و معین حساب ها میباشد در ضمن در آخرین ورژن farepot 3.19 که اکامان فارسی و حتی پانل فارسی هم به آن اضافه شده است این مشکل وجود دارد

----------


## jafari1

سلام 
من فکر میکنم با اضافه کردن یک فیلد در بانک اطلاعاتی به عنوان مانده و محاسبه آن قبل از چاپ گزارش مشکلتان را حل کند

----------


## programersa

سلام
من خودم از یک query که برروی فرمم قرادادم این کار را به راحتی انجام می دهم و این کار قبل از انجام گزارش گرفتن است . از دستورات sql استفاده می کنم حتی برای اینکه نشان بدم حاصل بدهکار است یا بستانکار فرمت برایش تعریف کردم و گفتم مانده های منفی را با پرانتز نشان دهد . خیلی بهتر از اینه که به خواهی یک فیلد جدا تعریف کنی و یک فضای بیخودی اختصاص بدهی .
یاحق.

----------


## jafari1

ممکن است کل دستورات داخل query را بنویسید

----------


## jafari1

اگر لطف کنید دستور اسکیوال به شکل مورد نظر بالا را بنویسید متشکر میشوم

----------


## reza1351

خیلی راحته! فرض کنید فیلدهای زیر وجود دارد:
NDebit: بدهکار
NCredit:بستانکار
Memo1: مانده
ابتدای گزارش: Memo1.text:=0;
قبل از چاپ هر رکورد:
Memo1.text := Memo1.text + NDebit - NCredit
البته دستورات به صورت فوق قابل اجرا نیست ولی با رعایت Syntax دستورات براحتی قابل اجراست.
من خودم جواب گرفته ام. اگر لازم بود نمونه برنامه موجود است.

----------


## sepehr_a

اگه ممکنه یک نمونه برنامه رو لینک بذارید تا بهتر بفهمیم

----------


## فرزاد دلفی باز

این مشکل منم هست اگه کسی نمونه برنامه یا کدی داره بگه عالی میشه.....

----------


## reza1351

var Debit, Credit, Remind : Extended;
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
   Remind := Remind + <QList."NDebit"> - <QList."NCredit">;
end;
//--------------------------------------------------------------
procedure MasterData1OnAfterPrint(Sender: TfrxComponent);
begin
   Debit  := Debit  + <QList."NDebit">;
   Credit := Credit + <QList."NCredit">;
end;
//--------------------------------------------------------------
procedure Memo13OnBeforePrint(Sender: TfrxComponent);
begin
   if Debit > Credit then
   begin
      TfrxMemoView(Sender).Text :='ÈÏ';
      TfrxMemoView(Sender).Font.Color := clGreen;
   end
   else if Credit > Debit then
   begin
      TfrxMemoView(Sender).Text :='ÈÓ';
      TfrxMemoView(Sender).Font.Color := clRed;
   end
   else
   begin
      TfrxMemoView(Sender).Text :='-';
      TfrxMemoView(Sender).Font.Color := clBlack;
   end;
end;
//--------------------------------------------------------------
procedure Memo24OnBeforePrint(Sender: TfrxComponent);
begin
   if Remind > 0 then
   begin
      TfrxMemoView(Sender).Text :='ÈÏ';
      TfrxMemoView(Sender).Font.Color := clGreen;
      Memo23              .Font.Color := clGreen;
   end
   else if Remind < 0 then
   begin
      TfrxMemoView(Sender).Text :='ÈÓ';
      TfrxMemoView(Sender).Font.Color := clRed;
      Memo23              .Font.Color := clRed;
   end
   else
   begin
      TfrxMemoView(Sender).Text :='-';
      TfrxMemoView(Sender).Font.Color := clBlack;
      Memo23              .Font.Color := clBlack;
   end;
end;
//--------------------------------------------------------------
procedure Memo7OnBeforePrint(Sender: TfrxComponent);
begin
   if Debit > Credit then
      TfrxMemoView(Sender).Font.Color := clGreen
   else if Credit > Debit then
      TfrxMemoView(Sender).Font.Color := clRed
   else
      TfrxMemoView(Sender).Font.Color := clBlack;
end;
//--------------------------------------------------------------
begin
   Debit  := 0;
   Credit := 0;
   Remind := 0;
end.

----------


## Valadi

جناب reza1351
ممنون 
اگر امکان داره سورس این برنامه بصورت کوچک در سایت قرار بده تا دیگران به این مشکل خورد سریع مشکلشان حل شود 

با آرزوی موفقیت و سربلندی

----------


## reza1351

> جناب reza1351
> ممنون 
> اگر امکان داره سورس این برنامه بصورت کوچک در سایت قرار بده تا دیگران به این مشکل خورد سریع مشکلشان حل شود 
> 
> با آرزوی موفقیت و سربلندی


این دستورات در script فست رپورت باید نوشته شود فقط نتونستم به صورت چپ به راست در 
سایت کپی کنم.

----------


## masoodi6

دوستان اگه کسی میتونه در این https://barnamenevis.org/showthread.p...38#post1846638 کمکم کنه
ممنون میشم

----------


## gohari244

فرض کنید دو ستور داریم با عنوان bed و bes در دیتابیس- حالا بعد از اینکه گزارشمون آماده شد میخوایم یک ستون اضافه کنم که مانده رو بهمون بده واسه اینکار توی گزارش یک ستون با عنوان mande اضافه میکنیم و داخلش فرمول زیر می نویسیم


[mande.value+<ADOQuery1."bed">-<ADOQuery1."bes">]

----------

