Exemplo n.º 1
0
        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));
                }
            }
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
                    }
                }
            }
        }
Exemplo n.º 4
0
        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;
        }
Exemplo n.º 5
0
        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;
        }