PDA

View Full Version : سوال: طراحی تقویم برای برنامه PM



jafarpalideh
چهارشنبه 08 شهریور 1396, 09:22 صبح
با سلام .
من دارم رویه یه برنامه ی PM‌ کار میکنم .
من میام ابتدا کارهای که رویه ماشینها قراره انجام بشه لیست میکنم مثل (روغن کاری – گریس کاری و تعویض فیلتر و ....)
حالا مثلا این روغنکاری از تاریخ استقرار تا انتهای سال باید به صورت روزانه و گریسکاری هر یک هفته و تعویض فیلتر هر 6 ماه رویه یه ماشین خاص اتفاق بیفته
من تویه طراحی برنامه ش موندم . البته که نمیدونم چطور تقویم یک کار رو به کل سال بسط بدم .
دوستان اگه راهنمایی کنن ممنون میشم .

jafarpalideh
چهارشنبه 08 شهریور 1396, 16:32 عصر
حقیقتش من میخوام خودم بنویسم و از کامپوننت استفاده نکنم

BAHAR1394
چهارشنبه 08 شهریور 1396, 22:11 عصر
پس شما احتمالاً باید حداقل 10 سالی از عمرتون رو برای نوشتن کامپوننت های مشابه این کامپوننت ها بکنید که در نهایت هم در ده سال آینده باز محصول شما در این زیبا و قدرتمند نیست و نخواهد بود چرا که تیم برنامه نویسان و توسعه دهندگان محصولات این شرکت مطمئناً از حرفه ای ترین برنامه نویسان کشورهای مختلف هستند.

موفق باشید.

jafarpalideh
پنج شنبه 09 شهریور 1396, 07:00 صبح
دوستان کسی میتونه راهنمایی بکنه ؟

jafarpalideh
پنج شنبه 09 شهریور 1396, 10:19 صبح
اون چیزی که من میخوام دقیقا طراحیش مثل عکسیه که پایین میزارم . همین کار من رو راه میندازه :


146183

Mahmoud.Afrad
پنج شنبه 09 شهریور 1396, 13:14 عصر
الان توی چی مشکل دارید؟ بدست آوردن تاریخها؟ دیتابیس؟ طراحی UI؟

jafarpalideh
پنج شنبه 09 شهریور 1396, 13:47 عصر
تاریخ و ریختنش تویه دیتابیس

Mahmoud.Afrad
پنج شنبه 09 شهریور 1396, 20:59 عصر
طبق عکسی که گذاشتید
یک جدول برای نام و مشخصات دستگاه
یک جدول برای مشخصات PM
یک جدول برای دوره انجام
یک جدول برای ثبت سرویس شامل تاریخ شروع، تاریخ پایان، کد دستگاه، کد PM، کد دوره انجام.(به نظر من نیازی به ذخیره همه تاریخ ها در همون ابتدا نیست.)

برای کار با تاریخ از PersianCalendar استفاده کنید
//example
string startDate = "1396/06/09";
string endDate = "1399/12/30";

CultureInfo farsiCultureInfo = new CultureInfo("fa-ir");
DateTime dtStart = DateTime.Parse(startDate, farsiCultureInfo);

DateTime nextDate1DayPeriod = farsiCultureInfo.Calendar.AddDays(dtStart, 1);
DateTime nextDate1WeekPriod = farsiCultureInfo.Calendar.AddWeeks(dtStart, 1);
DateTime nextDate1MonthPeriod = farsiCultureInfo.Calendar.AddMonths(dtStart, 1);

اگر هم نیاز دارید همه تاریخها رو بدست بیارید با یک حلقه میتونید
مثلا دوره های یک هفته ای
//example
string startDate = "1396/06/09";
string endDate = "1399/12/30";

CultureInfo farsiCultureInfo = new CultureInfo("fa-ir");
DateTime dtStart = DateTime.Parse(startDate, farsiCultureInfo);
DateTime dtEnd = DateTime.Parse(endDate, farsiCultureInfo);

List<DateTime> dates = new List<DateTime>();
for (DateTime nextDate = dtStart; nextDate < dtEnd; nextDate = farsiCultureInfo.Calendar.AddWeeks(nextDate, 1))
{
dates.Add(nextDate);
}

