PDA

View Full Version : سوال: ارسال فیلتر تاریخ به گزارش stimul



sgn2006
جمعه 16 فروردین 1392, 01:31 صبح
سلام
من تازه با stimul آشنا شدم ، قبلا کریستال کار می کردم ....
یه سوال برای من پیش اومده

فرض کنید من یکسری داده توی یک بازه زمانی خاص می خوام چه جوری باید فیلترش رو پاس بدم به stimul ، من توی کریستال ریپرت تاریخ رو از نوع string می گرفتم و با دستور ساده
'Date1>='1391/11/01 00:00' and Date1<='1391/11/30 23:59 انجام می دادم ولی ظاهرا در stimul باید تاریخ رو به میلادی تبدیل کنم ... اگر بخوام این کار رو بکنم باید ساعت رو هم برا stimul بفرستم ودر نتیجه تغییر دیتابیسی خواهم داشت و این اصلا منطقی نیست توی یه دیتابیس 500mb بخوام ستون تاریخ و ساعت رو جداکنم...
لطفا راهنماییم کنید چه جوری تاریخ رو string پاس بدم و در اون بازه ای که می خوام اطلاعات رو نشونم بده...


با تشکر از همه دوستان عزیز

aslan
جمعه 16 فروردین 1392, 02:33 صبح
سلام
دوست عزیز چه نیازیه که شما فیلتر را به استیمول پاس بدین و ..................
کافیه که اطلاعات فیلتر شده را به استیمول بفرستین . چگونگی اعمال فیلتر هم برمیگرده به ساختار بانک اطلاعاتی و منطق برنامه تون
موفق باشین.

sgn2006
جمعه 16 فروردین 1392, 11:10 صبح
سلام دوست عزیز

ممنون از پاسختون ، اگر بخوام اطلاعات فیلتر شده رو به stimul بفرستم باید یک کوئری sql تولید کنم و اجراش کنم و در نهایت نتیجه اجرا رو به stimul بفرستم ؟
امکانش هست یه مثال بزنید من بهتر متوجه بشم....

با تشکر....

aslan
جمعه 16 فروردین 1392, 15:00 عصر
سلام دوست عزیز

ممنون از پاسختون ، اگر بخوام اطلاعات فیلتر شده رو به stimul بفرستم باید یک کوئری sql تولید کنم و اجراش کنم و در نهایت نتیجه اجرا رو به stimul بفرستم ؟
امکانش هست یه مثال بزنید من بهتر متوجه بشم....

با تشکر....

بله دقیقا
نمیدونم مثال از دستور سلکت / نحوه فیلتر کردن و ..... بزنم براتون یا ارسال اطلاعات به ریپورت
با فرض اینکه اطلاعات واکشی شده شما ( و همچنین فیلتر شده ) در داخل دیتاست ی بنام ds میباشد ارسال آن به گزارش بصورت زیر میباشد :


Stimulsoft.Report.StiReport stiReport1 = new Stimulsoft.Report.StiReport();
stiReport1.Load(System.Windows.Forms.Application.S tartupPath + "\\Report\\RepMahsoul.mrt");
stiReport1.RegData(ds);
stiReport1.Compile();
// stiReport1.Design();
stiReport1.Show();

موفق باشید
پیشنهادم استفاده از مطالب فروم سایت استیمول میباشد

sgn2006
شنبه 17 فروردین 1392, 16:49 عصر
سلام

امتحان کردم و جواب گرفتم ، حالا یه مسئله ای ایجاد می شه و اونم اینه که گزارشهایی که ساخته می شه همه چیزش دست خودمه (یعنی ایستا می شه) اگر کاربر یه درخواست کوچیک یا یک گزارش جدید بخواد خودم باید بسازم ، من قبلا روشی که داشتم به این صورت بود که کاربر کاری به من نداشت یه گزارش با کریستال ریپرت می ساخت توی برنامه اضافه می کرد و با توجه به فیلترهایی که فرم گزارش داره می تونه خروجی بگیره اما با این حالت همه چیز از دست کاربر خارج می شه...
آیا با این روشی که شما فرمودید می شه گزارش از نوع دینامیک ساخت؟

aslan
شنبه 17 فروردین 1392, 19:51 عصر
سلام

