PDA

View Full Version : سوال: تکرار رکوردها در کریستال ریپورت(دیگه خسته شدم . لطفا کمکم کنید)



galesh
جمعه 14 مهر 1391, 13:02 عصر
سلام دوستان . من در حال نوشتن برنامه ای برای صدور فاکتور طلافروشی هستم .به یک مشکل بزرگ برخوردم . ببینید دوستان من دو جدول کالا دارم .یکی کالاهای فروخته شده و دیگری خریداری شده که با یک id باهم در ارتباطند . حالا وقتی در هرکدام از این جداول فقط یک کالا رو وارد میکنم مشکلی ندارم . ولی وقتی بیش از یک کالا در هر کدام از این دو جدول وارد میکنم در کریستال ریپورت نام و مشخصات هر کالا تکرار میشه . واقعا گیج شدم و نمیدونم باید چیکار کنم . ضمنا اطلاعات این دو جدول رو با استفاده از inner join در کریستال ریپورت نمایش داده ام . اگر کمکم کنید ، لطف بسیار بزرگی در حقم کردید:ناراحت:

nilmil_nil
جمعه 14 مهر 1391, 14:21 عصر
شما در اصل کارتون اشتباه کردید
جدول خرید و فروش ها باید شبیه هم باشند یعنی هردوش توی یه جدول ذخیره بشه
اونوقت مشکلی ندارید
اونوقت باید برای یه فاکتور یه جدول جدا داشته باشید و اقلام فاکتور هم یه جدول
و بعد با یه فیلد خرید ها و فروش ها رو مشخص کنید
اگه متوجه نشدید تا براتون بیشتر توضیح بدم

galesh
جمعه 14 مهر 1391, 14:29 عصر
اگه میشه کمی بیشتر توضیح بدید . البته توضیحی بدم این که ممکنه یک مشتری فقط برای فروش یا فقط برای خرید اومده باشه . یا ممکنه چهار تا کالا بخره و فقط یک کالا بفروشه که در محاسبه فاکتور نهایی اینها باید از هم کم بشند .

galesh
جمعه 14 مهر 1391, 14:48 عصر
دوستان کسی نیست مشکل مارو حل کنه ؟

nilmil_nil
جمعه 14 مهر 1391, 14:54 عصر
فاکتور خریدو فروش
شماره فاکتور-کد شخص-تاریخ -فیلد خرید-فروش-توضیحات => فیلد خرید فروش مشخص میکنه این فاکتور خرید هست یا فروش که با یه فیلد بولین یا Int میتونید مشخص کنی
جدول اقلام فاکتور
شماره فاکتور - کد کالا-تعداد-قیمت


حالا با یه دستور innerjoin میتونید خروجی مناسب خودتون رو بدست بیارید

galesh
جمعه 14 مهر 1391, 15:01 عصر
با تشکر از شما . اما باید بگم که من فاکتور خرید و فروش جدا ندارم . یعنی اگر یک مشتری سه تا کالا خرید و دو تا فروخت ، قیمت هر کدم از اینا در فاکتور میاد . سپس از هم کم میشه و باقیمانده در همون فاکتور نوشته میشه . البته راهی که شما گفتید درسته ولی چیکار کنم که سفارش دهنده برنامه گیر داده که باید حتما اینطوری باشه .

galesh
جمعه 14 مهر 1391, 15:32 عصر
کسی نیست ؟

شرلوک هلمز
جمعه 14 مهر 1391, 17:23 عصر
دستور inner join را داخل دیتابیس به اجرا کن ببین اونجا هم همین مشکل پیش میاد .دستور left join و دستوری که فیلد های تکراری را حذف میکند را در sql امتحان کن .
برای کمک بهتر کد یا خود برنامه یا تصویری از ان را بذاری که ما بهتر متوجه بشیم

veniz2008
جمعه 14 مهر 1391, 17:47 عصر
سلام. اگه از هر رکورد چندتا برات میاره کافیه کلمه distinct رو بعد از کلمه select بنویسی تا از هر رکورد فقط یکی رو برات نمایش بده. البته حتما جواب هایی رو که میاری بصورت دستی هم چک کن تا از خروجی مطمئن بشی.

