public static bool Verify(ScriptClassBase CardScript, ObjectContext Context, CardData DeviceCard, Guid Client, DateTime VerificationDate, 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) { ErrorText = ErrorText + " - Не удалось определить номер в Госреестре для указанного прибора.\n"; } // Наличие в справочнике средств поверки //if (ApplicationCard.UniversalCard.GetItemPropertyValue(DeviceTypeID, "Средства калибровки") == null) if (CalibrationLib.GetListOfMeasures(CardScript.Session, DeviceTypeID, true, false) == "-") { ErrorText = ErrorText + " - Не удалось определить средства поверки для указанного прибора.\n"; } // Наличие в справочнике межповерочного интервала if (CalibrationLib.GetVerificationInterval(ApplicationCard.UniversalCard, DeviceTypeID) == 0) { ErrorText = ErrorText + " - Не удалось определить межповерочный интервал для указанного прибора.\n"; } // Наличие сведений об условиях калибровки на указанную дату калибровки ErrorText = ErrorText + CalibrationLib.CheckCalibrationJournal(CardScript, Context, VerificationDate); //** Проверка родительских документов **// TablesCreator Creator = new TablesCreator(); string DeviceErrorText = ""; // Проверка протокола поверки прибора //if (Creator.CertificateDeviceTablesCollection.Any(r => r.DeviceTypes.Any(s => s == DeviceTypeName) && r.ParentDocumentCategory == CertificateTableLook.DocumentCategory.VerificationProtocol)) //{ DeviceErrorText = CalibrationLib.CheckDocument(CardScript.Session, DeviceCard, StartDateOfService, CalibrationLib.VerificationProtocolCategoryID, 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); } }
/// <summary> /// Заполнить данные свидетельства о поверке. /// </summary> /// <param name="Certificate"> Файл свидетельства о поверке.</param> /// <param name="CardScript">Скрипт.</param> /// <param name="Context">Объектный контекст.</param> /// <param name="DeviceCard">Карточка прибора.</param> /// <param name="ClientName">Название клиента.</param> /// <param name="VerificationDate">Дата поверки.</param> /// <param name="AdditionalWaresList">Перечень дополнительных изделий.</param> /// <param name="StartDateOfService">Дата поступления на поверку.</param> /// <param name="PreviousVerifySerialNumber">Дата поступления на поверку.</param> public static void FillData(WordprocessingDocument Certificate, ScriptClassBase CardScript, ObjectContext Context, CardData DeviceCard, string ClientName, DateTime VerificationDate, List <CardData> AdditionalWaresList, DateTime StartDateOfService, string PreviousVerifySerialNumber) { // Формирование сертификата 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 FullDeviceType = ApplicationCard.UniversalCard.GetItemPropertyValue(DeviceTypeID, "Полное название").ToString() + " " + DeviceTypeName + ","; string VerificationDateString = VerificationDate.ToLongDateString(); int VerificationInterval = CalibrationLib.GetVerificationInterval(ApplicationCard.UniversalCard, DeviceTypeID); string ValidUntil = VerificationDate.AddMonths(VerificationInterval).AddDays(-1).ToLongDateString(); string VerificationMethods = ApplicationCard.UniversalCard.GetItemPropertyValue(DeviceTypeID, "Методика поверки").ToString(); string VerificationScope = ApplicationCard.UniversalCard.GetItemPropertyValue(DeviceTypeID, "Объем поверки") == null ? "в полном объеме" : ApplicationCard.UniversalCard.GetItemPropertyValue(DeviceTypeID, "Объем поверки").ToString(); string Suitability = ApplicationCard.UniversalCard.GetItemPropertyValue(DeviceTypeID, "Пригодность к применению") == null ? "" : " " + ApplicationCard.UniversalCard.GetItemPropertyValue(DeviceTypeID, "Пригодность к применению").ToString(); string RegNum = "ГР №" + ApplicationCard.UniversalCard.GetItemPropertyValue(DeviceTypeID, "Номер в Госреестре").ToString(); 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 VerificationMeans = CalibrationLib.GetListOfMeasures(CardScript.Session, DeviceTypeID, false, true); // ФИО текущего сотрудника определяется из справочника сотрудников (строка отображения) string StaffName = Context.GetCurrentEmployee().FirstName.Substring(0, 1) + "." + Context.GetCurrentEmployee().MiddleName.Substring(0, 1) + ". " + Context.GetCurrentEmployee().LastName; // ФИО руководителя отдела Метрологической лаборатории определяется из справочника сотрудников по должности StaffEmployee MetrologicalLabManagerEmployee = Context.GetEmployeeByPosition(SKB.Base.Ref.RefServiceCard.Roles.MetrologicalLabManager); string ManagerName = MetrologicalLabManagerEmployee != null?MetrologicalLabManagerEmployee.FirstName.Substring(0, 1) + "." + MetrologicalLabManagerEmployee.MiddleName.Substring(0, 1) + ". " + MetrologicalLabManagerEmployee.LastName : ""; // Условия поверки string TempPath = ""; WordprocessingDocument ParentDocument = CalibrationLib.GetDocument(CardScript.Session, DeviceCard, CalibrationLib.VerificationProtocolCategoryID, out TempPath); Table ParentTable = ParentDocument == null ? null : ParentDocument.GetTable("при следующих значениях влияющих факторов:"); List <string> Collection = new List <string>(); if (ParentTable != null) { for (int i = 1; i < ParentTable.Elements <TableRow>().Count(); i++) { Collection.Add(ParentTable.GetCellValue(i, 1) + ": " + ParentTable.GetCellValue(i, 2) + " " + ParentTable.GetCellValue(i, 3) + " "); } } string Factors = Collection.Count() > 0 ? Collection.Aggregate() : ""; string Factors2 = ""; if (Factors.Length > 27) { int i = Factors.Substring(0, 27).LastIndexOf(" "); if (i > 0) { Factors2 = Factors.Substring(i); Factors = Factors.Substring(0, i); } } // Заполнение закладочный полей FillBookmarks(Certificate, ValidUntil, FullDeviceType, RegNum, AdditionalWares, PreviousVerifySerialNumber, DeviceNumber, VerificationMethods, VerificationScope, Suitability, VerificationMeans, Factors, Factors2, VerificationDateString, StaffName, ManagerName); // Добавление дополнительных данных return; }