View Full Version : سوال: استفاده از دو جدول در یک گزارش در stimul ؟؟
moeinih
یک شنبه 01 مرداد 1391, 15:46 عصر
با سلام
پروژه ای که من دارم طراحی می کنم پروژه نوبت دهی و مدیریت عملیات یک مطب دندانپزشکیه که تو طراحی گزارش ماهانه مطب به سازمان تامین اجتماعی به مشکل خوردم قبلا سوالم رو تو سایت پرسیده بودم که شما خواستید تا نمونه فایلم رو بفرستم .
لازمه بگم من از ویژوال استودیوی 2010 , sql server 2008 برای این پروژه استفاده کردم.
من توی دیتابیسم دو تا جدول دارم.جدول tbl_matab که اطلاعات مطب (نام و نام خانوادگی دندانپزشک و آدرس و شماره تلفن مطب و شماره نظام پزشکی و اینجور موارد) –جدول tbl_nobatdehi که اطلاعات نوبتهای اختصاص داده شده به مراجعین (از جمله مشخصات بیمار-نوع بیمه-شماره بیمه –علت مراجعش و..) هست.
گزارشی که باید برای تامین اجتماعی ماهیانه ارسال بشه به شکل جدولی هست که ضمیمه کردم.
مشکل من در طراحی این گزارش اینه که میخوام کوئری های حاصل از دو تا جدول توی گزارش مشاهده بشه این دو تا کوئری به شکل زیر هستند :
select no_nezam,fname,lname,takhasos,city from tbl_matab
که اطلاعات مطب رو برام استخراج میکنه
select reason,count(reason) as cnt from tbl_nobatdehi where type_bimeh=N'تامین اجتماعی' group by reason
که مشخص میکنه از هر نوع خدمت چند مورد انجام شده یا ویزیت شده
****
select type_noskheh,count(type_noskheh) as cnt from tbl_nobatdehi where type_bimeh=N'تامین اجتماعی' group by type_noskheh
که مشخص میکنه که از هر نوع نسخه (ویزیت عادی-ویزیت خاص-جنبی عادی-خدمات جنبی خاص) چند مورد نسخه داده شده یا نویت داده شده
نکته : هر کدوم از این کوئری ها جداگانه تو گزارش میاد و مشکلی نداره ولی چند تا باهم نمیتونم بیارم فقط یکیش میاد.
arman_Delta2002
یک شنبه 01 مرداد 1391, 18:37 عصر
من همزمان اطلاعات 5 تا جدول رو میریزم تو سیمولار به این صورت که هر جدول رو به یک اسم فیلل میکنم تو یک دیتا ست بعد دیتا ست رو میفرستم به سیمولا
aslan
یک شنبه 01 مرداد 1391, 18:52 عصر
سلام
راههای مختلفی میتونین پیش بگیرین
مثلا :
3تا datasource را به گزارش ارسال کنین و بقیه کارا را در Page گزارش انجام بدین
ویا
بنظر من با توجه به اینکه سلکت های اول و دومتون ثابت هستش ( ردیف های تکرار شونده ندارند ) بهتر است این اطلاعات را توسط Variable به گزارش ارسال کنین و سلکت بعدی را توسط datasource , .......
و راههای دیگه ای هم میتونه داشته باشه
moeinih
دوشنبه 02 مرداد 1391, 19:01 عصر
لطفا توضيح بيشتر بدين من نميدونم چكار بايد بكنم من يه نمونه گزارشي كه ساختم ضميمه مي كنم
aslan
دوشنبه 02 مرداد 1391, 22:12 عصر
اگر مشکلتون در بخش تعداد نسخ عادی و ..... میباشد بشکل زیر عمل کنید
.....
Stimulsoft.Report.StiReport stiReport1 = new Stimulsoft.Report.StiReport();
stiReport1.Load(System.Windows.Forms.Application.S tartupPath + "\\Report\\rpttamin.mrt");
// مسیر فایل گزارش را اصلاح کنید
int V_Addi= سلکت مناسب براي بدست آوردن تعداد ويزيت عادي
int V_Khas = سلکت مناسب براي بدست آوردن تعداد ويزيت خاص
int J_Addi= ................
int J_Khas= ...................
stiReport1.Dictionary.Variables["Visit_Addi"].Value = V_Addi.ToString();
stiReport1.Dictionary.Variables["Visit_Khas"].Value = V_Khas.ToString();
stiReport1.Dictionary.Variables["Janbi_Addi"].Value = J_Addi.ToString();
stiReport1.Dictionary.Variables["Janbi_Khas"].Value = J_Khas.ToString();
//Visit_Addi و Visit_Khas و .....
//بعنوان Variables
//در Dictionary
//گزارش تعريف شده اند
stiReport1.Compile();
stiReport1.Show();
moeinih
سه شنبه 03 مرداد 1391, 12:06 عصر
واقعا ممنونم مشکل نوع و تعداد نسخه ها حل شد حتی میتونم تو جدول پایینیش نوع خدمت و تعداد از هر نوع خدمت رو ببینم فقط یه مشکل میمونه اونم اینکه من بالای گزارش تو قسمت Page header میخوام تو جاهای مناسب فیلدهای جدول tbl_matab رو که مشخصات دندانپزشک مثل نام و تخصص و شماره نظام پزشکی هست درج کنم چه تغییراتی باید توی این کد بدم؟؟؟ ضمن اینکه تو گزارش من یک datasourse جداگانه برای جدول مطب گذاشتم .
اینم کد تابع fillreport من که تا اینجا به کمک شما اصلاح شده :
public void fillreport( string streport)
{
SqlConnection scon = new SqlConnection("server=(local);database=matab;trusted_connection=t rue");
connectcls c=new connectcls();
string sV_Addi=c.fil("select count(type_noskheh) as cntnoskheh from tbl_nobatdehi where type_noskheh=N'ویزیت عادی'","tbl_nobatdehi").Tables[0].Rows[0][0].ToString();
string sV_Khas=c.fil("select count(type_noskheh) as cntnoskheh from tbl_nobatdehi where type_noskheh=N'ویزیت خاص'","tbl_nobatdehi").Tables[0].Rows[0][0].ToString();
string sJ_Addi=c.fil("select count(type_noskheh) as cntnoskheh from tbl_nobatdehi where type_noskheh=N'خدمات جنبی عادی'","tbl_nobatdehi").Tables[0].Rows[0][0].ToString();
string sJ_Khas=c.fil("select count(type_noskheh) as cntnoskheh from tbl_nobatdehi where type_noskheh=N'خدمات جنبی خاص'","tbl_nobatdehi").Tables[0].Rows[0][0].ToString();
int V_Addi=Convert.ToInt32( sV_Addi);
int V_Khas =Convert.ToInt32( sV_Khas);
int J_Addi=Convert.ToInt32( sJ_Addi);
int J_Khas= Convert.ToInt32( sJ_Khas);
SqlCommand cmd = new SqlCommand();
cmd.Connection = scon;
cmd.CommandText = "select reason,count(reason) as cnt from tbl_nobatdehi where type_bimeh=N'تامین اجتماعی' group by reason";
scon.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
StiReport stiReport1=new StiReport();
stiReport1.Load(streport);
stiReport1.Dictionary.Variables["Visit_Addi"].Value = V_Addi.ToString();
stiReport1.Dictionary.Variables["Visit_Khas"].Value = V_Khas.ToString();
stiReport1.Dictionary.Variables["Janbi_Addi"].Value = J_Addi.ToString();
stiReport1.Dictionary.Variables["Janbi_Khas"].Value = J_Khas.ToString();
stiReport1.RegData("Modaresin2", ds.Tables[0].DefaultView);
stiReport1.Compile();
stiReport1.Show();
scon.Close();
}
aslan
سه شنبه 03 مرداد 1391, 13:03 عصر
خب اطلاعات جدول را
stiReport1.RegData("Modaresin2", ds.Tables[0].DefaultView);
stiReport1.RegData("Matab", ds.Tables[0].DefaultView);
ارسال کنید به گزارش و بعد فیلدهای مورد نظرتون را در جاهای مناسب روی گزارش قرار دهید
moeinih
سه شنبه 03 مرداد 1391, 18:59 عصر
يعني تو همون ديتاست ds؟؟؟؟
آخه من ديتاست جداگانه درست كردم بنام ds1 و بعد
stiReport1.RegData("Matab", ds1.Tables[0].DefaultView);
رو نوشتم ولي خطا داد نشد كلافم كرده
aslan
سه شنبه 03 مرداد 1391, 19:38 عصر
نه تو همون دیتاست منظورم نبود . کدی که نوشتین درسته ظاهرا .
چه خطایی میده ؟
moeinih
سه شنبه 03 مرداد 1391, 22:24 عصر
خطا نمیده ولی چیزی هم از جدول مطب نشون نمیده این کد تغییر داده منه :
public void fillreport( string streport)
{
SqlConnection scon = new SqlConnection("server=(local);database=matab;trusted_connection=t rue");
connectcls c=new connectcls();
string sV_Addi=c.fil("select count(type_noskheh) as cntnoskheh from tbl_nobatdehi where type_noskheh=N'ویزیت عادی'","tbl_nobatdehi").Tables[0].Rows[0][0].ToString();
string sV_Khas=c.fil("select count(type_noskheh) as cntnoskheh from tbl_nobatdehi where type_noskheh=N'ویزیت خاص'","tbl_nobatdehi").Tables[0].Rows[0][0].ToString();
string sJ_Addi=c.fil("select count(type_noskheh) as cntnoskheh from tbl_nobatdehi where type_noskheh=N'خدمات جنبی عادی'","tbl_nobatdehi").Tables[0].Rows[0][0].ToString();
string sJ_Khas=c.fil("select count(type_noskheh) as cntnoskheh from tbl_nobatdehi where type_noskheh=N'خدمات جنبی خاص'","tbl_nobatdehi").Tables[0].Rows[0][0].ToString();
int V_Addi=Convert.ToInt32( sV_Addi);
int V_Khas =Convert.ToInt32( sV_Khas);
int J_Addi=Convert.ToInt32( sJ_Addi);
int J_Khas= Convert.ToInt32( sJ_Khas);
SqlCommand cmd = new SqlCommand();
SqlCommand cmd1 = new SqlCommand();
cmd.Connection = scon;
cmd.CommandText = "select reason,count(reason) as cnt from tbl_nobatdehi where type_bimeh=N'تامین اجتماعی' group by reason";
cmd1.CommandText ="select no_nezam,fname,lname,takhasos,city from tbl_matab";
scon.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
SqlDataAdapter da1 = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
DataSet ds1=new DataSet();
da.Fill(ds);
da1.Fill(ds1);
StiReport stiReport1=new StiReport();
stiReport1.Load(streport);
stiReport1.Dictionary.Variables["Visit_Addi"].Value = V_Addi.ToString();
stiReport1.Dictionary.Variables["Visit_Khas"].Value = V_Khas.ToString();
stiReport1.Dictionary.Variables["Janbi_Addi"].Value = J_Addi.ToString();
stiReport1.Dictionary.Variables["Janbi_Khas"].Value = J_Khas.ToString();
stiReport1.RegData("Modaresin2", ds.Tables[0].DefaultView);
stiReport1.RegData("doctor", ds1.Tables[0].DefaultView);
stiReport1.Compile();
stiReport1.Show();
scon.Close();
}
اینم فایل گزارش تغییر یافته که ضمیمه کردم
moeinih
سه شنبه 03 مرداد 1391, 23:03 عصر
این خطا رو میده :
این کدی که تغییرش دادم
public void fillreport( string streport)
{
SqlConnection scon = new SqlConnection("server=(local);database=matab;trusted_connection=t rue");
connectcls c=new connectcls();
string sV_Addi=c.fil("select count(type_noskheh) as cntnoskheh from tbl_nobatdehi where type_noskheh=N'ویزیت عادی'","tbl_nobatdehi").Tables[0].Rows[0][0].ToString();
string sV_Khas=c.fil("select count(type_noskheh) as cntnoskheh from tbl_nobatdehi where type_noskheh=N'ویزیت خاص'","tbl_nobatdehi").Tables[0].Rows[0][0].ToString();
string sJ_Addi=c.fil("select count(type_noskheh) as cntnoskheh from tbl_nobatdehi where type_noskheh=N'خدمات جنبی عادی'","tbl_nobatdehi").Tables[0].Rows[0][0].ToString();
string sJ_Khas=c.fil("select count(type_noskheh) as cntnoskheh from tbl_nobatdehi where type_noskheh=N'خدمات جنبی خاص'","tbl_nobatdehi").Tables[0].Rows[0][0].ToString();
int V_Addi=Convert.ToInt32( sV_Addi);
int V_Khas =Convert.ToInt32( sV_Khas);
int J_Addi=Convert.ToInt32( sJ_Addi);
int J_Khas= Convert.ToInt32( sJ_Khas);
SqlCommand cmd = new SqlCommand();
SqlCommand cmd1 = new SqlCommand();
cmd.Connection = scon;
cmd.CommandText = "select reason,count(reason) as cnt from tbl_nobatdehi where type_bimeh=N'تامین اجتماعی' group by reason";
cmd1.CommandText ="select no_nezam,fname,lname,takhasos,city from tbl_matab where no_nezam='1300'";
scon.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
SqlDataAdapter da1 = new SqlDataAdapter(cmd1);
DataSet ds = new DataSet();
DataSet ds1=new DataSet();
da.Fill(ds);
da1.Fill(ds1);
StiReport stiReport1=new StiReport();
stiReport1.Load(streport);
stiReport1.Dictionary.Variables["Visit_Addi"].Value = V_Addi.ToString();
stiReport1.Dictionary.Variables["Visit_Khas"].Value = V_Khas.ToString();
stiReport1.Dictionary.Variables["Janbi_Addi"].Value = J_Addi.ToString();
stiReport1.Dictionary.Variables["Janbi_Khas"].Value = J_Khas.ToString();
stiReport1.RegData("Modaresin2", ds.Tables[0].DefaultView);
stiReport1.RegData("doctor", ds1.Tables[0].DefaultView);
stiReport1.Compile();
stiReport1.Show();
scon.Close();
}
aslan
چهارشنبه 04 مرداد 1391, 00:22 صبح
cmd1.Connection=??
moeinih
چهارشنبه 04 مرداد 1391, 13:47 عصر
ممنونم بابت نکته cmd1.Connection=?? اصلاحش کردم الان خطا نمیده ولی بازم اطلاعات پزشک تو گزارشم نمیاد جاش خالیه
aslan
چهارشنبه 04 مرداد 1391, 14:22 عصر
اصلاحش کردم الان خطا نمیده ولی بازم اطلاعات پزشک تو گزارشم نمیاد جاش خالیه
حتی با فایل ضمیمه پست شماره 12 ؟؟
behroozshAfAAti
چهارشنبه 04 مرداد 1391, 16:39 عصر
سلام،ببخشید اشتب پیش اومد
moeinih
چهارشنبه 04 مرداد 1391, 18:39 عصر
آره همون فايل پست 12 رو كپي كردم نشد
ولی رفتم متغیر تعریف کردم با متغیر درستش کردم اما خوب اگه جور بشه که بتونم راحت تر یعنی با دیتاست بفرستمش کارم خیلی راحت میشه چون تو چند تا از گزارشای دیگم هم اینو میخوام که بتونم از چند جدول تو گزارشم استفاده کنم
mehran_tat2004
پنج شنبه 09 شهریور 1391, 23:27 عصر
سلام
دوستان من یک گزارش درست کردم
و design کردم و دیتاسورس رو تعیین کردم و اطلاعات رو بدرستی نشون میده
اما این بصورت ثابت هست و با designer خود استیمال این کارو کردم
اگر بخوام توی محیط کد نویسی دیتاست رو تغییر بدم و یه رکوردهای خاصی رو نشون بدم باید چیکار کرد؟
من میدونم که اون رکورد ها رو بخونم و توی یک دیتاست قرار بدم و با دستور RegData() باید اون دیتاست رو وصل کنم به گزارش
این کارو میکنم ولی وقتی گزارش رو show() میکنم اطلاعات قبلی رو نشون میده و اطلاعات دیتاست فیلتر شده رو نمیده.دیتاست فیلتر شده رو توی یک گرید تست کردم رکوردهای مورد نظرم درونش هست و لی نمیدونم چرا گزارش اطلاعات این دیتاست رو نشون نمیده و دیتاستی رو نشون میده که موقع طراحی گزارش ازش استفاده کردم.
یعنی انگار دیتاست رو قبول نمیکنه و اطلاعات همون دیتاستی رو نشون میده که موقع طراحی بهش وصل کردم.هیچ خطایی هم نمیده
مثلا موقع طراحی من table1 رو توی گزارش درگ کردم و فیلها ساخته شد و اطلاعات رو نشون میده
توی یک باتن کد زیر رو نوشتم که موقع runTime دیتاست عوض بشه و اطلاعات دلخواه من نشون داده بشه نه تمام رکوردها
stiReport1.RegData(ds.Tables[0])
stiReport1.Show()
لطفاکمک کنید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.