} // ReactionDocDo internal override ABaseMode Init() { if (!SQL1S.IsVoidDate((DateTime)DocCC.GetAttributeHeader("Дата3"))) { return(Negative("Сборочный уже скомплектован!")); } if (SQL1S.IsVoidDate((DateTime)DocCC.GetAttributeHeader("Дата2"))) { return(Negative("Сборочный не собран!")); } if (!SS.LockDoc(DocCC.ID)) { return(Negative(SS.ExcStr)); } if (SQL1S.IsVoidDate((DateTime)DocCC.GetAttributeHeader("Дата4")) && TransferWindow.Selected) { //Если предкомплектация еще не задана, а окно выдачи уже задано, то делаем предкомплектацию DocCC.SetAttributeHeader("Дата4", DateTime.Now); DocCC.SetAttributeHeader("Время4", APIManager.NowSecond()); DocCC.SetAttributeHeader("Комплектовщик2", Employer.ID); DocCC.Save(); //Если окно задано - то даем команду выводить на табло SendToTablo(1); } return(Positive()); } // ReactionSCEmployersDo
private void ShowSectionsNew(string currProposal) { ViewProposal = currProposal; ExPanel pnlInfoNew = pnlCurrent.GetControlByName("pnlInfoNew") as ExPanel; pnlInfoNew.Controls.Clear(); //Нужно дойти до контроля расходной string DocType; string IDCB = ""; //ИД контроля расходной List <string> SubjectDocs; if (!SS.GetSubjectDocs(currProposal, "Счет", out SubjectDocs)) { return; } //Если пустой, то это счет, а не заявка if (SubjectDocs.Count == 0) { return; } //Не пустой, ищем контроль расходной или адрес набор bool IsFound = false; foreach (string CurrentIDDoc in SubjectDocs) { if (SS.GetDocType(CurrentIDDoc, out DocType)) { if (DocType == "КонтрольРасходной") { IDCB = CurrentIDDoc; IsFound = true; break; //ПОЕХАЛИ ДАЛЬШЕ } } else { return; } } if (!IsFound) { return; } Dictionary <string, object> DaemondData = new Dictionary <string, object>(); if (!SS.GetDoc(currProposal, out DaemondData)) { return; } Dictionary <string, object> DataMap; List <string> CCListID; //теперь получаем список всех контролей набора if (!SS.GetCCListNew(IDCB, out CCListID, out DataMap)) { return; } //Тяжелая работа по выводу данных List <string> FieldList = new List <string>(); Dictionary <string, object> DataMapRead; FieldList.Add("DESCR"); const int FieldOnRow = 8; //Число полей на одну строку одного сектора Label[,] Lbl = new Label[FieldOnRow, CCListID.Count]; int i = 0; int dY; //Это смещение, м/у строками int FirstIndex = -1; //Индекс строки первой комплектации int LastIndex = -1; //Индекс строки последней комплектации DateTime MinDate = new DateTime(2020, 01, 01); //Минимальная дата DateTime MaxDate = new DateTime(1753, 01, 01); //Максимальная дата int MinTime = 86400; //Минимальное время int MaxTime = 0; //Максимальное время bool AllComplete = true; //Последнюю комплектацию не имеет смысла считать, если где-то, что-то не скомплектовано foreach (string ID in CCListID) { dY = i * 30; //Создадим метки для этого сектора for (int j = 0; j < FieldOnRow; j++) { Lbl[j, i] = new Label(); Lbl[j, i].Name = "_dyn" + j.ToString() + i.ToString(); Lbl[j, i].BackColor = Color.White; pnlInfoNew.Controls.Add(Lbl[j, i]); } //ОПРЕДЕЛИМСЯ С СОДЕРЖАНИЕМ И ЦВЕТАМИ ИСХОДЯ ИЗ СОСТОЯНИЯ //Ниже используются запросы к БД, не очень красиво, но в целях оптимизации (т.к. заглядывают сюда не всякий раз) //Поэтому, если что-то не срастается, то выводим пустые поля, там где несраслось if (SQL1S.IsVoidDate((DateTime)DataMap[ID + ".КонтрольНабора.Дата1"])) { //ОЖИДАНИЕ НАБОРА Lbl[1, i].Text = "."; Lbl[2, i].Text = "<< ожидание >>"; Lbl[3, i].Text = "__:__"; Lbl[4, i].Text = " неопределен"; Lbl[5, i].Text = "__:__"; //Цвета Lbl[0, i].ForeColor = Color.Red; Lbl[1, i].ForeColor = Color.Red; Lbl[2, i].ForeColor = Color.LightPink; Lbl[3, i].ForeColor = Color.LightGray; Lbl[4, i].ForeColor = Color.LightGray; Lbl[5, i].ForeColor = Color.LightGray; AllComplete = false; } else if (SQL1S.IsVoidDate((DateTime)DataMap[ID + ".КонтрольНабора.Дата2"])) { //В НАБОРЕ Lbl[1, i].Text = "..."; if (!SS.GetSCData(DataMap[ID + ".КонтрольНабора.Наборщик"].ToString(), "Сотрудники", FieldList, out DataMapRead, true)) { Lbl[2, i].Text = "< не задан >"; } else { Lbl[2, i].Text = Helper.GetShortFIO(DataMapRead["DESCR"].ToString()); } Lbl[3, i].Text = "(" + ((DateTime)DataMap[ID + ".КонтрольНабора.Дата1"]).ToString("dd.MM") + ") " + Helper.SecondToString((int)(decimal)DataMap[ID + ".КонтрольНабора.Время1"]) + " - ..."; Lbl[4, i].Text = " неопределен"; Lbl[5, i].Text = "__:__"; //Цвета Lbl[0, i].ForeColor = Color.Red; Lbl[1, i].ForeColor = Color.Red; Lbl[2, i].ForeColor = Color.Red; Lbl[3, i].ForeColor = Color.Red; Lbl[4, i].ForeColor = Color.LightGray; Lbl[5, i].ForeColor = Color.LightGray; AllComplete = false; } else if (SQL1S.IsVoidDate((DateTime)DataMap[ID + ".КонтрольНабора.Дата3"])) { //НАБРАНА Lbl[1, i].Text = "--"; if (!SS.GetSCData(DataMap[ID + ".КонтрольНабора.Наборщик"].ToString(), "Сотрудники", FieldList, out DataMapRead, true)) { Lbl[2, i].Text = "< не задан >"; } else { Lbl[2, i].Text = Helper.GetShortFIO(DataMapRead["DESCR"].ToString()); } Lbl[3, i].Text = "(" + ((DateTime)DataMap[ID + ".КонтрольНабора.Дата2"]).ToString("dd.MM") + ") " + Helper.SecondToString((int)(decimal)DataMap[ID + ".КонтрольНабора.Время1"]) + " - " + Helper.SecondToString((int)(decimal)DataMap[ID + ".КонтрольНабора.Время2"]); Lbl[4, i].Text = "<< ожидание >>"; Lbl[5, i].Text = "__:__"; //Цвета Lbl[0, i].ForeColor = Color.Red; Lbl[1, i].ForeColor = Color.Red; Lbl[2, i].ForeColor = Color.Red; Lbl[3, i].ForeColor = Color.Red; Lbl[4, i].ForeColor = Color.LightPink; Lbl[5, i].ForeColor = Color.LightGray; AllComplete = false; } else { //СКОМПЛЕКТОВАНА DateTime CurrentDate = (DateTime)DataMap[ID + ".КонтрольНабора.Дата3"]; int CurrentTime = (int)(decimal)DataMap[ID + ".КонтрольНабора.Время3"]; //Скорректируем максималный момент комплектации if (AllComplete && CurrentDate > MaxDate) { MaxDate = CurrentDate; MaxTime = CurrentTime; LastIndex = i; } else if (AllComplete && CurrentDate == MaxDate && CurrentTime > MaxTime) { MaxTime = CurrentTime; LastIndex = i; } //Скорректируем максималный момент комплектации if (CurrentDate < MinDate) { MinDate = CurrentDate; MinTime = CurrentTime; FirstIndex = i; } else if (CurrentDate == MinDate && CurrentTime < MinTime) { MinTime = CurrentTime; FirstIndex = i; } //собственно рисовалка Lbl[1, i].Text = "+"; if (!SS.GetSCData(DataMap[ID + ".КонтрольНабора.Наборщик"].ToString(), "Сотрудники", FieldList, out DataMapRead, true)) { Lbl[2, i].Text = "< не задан >"; } else { Lbl[2, i].Text = Helper.GetShortFIO(DataMapRead["DESCR"].ToString()); } Lbl[3, i].Text = "(" + ((DateTime)DataMap[ID + ".КонтрольНабора.Дата2"]).ToString("dd.MM") + ") " + Helper.SecondToString((int)(decimal)DataMap[ID + ".КонтрольНабора.Время1"]) + " - " + Helper.SecondToString((int)(decimal)DataMap[ID + ".КонтрольНабора.Время2"]); if (!SS.GetSCData(DataMap[ID + ".КонтрольНабора.Комплектовщик"].ToString(), "Сотрудники", FieldList, out DataMapRead, true)) { Lbl[4, i].Text = "< не задан >"; } else { Lbl[4, i].Text = Helper.GetShortFIO(DataMapRead["DESCR"].ToString()); } Lbl[5, i].Text = "(" + CurrentDate.ToString("dd.MM") + ") " + Helper.SecondToString(CurrentTime); //Цвета Lbl[0, i].ForeColor = Color.Black; Lbl[1, i].ForeColor = Color.Black; Lbl[2, i].ForeColor = Color.Black; Lbl[3, i].ForeColor = Color.Black; Lbl[4, i].ForeColor = Color.Black; Lbl[5, i].ForeColor = Color.Black; } //Заголовок Lbl[0, i].Font = FontTahoma14Bold; Lbl[0, i].TextAlign = ContentAlignment.TopCenter; Lbl[0, i].Location = new Point(3, 3 + dY); Lbl[0, i].Size = new Size(50, 27); if (DataMap[ID + ".КонтрольНабора.Сектор"].ToString() == SQL1S.GetVoidID()) { //Пустая Lbl[0, i].Text = "Пу"; } else { Lbl[0, i].Text = DataMap[DataMap[ID + ".КонтрольНабора.Сектор"] + ".@Сектор.Имя"].ToString().Trim(); } Lbl[0, i].Text += "-" + DataMap[ID + ".КонтрольНабора.НомерЛиста"]; //Мест погружено Lbl[1, i].Font = FontTahoma9Bold; Lbl[1, i].TextAlign = ContentAlignment.TopRight; Lbl[1, i].Location = new Point(56, 3 + dY); Lbl[1, i].Size = new Size(25, 13); //Мест всего Lbl[7, i].Font = FontTahoma9Bold; Lbl[7, i].TextAlign = ContentAlignment.TopRight; Lbl[7, i].Location = new Point(56, 17 + dY); Lbl[7, i].Size = new Size(25, 13); //Наборщик Lbl[2, i].Font = FontTahoma9Regular; Lbl[2, i].TextAlign = ContentAlignment.TopLeft; Lbl[2, i].Location = new Point(84, 3 + dY); Lbl[2, i].Size = new Size(112, 13); //Время наборщика Lbl[3, i].Font = FontTahoma8Regular; Lbl[3, i].TextAlign = ContentAlignment.TopLeft; Lbl[3, i].Location = new Point(199, 3 + dY); Lbl[3, i].Size = new Size(110, 13); //Комплектовщик Lbl[4, i].Font = FontTahoma9Regular; Lbl[4, i].TextAlign = ContentAlignment.TopLeft; Lbl[4, i].Location = new Point(84, 17 + dY); Lbl[4, i].Size = new Size(112, 13); //Время комплектовщика Lbl[5, i].Font = FontTahoma8Regular; Lbl[5, i].TextAlign = ContentAlignment.TopLeft; Lbl[5, i].Location = new Point(199, 17 + dY); Lbl[5, i].Size = new Size(77, 13); //Количество строк Lbl[6, i].Font = FontTahoma8Bold; Lbl[6, i].TextAlign = ContentAlignment.TopRight; Lbl[6, i].Location = new Point(279, 17 + dY); Lbl[6, i].Size = new Size(30, 13); Lbl[6, i].Text = DataMap[ID + ".КонтрольНабора.КолСтрок"].ToString(); Lbl[6, i].ForeColor = Color.Navy; //Места Lbl[7, i].Text = DataMap[ID + ".КонтрольНабора.КолМест"].ToString(); Lbl[1, i].Text = DataMap[ID + ".КонтрольНабора.МестФакт"].ToString(); if (DataMap[ID + ".КонтрольНабора.КолМест"].ToString() != DataMap[ID + ".КонтрольНабора.МестФакт"].ToString()) { Lbl[1, i].ForeColor = Color.Red; } i++; } //Подкрасим первую и последнюю комплектации if (FirstIndex >= 0) { Lbl[1, FirstIndex].BackColor = Color.PaleGoldenrod; Lbl[7, FirstIndex].BackColor = Color.PaleGoldenrod; } if (AllComplete && LastIndex >= 0) { Lbl[1, LastIndex].BackColor = Color.PaleGreen; Lbl[7, LastIndex].BackColor = Color.PaleGreen; } pnlInfoNew.BringToFront(); //Заголовок с информацией по заявке if (DaemondData.Count > 0) { string txt = DaemondData["НомерДок"].ToString() + " (" + ((DateTime)DaemondData["ДатаДок"]).ToString("dd.MM.yy") + ")"; //Label lblDescr = pnlCurrent.GetLabelByName("lblDescr"); //lblDescr.Text = txt; } }