امتحان کردم و جواب گرفتم ، حالا یه مسئله ای ایجاد می شه و اونم اینه که گزارشهایی که ساخته می شه همه چیزش دست خودمه (یعنی ایستا می شه) اگر کاربر یه درخواست کوچیک یا یک گزارش جدید بخواد خودم باید بسازم ، من قبلا روشی که داشتم به این صورت بود که کاربر کاری به من نداشت یه گزارش با کریستال ریپرت می ساخت توی برنامه اضافه می کرد و با توجه به فیلترهایی که فرم گزارش داره می تونه خروجی بگیره اما با این حالت همه چیز از دست کاربر خارج می شه...
آیا با این روشی که شما فرمودید می شه گزارش از نوع دینامیک ساخت؟
سلام
من خیلی وقتها پیش با کریستال کار کردم و الان هم با استیمول دارم کار میکنم . مطمئن باش کاری را کا با کریستال میتونی انجام بدی خیلی راحتتر و بسادگی میتونی با استیمول انجام بدی فقط باید یک کم باهاش کار کنی و ............
1- روش اول :در این نوع گزارشگیری شما دیزاین ریپورت را انجام میدین ( از نظر فیلدهای قابل نمایش - محل قرار گیری - گروهبندی و .... ) و اطلاعات قابل نمایش و به ریپورت ارسال میکنین و ... فیلتر های مربوط به اطلاعات را با طراحی فرمی در محیط برنامه تون انجام میدین
2- روش دوم : همون روش بالا با این تفاوت که طراحی فرم مربوط به فیلتر اطلاعات را در محیط استیمول انجام میدین که طبیعی است اطلاعات ارسالی به گزارش حجیم تر خواهد بود ( به احتمال زیاد )
3- روش سوم : ارسال اطلاعات قابل نمایش به ریپورتر و دادن مجوز Design گزارش به کاربر که در مثال بالا کافی است کد زیر را به برنامه تون اضافه کنین

stiReport1.Design();
در صورت استفاده از این روش بهتر است برای جلوگیری از نمایش همیشگی محیط دیزاین گزارش این موضوع را موکول به انتخاب کاربر بکنید . مثلا با یک چک باکس
4- روش چهارم : نماش کل یا بخشی از اطلاعات در محیط نرم افزار مثلا با استفاده از دیتاگریدویو و امکان انتخاب فیلدهای مورد نظر کاربر از گرید و ایجاد گزارش بصورت RunTime . کلیه بخشهای گزارش ( کانکشن - دیتاسورس - گروهبندی - هیدر و فیلتر و ..............................) از طریق برنامه نویسی قابل اعمال و کنترل و تغییر میباشد ......... نمونه کوجکی از این نوع گزارش را میتونید در یکی از پستهای من پیدا کنید و نمونه های دیگری هم در سایت موجود است
5 - ............. و خیلی روشهای دیگر که قابل انجام است
شک نکنید که این گزارش ساز فوق العاده کارا - منعطف - قوی و ....بوده و کار با آن سخت نیست

sgn2006
شنبه 17 فروردین 1392, 20:41 عصر
سلام ، ممنون از اطلاعات مهمتون .... مطمئنن با راهنمایی های شما حتما می تونم با stimul هم مثل کریستال کار کنم و حتی بهتر

من می خوام دیزاین گزارش رو بسازم و از طریق نرم افزار فیلتر ها رو به گزارش بفرستم و خروجی بدم یعنی همون روش اول یا به عبارتی روش دوم....
من گزارش رو اون جوری که می خوام ساختم ، از طریق برنامه هم تونستم بهش پارامتر ارسال کنم و خروجی هم گرفتم حالا مسئله من اینه که وقتی تاریخ رو توی یک بازه خاص ارسال می کنم خطا می ده چون تاریخی که من در db ذخیره می کنم به صورت (16)nvarchar می باشد که 10 تا مربوط به تاریخ و 5 تا مربوط به ساعت و یک کاراکتر برای جدا کننده است. وقتی یک بازه خاصی رو به stimul ارسال می کنم خطا می ده و معنی خطاش اینه که نمی تونه با عملیات >= و <= کار کنه....
در بالای تاپیک سوالم رو مطرح کردم و شما لطف کردید جواب دادید و جوابتون هم کاملا منطقی است ولی این روش باعث می شه من توی ساخت گزارش محدود بشم و ممکن بعد ها نتونم نیازهای پیچیده کاربران رو پاسخ بدم....
سوال من ایجاست : اگر بخوام بازه زمانی ارسال کنم به stimul چه راههایی وجود داره؟


با تشکر

