ورود

View Full Version : استفاده از stored procedure در formula fields



SARA86
یک شنبه 11 مرداد 1388, 21:38 عصر
با سلام
می خواستم ببینم چطور از stored procedure در formula fieldsمی شه استفاده کرد؟

شبیه این سوال قبلا مطرح شده:

http://barnamenevis.org/forum/showthread.php?t=100420

اما جوابی داده نشده!

ممنون می شم اگه پاسخ بدید...

nooshin964
یک شنبه 11 مرداد 1388, 22:49 عصر
شما میتوانید به شکل زیر استفاده کنید.
sp_MystoredProcedure;1

SARA86
دوشنبه 12 مرداد 1388, 11:23 صبح
شما میتوانید به شکل زیر استفاده کنید.
sp_MystoredProcedure;1


می شه بیشتر توضیح بدید؟
ممنون:قلب:

nooshin964
دوشنبه 12 مرداد 1388, 15:33 عصر
بعد از وصل کردن گزارشتان به sp مورد نظر میتوانید در قسمت فرمول نویسی و یا انتخاب SelectionFormula از این روش استفاده بفرمایید:
{sp_MySp;1.MyFieldName}
در واقع عین نام جدول میبایست ازش استفاده کنید . ولی آخرش ;1 هم باید باشد.

SARA86
دوشنبه 12 مرداد 1388, 18:20 عصر
بعد از وصل کردن گزارشتان به sp مورد نظر میتوانید در قسمت فرمول نویسی و یا انتخاب SelectionFormula از این روش استفاده بفرمایید:
{sp_MySp;1.MyFieldName}
در واقع عین نام جدول میبایست ازش استفاده کنید . ولی آخرش ;1 هم باید باشد.


من ازstored procedure به این شکل در بخشselection formula قسمت record selection استفاده کردم:

{Crystal_sp1;1.code kala}

اما یک error می ده!

the result of selection formula must be a boolean

نمی دونم مشکل چیه؟!

SARA86
سه شنبه 13 مرداد 1388, 18:50 عصر
پس کجایین؟:افسرده:

من زیاد وقت ندارم!:گریه:

nooshin964
چهارشنبه 14 مرداد 1388, 08:56 صبح
نحوه صحیح استفاده از آن بسته به نوع فیلد کد کالا به این شکل میباشد:
'112121'={Crystal_sp1;1.code kala}

SARA86
چهارشنبه 14 مرداد 1388, 21:08 عصر
نحوه صحیح استفاده از آن بسته به نوع فیلد کد کالا به این شکل میباشد:
'112121'={Crystal_sp1;1.code kala}


یه سوال! عدد 112121 یا مقدار جلوی مساوی چه کاری انجام میده؟

stored procedure من به این شکله که می خوام فیلد کد کالای چند رکورد جدول رو که دارای مقادیر مساوی کد فاکتور(کد فاکتور خاص) هستن رو برگردونه(گزارشگیری از جدول فاکتور)

اما متاسفانه مشکلم حل نشد!:ناراحت:

لطفا پاسخ بدید ممنون:قلب:

bad_boy_2007
پنج شنبه 15 مرداد 1388, 20:54 عصر
چرا با پارامتر از برنامه تان اين كار را نميكنيد ؟
قبول دارم كه اگه خود كريستال بياد و استورد پروسيجر رو فراخواني كنه بهتره (نه از لحلظ سرعت ، از لحاظ خوانايي) ولي اگر براي هر مشكلتون يك هفته معطل بشيد كه پرو‍ژه تان به اين زودي به جواب نميرسد !
در كل بخاطر مشكلاتي كه كانكشن كريستال واسه من بوجود آورده ، تمامي گزارشاتم را بر پايه ديتاست انداختم و مقادي خاص رو هم با پارامتر به گزارش پاس ميدم . نه تنها سرعت كار بهتر شده (شايد در حدود 30%) بلكه ديگر مشكلات كانكشن و موارد مشابه را هم ندارم .


عدد 112121 یا مقدار جلوی مساوی چه کاری انجام میده؟

اون عدد ، پارامتري هست كه بايد به StoredProcedure پاس داده شود ، براي شما اين عدد ميتواند شماره فاكتورتان باشد .

SARA86
پنج شنبه 15 مرداد 1388, 23:52 عصر
چرا با پارامتر از برنامه تان اين كار را نميكنيد ؟
قبول دارم كه اگه خود كريستال بياد و استورد پروسيجر رو فراخواني كنه بهتره (نه از لحلظ سرعت ، از لحاظ خوانايي) ولي اگر براي هر مشكلتون يك هفته معطل بشيد كه پرو‍ژه تان به اين زودي به جواب نميرسد !
در كل بخاطر مشكلاتي كه كانكشن كريستال واسه من بوجود آورده ، تمامي گزارشاتم را بر پايه ديتاست انداختم و مقادي خاص رو هم با پارامتر به گزارش پاس ميدم . نه تنها سرعت كار بهتر شده (شايد در حدود 30%) بلكه ديگر مشكلات كانكشن و موارد مشابه را هم ندارم .


