PDA

View Full Version : سوال: اعتبار سنجی ساعت وارد شده طبق شیفت



jafarpalideh
دوشنبه 06 اسفند 1397, 15:37 عصر
یه فرم دارم :
149831

یه جدول TblTimelyHeader دارم که میام تاریخ و آی دی شیفت و ساعت شروع و پایان شیفت از نوع Time(7) توش نگه میدارم .
تو جدول TblTimelyContent هم میام و بر اساس هر ماشین ساعت شروع و پایان تولید و زمان رگلاژ و زمان استراحت رو وارد میکنم .
که امکان داره به ازای هر ماشین چندین بار رکورد ثبت بشه
حالا خواسته هام اینا:
1- اعتبار سنجی زمان شروع و پایان تولید طبق شیفت (مخصوصا شیفت های که توی دو روز قرار داره)
2 - مجموع زمان تولید و رگلاژ از زمان کل شیفت به ازای هر ماشین بیشتر نشه .

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





private void button1_Click(object sender, EventArgs e)
{
int beginTime = Convert.ToInt32(ShifttimeBegin.Substring(0, 2));
int EndTime = Convert.ToInt32(ShifttimeEnd.Substring(0, 2));
if (RoozBaadi==false)
{
if (Convert.ToInt32(txtHourBegin.Text) < beginTime || Convert.ToInt32(txtHourEnd.Text) > EndTime)
{
MessageBox.Show("ساعت وارد شده در شیفت مورد نظر نمی باشد");
return;
}
}
else
{
int x = 0;
switch (txtHourBegin.Text)
{
case "00":
{
x = 24;
break;
}
case "01":
{
x = 25;
break;
}
case "02":
{
x = 26;
break;
}
case "03":
{
x = 27;
break;
}
case "04":
{
x = 28;
break;
}
case "05":
{
x = 29;
break;
}
case "06":
{
x = 30;
break;
}
case "07":
{
x = 31;
break;
}
default:
x = Convert.ToInt32(txtHourBegin.Text);
break;

}
if (x < beginTime || Convert.ToInt32(txtHourEnd.Text) > EndTime)
{
MessageBox.Show("ساعت وارد شده در شیفت مورد نظر نمی باشد");
return;
}
}
int year = Convert.ToInt32(dateShamsi.Substring(0, 4));
int Month = Convert.ToInt32(dateShamsi.Substring(5, 2));
int Day = Convert.ToInt32(dateShamsi.Substring(8, 2));
int Day1 = Convert.ToInt32(dateShamsi.Substring(8, 2));
System.Globalization.PersianCalendar calendar = new System.Globalization.PersianCalendar();
if (RoozBaadi == true && (txtHourBegin.Text == "00" || txtHourBegin.Text == "01" || txtHourBegin.Text == "02" || txtHourBegin.Text == "03" || txtHourBegin.Text == "04" || txtHourBegin.Text == "05" || txtHourBegin.Text == "06" || txtHourBegin.Text == "07" || txtHourBegin.Text == "08"))
{
Day1++;
}
DateTime dt1 = calendar.ToDateTime(year, Month, Day1, Convert.ToInt32(txtHourBegin.Text.Trim()), Convert.ToInt32(txtMinBegin.Text.Trim()), 0, 0);
if (RoozBaadi == true && (txtHourEnd.Text == "00" || txtHourEnd.Text == "01" || txtHourEnd.Text == "02" || txtHourEnd.Text == "03" || txtHourEnd.Text == "04" || txtHourEnd.Text == "05" || txtHourEnd.Text == "06" || txtHourEnd.Text == "07" || txtHourEnd.Text == "08"))
{
Day++;
}
DateTime dt2 = calendar.ToDateTime(year, Month, Day, Convert.ToInt32(txtHourEnd.Text.Trim()), Convert.ToInt32(txtMinEnd.Text.Trim()), 0, 0);
double totalMinute = (dt2 - dt1).TotalMinutes;
MessageBox.Show(totalMinute.ToString());
}

alexmcse
دوشنبه 06 اسفند 1397, 16:59 عصر
سلام دوست عزیز

سوال به طور کلی است سوال شما رو متوجه نمیشوم به صورت جزئی بیان کنید
کجا مشکل دارید؟

jafarpalideh
دوشنبه 06 اسفند 1397, 17:09 عصر
من تو جدول شیفت میام و شیفت هام رو تعریف میکنم .
حالا میخوام کاربر وقتی ساعت شروع و پایان تولید رو میزنه چک بشه که ساعات وارد شده درون شیفت مورد نظر قرار داره یا نداره . اون تکست ها رو میخوام اعتبار سنجی کنم که مو لا درزش نره .

عکس جداول رو میزارم .
149833

