Пример #1
0
        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);
            }
        }
Пример #2
0
        /// <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;
        }