PDA

View Full Version : بررسی مقدار فیلدهای database برای ارسال به گزارش.



kamiloted
سه شنبه 25 اسفند 1394, 08:07 صبح
سلام خدمت دوستان گرامی.

بنده میخوام از جدول فروشم لیست بدهکاران و تسویه شدگان ایجاد کنم. و به گزارش فست ریپورت بفرستم.

جدول فروش من شامل
1. کد مشتری 2.نام مشتری 3.نام کالا4.مبلغ کل 5. مبلغ پرداختی 6.مانده حساب7.توضیحات 8. تاریخ

روال کار به این صورته که مشتری مورد نظر (مشتری 1) کالایی با ارزش 80000تومان خریداری میکنه و 40000تومان پرداخت میکنه و 40000تومان باقی مانده میشه که بعدا پرداخت میکنه.
و این مشتری بدهکار هست.

و باز همون مشتری بالا (مشتری 1) کالای دیگری خریداری میکند به ارزش 60000تومان و 20000تومان پرداخت میکند و 40000تومان باقی میماند.که بعدا پرداخت شود.

و مشتری دیگری (مشتری 2) کالایی خریداری میکند به ارزش 90هزار تومان که 40 هزار تومان پرداخت میکند و 50هزار تومان بدهکار میشود.

خب من میخوام لیست بدهکاران روایجاد کنم. باید یه کدی بنویسم که اول کل مشتری 1 رو در جدول جستجو کنه و تمام فیلدهای مانده حساب رو بررسی کنه اگر بزرگتر از صفر باشند باهم جمع کند و در نهایت به گزارش بفرستد.به این صورت مشتری 1 80000تومان بدهکار
و مشتری 2 40000تومان بدهکار


و مثلا مشتری 2سه هفته بعد میاد و بدهی خود را پرداخت میکندو کاربر از طریق فرم تسویه بدهی اون رو صفر میکند. و من میخوام بلافاصله اون از لیست بدهکاران حذف بشود و به لیست تسویه شدگان اضافه شود.

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

ممنونم از همتون.

kamiloted
سه شنبه 25 اسفند 1394, 08:25 صبح
دوستان بنده میتونم یه دیتا گرید روی فرم بزارم و یک جستجو بر اساس نام بزارم و وقتی که جستجو شد مثلا مشتری 1 تمام خرید های اون رو توی دیتا گرید نشون بده و من ستون مانده حساب دیتا گرید را با هم جمع کنم و اگر بزرگتر از صفر بود به گزارش لیست بدهکاران بفرستم. اما من به اینصورت نمیخوام .میخوام وقتی کلیک شد بر روی دکمه بدهکاران بلافاصله گزارش فست ریپورت را نمایش بده. ممنونم میشم اگر منو راهنمایی کنی.

rezashaban
سه شنبه 25 اسفند 1394, 13:35 عصر
سلام دوست من
شما میتونی یه پروسیجر داخل اسکیوال بنویسی و موقعی که میخوای گزارش رو اجرا کنی پارامترهای مربوطه رو به پروسیجر بفرستی(اگه نیاز به پارامتر ورودی داری) و نتیجه رو به اون گزارش بدی تا برات نمایش بده

kamiloted
سه شنبه 25 اسفند 1394, 13:47 عصر
مشکل من شناسایی و تفکیک مشتری ها از جدولی هست که هزارتا مشتری متفاوت توش ثبت شده.همه مشتری ها یک ایدی هم دارن. که منحصر بفرده.

rezashaban
سه شنبه 25 اسفند 1394, 13:52 عصر
یعنی من منظورت رو اشتباه متوجه شدم؟
نیاز به کوئری برای این گزارشت داری؟

rezashaban
سه شنبه 25 اسفند 1394, 13:57 عصر
اگر کوئری رو مشکل داری اول بگم که ساختار دیتابیست درست نیست
باید یه جدول برای پرداختی های مشتری میگرفتی و هرسری که مشتری به فروشگاه مبلغی رو پرداخت میکنه توی اون جدول ثبت کنی و موقعی هم که بخوای گزارش بگیری مجموع پرداختی های مشتری رو جمع میکنی و از مجموع خریدهاش کم میکنی و اینطوری میتونی بدهکار و بستانکار رو مشخص کنی
البته بگم این یه روش ساده ست که برای سیستم های کوچیک استفاده میشه و برای سیستم های بزرگ حسابداری دیتابیس خیلی دقیقتر و کاملتر طراحی میشه

kamiloted
سه شنبه 25 اسفند 1394, 14:04 عصر
دیتا بیس من خیلی دقیقه. فقط شما چون یه بخش کوچیک از کارو میبینی احساس میکنی ناقصه.
اگر قرار بود 2 تا جدول بزنم دیگه نیازی به سوال کردن نداشتم.
شما با چه کوئری یا کد میتونی مشتری ها رو تفکیک کنی از هم؟