اون عدد ، پارامتري هست كه بايد به StoredProcedure پاس داده شود ، براي شما اين عدد ميتواند شماره فاكتورتان باشد .

خیلی ممنون از کمکتون:بوس:
من دارم از پارامتر استفاده می کنم به این شکل که ورودی رو با پارامتر می گیرم و اون رو به Stored procedure میدم به این شکل:

{Crystal_sp1;1.code kala}={?P1}

منظور شما همین بود؟

اما با error زیر مواجه می شم!

A number in required here

چون جلوی مساوی باید یه عدد قرار بگیره!

مشکل کجاست نمی دونم:ناراحت:

bad_boy_2007
جمعه 16 مرداد 1388, 11:38 صبح
نه ، منظور من ارسال پارامتر به گزارش از طريق نرم افزار خودتو (كد نويسي در زبان برنامه نويسي تان) هست

مثلا ، فرض كنيم ميخواهيم تاريخ شمسي امروز را در گزارشتان داشته باشي و اين تاريخ را در نرم افزارتان ميتوانيد محاسبه كنيد . كد C# :



CrystalDecisions.CrystalReports.Engine.YourReportr pt = new YourReport();

و بجاي اينكه كانكشن را به گزارشتان بفرستيد ، همينجا داده ها را در يك ديتاست با كنيد :

YorDataset ds = new YorDataset();
SqlConnection cn = new SqlConnection(YourConnectionString);
SqlCommand cmd = new SqlCommand(cn, "");
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.SelectCommand = cmd;
cmd.Connection = cn;
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("@YoyrParameter",SqlDbType.Int ).Value=ID.ToString ();
//Other Parameter Post Like Top Parameter
cmd.CommandText = "[dbo].[BackSellGetBackSell]";
da.SelectCommand = cmd;
da.Fill(ds.SellBack );
cmd.CommandText = "BackSellGetBackSellDetails";
da.Fill(ds.SellBackDetail );
cmd.CommandText = "BackSellGetProductsVahed";
ds.Products_vahed.Clear();
da.Fill(ds.Products_vahed );
cmd.CommandText = "BackSellGetAnbar";
da.Fill(ds.Products_anbar );
cmd.CommandText = "BackSellGetProducts";
da.Fill(ds.Products);
cn.Close();
CrystalDecisions.CrystalReports.Engine.ReportDocum ent rpt = new RPTBackSell();
rpt.SetDataSource(ds);

rpt.SetParameterValue("Date", str.DateSH());

SARA86
شنبه 17 مرداد 1388, 11:04 صبح
نه ، منظور من ارسال پارامتر به گزارش از طريق نرم افزار خودتو (كد نويسي در زبان برنامه نويسي تان) هست

مثلا ، فرض كنيم ميخواهيم تاريخ شمسي امروز را در گزارشتان داشته باشي و اين تاريخ را در نرم افزارتان ميتوانيد محاسبه كنيد . كد C# :



CrystalDecisions.CrystalReports.Engine.YourReportr pt = new YourReport();

و بجاي اينكه كانكشن را به گزارشتان بفرستيد ، همينجا داده ها را در يك ديتاست با كنيد :

YorDataset ds = new YorDataset();
SqlConnection cn = newSqlConnection(YourConnectionString);
SqlCommand cmd = newSqlCommand(cn, "");
SqlDataAdapter da = newSqlDataAdapter(cmd);
da.SelectCommand = cmd;
cmd.Connection = cn;
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("@YoyrParameter",SqlDbType.Int ).Value=ID.ToString ();
//Other Parameter Post Like Top Parameter
cmd.CommandText = "[dbo].[BackSellGetBackSell]";
da.SelectCommand = cmd;
da.Fill(ds.SellBack );
cmd.CommandText = "BackSellGetBackSellDetails";
da.Fill(ds.SellBackDetail );
cmd.CommandText = "BackSellGetProductsVahed";
ds.Products_vahed.Clear();
da.Fill(ds.Products_vahed );
cmd.CommandText = "BackSellGetAnbar";
da.Fill(ds.Products_anbar );
cmd.CommandText = "BackSellGetProducts";
da.Fill(ds.Products);
cn.Close();
CrystalDecisions.CrystalReports.Engine.ReportDocum ent rpt = newRPTBackSell();
rpt.SetDataSource(ds);

rpt.SetParameterValue("Date", str.DateSH());



سلام

راستش من نمی دونم چطور از طریق نرم افزارم پارامتر رو به گزارشم ارسال کنم!:خجالت:

حالا اگه بخوام از روش خودم برم یعنی پارامتر رو بگیرم و اونو بهstored procedure ارسال کنم.....چطور باید اینکارو انجام بدم؟