listBox1.DataSource = dates;

ASKaffash
شنبه 11 شهریور 1396, 09:37 صبح
سلام
اولین کاری که باید انجام دهید UI نیست بلکه معماری درست داده ای است به شکل ذیل طراحی کنید :
- جدول زمانهای پی ام شامل : کلید زمانی / نام دوره / مدت مثلا : (هرروزه 1 / هفته ای 7 / شش ماهه 180 / ماهیانه 30 / ....)
- جدول انواع پی ام شامل : کلید نوع پی ام / نام نوع پی ام / کلید زمانی - FK
- جدول دستگاهها شامل : کلید دستگاه / نام دستگاه
- جدول پی ام شامل : کلید جدول / کلید دستگاه / از تاریخ / تا تاریخ / کلید زمانی / کلید نوع پی ام
حالا نیاز به یک UI دارید که بصورت Master/Detail براساس جدول پی ام اطلاعات را ذخیره کنید
در فاز بعد گزارشات و هشدارهای زمان تعمیر نگهداری و نتیجه آن را باید ذخیره کنید (دقت شود یک جدول دیگر هم برای اعلام زمانهای تعمیرات نیاز دارید)
به نظر من شما نیاز به کامپوننت خاصی ندارید باید UI خوب طراحی کنید


اون چیزی که من میخوام دقیقا طراحیش مثل عکسیه که پایین میزارم . همین کار من رو راه میندازه :


146183

jafarpalideh
یک شنبه 12 شهریور 1396, 10:07 صبح
سلام
اولین کاری که باید انجام دهید UI نیست بلکه معماری درست داده ای است به شکل ذیل طراحی کنید :
- جدول زمانهای پی ام شامل : کلید زمانی / نام دوره / مدت مثلا : (هرروزه 1 / هفته ای 7 / شش ماهه 180 / ماهیانه 30 / ....)
- جدول انواع پی ام شامل : کلید نوع پی ام / نام نوع پی ام / کلید زمانی - FK
- جدول دستگاهها شامل : کلید دستگاه / نام دستگاه
- جدول پی ام شامل : کلید جدول / کلید دستگاه / از تاریخ / تا تاریخ / کلید زمانی / کلید نوع پی ام
حالا نیاز به یک UI دارید که بصورت Master/Detail براساس جدول پی ام اطلاعات را ذخیره کنید
در فاز بعد گزارشات و هشدارهای زمان تعمیر نگهداری و نتیجه آن را باید ذخیره کنید (دقت شود یک جدول دیگر هم برای اعلام زمانهای تعمیرات نیاز دارید)
به نظر من شما نیاز به کامپوننت خاصی ندارید باید UI خوب طراحی کنید


ممنون بابت پاسخ کاملتون .
من هنوز دارم با ADO.NET کد میزنم . آیا کارم اشتباهه ؟
حقیقتش سرسام گرفتم از بس کد زدم .
مخصوصا تویه بحش سطح دسترسی که واسه یه فرم جدید که بخواد اضافه بشه کلی باس بشینم و کد بزنم .
ویزارد هم که اصلا حال نمیده . راهکار بهتری نیست ؟

ASKaffash
یک شنبه 12 شهریور 1396, 11:23 صبح
سلام
استفاده از ADO.Net سرعت مناسبی دارد ولی برای کاهش حجم کد یک کلاس DataBase ایجاد کنید که وظیفه لایه DAL را برای شما انجام دهد در خصوص سطح دسترسی روی فرم قبلا" من یک نمونه در همین تالار قرار داده ام که اگر رعایت شود کد نویسی بخش دسترسی را کاهش میدهد من خودم اصلا" ویزاردهای دات نت را نمی پسندم