jafarpalideh
سه شنبه 07 اسفند 1397, 07:16 صبح
ساده تر میگم .
یه جدول TblShift دارم که شامل آی دی شیفت - نام شیفت و ساعت شروع و پایان شیفت هست و یه فیلد که مشخص میکنه ساعت پایان توی روز بعدی هست یا نه . مثلا 23 امروز تا 7 روز بعد . یه جدول TblTimelyHeader دارم که میام تاریخ و شیفت رو توش نگه میدارم (منظورم آی دی شیفت هست.) یه جدول TblTimelyContent دارم که که تولیدهام رو توش ثبت میکنم که شامل آی دی ماشین ، آی دی TblTimelyHeader و ساعت شروع تولید و ساعت پایان تولید
دنبال ساده ترین و بهترین راهکار هستم که ساعت شروع و پایان رو اعتبار سنجی کنم. گیرم هم بیشتر روی شیفت هایی مثل 23 امروز تا 7 روز بعد هستش .

jafarpalideh
سه شنبه 07 اسفند 1397, 16:11 عصر
با این کدها تونستم اگه ساعت شروع و پایان شیفت توی یک روز باشه اعتبار سنجی کنم و تمام حالتها رو هم امتحان کردم و جواب میده .




//ساعت شروع شیفت
int beginTimeHour = Convert.ToInt32(ShifttimeBegin.Substring(0, 2));
//دقیقه شروع شیفت
int beginTimeMin = Convert.ToInt32(ShifttimeBegin.Substring(3, 2));
//ساعت پایان شیفت
int EndTimeHour = Convert.ToInt32(ShifttimeEnd.Substring(0, 2));
//دقیقه پایان شیف
int EndTimeMin = Convert.ToInt32(ShifttimeEnd.Substring(3, 2));
if (RoozBaadi == false)
{
if (Convert.ToInt32(txtHourBegin.Text) < beginTimeHour || Convert.ToInt32(txtHourEnd.Text) > EndTimeHour)
{


MessageBox.Show("ساعت وارد شده در شیفت مورد نظر نمی باشد");
return;
}
else
{
if (Convert.ToInt32(txtHourEnd.Text) == EndTimeHour)
{
if (Convert.ToInt32(txtMinEnd.Text) > EndTimeMin)
{
MessageBox.Show("ساعت وارد شده در شیفت مورد نظر نمی باشد");
return;
}
}
}
if (Convert.ToInt32(txtHourBegin.Text) > Convert.ToInt32(txtHourEnd.Text))
{
MessageBox.Show("ساعت شروع از ساعت پایان کمتر است");
return;
}
else if (Convert.ToInt32(txtHourBegin.Text) == Convert.ToInt32(txtHourEnd.Text))


{
if (Convert.ToInt32(txtMinBegin.Text.Trim()) > Convert.ToInt32(txtMinEnd.Text.Trim()))
{
MessageBox.Show("ساعت شروع از ساعت پایان کمتر است");
return;
}
}
}






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

jafarpalideh
چهارشنبه 08 اسفند 1397, 10:29 صبح
حلش کردم .





