View Full Version : بازم مانده بدهکار و بستانکار
mina.net
جمعه 29 خرداد 1388, 18:24 عصر
سلام دوستان من از دو دستور زیر برای گرفتن مانده بدهکار و بستانکار (گردش نه یک تاریخ مشخص) استفاده می کنم.
" SELECT 'Row' = IDENTITY (int, 1, 1), bed_best.id, bed_best.complet_name, bed_best.sharh," + _
" bed_best.bed, bed_best.best, bed_best.tarikh, hesab1.id_moin, hesab1.moin INTO #temp" + _
" FROM bed_best INNER JOIN hesab1 ON bed_best.id = hesab1.id_tafzil WHERE hesab1.id_kol = " + _
" 102 OR hesab1.id_kol = 101 ORDER BY bed_best.TARIKH"
بعد ساختن جدول temp دستور زیر رو اجرا می کنم.
"select id,complet_name,moin,id_moin,sharh,BED,BEST," + _
"SUBSTRING(tarikh, 1, 4) + '/' + SUBSTRING(tarikh, 5, 2) + '/' + SUBSTRING (tarikh, 7, 2)AS tarikh," + _
"(select case when (sum(bed)-sum(best))<0" + _
"then '0' else (sum(bed)-sum(best))end from #temp where row <t1.row+1 ) as mbed," + _
"(select case when (sum(best)-sum(bed))<0 then" + _
"'0' else (sum(best)-sum(bed))end from #temp where row <t1.row+1) as mbest from #temp t1 "
در این دستوری که الان می بینید از دو جدول select کردم. در حالت عادی یعنی وقتی فقط از یک جدول (bed_best) بخوام select کنم مشکلی نیست. آما وقتی که از دو جدول select می کنم سورت نمی کنم.
یک نگاه بندازید ببینید اشکالش چی هست ممنون می شم.
mina.net
جمعه 29 خرداد 1388, 19:50 عصر
دوستان سلام
دوستان من این اطلاعات رو تو کریستال نمایش می دم. مشکل بالا ایجاد می شه. آزمایش کردم تو دیتا گرید درست نمایش داد. پس باید اشکال از کریستال ریپورت باشه. من دو جدول فوق رو به کریستال معرفی کردم و فیلد کلیدی رو هم معرفی کردم یعنی فیلد Id_tafzil در جدول hesab1 را با فیلد id در جدول bed_best برابر قرار دادم.
به نظر شما کجای کار من اشتباه بوده؟
ali_md110
سه شنبه 02 تیر 1388, 02:01 صبح
یه روش من توی کریستا ریپورت استفاده کردم فکر کنم بدردتون بخوره
خود کریستال ریپورت فرمول نویسی داره و خیلی از کارا رو اسون کرده
http://barnamenevis.org/forum/showthread.php?t=104690
mina.net
سه شنبه 02 تیر 1388, 14:31 عصر
یه روش من توی کریستا ریپورت استفاده کردم فکر کنم بدردتون بخوره
خود کریستال ریپورت فرمول نویسی داره و خیلی از کارا رو اسون کرده
http://barnamenevis.org/forum/showthread.php?t=104690
ممنون دوست عزیز عالی بود .
من مشکلی رو که در بالا گفتم رو با سورت کردن فیلد row که براساس تاریخ ردیف شده حل کردم.
سوال:
1- آیا دستورات SQL سریعتر نیستند؟ فرض کنید تعداد زیاد باشه. آیا در تعداد زیاد مکث طوالانی نداریم. من این کدی خودم نوشتم رو برای 50،000 رکورد آزمایش کردم 35 ثانیه تاخیر داشت. آیا شما روشتون رو برای تعداد زیاد آزمایش کردید؟
2- من در ضمینه کریستال ریپورت تازه کارم لطفا بفرمایید این کد که شما نوشتید چیکار می کنه؟
{#RTotalbed}-{#RTotalbes}
3- آدرس دیتابیس رو چطور بدم که با جابجای برنامه روی سیستم های دیگه هم درست کار کنه؟
بازم ممنون از کمکی که می کنید.
mina.net
پنج شنبه 04 تیر 1388, 17:44 عصر
سلام دوستان
کسی راجع به پست بالا نظری نداره. دوستان منتظر نظرات سازنده شما هستم.
ali_md110
جمعه 05 تیر 1388, 16:53 عصر
سلام دوست من
به نظر من اگر یک کوئری بسازید از جولتون و بریزید توی دیتاست یا یک دیتاریدر سریعتر از temp table باشه
فیلدهای فرمول کریستال ریپورت توانایی زیادتری داره کافی شما اطلاعات یک جدول رو به اون بفرستید بعد فرمول دلخواهتون رو بنویسید
سوال دومتون
فیلد Total Fields Running توی کریستال ریپورت برای محاسبات ریاضی بر روی فیلدهای اضافه شده به کریستال ریپورت استفاده میشه
من دوتا فیلد اضافه کردم RTotalbed# و RTotalbes# این دوتا فیلد وظیفه جمع زدن یک فیلد رو به عهده داره یکی فیلد بد و دیگری بس
یک فیلد فرمول ساختم بنام total گزاشتمش بخش Details کریستال و کارش بدین صورته که میاد مجموع دو ستون بد و بس که بوسیله RTotalbedو RTotalbesبدست اومده رو از هم کم میکنهtotal=RTotalbed-RTotalbes
این کار سطر به سطر انجام میشه یعنی فیلد total از اولین سطر تا سطر بعدی و الی سطور بعد این کار رو انجام میده
اگر bed ----- bes------ total
10 -------- 0 ------- 10
5 ----------5 -------- 0
6 ---------0 ----------1
8 ----------0 ----------2
ابتدا RTotalbed میاد جمع ستون bedرو از اولین سطر تا یکمین سطر حساب میکنه که میشه 10 و RTotalbes هم همینطورجمع ستون bes از اولین سطر حساب میکنه تا یکمین سطر که مجموعش میشه 0
حالا اگر این دو فیلد رو از هم کم کنیم عدد 10 بدست میاد و این عدد رو تحویل فیلد total میدیم و اونهم مقدارش برابر میشه با 10
حالا یک فیلد total داریم با مقدار 10
بار دوم کریستال میاد این حساب کتابهایی که گفتم رو از سطر اول شروع میکنه و اینبار تا سطر دوم جلو میره
در این مرحله ( RTotalbed) یعنی جمع ستون بد برابربا 10 و (RTotalbes) برابر با 5 میشه
اگر RTotalbed و RTotalbes رو از هم کم کنیم میشه 5 و مقدار فیلد total در این ردیف برابر با عدد 5 میشه
بار سوم از اولین سطر تا سومین سطر رو حساب میکنه مجموع bedمیشه عدد 11 و مجموعbes میشه 5 اگر از هم کم کنیم عدد 6 بدست میاد اینبار total برایر با 6 میشه
بار چهار RTotalbed میشه 13 و RTotalbes میشه 5 از هم کم کنیم عدد 8 بدست میاد
کریستال ریپورت این کار رو از اولی تا اخرین ردیف موچود انجام میده
سوال سوم
بانک برنامه بستگی به نوع بانک داره
اگر از اکسس یا اسکیول سرور نوع Attechment database استفاده میکنید که قابل انتقال به کامپیترهای دیکه باشه
میتونید یک دیتاست مشخص به برنامتون از طریق منوی project /Add new item یک دیتاستDataSet1.xsdرو اضافه کنید بقیه مراحل رو دیگه از ساختن کوئری خود شما استاد هستید و میدونید
یا از منوی DATAگزینه Addnew Datasource یک دیتاست به برنامتون همراه با فیلدهای ذلخواه بسازید فقط در اینجا مسیر کانکشن استزینگ رو صحیح قراربده
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\bin\Debug\db.mdb;Persist Security Info=True
یک کنترل کریستال ریپورت به برنامه اضافه کنید از طریق wizard عمل کنید برای اضافه کردن دیتابیس قسمت project data از گره Ado.net Dataset دیتاستی که اضافه کردید رو انتخاب کنید گره اونوباز کنید و جدول داخل اونو دابل کلیلک تا اضافه بشه مرحله بعدی در قسمت Avilable field فیلدها رو به Field to display اضافه کنید قسمتهای بعدی Gropping و Record selection رو اگر نیاز ندارین دست تخورده بزارید تا مرحله آخر
دقت کنید که کوئری که در ساختن دیتاست استفاده کردید باید از لحاظ ترتیب قرار گرفتن فیلدها دقیقا عین همون کوئری باشه که توی کد برنامتون بکار میبرید وگرنه کریستال جواب اشتباه برمیگردونه یا خطا برمیگردونه
روشی که من توی کد برنامم استفاده کردم
اگر سوالی داشتید پیام خصوصی بزارید
موفق باشید
mina.net
شنبه 06 تیر 1388, 13:16 عصر
سلام دوست عزیز
من بانکم sql هست در ضمن اگه برنامه تحت شبکه باشه چی اونوقت مسیر برنامه نمی تونه مفید باشه! می تونه ؟
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.