ورود

View Full Version : مقایسه دو فایل FR3



mahdy.asia
چهارشنبه 13 مرداد 1395, 16:52 عصر
سلام من برای کاربر نهایی امکان ویرایش گزارش گذاشتم با توجه به اینکه تنظیمات گزارش رو از داخل کد خودم تنظیم می کنم می خواهم وقتی کاربر تنظیمی رو اعمال کرد تنظیمات برنامه کنسل گردد و تنظیمات کاربر اعمال گردد.
برای اینکه بتوانم مشخص کنم که کدام یک از اشیاء روی گزارش تغییر کرده است می بایست فایل Report-1.Fr3 را با فایل جدید Report-2.Fr3 که توسط کاربر از نتیجه تغییرات روی Report-1.Fr3 بوجود آمده مقایسه کنم.
چطور می توانم این دو فایل رو با هم مقایسه کنم و مشخص کنم که کدام شی تغییر کرده است و چه خصوصیت آن تغییر کرده است.

hp1361
شنبه 16 مرداد 1395, 07:42 صبح
سلام من برای کاربر نهایی امکان ویرایش گزارش گذاشتم با توجه به اینکه تنظیمات گزارش رو از داخل کد خودم تنظیم می کنم می خواهم وقتی کاربر تنظیمی رو اعمال کرد تنظیمات برنامه کنسل گردد و تنظیمات کاربر اعمال گردد.
برای اینکه بتوانم مشخص کنم که کدام یک از اشیاء روی گزارش تغییر کرده است می بایست فایل Report-1.Fr3 را با فایل جدید Report-2.Fr3 که توسط کاربر از نتیجه تغییرات روی Report-1.Fr3 بوجود آمده مقایسه کنم.
چطور می توانم این دو فایل رو با هم مقایسه کنم و مشخص کنم که کدام شی تغییر کرده است و چه خصوصیت آن تغییر کرده است.

سلام

فایل گزارشی که کاربر ویرایش کرده رو با نامی که مشخص بکنه آخرین ویرایش روی اون صورت گرفته ذخیره کنید و برنامه رو جوری تنظیم کنید که آخرین فایل ذخیره شده رو بازکنه.(مثلا نام گزارش بدین صورت باشه: Report_Salary_5 و بعد از ویرایش کاربر بدین نام ذخیره بشه Report_Salary_6. حالا در کدها اسم فایل های گزارش رو بخونید و به آخرین شماره رجوع کنید)

موفق باشیم

mahdy.asia
شنبه 16 مرداد 1395, 17:47 عصر
حالا فرض کنید من در هنگام لود کردن گزارش اندازه عرض فیلدها رو تنظیم می کنم و برای مثال ستون کد را در تنظیمات 20 انتساب داده ام اما کاربر در
Report_Salary_6 اندازه این فیلد را به 40 تغییر داده است ولی وقتی گزارش لود شود دوباره اندازه فیلد به 20 تغییر پیدا می کند و تغییرات کاربر در گزارش اعمال نمی شود.
اگر بتونم کدی بنویسم که از گزارش Report_Salary_5 خصوصیت های یکی از کامپوننت ها را به صورت یک آرایه بگیرد و آن را با آرایه خصوصیت های همان کامپوننت در Report_Salary_6 مقایسه نماید و اگر تغییرات وجود داشت آن کامپوننت را علامت بزند تا هنگام اعمال تنظیمات وقتی به کامپوننت های علامت خورده رسیدم تنظیمات روی خصوصیتی که تغییر کرده است اعمال نگردد .

Mask
شنبه 16 مرداد 1395, 18:05 عصر
حالا فرض کنید من در هنگام لود کردن گزارش اندازه عرض فیلدها رو تنظیم می کنم و برای مثال ستون کد را در تنظیمات 20 انتساب داده ام اما کاربر در
Report_Salary_6 اندازه این فیلد را به 40 تغییر داده است ولی وقتی گزارش لود شود دوباره اندازه فیلد به 20 تغییر پیدا می کند و تغییرات کاربر در گزارش اعمال نمی شود.
اگر بتونم کدی بنویسم که از گزارش Report_Salary_5 خصوصیت های یکی از کامپوننت ها را به صورت یک آرایه بگیرد و آن را با آرایه خصوصیت های همان کامپوننت در Report_Salary_6 مقایسه نماید و اگر تغییرات وجود داشت آن کامپوننت را علامت بزند تا هنگام اعمال تنظیمات وقتی به کامپوننت های علامت خورده رسیدم تنظیمات روی خصوصیتی که تغییر کرده است اعمال نگردد .