jafarpalideh
پنج شنبه 30 شهریور 1396, 12:27 عصر
خوب با اجازه ی دوستان و معذرت خواهی بنده یکبار دیگه این پست رو آپ میکنم چون چند مورد واسم پیش اومده که فکرم رو مشغول کرده . کارهای که کردم رو میگم .
من چند تا جدول به دیتابیس اضافه کردم .
شما هم یه نظر بدید ممنون میشم .
1-جدول TblPishgiraneh که میاد و انواع کارها مثل روغنکاری و گریسکاری و ... توش تعریف میشه
2- جدول TblPeriodDo که میایم و دوره های انجام کار رو توش تعریف میکنیم . مثل روزانه - دو روز یکبار - هفتگی - ماهانه - 2 ماه یکبار و...
3- جدول TblPreventive که میاد و آی دی دستگاه و یا زیر مجموعه ی دستگاه و تاریخ شروع و تاریخ پایان پیشگیرانه و آی دی نوع پیشگیرانه و آی دی دوره رو نگه میداره .
4- جدول TblPreventiveDay هم میاد و آی دی پیشگیری که تویه بالا هست و ریز تاریخ ها بین اون دو تا تاریخ و دو تا تاییدی که قراره روش بخوره رو نگه میداره .
به نظرتون این جواب کار من رو میده ؟


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

jafarpalideh
پنج شنبه 30 شهریور 1396, 12:36 عصر
اصلا من میتونم فقط یه جدول داشته باشم که اینطوری باشه ؟
به جایه 4 تا جدول ؟
بعد بیام و تویه برنامه اگه شخص خواست دوره انتخاب کنه تاریخ شروع و پایان بهش نمایش بدم و دوره
و اگه خواست روزهای خاصی رو انتخاب کنه فقط اون روزها تویه دیتابیس ذخیره بشه .

نام عملیات (مثلا روغنکاری)
تاریخ شروع
تاریخ پایان
نام ماشین (البته منظورم همون کلید خارجی هست که آی دی ماشین رو نگه میداره )
دوره انجام
روز اول هفته
روز دوم هفته
روز سوم هفته
روز چهارم هفته
روز پنجم هفته
روز ششم هفته
روز هفتم هفته

ژیار رحیمی
جمعه 31 شهریور 1396, 07:54 صبح
اصلا من میتونم فقط یه جدول داشته باشم که اینطوری باشه ؟
به جایه 4 تا جدول ؟
بعد بیام و تویه برنامه اگه شخص خواست دوره انتخاب کنه تاریخ شروع و پایان بهش نمایش بدم و دوره
و اگه خواست روزهای خاصی رو انتخاب کنه فقط اون روزها تویه دیتابیس ذخیره بشه .

نام عملیات (مثلا روغنکاری)
تاریخ شروع
تاریخ پایان
نام ماشین (البته منظورم همون کلید خارجی هست که آی دی ماشین رو نگه میداره )
دوره انجام
روز اول هفته
روز دوم هفته
روز سوم هفته
روز چهارم هفته
روز پنجم هفته
روز ششم هفته
روز هفتم هفته

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

ژیار رحیمی
جمعه 31 شهریور 1396, 08:05 صبح
اون چیزی که من میخوام دقیقا طراحیش مثل عکسیه که پایین میزارم . همین کار من رو راه میندازه :


146183
مشکل اصلی شما در (دوره انجام PM) هست .با توجه به تصویر شما چند دوره انجام روزانه،هفتگی و ماهانه رو تعریف کردی به نظر من به جای انتخاب دوره از مقدار عددی (روز )برای سرویس PM استفاده کن که انعطاف پذیری بیشتری به برنامه شما میدهد.نکته دیگه ،لازم به ذخیره سازی تمام تاریخ های سرویس در دیتابیس نیست شما تاریخ شروع + (تعداد روز) فاصله زمانی سرویس کن تاریخ سرویس بعدی بدست میاد مجدد تاریخ سرویس بعدی را با فاصله زمانی(تعداد روز) جمع بزنی تاریخ سرویس بعدی آن بدست میاد.میتونی به همین شیوه یه تقویم سرویس ایجاد کنی.

jafarpalideh
جمعه 31 شهریور 1396, 08:07 صبح
شما دنبال پیاده سازی کارامد هستی این روش پیاده سازی اشتباه هست .


میشه بیشتر توضیح بدید ؟