rezashaban
سه شنبه 25 اسفند 1394, 14:15 عصر
همونطور که شما گفتی چون بخش کوچیکی از کار رو میبینم پس جوابی که میدم هم ممکنه ناقص باشه ولی میتونی از کد زیر استفاده کنی


SELECT customerCode, CustomerName, SUM(TotalPrice) TotalPrice, SUM(PaiedPrice) PaiedPrice, SUM(BalancePrice) BalancePrice from customers
GROUP BY customerCode, CustomerName

kamiloted
سه شنبه 25 اسفند 1394, 14:55 عصر
به هر حال از شما ممنونم دوست عزیز. که وقت گذاشتید.
دوستان کسی هست کمک کنه.سپاس

Mahmoud Zaad
سه شنبه 25 اسفند 1394, 15:09 عصر
سلام
با توجه به اطلاعاتی که دادید چیزی که دوستمون گفتن درسته. هر چند همونطور که ایشون گفتن این طراحی اشتباهه. شما حتی یه جدول برای اشخاص در نظر نگرفتید و کد و نام شخص رو در جدول خرید ذخیره کردید!

kamiloted
چهارشنبه 26 اسفند 1394, 07:48 صبح
من برای هر کدوم یه جدول دارم. جدول مشتری.و سایر جداول . توی فرم نهایی فروشم مشتری رو از جدول مشتری میاد. محصولات از جدول محصول میاد خلاصه همه رو به فرم فروشم لینک کردم.و در نهایت یه جدول فروش دارم که همه رو تو خودش ذخیره میکنه. و جدول فروش به این صورته.> کد فروش 1 شامل مشتری 1 با کد مشتری 5 در تاریخ فلان محصول فلان راخریداری کرده با مبلغ کل 500 مبلغ پرداختی 400 و مانده 100تومن.
دوستان شما باید آخرین آیدی مشتری ثبت شده در حین فروش را از جدول بگیرید و فیلد باقی مانده را بررسی کنید اگر بزرگتر ازصفر باشه با فیلد باقی مانده بعد یا قبل مختص به همین مشتری رو جمع کنید.

kamiloted
چهارشنبه 26 اسفند 1394, 07:53 صبح
SELECT customerCode, CustomerName, SUM(TotalPrice) TotalPrice, SUM(PaiedPrice) PaiedPrice, SUM(BalancePrice) BalancePrice from customers
GROUP BY customerCode, CustomerName




این کد درسته اما زمانی کاربرد داره که ما اون مشتری و کدش رو مشخص کنیم.الان اون نمیدونه کدوم مشتری رو انتخاب کنه

kamiloted
چهارشنبه 26 اسفند 1394, 14:40 عصر
کسی نیست کمک کنه

Mahmoud Zaad
چهارشنبه 26 اسفند 1394, 14:47 عصر
حقیقتش جواب شما داده شده، کل کار یه group by هست حالا اگر برای یک مشتری خاص میخواید باید از where هم استفاده کنید در غیر اینصورت where نمی خواد و کوئری مانده همه مشتری ها رو نشون میده. حالا مشکل شما در کدوم قسمته؟

rezashaban
چهارشنبه 26 اسفند 1394, 14:53 عصر
کسی نیست کمک کنه
سلام دوست من
چندتا سوال دارم ازت:
1. اگه مشتری بخواد در چند مرحله بدهی خودش رو تصویه کنه میتونه؟
2. اگه بخوای لیست پرداختی های مشتری رو با تاریخ پرداخت در بیاری میتونی(فقط پرداختی ها نه خرید)؟
3. شما لیست بدهکاران و بستانکاران و تسویه شدگان رو میخوای یا یک مشتری مشخص رو میخوای بدونی که در چه وضعیتیه حسابش؟
در ضمن توضیحاتت گیج کننده ست
اول میگی بدهکاران و بستانکاران میخوام بعد میگی یه مشتری خاص رو میخوام ولی نمیدونم کدوم مشتری رو انتخاب کنم

dashti011
شنبه 29 اسفند 1394, 20:03 عصر
اگه با EF کار میکنید موقع بازیابی اطلاعات واسه ریپورت گرفتن و گزارش AsNoTracking استفاده کنید .
واسه فست ریپورت اول یه منبع داده اطلاعات بساز +لینک (http://www.dotnettips.info/post/1450/%D8%B3%D8%A7%D8%AE%D8%AA-%DA%AF%D8%B2%D8%A7%D8%B1%D8%B4-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-fastreport-linq)
واسه فچ اطلاعات اولیه هم با دستورات شرطی توی entity framework و تابع asNoTracking که گفتم در زمان بسیار کوتاه و سریع میتونی داده خودت رو بسازی ، اگر هم چدودل دیتابیس رو هم ایندکس گذاری کنی خیلی سرعتت بالا میره