به صورت دستی بررسی این موارد اشتباهه. بهترین حالت اینه که در کوچکترین تغییر فایل جدید از تغییرات قبلی و جدید ساخته بشه

mahdy.asia
یک شنبه 17 مرداد 1395, 14:56 عصر
به صورت دستی بررسی این موارد اشتباهه. بهترین حالت اینه که در کوچکترین تغییر فایل جدید از تغییرات قبلی و جدید ساخته بشه دوست از مشارکت شما در پاسخ متشکرم اما من تو کد نویسی یکسری تنظیمات دارم (عرض ستون رو در تنظیماتی که تو کد دلفی نوشتم قبل از لود شدن گزارش اعمال می کنم)می خواهم درصورتی روی ریپورت اعمال شود که کاربر سیستم در محیط طراحی که در اختیارش قرار گرفته روی آن ستون گزارش تغییری نداشته باشد.
حالا چطور می تونم بعد از تغییرات کاربر و گرفتن پیش نمایش در دفعات بعدی تشخیص دهم که گزارش یکی از ستون ها بوسیله کاربر تغییر پیدا کرده است و تنظیمات رو نباید روی آن اعمال نمایم.

Mask
یک شنبه 17 مرداد 1395, 21:13 عصر
اگر فایل های فست رو در نوتپد باز کنید ، میبینید که ساختار ini داره.
ببینید اون نمیتونه کمکتون کنه.

hp1361
دوشنبه 18 مرداد 1395, 08:20 صبح
دوست از مشارکت شما در پاسخ متشکرم اما من تو کد نویسی یکسری تنظیمات دارم (عرض ستون رو در تنظیماتی که تو کد دلفی نوشتم قبل از لود شدن گزارش اعمال می کنم)می خواهم درصورتی روی ریپورت اعمال شود که کاربر سیستم در محیط طراحی که در اختیارش قرار گرفته روی آن ستون گزارش تغییری نداشته باشد.
حالا چطور می تونم بعد از تغییرات کاربر و گرفتن پیش نمایش در دفعات بعدی تشخیص دهم که گزارش یکی از ستون ها بوسیله کاربر تغییر پیدا کرده است و تنظیمات رو نباید روی آن اعمال نمایم.

خوب همونطور که عرض ستون رو تغییر میدی، به همون روش مقدارش رو بخون ببین کاربر تغیییر داده یا نه!

مثلا:


procedure TForm1.Button1Click(Sender: TObject);
var
Memo1: TfrxMemoView;
begin
frxReport1.LoadFromFile('C:\Users\Admin\Desktop\De mos\simple_sqlite\11.fr3');
Memo1 := frxReport1.FindObject('Memo1') as TfrxMemoView;
ShowMessage(Memo1.Text);
ShowMessage(FloatToStr( Memo1.Width));
end;


هرچند پیشنهاد اینه که گزارش پیش فرضت مثلا Report_Salary_Base باشه. برای هر کاربری بصورت پیش فرض اینو که دارای تنظیمات اولیه ست لود میکنی.(تنظیماتی که در حالت دیزین اعمال کردی و سپس ذخیره کردی، نه تنظیماتی که با کد در دلفی ست کنی)

حالا کاربر شماره 1 میاد گزارش رو در حالت طراحی بازمیکنه. 2 حالت پیش میاد: یا تغییرش میده، یا تغییر نمیده.
1-اگر تغییر نداد: همون گزارش Report_Salary_Base رو لود می کنی.
3- اگر تغییر داد: گزارش رو با نام Report_Salary_User1_1 ذخیره کرده و اونو لود میکنی.

حالا برای دفعه بعد که همین کاربر خواست گزارش بگیره ازش میپرسی گزارش Report_Salary_Base(یا همون گزارش پیش فرض) رو لود کنه یا آخرین گزارشی که توش تغییرات داده(البته همین پروسه میتونه برای رفتن به حالت دیزاین هم اتفاق بیافته)

برای سایر کاربران هم که پروسه بالا تکرار میشه