1-جدول TblPishgiraneh که میاد و انواع کارها مثل روغنکاری و گریسکاری و ... توش تعریف میشه
2- جدول TblPeriodDo که میایم و دوره های انجام کار رو توش تعریف میکنیم . مثل روزانه - دو روز یکبار - هفتگی - ماهانه - 2 ماه یکبار و...
3- جدول TblPreventive که میاد و آی دی دستگاه و یا زیر مجموعه ی دستگاه و تاریخ شروع و تاریخ پایان پیشگیرانه و آی دی نوع پیشگیرانه و آی دی دوره رو نگه میداره .
4- جدول TblPreventiveDay هم میاد و آی دی پیشگیری که تویه بالا هست و ریز تاریخ ها بین اون دو تا تاریخ و دو تا تاییدی که قراره روش بخوره رو نگه میداره .
به نظرتون این جواب کار من رو میده ؟

حالا اگه یه کار بخواد فقط تویه روزهای مثلا یک شنبه و سه شنبه انجام بشه چی ؟

jafarpalideh
جمعه 31 شهریور 1396, 08:10 صبح
مشکل اصلی شما در (دوره انجام PM) هست .با توجه به تصویر شما چند دوره انجام روزانه،هفتگی و ماهانه رو تعریف کردی به نظر من به جای انتخاب دوره از مقدار عددی (روز )برای سرویس PM استفاده کن که انعطاف پذیری بیشتری به برنامه شما میدهد.نکته دیگه ،لازم به ذخیره سازی تمام تاریخ های سرویس در دیتابیس نیست شما تاریخ شروع + (تعداد روز) فاصله زمانی سرویس کن تاریخ سرویس بعدی بدست میاد مجدد تاریخ سرویس بعدی را با فاصله زمانی(تعداد روز) جمع بزنی تاریخ سرویس بعدی آن بدست میاد.میتونی به همین شیوه یه تقویم سرویس ایجاد کنی.


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

ژیار رحیمی
جمعه 31 شهریور 1396, 08:29 صبح
دوست گرامی شما در بالا توضیح دادی دوره های روزانه ،هفتگی و ماهانه ،بر اساس مطالب قبلی راهنمایی صورت گرفت الان میپرسی اگه یکشنبه و سه شنبه باشه چطور ممکنه. با شرایط جدید شما دو نوع سرویس دوره ای تصاعدی(فاصله زمانی بین سرویس ها مشخص و عددی ثابت) و سرویس دوره ایی غیر تصاعدی(فاصله زمانی بین سرویس ها عدد ثابتی نیست) در اینصورت باید به ازای یک هفته این روزها رو ذخیره کنی و برای هفته های بعدی از این تاریخ ها برای بدست آوردن تاریخ بعدی استفاده کنی.الان میدونم پست بعدی شما اینه این سرویس غیر تصاعدی رو چطور پیاده سازی کنم:متفکر:

ژیار رحیمی
جمعه 31 شهریور 1396, 08:34 صبح
تویه جدول م چه چیزهای رو نگه دارم ؟ و بعد اینکه اگه اون کار انجام شد و من خواسته باشم که تاییدیه های روی اون کار داشته باشم چی میشه ؟
شما برنامه نویس هستی باید خودت سیستم رو تحلیل کنی.اول کامل سیستم رو تحلیل کن تمام نیازمندیای سیستم رو مشخص کن سپس بر اساس تحلیل بدست امده دیتابیس رو بساز سپس شروع به کد نویسی کن. موفق باشی.

jafarpalideh
جمعه 31 شهریور 1396, 08:38 صبح
دوست گرامی شما در بالا توضیح دادی دوره های روزانه ،هفتگی و ماهانه ،بر اساس مطالب قبلی راهنمایی صورت گرفت الان میپرسی اگه یکشنبه و سه شنبه باشه چطور ممکنه. با شرایط جدید شما دو نوع سرویس دوره ای تصاعدی(فاصله زمانی بین سرویس ها مشخص و عددی ثابت) و سرویس دوره ایی غیر تصاعدی(فاصله زمانی بین سرویس ها عدد ثابتی نیست) در اینصورت باید به ازای یک هفته این روزها رو ذخیره کنی و برای هفته های بعدی از این تاریخ ها برای بدست آوردن تاریخ بعدی استفاده کنی.الان میدونم پست بعدی شما اینه این سرویس غیر تصاعدی رو چطور پیاده سازی کنم:متفکر:


رحیمی عزیز دعوامون نکن . بزار رویه دانش برنامه نویسی کم بنده .
اگر میتونی یا واستون مقدوره یه نمونه کد بزار که چطور میتونم مثلا واسه ی 100 تا دستگاه که رو هر کدوم 70 نوع سرویس مختلف با دورهای مختلفه و الان تاریخ سرسیدشه رو بفهمم .

jafarpalideh
جمعه 31 شهریور 1396, 08:41 صبح
شما برنامه نویس هستی باید خودت سیستم رو تحلیل کنی.اول کامل سیستم رو تحلیل کن تمام نیازمندیای سیستم رو مشخص کن سپس بر اساس تحلیل بدست امده دیتابیس رو بساز سپس شروع به کد نویسی کن. موفق باشی.


دقیقا مشکل بنده کدنویسی اینه که چطور میتونم مثلا واسه ی 100 تا دستگاه که رو هر کدوم 70 نوع سرویس مختلف با دورهای مختلفه و الان تاریخ سرسیدشه رو بفهمم .

ژیار رحیمی
جمعه 31 شهریور 1396, 08:50 صبح
دوست عزیز وظیفه ما راهنمایی دیگر دوستان در حد دانش و تجربه خودمان هست.خدای ناکرده قصد ناراحتی و دلخوری دوستان را نداریم .اگر شما چنین برداشتی از پست من کردی من از شما عذرخواهی میکنم.

jafarpalideh
جمعه 31 شهریور 1396, 09:00 صبح
دوست عزیز وظیفه ما راهنمایی دیگر دوستان در حد دانش و تجربه خودمان هست.خدای ناکرده قصد ناراحتی و دلخوری دوستان را نداریم .اگر شما چنین برداشتی از پست من کردی من از شما عذرخواهی میکنم.

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

Mahmoud.Afrad
شنبه 01 مهر 1396, 07:20 صبح
برای بدست آوردن رکوردهایی که تاریخ سررسیدشون امروز هست ، با تابع DATEDIFF اختلاف بین تاریخ آغاز و تاریخ امروز را بدست بیارید. این مقدار بدست آمده باقیمانده‌اش بر دوره باید صفر باشه.

ASKaffash
شنبه 01 مهر 1396, 07:42 صبح
سلام
معماری جدول شما پاسخگوی تمام شرایط نیست چرا از Job اسکیوال سرور ایده نمی گیرید به شکل ذیل نگاه کنید و معماریتان را عوض کنید :

jafarpalideh
یک شنبه 02 مهر 1396, 11:22 صبح
خوب من طراحی م رو به اینصورت تغییر دادم طبق گفته ی آقای ASKaffash
حالا یه سوال :
1 – حالا فکر کنیم که 10 تا ماشین داریم با 15 کار مختلف بر روی اونها یعنی گرید من 150 تا سطر داره .
چه کدی باید بزنم واسه به دست آوردن تاریخ سر رسید وظیفه نسبت به تاریخ جاری ؟ من تاریخ رو تویه دیتابیس به صورت شمسی و varchar (10) نگه میدارم .




146496

رامین مرادی
یک شنبه 02 مهر 1396, 13:10 عصر
خب تو شرطتون بنویسید لیست اونایی رو بده که تاریخ امروز =تاریخ سررسید

ASKaffash
یک شنبه 02 مهر 1396, 13:35 عصر
سلام
در گرید نمایش داده شده ستون آخرین عملیات انجام شده روی ماشین در هر ردیف گرید کدام است؟

jafarpalideh
یک شنبه 02 مهر 1396, 13:51 عصر
خب تو شرطتون بنویسید لیست اونایی رو بده که تاریخ امروز =تاریخ سررسید
خوب مشکل من هم همین فهمیدن تاریخ سررسیده .

jafarpalideh
یک شنبه 02 مهر 1396, 13:52 عصر
سلام
در گرید نمایش داده شده ستون آخرین عملیات انجام شده روی ماشین در هر ردیف گرید کدام است؟

آخرین کار رو نیاوردم . اون رو تویه جدول دیگه ای نگه میدارم .
این جدول فقط واسه به دست آوردن تاریخ سررسیده وظیفه س .