private bool TimeChecked()
{
bool isCorrect = false;
System.Globalization.PersianCalendar calendar = new System.Globalization.PersianCalendar();
int year = Convert.ToInt32(dateShamsi.Substring(0, 4));
int Month = Convert.ToInt32(dateShamsi.Substring(5, 2));
int Day = Convert.ToInt32(dateShamsi.Substring(8, 2));
int beginTimeHour = Convert.ToInt32(ShifttimeBegin.Substring(0, 2));
int beginTimeMin = Convert.ToInt32(ShifttimeBegin.Substring(3, 2));
int EndTimeHour = Convert.ToInt32(ShifttimeEnd.Substring(0, 2));
int EndTimeMin = Convert.ToInt32(ShifttimeEnd.Substring(3, 2));
if (RoozBaadi == false)
{
if (Convert.ToInt32(txtHourBegin.Text) < beginTimeHour || Convert.ToInt32(txtHourEnd.Text) > EndTimeHour)
{
MessageBox.Show("ساعت وارد شده در شیفت مورد نظر نمی باشد");
isCorrect = false;
return isCorrect;
}
else if (Convert.ToInt32(txtHourBegin.Text) > Convert.ToInt32(txtHourEnd.Text))
{
MessageBox.Show("ساعت پایان از ساعت شروع کمتر است");
isCorrect = false;
return isCorrect;
}
else if (Convert.ToInt32(txtHourBegin.Text) == Convert.ToInt32(txtHourEnd.Text))
{
if (Convert.ToInt32(txtMinBegin.Text) > Convert.ToInt32(txtMinEnd.Text))
{
MessageBox.Show("دقیقه پایان از دقیقه شروع کمتر است");
isCorrect = false;
return isCorrect;
}
else
{
DateTime dt1 = calendar.ToDateTime(year, Month, Day, Convert.ToInt32(txtHourBegin.Text.Trim()),
Convert.ToInt32(txtMinBegin.Text.Trim()), 0, 0);
DateTime dt2 = calendar.ToDateTime(year, Month, Day, Convert.ToInt32(txtHourEnd.Text.Trim()),
Convert.ToInt32(txtMinEnd.Text.Trim()), 0, 0);
double totalMinute = (dt2 - dt1).TotalMinutes;
isCorrect = true;
return isCorrect;
}
}
else if (Convert.ToInt32(txtHourBegin.Text) < Convert.ToInt32(txtHourEnd.Text))
{
DateTime dt1 = calendar.ToDateTime(year, Month, Day, Convert.ToInt32(txtHourBegin.Text.Trim()),
Convert.ToInt32(txtMinBegin.Text.Trim()), 0, 0);
DateTime dt2 = calendar.ToDateTime(year, Month, Day, Convert.ToInt32(txtHourEnd.Text.Trim()),
Convert.ToInt32(txtMinEnd.Text.Trim()), 0, 0);
double totalMinute = (dt2 - dt1).TotalMinutes;
isCorrect = true;
return isCorrect;
}
}
else
{
List<int> timeList = new List<int>();
for (int i = beginTimeHour; i <= 23; i++)
{
timeList.Add(i);
}


for (int i = 0; i <= EndTimeHour; i++)
{
timeList.Add(i);
}
int timeBegin = Convert.ToInt32(txtHourBegin.Text.Trim());
int timeEnd = Convert.ToInt32(txtHourEnd.Text.Trim());
bool ExistHourBeginInShift = timeList.Contains(timeBegin);
bool ExistHourEndInShift = timeList.Contains(timeEnd);
if (ExistHourBeginInShift && ExistHourEndInShift)
{
if (beginTimeHour < timeBegin && timeBegin <= 23 && beginTimeHour < timeEnd && timeEnd <= 23)
{
DateTime dt1 = calendar.ToDateTime(year, Month, Day, Convert.ToInt32(txtHourBegin.Text.Trim()),
Convert.ToInt32(txtMinBegin.Text.Trim()), 0, 0);
DateTime dt2 = calendar.ToDateTime(year, Month, Day, Convert.ToInt32(txtHourEnd.Text.Trim()),
Convert.ToInt32(txtMinEnd.Text.Trim()), 0, 0);
double totalMinute = (dt2 - dt1).TotalMinutes;
if (totalMinute < 0 || totalMinute == 0)
{
MessageBox.Show("اختلاف ساعت وارد شده مجاز نمی باشد . لطفا ساعت را چک کنید");
isCorrect = false;
return isCorrect;
}
else
{
MessageBox.Show(totalMinute.ToString());
}
}


if (beginTimeHour < timeBegin && timeBegin <= 23 && 0 <= timeEnd && timeEnd < EndTimeHour)
{
DateTime dt1 = calendar.ToDateTime(year, Month, Day, Convert.ToInt32(txtHourBegin.Text.Trim()),
Convert.ToInt32(txtMinBegin.Text.Trim()), 0, 0);
Day++;
DateTime dt2 = calendar.ToDateTime(year, Month, Day, Convert.ToInt32(txtHourEnd.Text.Trim()),
Convert.ToInt32(txtMinEnd.Text.Trim()), 0, 0);
double totalMinute = (dt2 - dt1).TotalMinutes;
if (totalMinute < 0 || totalMinute == 0)
{
MessageBox.Show("اختلاف ساعت وارد شده مجاز نمی باشد . لطفا ساعت را چک کنید");
isCorrect = false;
return isCorrect;
}
else
{
MessageBox.Show(totalMinute.ToString());
}
}


if (0 <= timeBegin && timeBegin < EndTimeHour && 0 <= timeEnd && timeEnd < EndTimeHour)
{
Day++;
DateTime dt1 = calendar.ToDateTime(year, Month, Day, Convert.ToInt32(txtHourBegin.Text.Trim()),
Convert.ToInt32(txtMinBegin.Text.Trim()), 0, 0);
DateTime dt2 = calendar.ToDateTime(year, Month, Day, Convert.ToInt32(txtHourEnd.Text.Trim()),
Convert.ToInt32(txtMinEnd.Text.Trim()), 0, 0);
double totalMinute = (dt2 - dt1).TotalMinutes;
if (totalMinute < 0 || totalMinute == 0)
{
MessageBox.Show("اختلاف ساعت وارد شده مجاز نمی باشد . لطفا ساعت را چک کنید");
isCorrect = false;
return isCorrect;
}
else
{
MessageBox.Show(totalMinute.ToString());
}
}


if (0 <= timeBegin && timeBegin < EndTimeHour && beginTimeHour < timeEnd && timeEnd <= 23)
{
MessageBox.Show("ساعت پایان وارد شده در شیفت مورد نظر نمی باشد");
isCorrect = false;
return isCorrect;
}
}
else
{
MessageBox.Show("ساعت وارد شده در شیفت مورد نظر نمی باشد");
isCorrect = false;
return isCorrect;
}
}
return isCorrect;
}