static void AddAdditionalTables(WordprocessingDocument Certificate, TablesCreator Creator, string DeviceType) { IEnumerable <CertificateTableLook> TablesCollection = Creator.CertificateAdditionalTablesCollection.Where(r => r.DeviceTypes.Any(s => s == DeviceType)); if (TablesCollection.Count() > 0) { foreach (CertificateTableLook CurrentTable in TablesCollection) { Certificate.MainDocumentPart.Document.Body.Append(CurrentTable.GetDeviceTable(null)); //Certificate.MainDocumentPart.Document.Body.Append(CalibrationLib.NewParagraph(0, 0, JustificationValues.Left, 10)); } } }
public static bool Verify(ScriptClassBase CardScript, ObjectContext Context, CardData DeviceCard, Guid Client, DateTime CalibrationDate, List <CardData> AdditionalWaresList, DateTime StartDateOfService, bool IsNewDevice = false) { string ErrorText = ""; Guid DeviceTypeID = DeviceCard.Sections[CardOrd.Properties.ID].FindRow("@Name = 'Прибор'").GetString(CardOrd.Properties.Value).ToGuid(); string DeviceTypeName = ApplicationCard.UniversalCard.GetItemName(DeviceTypeID); string DeviceNumber = DeviceCard.GetDeviceNumber(); // Наличие в справочнике полного названия прибора if (ApplicationCard.UniversalCard.GetItemPropertyValue(DeviceTypeID, "Полное название") == null) { ErrorText = ErrorText + " - Не удалось определить полное название прибора.\n"; } // Наличие в справочнике методики поверки if (ApplicationCard.UniversalCard.GetItemPropertyValue(DeviceTypeID, "Методика поверки") == null) { ErrorText = ErrorText + " - Не удалось определить методику поверки для указанного прибора.\n"; } // Наличие в справочнике средств калибровки //if (ApplicationCard.UniversalCard.GetItemPropertyValue(DeviceTypeID, "Средства калибровки") == null) if (CalibrationLib.GetListOfMeasures(CardScript.Session, DeviceTypeID, true, false) == "-") { ErrorText = ErrorText + " - Не удалось определить средства калибровки для указанного прибора.\n"; } // Наличие сведений об условиях калибровки на указанную дату калибровки ErrorText = ErrorText + CalibrationLib.CheckCalibrationJournal(CardScript, Context, CalibrationDate); //** Проверка родительских документов **// TablesCreator Creator = new TablesCreator(); string DeviceErrorText = ""; // Проверка протокола калибровки прибора if (Creator.CertificateDeviceTablesCollection.Any(r => r.DeviceTypes.Any(s => s == DeviceTypeName) && r.ParentDocumentCategory == CertificateTableLook.DocumentCategory.CalibrationProtocol)) { DeviceErrorText = CalibrationLib.CheckDocument(CardScript.Session, DeviceCard, StartDateOfService, CalibrationLib.CalibrationProtocolCategoryID, IsNewDevice); if (DeviceErrorText != "") { ErrorText = ErrorText + " - Не удалось найти данные о калибровке для " + DeviceTypeName + " " + DeviceNumber + ":\n" + DeviceErrorText; } } // Проверка данных измерений для некоторых приборов //if (CalibrationLib.MeasuringDataList.Any(r => r == DeviceTypeName)) if (Creator.CertificateDeviceTablesCollection.Any(r => r.DeviceTypes.Any(s => s == DeviceTypeName) && r.ParentDocumentCategory == CertificateTableLook.DocumentCategory.MeasuringData)) { DeviceErrorText = CalibrationLib.CheckDocument(CardScript.Session, DeviceCard, StartDateOfService, CalibrationLib.MeasuringDataCategoryID, IsNewDevice); if (DeviceErrorText != "") { ErrorText = ErrorText + " - Не удалось найти данные измерений для " + DeviceTypeName + " " + DeviceNumber + ":\n" + DeviceErrorText; } } // Проверка протоколов приемосдаточных испытаний для датчиков if ((AdditionalWaresList != null) && (AdditionalWaresList.Count() > 0)) { foreach (CardData Ware in AdditionalWaresList) { Guid WareTypeID = Ware.Sections[CardOrd.Properties.ID].FindRow("@Name = 'Прибор'").GetString(CardOrd.Properties.Value).ToGuid(); string WareTypeName = ApplicationCard.UniversalCard.GetItemName(WareTypeID); if (CalibrationLib.SensorsList.Any(r => r == WareTypeName)) { string WareNumber = Ware.Sections[CardOrd.Properties.ID].FindRow("@Name = 'Заводской номер прибора'").GetString(CardOrd.Properties.Value).ToString(); string WareYear = Ware.Sections[CardOrd.Properties.ID].FindRow("@Name = '/Год прибора'").GetString(CardOrd.Properties.Value).ToString(); WareNumber = WareNumber.Length == 4 ? WareNumber : WareNumber + "/" + WareYear; string SensorsErrorText = CalibrationLib.CheckDocument(CardScript.Session, Ware, StartDateOfService, CalibrationLib.AcceptanceTestingProtocolCategoryID, IsNewDevice); if (SensorsErrorText != "") { ErrorText = ErrorText + " - Не удалось найти данные о приемосдаточных испытаниях для " + WareTypeName + " " + WareNumber + ":\n" + SensorsErrorText; } } } } if (ErrorText == "") { return(true); } else { XtraMessageBox.Show("Не удалось сформировать 'Сертификат о калибровке'. Обнаружены следующие ошибки:\n\n" + ErrorText + "\nОбратитесь к администратору системы.", "", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); return(false); } }
static void AddSensorTables(WordprocessingDocument Certificate, UserSession Session, TablesCreator Creator, string DeviceType, string DeviceNumber, CardData DeviceCard, DateTime StartDateOfService) { IEnumerable <CertificateTableLook> TablesCollection = Creator.CertificateSensorTablesCollection.Where(r => r.DeviceTypes.Any(s => s == DeviceType)); if (TablesCollection.Count() == 0) { XtraMessageBox.Show("Для датчика '" + DeviceType + "' не найден шаблон таблицы. Обратитесь к системному администратору."); } else { foreach (CertificateTableLook CurrentTable in TablesCollection) { WordprocessingDocument ParentDocument; string TempPath = ""; switch (CurrentTable.ParentDocumentCategory) { case CertificateTableLook.DocumentCategory.AcceptanceTestingProtocol: ParentDocument = CalibrationLib.GetDocument(Session, DeviceCard, CalibrationLib.AcceptanceTestingProtocolCategoryID, out TempPath); break; case CertificateTableLook.DocumentCategory.CalibrationProtocol: ParentDocument = CalibrationLib.GetDocument(Session, DeviceCard, CalibrationLib.CalibrationProtocolCategoryID, out TempPath); break; case CertificateTableLook.DocumentCategory.MeasuringData: ParentDocument = CalibrationLib.GetDocument(Session, DeviceCard, CalibrationLib.MeasuringDataCategoryID, out TempPath); break; default: ParentDocument = null; break; } Certificate.MainDocumentPart.Document.Body.Append(CurrentTable.GetSensorsTable(ParentDocument, DeviceNumber)); //Certificate.MainDocumentPart.Document.Body.Append(CalibrationLib.NewParagraph(0, 0, JustificationValues.Left, 10)); if (ParentDocument != null) { ParentDocument.Close(); File.Delete(TempPath); } } } }
public static void FillData(WordprocessingDocument Certificate, ScriptClassBase CardScript, ObjectContext Context, CardData DeviceCard, string ClientName, DateTime CalibrationDate, List <CardData> AdditionalWaresList, DateTime StartDateOfService, DateTime StartDateOfCalibration) { // Формирование сертификата Guid DeviceTypeID = DeviceCard.Sections[CardOrd.Properties.ID].FindRow("@Name = 'Прибор'").GetString(CardOrd.Properties.Value).ToGuid(); string DeviceTypeName = ApplicationCard.UniversalCard.GetItemName(DeviceTypeID); string DeviceNumber = DeviceCard.GetDeviceNumber(); DeviceNumber = DeviceNumber.Contains("/") == true?DeviceNumber.Replace("/", " (") + " г)" : DeviceNumber; string DeviceNumber2; switch (DeviceTypeName) { case "ПКР-2М": DeviceNumber = "ПКР-2" + " № " + DeviceNumber; DeviceNumber2 = ""; break; case "ПКВ/У3.0-01": DeviceNumber = "ПКВ/У3.0" + " № " + DeviceNumber; DeviceNumber2 = ""; break; case "ТК-026": DeviceNumber = " № " + DeviceNumber; DeviceNumber2 = "(для ПКВ/М7)"; break; case "ТК-021": DeviceNumber = " № " + DeviceNumber; DeviceNumber2 = "(для ПКВ/У3)"; break; default: DeviceNumber = DeviceTypeName + " № " + DeviceNumber; DeviceNumber2 = ""; break; } // Данные для заполнения закладочных полей string FullDeviceType = ApplicationCard.UniversalCard.GetItemPropertyValue(DeviceTypeID, "Полное название").ToString(); string ReceiptDateString = StartDateOfCalibration.ToLongDateString(); string CalibrationDateString = CalibrationDate.ToLongDateString(); string CalibrationMethods = ApplicationCard.UniversalCard.GetItemPropertyValue(DeviceTypeID, "Методика поверки").ToString(); //string CalibrationMeans = ApplicationCard.UniversalCard.GetItemPropertyValue(DeviceTypeID, "Средства калибровки").ToString(); string CalibrationMeans = CalibrationLib.GetListOfMeasures(CardScript.Session, DeviceTypeID, true, false) + "."; // Условия калибровки string Temperature; string Humidity; string AtmospherePressure; CalibrationLib.GetCalibrationConditions(CardScript.Session, Context, CalibrationDate, out Temperature, out Humidity, out AtmospherePressure); // Заполнение закладочный полей FillBookmarks(Certificate, FullDeviceType, DeviceNumber, DeviceNumber2, ReceiptDateString, ClientName, CalibrationDateString, CalibrationMethods, Temperature, Humidity, AtmospherePressure, CalibrationMeans); //** Заполнение данных о метрологических характеристиках **// // Добавление заголовка AddTitle(Certificate); // Добавление таблицы метрологических характеристик прибора TablesCreator Creator = new TablesCreator(); AddDeviceTables(Certificate, CardScript.Session, Creator, DeviceTypeName, DeviceCard, StartDateOfService); // Добавление таблиц метрологических характеристик датчиков if (AdditionalWaresList != null) { foreach (CardData Ware in AdditionalWaresList) { Guid WareTypeID = Ware.Sections[CardOrd.Properties.ID].FindRow("@Name = 'Прибор'").GetString(CardOrd.Properties.Value).ToGuid(); string WareTypeName = ApplicationCard.UniversalCard.GetItemName(WareTypeID); if (CalibrationLib.SensorsList.Any(r => r == WareTypeName)) { string WareNumber = Ware.GetDeviceNumber(); AddSensorTables(Certificate, CardScript.Session, Creator, WareTypeName, WareNumber, Ware, StartDateOfService); } } } // Добавление дополнительных данных AddAdditionalTables(Certificate, Creator, DeviceTypeName); return; }
static void AddDeviceTables(WordprocessingDocument Certificate, UserSession Session, TablesCreator Creator, string DeviceType, CardData DeviceCard, DateTime StartDateOfService) { //WordprocessingDocument CalibrationProtocol = GetDocument(Session, DeviceCard, StartDateOfService, CalibrationProtocolCategoryID); //XtraMessageBox.Show("DeviceType = " + DeviceType); IEnumerable <CertificateTableLook> TablesCollection = Creator.CertificateDeviceTablesCollection.Where(r => r.DeviceTypes.Any(s => s == DeviceType)); if (TablesCollection.Count() == 0) { XtraMessageBox.Show("Для прибра '" + DeviceType + "' не найден шаблон таблицы. Обратитесь к системному администратору."); } else { Dictionary <String, Table> TablesList = new Dictionary <String, Table>(); foreach (CertificateTableLook CurrentTable in TablesCollection) { WordprocessingDocument ParentDocument; string TempPath = ""; switch (CurrentTable.ParentDocumentCategory) { case CertificateTableLook.DocumentCategory.AcceptanceTestingProtocol: ParentDocument = CalibrationLib.GetDocument(Session, DeviceCard, CalibrationLib.AcceptanceTestingProtocolCategoryID, out TempPath); break; case CertificateTableLook.DocumentCategory.CalibrationProtocol: ParentDocument = CalibrationLib.GetDocument(Session, DeviceCard, CalibrationLib.CalibrationProtocolCategoryID, out TempPath); break; case CertificateTableLook.DocumentCategory.MeasuringData: ParentDocument = CalibrationLib.GetDocument(Session, DeviceCard, CalibrationLib.MeasuringDataCategoryID, out TempPath); break; default: ParentDocument = null; break; } if (TablesList.Any(r => r.Key == CurrentTable.TableName)) { CurrentTable.AdditionDeviceTable(ParentDocument, TablesList.First(r => r.Key == CurrentTable.TableName).Value); } else { TablesList.Add(CurrentTable.TableName, CurrentTable.GetDeviceTable(ParentDocument)); } //Certificate.MainDocumentPart.Document.Body.Append(CurrentTable.GetDeviceTable(ParentDocument)); //Certificate.MainDocumentPart.Document.Body.Append(CalibrationLib.NewParagraph(0, 0, JustificationValues.Left, 10)); if (ParentDocument != null) { ParentDocument.Close(); File.Delete(TempPath); } } foreach (KeyValuePair <String, Table> T in TablesList) { Certificate.MainDocumentPart.Document.Body.Append(T.Value); } } }
static void AddSensorTables(WordprocessingDocument Protocol, UserSession Session, TablesCreator Creator, string SensorType, CardData SensorCard, DateTime StartDateOfService, string DeviceTypeName) { string SensorNumber = SensorCard.GetDeviceNumber(); IEnumerable <VerificationProtocolTableLook> TablesCollection = Creator.VerificationProtokolSensorTablesCollection.Where(r => r.DeviceTypes.Any(s => s == SensorType)); if (TablesCollection.Count() == 0) { XtraMessageBox.Show("Для датчика '" + SensorType + "' не найден шаблон таблицы. Обратитесь к системному администратору."); } else { foreach (VerificationProtocolTableLook CurrentTable in TablesCollection) { WordprocessingDocument ParentDocument; string TempPath = ""; switch (CurrentTable.ParentDocumentCategory) { case VerificationProtocolTableLook.DocumentCategory.AcceptanceTestingProtocol: ParentDocument = CalibrationLib.GetDocument(Session, SensorCard, CalibrationLib.AcceptanceTestingProtocolCategoryID, out TempPath); break; case VerificationProtocolTableLook.DocumentCategory.CalibrationProtocol: ParentDocument = CalibrationLib.GetDocument(Session, SensorCard, CalibrationLib.CalibrationProtocolCategoryID, out TempPath); break; case VerificationProtocolTableLook.DocumentCategory.MeasuringData: ParentDocument = CalibrationLib.GetDocument(Session, SensorCard, CalibrationLib.MeasuringDataCategoryID, out TempPath); break; default: ParentDocument = null; break; } Table NewSensorTable = CurrentTable.GetSensorsTable(ParentDocument, SensorNumber, DeviceTypeName); AddNewTable(Protocol, NewSensorTable, Protocol.GetTable("Заключение:").ElementsBefore().Last()); if (ParentDocument != null) { ParentDocument.Close(); File.Delete(TempPath); } } } return; }
static void AddDeviceTables(WordprocessingDocument Protocol, UserSession Session, TablesCreator Creator, string DeviceType, CardData DeviceCard, DateTime StartDateOfService) { // Определение точек вставки таблиц для протоколов поверки разных типов приборов IEnumerable <VerificationProtocolTableLook> TablesCollection = Creator.VerifyProtokolDeviceTablesCollection.Where(r => r.DeviceTypes.Any(s => s == DeviceType)); if (TablesCollection.Count() > 0) { OpenXmlElement IncertElement = Protocol.GetTable("Заключение:").ElementsBefore().Last(); switch (DeviceType) { case "ПКВ/М7": IncertElement = Protocol.GetTable("Определение основной абсолютной погрешности измерений интервалов времени").ElementsBefore().Last(); break; case "ПКВ/У3.0": IncertElement = Protocol.GetTable("Определение основной абсолютной погрешности измерений интервалов времени").ElementsBefore().Last(); break; case "ПКВ/У3.1": IncertElement = Protocol.GetTable("Определение основной абсолютной погрешности измерений интервалов времени").ElementsBefore().Last(); break; case "ПКВ/У3.0-01": IncertElement = Protocol.GetTable("Определение основной абсолютной погрешности измерений интервалов времени").ElementsBefore().Last(); break; /*case "МИКО-2.2": * IncertElement = Protocol.GetTable("Определение метрологических характеристик").ElementsAfter().First(); * break; * case "МИКО-2.3": * IncertElement = Protocol.GetTable("Определение метрологических характеристик").ElementsAfter().First(); * break;*/ case "МИКО-7": IncertElement = Protocol.GetTable("7. Проверка ограничения выходной мощности").ElementsBefore().Last(); break; /*case "МИКО-21": * IncertElement = Protocol.GetTable("Заключение:").ElementsAfter().First(); * break;*/ } //OpenXmlElement IncertElement = Protocol.GetTable("Определение основной абсолютной погрешности измерений силы постоянного электрического тока каналами ВКЛ и ОТКЛ силового коммутатора").ElementsAfter().First(); Dictionary <String, Table> TablesList = new Dictionary <String, Table>(); foreach (VerificationProtocolTableLook CurrentTable in TablesCollection) { //WordprocessingDocument ParentDocument; string ParentDocumentPath = ""; switch (CurrentTable.ParentDocumentCategory) { case VerificationProtocolTableLook.DocumentCategory.AcceptanceTestingProtocol: ParentDocumentPath = CalibrationLib.GetDocumentPath(Session, DeviceCard, CalibrationLib.AcceptanceTestingProtocolCategoryID); break; case VerificationProtocolTableLook.DocumentCategory.CalibrationProtocol: ParentDocumentPath = CalibrationLib.GetDocumentPath(Session, DeviceCard, CalibrationLib.CalibrationProtocolCategoryID); break; case VerificationProtocolTableLook.DocumentCategory.MeasuringData: ParentDocumentPath = CalibrationLib.GetDocumentPath(Session, DeviceCard, CalibrationLib.MeasuringDataCategoryID); break; default: ParentDocumentPath = ""; break; } if (ParentDocumentPath.EndsWith(".docx")) { WordprocessingDocument ParentDocument = WordprocessingDocument.Open(ParentDocumentPath, true); if (TablesList.Any(r => r.Key == CurrentTable.TableName)) { CurrentTable.AdditionDeviceTable(ParentDocument, TablesList.First(r => r.Key == CurrentTable.TableName).Value); } else { TablesList.Add(CurrentTable.TableName, CurrentTable.GetDeviceTable(ParentDocument)); } if (ParentDocument != null) { ParentDocument.Close(); } } if (ParentDocumentPath.EndsWith(".json")) { string fileContent = File.ReadAllText(ParentDocumentPath); RootObject MeashureData = JsonConvert.DeserializeObject <RootObject>(fileContent); TablesList.Add(CurrentTable.TableName, CurrentTable.GetDeviceTable(MeashureData)); } File.Delete(ParentDocumentPath); } foreach (KeyValuePair <String, Table> T in TablesList) { AddNewTable(Protocol, T.Value, IncertElement); } } }
/// <summary> /// Заполнение данных Протокола поверки. /// </summary> /// <param name="Protocol">Документ протокола поверки.</param> /// <param name="CardScript">Скрипт карточки.</param> /// <param name="Context">Объектный контекст.</param> /// <param name="DeviceCard">Карточка прибора.</param> /// <param name="VerificationDate">Дата проведения поверки.</param> /// <param name="ClientName">Наименование клиента.</param> /// <param name="AdditionalWaresList">Перечень доп. изделий.</param> /// <param name="StartDateOfService">Дата поступления на серивсное обслуживание.</param> /// <param name="IsPrimaryVerification">Флаг первичной поверки.</param> public static void FillData(WordprocessingDocument Protocol, ScriptClassBase CardScript, ObjectContext Context, CardData DeviceCard, DateTime VerificationDate, string ClientName, List <CardData> AdditionalWaresList, DateTime StartDateOfService, bool IsPrimaryVerification) { // ====== Получение информации для заполнения закладочных полей в протоколе поверки ===== // // Идентификатор типа прибора определяется из карточки "Паспорта прибора" Guid DeviceTypeID = DeviceCard.Sections[CardOrd.Properties.ID].FindRow("@Name = 'Прибор'").GetString(CardOrd.Properties.Value).ToGuid(); // Тип поверки определяется из входных данных (если прибор новый или после ремонта, то тип поверки - "первичная", если прибор клиента после калибровки/поверки - то тип поверки - "периодическая") string VerificationType = IsPrimaryVerification ? "ПЕРВИЧНОЙ" : "ПЕРИОДИЧЕСКОЙ"; // Краткое название прибора определяется из универсального справочника типа "Приборы и комплектующие" string DeviceTypeName = ApplicationCard.UniversalCard.GetItemName(DeviceTypeID); // Полное официальное название прибора определяется из универсального справочника типа "Приборы и комплектующие" string DisplayDeviceTypeName = ApplicationCard.UniversalCard.GetItemPropertyValue(DeviceTypeID, "Полное название").ToString() + " " + DeviceTypeName; // Перечень дополнительных изделий определяется из входного параметра AdditionalWaresList string AdditionalWares = (AdditionalWaresList.Count > 0 ? "c датчиками " : "") + AdditionalWaresList.Select(r => ApplicationCard.UniversalCard.GetItemName(r.Sections[CardOrd.Properties.ID].FindRow("@Name = 'Прибор'").GetString(CardOrd.Properties.Value).ToGuid()) + " № " + (r.GetDeviceNumber().Contains("/") == true ? r.GetDeviceNumber().Replace("/", " (") + " г)" : r.GetDeviceNumber())).Aggregate(AdditionalWaresList.Count == 2 ? " и " : ", "); // Заводской номер прибора определяется из карточки "Паспорта прибора" string DeviceNumber = DeviceCard.GetDeviceNumber() + " " + AdditionalWares; // Дата проведения поверки определяется из входного параметра VerificationDate string VerificationDateString = VerificationDate.ToLongDateString(); // ФИО текущего сотрудника определяется из справочника сотрудников (строка отображения) string StaffName = Context.GetCurrentEmployee().DisplayString; // ФИО руководителя отдела Метрологической лаборатории определяется из справочника сотрудников по должности string ManagerName = Context.GetEmployeeByPosition(SKB.Base.Ref.RefServiceCard.Roles.MetrologicalLabManager) != null?Context.GetEmployeeByPosition(SKB.Base.Ref.RefServiceCard.Roles.MetrologicalLabManager).DisplayString : ""; // Методика поверки определяется из универсального справочника типа "Пиборы и комплектующие" string VerificationMethods = ApplicationCard.UniversalCard.GetItemPropertyValue(DeviceTypeID, "Методика поверки").ToString(); // Дата выпуска прибора определяется из карточки "Паспорта прибора" (если в истории прибора есть строка о поступлени прибора на калибровку, то берется дата поступления на калибровку, если нет - то берется год прибора). string DateOfIssue = DeviceCard.GetDeviceDateOfIssue(); // Перечень эталонов определяется из карточек "Оборудование" (отбираются все карточки "Оборудование", в которых указано, что данное оборудование является эталоном и используется для поверки текущего типа прибора). // Перечень эталонов разбивается на две части по количеству символов (для вставки в разные строки протокола поверки). string VerificationMeans = ""; string VerificationMeans2 = ""; CalibrationLib.GetListOfMeasures(CardScript.Session, DeviceTypeID, false, true, 4, out VerificationMeans, out VerificationMeans2); // Перечень вспомогательных средств поверки определяется из карточек "Оборудование" (отбираются все карточки "Оборудование", в которых указано, что данное оборудование является вспомогательным средством поверки и используется для поверки текущего типа прибора) // Перечень вспомогательных средств поверки разбивается на две части по количеству символов (для вставки в разные строки протокола поверки). string AuxiliaryMeshuring = ""; string AuxiliaryMeshuring2 = ""; CalibrationLib.GetListOfAuxiliaryMeasures(CardScript.Session, DeviceTypeID, false, true, 3, out AuxiliaryMeshuring, out AuxiliaryMeshuring2); // Значения влияющих факторов (температура, влажность, атмосферное давление) определяются из конструктора справочников, из узла "Журнал условий поверки". // Если прибор = МИКО-21, то значение атмосферного давления корректируется. // Определяются только в режиме авторматического заполнения протокола поверки. string Temperature; string Humidity; string AtmospherePressure; CalibrationLib.GetCalibrationConditions(CardScript.Session, Context, VerificationDate, out Temperature, out Humidity, out AtmospherePressure); if (DeviceTypeName == "МИКО-21") { AtmospherePressure = Math.Round(Convert.ToDouble(AtmospherePressure) / 7.501, 1).ToString(); } // ===== Заполнение закладочных полей ===== // FillBookmarks(Protocol, DeviceCard, VerificationType, VerificationDateString, DisplayDeviceTypeName, DeviceNumber, ClientName, DateOfIssue, VerificationMethods, VerificationMeans, VerificationMeans2, AuxiliaryMeshuring, AuxiliaryMeshuring2, Temperature, Humidity, AtmospherePressure, StaffName, ManagerName); // ===== Заполнение данных о метрологических характеристиках прибора ===== // // Определение режима заполнения протоколов поверки для текущего типа прибора int FormMode = (Int32)ApplicationCard.UniversalCard.GetItemPropertyValue(DeviceTypeID, "Формирование протокола поверки"); // Заполнение данных о метрологических характеристиках осуществляется только в автоматическом режиме заполнения протокола поверки // Если режим заполнения - автоматический, то добавляем таблицы с данными метрологических характеристик if (FormMode == 2) { // Получение объекта создателя таблиц TablesCreator Creator = new TablesCreator(); // Добавление таблиц метрологических характеристик прибора (информация о таблицах и их содержимом получается из объекта создателя таблиц) AddDeviceTables(Protocol, CardScript.Session, Creator, DeviceTypeName, DeviceCard, StartDateOfService); // Добавление таблиц с результатами испытаний датчиков if (AdditionalWaresList != null) { foreach (CardData Ware in AdditionalWaresList) { Guid WareTypeID = Ware.Sections[CardOrd.Properties.ID].FindRow("@Name = 'Прибор'").GetString(CardOrd.Properties.Value).ToGuid(); string WareTypeName = ApplicationCard.UniversalCard.GetItemName(WareTypeID); if (CalibrationLib.SensorsList.Any(r => r == WareTypeName)) { AddSensorTables(Protocol, CardScript.Session, Creator, WareTypeName, Ware, StartDateOfService, DeviceTypeName); } } } } return; }
/// <summary> /// Добавить в протокол таблицу с данными измерений датчика. /// </summary> /// <param name="Protocol">Документ протокола</param> /// <param name="Session">пользовательская сессия.</param> /// <param name="Creator">Объект создателя таблиц.</param> /// <param name="SensorType">Тип датчика.</param> /// <param name="SensorCard">Карточка датчика.</param> /// <param name="StartDateOfService">Дата начала сервисного обслуживания.</param> static void AddSensorTables(WordprocessingDocument Protocol, UserSession Session, TablesCreator Creator, string SensorType, CardData SensorCard, DateTime StartDateOfService) { string SensorNumber = SensorCard.GetDeviceNumber(); IEnumerable <ProtocolTableLook> TablesCollection = Creator.ProtokolSensorTablesCollection.Where(r => r.DeviceTypes.Any(s => s == SensorType)); if (TablesCollection.Count() == 0) { XtraMessageBox.Show("Для датчика '" + SensorType + "' не найден шаблон таблицы. Обратитесь к системному администратору."); } else { foreach (ProtocolTableLook CurrentTable in TablesCollection) { WordprocessingDocument ParentDocument; string TempPath = ""; switch (CurrentTable.ParentDocumentCategory) { case ProtocolTableLook.DocumentCategory.AcceptanceTestingProtocol: ParentDocument = CalibrationLib.GetDocument(Session, SensorCard, CalibrationLib.AcceptanceTestingProtocolCategoryID, out TempPath); break; case ProtocolTableLook.DocumentCategory.CalibrationProtocol: ParentDocument = CalibrationLib.GetDocument(Session, SensorCard, CalibrationLib.CalibrationProtocolCategoryID, out TempPath); break; case ProtocolTableLook.DocumentCategory.MeasuringData: ParentDocument = CalibrationLib.GetDocument(Session, SensorCard, CalibrationLib.MeasuringDataCategoryID, out TempPath); break; default: ParentDocument = null; break; } Table NewSensorTable = CurrentTable.GetSensorsTable(ParentDocument, SensorNumber); /*if (Protocol.MainDocumentPart.Document.Body.Elements<Table>().Count() > 0) * { * List<OpenXmlElement> NewList = Protocol.MainDocumentPart.Document.Body.Elements().ToList(); * int Index = NewList.Count - 4; * NewList.Insert(Index, CalibrationLib.NewParagraph(-113, -133, JustificationValues.Left, 11)); * NewList.Insert(Index, (OpenXmlElement)NewSensorTable); * Protocol.MainDocumentPart.Document.Body.RemoveAllChildren(); * foreach (OpenXmlElement Element in NewList) * { Protocol.MainDocumentPart.Document.Body.Append(Element); } * } * else * { * SdtBlock Block = Protocol.MainDocumentPart.Document.Body.Elements<SdtBlock>().First(); * SdtContentBlock ContentBlock = Block.Elements<SdtContentBlock>().First(); * List<OpenXmlElement> NewList = ContentBlock.Elements().ToList(); * int Index = NewList.Count - 4; * NewList.Insert(Index, CalibrationLib.NewParagraph(-113, -133, JustificationValues.Left, 11)); * NewList.Insert(Index, (OpenXmlElement)NewSensorTable); * ContentBlock.RemoveAllChildren(); * foreach (OpenXmlElement Element in NewList) * { ContentBlock.Append(Element); } * }*/ AddNewTable(Protocol, NewSensorTable, Protocol.GetTable("Дата").ElementsBefore().Last()); if (ParentDocument != null) { ParentDocument.Close(); File.Delete(TempPath); } } } return; }
/// <summary> /// Заполнение данных протокола /// </summary> /// <param name="Protocol">Документ протокола.</param> /// <param name="CardScript">Скрипт карточки.</param> /// <param name="Context">Объектный контекст.</param> /// <param name="DeviceCard">Карточка прибора.</param> /// <param name="CalibrationDate">Дата калибровки.</param> /// <param name="AdditionalWaresList">Перечень доп. изделий.</param> /// <param name="StartDateOfService">Дата начала сервисного обслуживания.</param> public static void FillData(WordprocessingDocument Protocol, ScriptClassBase CardScript, ObjectContext Context, CardData DeviceCard, DateTime CalibrationDate, List <CardData> AdditionalWaresList, DateTime StartDateOfService) { Guid DeviceTypeID = DeviceCard.Sections[CardOrd.Properties.ID].FindRow("@Name = 'Прибор'").GetString(CardOrd.Properties.Value).ToGuid(); string DeviceTypeName = ApplicationCard.UniversalCard.GetItemName(DeviceTypeID); string DisplayDeviceTypeName; if (CalibrationLib.AdditionalWaresList.Any(r => r == DeviceTypeName)) { DisplayDeviceTypeName = ApplicationCard.UniversalCard.GetItemPropertyValue(DeviceTypeID, "Полное название").ToString(); } switch (DeviceTypeName) { case "ПКР-2М": DisplayDeviceTypeName = "ПКР-2"; break; case "ПКВ/У3.0-01": DisplayDeviceTypeName = "ПКВ/У3.0"; break; default: DisplayDeviceTypeName = DeviceTypeName; break; } string DeviceNumber = DeviceCard.GetDeviceNumber(); // Данные для заполнения закладочных полей string CalibrationDateString = CalibrationDate.ToLongDateString(); //string CalibrationMeans = ApplicationCard.UniversalCard.GetItemPropertyValue(DeviceTypeID, "Средства калибровки").ToString(); string CalibrationMeans = CalibrationLib.GetListOfMeasures(CardScript.Session, DeviceTypeID, true, false) + "."; string FileName = CalibrationLib.MeasuringDataList.Any(r => r == DeviceTypeName) ? CalibrationLib.GetDocumentCard(CardScript.Session, DeviceCard, CalibrationLib.MeasuringDataCategoryID).Sections[CardFile.MainInfo.ID].FirstRow.GetString(CardFile.MainInfo.FileName) : ""; string StaffName = Context.GetCurrentEmployee().DisplayString; // Заполнение закладочный полей string Temperature; string Humidity; string AtmospherePressure; CalibrationLib.GetCalibrationConditions(CardScript.Session, Context, CalibrationDate, out Temperature, out Humidity, out AtmospherePressure); FillBookmarks(Protocol, DeviceCard, DisplayDeviceTypeName, DeviceNumber, CalibrationDateString, CalibrationMeans, StaffName, Temperature, Humidity, AtmospherePressure, FileName); /*TablesCreator Creator = new TablesCreator(); * * // Добавление таблиц с результатами испытаний датчиков * //Random RandomValue = new Random(); * if (AdditionalWaresList != null) * { * foreach (CardData Ware in AdditionalWaresList) * { * Guid WareTypeID = Ware.Sections[CardOrd.Properties.ID].FindRow("@Name = 'Прибор'").GetString(CardOrd.Properties.Value).ToGuid(); * string WareTypeName = ApplicationCard.UniversalCard.GetItemName(WareTypeID); * * if (CalibrationLib.SensorsList.Any(r => r == WareTypeName)) * { * AddSensorTables(Protocol, CardScript.Session, Creator, WareTypeName, Ware, StartDateOfService); * } * } * }*/ //** Заполнение данных о метрологических характеристиках **// TablesCreator Creator = new TablesCreator(); // Добавление таблиц метрологических характеристик прибора AddDeviceTables(Protocol, CardScript.Session, Creator, DeviceTypeName, DeviceCard, StartDateOfService); // Добавление таблиц с результатами испытаний датчиков if (AdditionalWaresList != null) { foreach (CardData Ware in AdditionalWaresList) { Guid WareTypeID = Ware.Sections[CardOrd.Properties.ID].FindRow("@Name = 'Прибор'").GetString(CardOrd.Properties.Value).ToGuid(); string WareTypeName = ApplicationCard.UniversalCard.GetItemName(WareTypeID); if (CalibrationLib.SensorsList.Any(r => r == WareTypeName)) { AddSensorTables(Protocol, CardScript.Session, Creator, WareTypeName, Ware, StartDateOfService); } } } return; }