ASKaffash
دوشنبه 03 مهر 1396, 07:13 صبح
سلام
نوشتن این کوئری بدون آن فیلد اشتباه است چرا ؟ چون :
فکر کنید امروز 3/7/96 است و یک فعالیت برای ماشینی بین 1/7/96 تا 29/12/96 تعریف شده است که قرار است یک روز در میان انجام شود حال برنامه شما می خواهد زمان بعدی فعالیت را برای این ماشین استخراج کند آیا نباید بداند فعالیت قبلی کی انجام شده است ؟ (فرض به هر دلیلی به علت بی نظمی /... عملیات قبلی در 2/7/96 انجام شده است)

jafarpalideh
دوشنبه 03 مهر 1396, 07:16 صبح
سلام
نوشتن این کوئری بدون آن فیلد اشتباه است چرا ؟ چون :
فکر کنید امروز 3/7/96 است و یک فعالیت برای ماشینی بین 1/7/96 تا 29/12/96 تعریف شده است که قرار است یک روز در میان انجام شود حال برنامه شما می خواهد زمان بعدی فعالیت را برای این ماشین استخراج کند آیا نباید بداند فعالیت قبلی کی انجام شده است ؟ (فرض به هر دلیلی به علت بی نظمی /... عملیات قبلی در 2/7/96 انجام شده است)
خوب امکان داره اون فعالیت انجام نشده باشه
برای سر رسید وظیفه تاریخ روز مهمه یا بهتر بگم تاریخی که میخوایم گزارش بگیریم که چه وظایفی بایستی انجام بشه.
انجام شدن وظیفه یا انجام نشدنش میره تو فاز بعدی.

jafarpalideh
سه شنبه 04 مهر 1396, 07:50 صبح
دوستان اگه یه نمونه کد بزارن ممنون میشم

حسین.کاظمی
چهارشنبه 05 مهر 1396, 13:19 عصر
دوستان اگه یه نمونه کد بزارن ممنون میشم

سلام
دوست عزیز دقیقا مشکل شما چیه؟

jafarpalideh
چهارشنبه 05 مهر 1396, 13:26 عصر
سلام
دوست عزیز دقیقا مشکل شما چیه؟
به دست آوردن تاریخ سر رسید وظیفه .

jafarpalideh
چهارشنبه 05 مهر 1396, 13:29 عصر
خوب من طراحی م رو به اینصورت تغییر دادم طبق گفته ی آقای ASKaffash
حالا یه سوال :
1 – حالا فکر کنیم که 10 تا ماشین داریم با 15 کار مختلف بر روی اونها یعنی گرید من 150 تا سطر داره .
چه کدی باید بزنم واسه به دست آوردن تاریخ سر رسید وظیفه نسبت به تاریخ جاری ؟ من تاریخ رو تویه دیتابیس به صورت شمسی و varchar (10) نگه میدارم .




146496

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

