PDA

View Full Version : سوال: Fast Report - اعمال محاسباتی چند فیلد پس از اجرا



ByRoad
پنج شنبه 17 مرداد 1387, 19:07 عصر
سلام

اگه در قسمت DataMaster یک مقدار عددی داشته باشیم و در قسمت DataDetails مجموع مقادیر عددی را حساب کرده باشیم و در قسمت Footer مجموع اون را داشته باشیم حالا اگه بخواییم مجموع اعداد را در قسمت Footer با عدد در قسمت Master ضرب کنیم و در یک Text دیگه داشته باشیم راه حلش چی هست ؟!

ByRoad
پنج شنبه 17 مرداد 1387, 20:13 عصر
procedure Page1OnAfterPrint(Sender: TfrxComponent);
Var
a,b:integer;
Re:Real;
begin
a:=SysMemo3.Value;
b:=Re_KarfarmaPercent.Value;
Re:=a*b / 100;
ShowMessage(a*b / 100);
SysMemo4.Text:=FloatToStr(Re);

end;

خط اخر اعمال نمی شود --------
اجرا میشه ولی در SysMemo چیزی نمایش نمی دهد؟؟؟؟؟؟؟؟؟؟؟؟؟؟
چرا!!!!!!!!!

vcldeveloper
جمعه 18 مرداد 1387, 00:37 صبح
خط آجر اعمال نمی شود
چرا بجای BeforePrint برای رویداد AfterPrint کد نوشتید؟!

ByRoad
شنبه 19 مرداد 1387, 11:33 صبح
سلام

جناب کشاورز

توی هر رویدادی که فکرشو کنید نوشتم هم BeforPrint و هم AfterPrint هم صفحه اصلی هم Footer مربوطه

اگه BeforPrint بنویسم چیزی نشون نمی ده

اگه توی AfterPrint بنویسم یه عدد عجیب غریب و نامربوط نشون میده .

Trace میکنم ولی جوابی نمی گیرم .
ورژن Fast Report 4.6.8 هست .

ByRoad
شنبه 19 مرداد 1387, 11:56 صبح
ببخشید خط اخرو یادم رفت بذارم

Var
a,b:Integer;
Re:Real;
begin
a:=Re_KarfarmaPercent.Value;
b:=SysMemo3.Value;
Re:=a*b / 100;
SysMemo5.Text:=FloatToStr(b+Re);
end;

به هر حال جمع این دو فیلد رو در فیلد بعدی نشون نمی ده .(در هر حالتی )

ByRoad
شنبه 19 مرداد 1387, 13:44 عصر
من در بخش Master یک فیلد عددی دارم .

و در بخش Detail هم یک فیلد عددی دارم که مجموع اون رو در Footer به دست آوردم .یک SysMemo اضافه کردم که درصد این مجموع رو با عددی که در بخش Master هست را حساب می کند .

*******حالا می خوام مجموع این 2 SysMemo را در بخش Footer به دست بیارم و توی به SysMemo دیگه بریزم .

دستورات بالا اجرا می شه ولی مقداری رو توی SysMemo جدید نمیریزه ؟؟؟؟؟؟؟؟؟؟؟؟؟چرا؟؟؟؟؟

vcldeveloper
شنبه 19 مرداد 1387, 17:29 عصر
دقت کنید که:
1- در زمان تولید گزارش، مقادیر موجود در باندهای Master و Detail ثابت نیستند، بلکه در هر لحظه مقادیر رکورد جاری DataSet متصل به خود را نمایش می دهند، پس زمانی که گزارش ساز باندهای Master و Detail را میسازد و به باند Footer می رسد، مقادیر موجود در Master و Detail برابر با مقدار آخرین رکورد DataSet های متصل به آنها هست.
2- اگر می خواید داده ایی را با توجه به مقادیر باند های Master و Detail بدست بیارید و در Footer نمایش بدید، باید این کار را در رویداد OnBeforePrint از Footer انجام بدید، یعنی زمانی که مقادیر Master و Detail مشخص شده، ولی هنوز مقدار Footer مشخص نشده، پس میشه هنوز مقدار آن را تغییر داد.
3- من شخصا ترجیح میدم بجای آنکه دائما با مقادیر کنترل هایی مثل Text Object یا System Text و... سر و کله بزنم، یک یا چند Variable تعریف کنم و تمام پردازش ها را با استفاده از آنها انجام بدم. برای نمایش Variableها هم فقط کافی هست در کنترل مربوطه نام Variable را قید کرده باشم. مثلا اگر قرار هست مقداری را محاسبه کنم، متغیری با نام MyVariable تعریف می کنم و محاسبه را با استفاده از آن انجام میدم - مثلا در OnBeforePrint از باند Footer. برای نمایشش لازم نیست کاری بکنم، فقط کافیه در Editor متن مربوط به Text Object ایی که باید نتیجه محاسبه را نمایش بده، بنویسم: [MyVaribale]
خودش مقدار متغیر MyVaribale را میگیره، تبدیل به متن میکنه و نمایش میده.