aslan
شنبه 17 فروردین 1392, 23:36 عصر
وقتی یک بازه خاصی رو به stimul ارسال می کنم خطا می ده و معنی خطاش اینه که نمی تونه با عملیات >= و <= کار کنه....
این جمله تون زیاد مفهوم نیست . چه جوری ارسال میکنین ؟ ؟؟؟؟؟؟؟ من فکر میکنم در صورتیکه با پارامتر به استیمول ارسال کنین بهتون خطا نده . به احتمال زیاد منظورتون اعمال فیلتر ( بازه زمانی بصورت مقایسه ای بزرگتر از .... کوجکتر از ........ ) در مثلا Where دستور Select تون در SQL باشه ( در واقع TSQL ) . درست میگم یا نه ؟
در صورتیکه اشتباه میکنم و این خطا در سطح استیمول اتفاق میافته نحوه عملتون را شرح دهید و یا فایل ریپورت را بزارید / یا اون تیکه از کدتون را بزارید تا بشه دقیقتر بررسی کرد ...........

sgn2006
یک شنبه 18 فروردین 1392, 15:19 عصر
سلام ، خسته نباشید

بله کاملا درست می گید ... من می خوام بازه زمانی بصورت مقایسه ای استفاده کنم همانطور که در TSQL استفاده می کنم و در استیمول این اتفاق نمی افته و خطا می ده ، پارامترهامو درست ارسال می کنم ، من الان به فایل گزارش و سورسم دسترسی ندارم در اولین فرصت تکه کدی که برای ارسال پارامتر استفاده کردم + گزارش براتون می زارم ولی کد درسته چون بدون استفاده از فیلتر تاریخ ازش خروجی گرفتم ، در خود نرم افزار استیمول هم می خوام بر اساس بازه زمانی فیلتر کنم خطا می گیره ....
من اینجوری متوجه شدم که فیلدهای string رو نمی شه عملیات مقایسه ای روشون انجام داد .... این خیلی برای من بده
لطفا یه مثال برای من بزنید که چه جوری می شه یک تاریخ رو در خود نرم افزار stimul براساس یک بازه خاص فیلتر کرد؟

با تشکر

aslan
یک شنبه 18 فروردین 1392, 18:00 عصر
سلام
عجالتا :
من با sql2000
با فیلد ُSdate با ساختار nvarchar(16)
و با اطلاعاتی شبیه
23:33 1391/01/01
05:22 1392/12/21
و با دستور سلکت زیر جواب میگیرم و هیچ خطایی نداره


SELECT *
FROM Personal
WHERE (Sdate >= '1391/01/01 23:59') AND (Sdate <= '1391/02/15 16:42')

و همچنین


SELECT *
FROM Personal
WHERE (Sdate >= '1391/01/01') AND (Sdate <= '1391/02/15')

در صورتیکه هنوز مشکلتون حل نشده فایلهای لازم و برام ارسال کنین
موفق باشید

sgn2006
دوشنبه 19 فروردین 1392, 20:13 عصر
سلام

دستور Select شما کاملا درسته و من با این دستور خروجی گرفتم اما مسئله من اینه که دستور (Sdate >= '1391/01/01') AND (Sdate <= '1391/02/15') در استیمول کار نمی کنه و خطا می ده ، من یه پله می آم عقب ، کاری به ارسال پارامتر ندارم از طریق #C ندارم ، این دستور حتی در خود نرم افزار استیمول خطا می ده .....

sgn2006
دوشنبه 19 فروردین 1392, 20:19 عصر
این فایل گزارش ، لطفا به فیلتر هاش نگاه کنین ، گزارش رو اجرا می کنم به تاریخ ایراد می گیره

fakhravari
دوشنبه 19 فروردین 1392, 20:35 عصر
بهترین روش دادن دیتاتیبل به برنامه است وقتی نمیتونید به SQL اتصال دهید.

sgn2006
دوشنبه 19 فروردین 1392, 21:05 عصر
بهترین روش دادن دیتاتیبل به برنامه است وقتی نمیتونید به SQL اتصال دهید.


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

aslan
سه شنبه 20 فروردین 1392, 00:29 صبح
سلام
من فایل و دیدم
ورژن استیمول من پایینه . ظاهرا در ورژن های اخیر توابعی جهت مقایسه و تبدیل تاریخ فارسی ( ظاهرا به اسم DateFa) گنجانده شده یه تحقیق در موردش بکنید
- راه حل دیگه ایجاد توابع تبدیل توسط خودتون در محیط #C و ضمیمه و استفاده کردن آن در استیموله
- راه حل سریع هم استفاده از توابع Substring , int.Parse در فیلتر استیمول جهت تبدیل تاریخ فارسی و امکان مقایسه آن بصورت int در استیموله که این مورد و من تست کردم و جواب گرفتم
- سایر راهها هم در محیط SQL ...... وجود داره کا بنابه دلایلی که ذکر کردین تمایلی به استفاده از آنها ندارین .
...........
موفق باشید