galesh
جمعه 14 مهر 1391, 18:12 عصر
ببینید دوستان . مشکل من ضرب رکوردهای جداول در هم در هنگام نمایش در کریستال هستش . من برای نمایش چند جدول در یک کریستال از این کد استفاده میکنم :
SELECT kal.kname,kal.ktedad,kal.kayar,kal.kweight,kal.kpr ice,kal.kkol,kal.ojrat,custome.cname,custome.ctel, custome.caddress,custome.sday,custome.smonth,custo me.syear,custome.fid,taviz.tname,taviz.tweight,tav iz.tgheymat,taviz.tkol FROM taviz inner JOIN custome ON taviz.id = custome.id inner join kal on kal.id=custome.id where custome.id =' " + report.t1 + "'"

veniz2008
جمعه 14 مهر 1391, 18:16 عصر
کلمه distinct رو بعد از select اضافه کردی؟

galesh
جمعه 14 مهر 1391, 18:22 عصر
آره ، فایده ای نداره .

Mahmoud Zaad
جمعه 14 مهر 1391, 18:34 عصر
سلام
این نمونه (http://barnamenevis.org/showthread.php?363108-%DA%AF%D8%B2%D8%A7%D8%B1%D8%B4-%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A7%D8%B2-%DA%86%D9%86%D8%AF-%D8%AA%D8%A7-%D8%AC%D8%AF%D9%88%D9%84-%D8%A8%D8%A7-view-%D9%88-%DA%A9%D8%B1%DB%8C%D8%B3%D8%AA%D8%A7%D9%84-%D8%9F) رو ببینید.

galesh
جمعه 14 مهر 1391, 18:55 عصر
آقای maysamfthi ، برنامتون رو با کمی تغییرات امتحان کردم . ولی نه در دیتا گرید و نه در کریستال هیچ رکوردی نشون داده نمیشه .

galesh
جمعه 14 مهر 1391, 19:07 عصر
البته اینو بگم که من از ویو استفاده نکردم (راستشو بخواید تاحالا با ویو کار نکردم). آیا اشکالی داره ؟

roolinjax
جمعه 14 مهر 1391, 19:12 عصر
البته اینو بگم که من از ویو استفاده نکردم (راستشو بخواید تاحالا با ویو کار نکردم). آیا اشکالی داره ؟

سلام
اولا استفاده از ویو که کاری نداره شما اطلاعاتی که می خوای از جداول مختلف نشون بدی رو اضافه کن به ویو خودش کد اس کیو الش رو می سازه و دیگه نیازی نیست شما دستی چیزی رو بنویسی یا چک کنی.
دوما شما می خوای از چند تا جدول اطلاعات استخراج کنی ؟

galesh
جمعه 14 مهر 1391, 19:18 عصر
از سه جدول

roolinjax
جمعه 14 مهر 1391, 19:22 عصر
از سه جدول

هر سه تا بینشون یه کلید مشترک هست ؟
اگر نیست که مسلما باید رکورد تکراری نشون بده ، اما اگر هست مشکلی نباید باشه . کافیه به شکل درستی اونو توی ویو پیاده کنید.

galesh
جمعه 14 مهر 1391, 19:25 عصر
کد آقایmaysamfthi رو که اجرا میکنم ، اطلاعات در دیتاگرید نمایش داده میشه ولی در کریستال خیر!!!

galesh
جمعه 14 مهر 1391, 19:28 عصر
بله کلید id که در یکی از جداول کلید اصلی و در دو جدول دیگه بعنوان کلید خارجی بکار بردم . الان هم یک ویو ساختم . به این شکل که سه جدول مورد نظرم رو انتخاب کردم و از هرکدوم فیلدهای موردنظرم رو تیک زدم . حالا باید چیکار کنم ؟

roolinjax
جمعه 14 مهر 1391, 19:30 عصر
کد آقایmaysamfthi رو که اجرا میکنم ، اطلاعات در دیتاگرید نمایش داده میشه ولی در کریستال خیر!!!
خوب همون دیتاست رو بفرستین به کریستال
مگه با کریستال کار نکردین ؟
اگر کار نکردین اسم دیتاست یا دیتاتیبل رو بگین کدشو بگم

galesh
جمعه 14 مهر 1391, 19:42 عصر
;()DataSet ds = new DataSet
; () DataTable dt = new DataTable

roolinjax
جمعه 14 مهر 1391, 19:53 عصر
بالاخره الان دیتاست پره یا دیتاتیبل ؟

SqlConnection con = new SqlConnection("reshteye etesal");
SqlDataAdapter da = new SqlDataAdapter("select * from yourviewName", con);
ReportDocument rd = new ReportDocument();
rd.FileName = "reportFileName.rpt";
DataTable dt = new DataTable();
da.Fill(dt);
rd.SetDataSource(dt);
crystalReportViewer1.ReportSource = rd;
توضیح :
فایل گزارشی که ساختی باید در مسیر پوشه ی دیباگ باشه در غیر اینصورت باید در خط زیر آدرس رو کامل وارد کنید :
rd.FileName = "reportFileName.rpt";
اگر به قول خودتون دیتاتیبلتون پره دو خط اول رو نیازی نیست بنویسی و بقیه خطوط رو بنویسی کافیه.
در ضمن این قطعه کد مربوط به رویداد Form_Load مربوط به فرمی است که می خواید توی اون یه کنترل کریستال ریپورت ویور بذارید و نتیجه گزارش رو توش ببینید.
موفق باشید.

galesh
جمعه 14 مهر 1391, 19:59 عصر
کدتون رو امتحان میکنم . امیدوارم جواب بده .

galesh
جمعه 14 مهر 1391, 20:03 عصر
roolinjax جان اینکار رو انجام دادم . ولی هنوز مشکل اصلیم ، یعنی تکراری نمایش دادن رکوردها پا برجاست .:گریه:

Mahmoud Zaad
جمعه 14 مهر 1391, 20:45 عصر
اسم فيلدها و ارتباطشون رو بده تا ببینیم میشه کاری کرد یا نه؟

galesh
جمعه 14 مهر 1391, 21:09 عصر
جدول کالا شامل : id,kname,kprice,kid,kweight . جدول customer شامل : id,name,tel,factorid,address و جدول taviz(خرید): id,tname,tprice,tweight

این سه جدول از طریق فیلد id بایکدیگر متصلند .

galesh
جمعه 14 مهر 1391, 21:11 عصر
در ضمن آقای maysamfthi مگر جدول ویو نباید با مقادیر جداولی که بهش دادیم پر بشه ؟ چرا برای من این اتفاق نمیافته ؟!

Mahmoud Zaad
جمعه 14 مهر 1391, 21:47 عصر
أقا به نظر من هم اين دیتابیست ایراد داره. در واقع شما به 4 تا جدول نیاز دارید. در جدول kala باید مشخصات کالا رو داشته باشید. در جدول فاکتور باید مشخصات کلی فاکتور مثل شماره فاکتور، کد مشتری و تاریخ رو داشته باشید. که بهش میگن مستر. در جدول کالاهای فاکتور باید کد کالا، کد فاکتور و تعداد رو داشته باشید و در جدول مشتری ها هم مشخصات مشتری. ارتباطات هم مشخصه. جدول مشتری ها به صورت یک (مشتری) به چند (فاکتور) ارتباط دارن. جدول فاکتور به صورت یک (فاکتور) به چند (کالای فاکتور) ارتباط دارن و چون یک کالا چندین بار فروخته میشه بین جدول کالا(که مشخصات کالاهاست) و جدول کالاهای فاکتور هم ارتباط یک(کالا) به چند (کالای فاکتور) وجود داره.
نمونه زیر هم دو بخشه یکیش برای فاکتور و یکیش برای درس و دانش آموز، به نظرم حداقل جدولها رو مثل این نمونه طراحی کن.

galesh
یک شنبه 16 مهر 1391, 13:26 عصر
نشد . ای خدا چیکار کنم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟!