/// <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; }