Mahmoud Zaad
چهارشنبه 05 مهر 1396, 19:17 عصر
سلام
شما بیا و از تاریخ میلادی استفاده کن! حالا برای اضافه کردن ماه و روز به تاریخ از تابع DateAdd (https://www.w3schools.com/sql/func_sqlserver_dateadd.asp) استفاده کن. و نتیجه رو با تاریخ روز مقایسه کن:
SELECT date, DATEADD(day, 1, date) AS DateAdd from tbl where DATEADD(day, 1, date)='2017-09-28'
برای روزهای هفته هم که امروز مشخصه "چهارشنبه" است پس باید Wed رو جستجو کنی. در آخر اینکه باید یه شرط هم بنویسی که تاریخی که از DateAdd به دست اومد از تاریخ انتهای دوره بیشتر نشه.
SELECT date from tbl where DATEADD(day, 3, date)='2017-09-30' AND DATEADD(day, 3, date)<'2017-10-01'

البته طبق گفته دوستمون باید آخرین تاریخی که سرویس انجام شده رو هم ذخیره کنی.

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

***********************
ویرایش:

در مجموع با 2 تا OR میشه کوئری رو نوشت
SELECT * from tbl where DATEADD(DAY, periodDay, lastDate)='2017-10-28' AND DATEADD(DAY, periodDay, lastDate)<DateEnd OR DATEADD(MONTH, periodMonth, lastDate)='2017-10-28' AND DATEADD(MONTH, periodMonth, lastDate)<DateEnd OR Thu='true' AND '2017-09-28'<DateEnd

jafarpalideh
دوشنبه 17 مهر 1396, 18:48 عصر
طبق عکسی که گذاشتید
یک جدول برای نام و مشخصات دستگاه
یک جدول برای مشخصات PM
یک جدول برای دوره انجام
یک جدول برای ثبت سرویس شامل تاریخ شروع، تاریخ پایان، کد دستگاه، کد PM، کد دوره انجام.(به نظر من نیازی به ذخیره همه تاریخ ها در همون ابتدا نیست.)

برای کار با تاریخ از PersianCalendar استفاده کنید
//example
string startDate = "1396/06/09";
string endDate = "1399/12/30";

CultureInfo farsiCultureInfo = new CultureInfo("fa-ir");
DateTime dtStart = DateTime.Parse(startDate, farsiCultureInfo);

DateTime nextDate1DayPeriod = farsiCultureInfo.Calendar.AddDays(dtStart, 1);
DateTime nextDate1WeekPriod = farsiCultureInfo.Calendar.AddWeeks(dtStart, 1);
DateTime nextDate1MonthPeriod = farsiCultureInfo.Calendar.AddMonths(dtStart, 1);

اگر هم نیاز دارید همه تاریخها رو بدست بیارید با یک حلقه میتونید
مثلا دوره های یک هفته ای
//example
string startDate = "1396/06/09";
string endDate = "1399/12/30";

CultureInfo farsiCultureInfo = new CultureInfo("fa-ir");
DateTime dtStart = DateTime.Parse(startDate, farsiCultureInfo);
DateTime dtEnd = DateTime.Parse(endDate, farsiCultureInfo);

List<DateTime> dates = new List<DateTime>();
for (DateTime nextDate = dtStart; nextDate < dtEnd; nextDate = farsiCultureInfo.Calendar.AddWeeks(nextDate, 1))
{
dates.Add(nextDate);
}

listBox1.DataSource = dates;

من وقتی میام و داده ها رو وارد دیتابیس میکنم با AddDay با تاریخهای 1396/07/31 یا مثلا 1396/08/31 سیو میشه !!!
مشکل کجاست؟

jafarpalideh
دوشنبه 17 مهر 1396, 20:57 عصر
من با این کد داده هارو Insert میکنم .



if (radioButton1.Checked == true)
{
string PreventiveId = dataGridView1.CurrentRow.Cells["PreventiveId"].Value.ToString();
int period = Convert.ToInt32(dataGridView1.CurrentRow.Cells["PeriodDay"].Value.ToString());
string startDate = txtDateBegin.Text;
string endDate = txtDateEnd.Text;
CultureInfo farsiCultureInfo = new CultureInfo("fa-ir");
DateTime dtStart = DateTime.Parse(startDate, farsiCultureInfo);
DateTime dtEnd = DateTime.Parse(endDate, farsiCultureInfo);
sconnection = new SqlConnection();
sconnection.ConnectionString = PM.Properties.Settings.Default.ConPM;
if (sconnection.State == ConnectionState.Closed)
{
sconnection.Open();
}
for (DateTime nextdate = dtStart; nextdate <= dtEnd; nextdate = farsiCultureInfo.Calendar.AddDays(nextdate, period))
{
string Insert2 = "Insert into TblPreventiveDay values ('{0}','{1}','{2}','{3}')";
string nnextdate = string.Format("{0:yyyy/MM/dd}", nextdate);
Insert2 = string.Format(Insert2, PreventiveId, nnextdate, 0, 0);
Function.DoDml2(Insert2,sconnection);
}
sconnection.Close();
MessageBox.Show("پیشگیرانه طی دوره روزانه ایجاد شد");


}






و





public static void DoDml2(string Query,SqlConnection con)
{
SqlCommand cmd = new SqlCommand(Query, con);
cmd.ExecuteNonQuery();


}




146659