Created
June 4, 2024 12:07
-
-
Save boumer7/149a345b3c06a700fcd693c9d4760502 to your computer and use it in GitHub Desktop.
fillItems
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// FillItems(pvc, null, rootQuant, rootLevel, true) вызов из UpdateItemList; | |
private void FillItems(InfoObject pvc, CollectionElement sourceElement, double quantity, string level, bool isRoot) | |
{ | |
if (pvc == null) | |
{ | |
var parent = sourceElement == null ? null : sourceElement.OwnerObject as InfoObject; | |
errors.AppendLine(string.Format("Предупреждение! <font color=\"Green\"> Отсутствует изделие </font>{0}. Получение атрибутов для данной записи невозможно. <br>", | |
parent == null ? "" : "в составе <a href =\"" + Service.UI.FormatLink((ScriptingObject)parent, true) + "\">" + parent.ToString() + "</a>")); | |
return; | |
} | |
var productConfiguration = pvc.GetInfoObject("ProductConfiguration"); | |
var productVersion = pvc.GetInfoObject("ProductVersion"); | |
// AA Родитель-изделие для версии изделия | |
var izdelie = productVersion.GetInfoObject("LinkToOriginalObject"); | |
// АА Получение доступа к контейнеру ЭРИ Изделия | |
var ParentContainer = izdelie.ContainerOriginal; | |
var parameters = ParentContainer.GetAttribute("Parameters"); | |
StringBuilder parameters_string = new StringBuilder(); | |
var FSCValue = "Не указано"; | |
var PN_MentorValue = "Не указано"; | |
var ManufacturerValue = "Не указано"; | |
var OriginalContainer = ParentContainer.ToString(); | |
var nameIzdelie = izdelie.GetString("Name"); | |
Dictionary<string, string> calculatedAttrs = new Dictionary<string, string>(); | |
foreach (var item in parameters.CollectionElements) { | |
string attrName = item.GetString("NameInStandard"); | |
if (attrName == "FSC" || attrName == "P/N Mentor" || attrName == "Производитель") | |
{ | |
calculatedAttrs[attrName] = item.GetString("NameKeyTable"); | |
//parameters_string.Append($"{attrName}: {calculatedAttrs[attrName]} "); | |
} | |
} | |
// OK | |
// parameters_string.Append($"FSC: {fsc_attr}; PN Mentor: {pn_mentor_attr}"); | |
bool collectMode = false; | |
foreach (var param in ParentContainer.AllAttributes){ | |
if (param.NameKey == "Name" && param.Value.ValueAsString == nameIzdelie){ | |
collectMode = true; | |
} | |
if (collectMode && param.NameKey != "Order"){ | |
if (calculatedAttrs["FSC"] == param.NameKey){ | |
FSCValue = param.Value.ValueAsString; | |
}else if (calculatedAttrs["P/N Mentor"] == param.NameKey){ | |
PN_MentorValue = param.Value.ValueAsString; | |
}else if (calculatedAttrs["Производитель"] == param.NameKey){ | |
ManufacturerValue = param.Value.ValueAsString; | |
} | |
}else{ | |
collectMode = false; | |
} | |
} | |
collectMode = false; | |
var allAttributes = ParentContainer.AllAttributes.ToList(); | |
for (int i = allAttributes.Count - 1; i >= 0; i--) { | |
var param = allAttributes[i]; | |
if (param.NameKey == "Name" && param.Value.ValueAsString == nameIzdelie){ | |
collectMode = true; | |
} | |
if (collectMode && param.NameKey != "Order"){ | |
if (calculatedAttrs["FSC"] == param.NameKey){ | |
FSCValue = param.Value.ValueAsString; | |
}else if (calculatedAttrs["P/N Mentor"] == param.NameKey){ | |
PN_MentorValue = param.Value.ValueAsString; | |
}else if (calculatedAttrs["Производитель"] == param.NameKey){ | |
ManufacturerValue = param.Value.ValueAsString; | |
} | |
}else{ | |
collectMode = false; | |
} | |
} | |
collectMode = false; | |
//Service.UI.ShowMessage(string.Join(", ", parameters_string)); | |
/*bool collectMode = false; | |
bool orderMet = false; | |
foreach (var param in ParentContainer.AllAttributes) { | |
if (param.NameKey == "Name" && param.Value.ValueAsString == nameIzdelie) | |
{ | |
collectMode = true; | |
continue; | |
} | |
if (collectMode) { | |
if (param.NameKey == "Order") | |
{ | |
orderMet = true; | |
break; | |
} | |
if (calculatedAttrs.ContainsValue(param.NameKey)) | |
{ | |
if (param.NameKey == calculatedAttrs["FSC"]) | |
{ | |
FSCValue = param.Value.ValueAsString; | |
} | |
if (param.NameKey == calculatedAttrs["P/N Mentor"]) | |
{ | |
PN_MentorValue = param.Value.ValueAsString; | |
} | |
if (param.NameKey == calculatedAttrs["Производитель"]) | |
{ | |
ManufacturerValue = param.Value.ValueAsString; | |
} | |
} | |
} | |
} | |
if (!orderMet) { | |
for (int i = ParentContainer.AllAttributes.Count() - 1; i >= 0; i--) | |
{ | |
var param = ParentContainer.AllAttributes.ElementAt(i); | |
if (param.NameKey == "Order") | |
{ | |
break; | |
} | |
if (calculatedAttrs.ContainsValue(param.NameKey)) | |
{ | |
if (param.NameKey == calculatedAttrs["FSC"]) | |
{ | |
FSCValue = param.Value.ValueAsString; | |
} | |
if (param.NameKey == calculatedAttrs["P/N Mentor"]) | |
{ | |
PN_MentorValue = param.Value.ValueAsString; | |
} | |
if (param.NameKey == calculatedAttrs["Производитель"]) | |
{ | |
ManufacturerValue = param.Value.ValueAsString; | |
} | |
} | |
} | |
} | |
Service.UI.ShowMessage(string.Join(", ", parameters_string)); | |
//parameters_string.Append($"FSC: {FSCValue} PN Mentor: {PN_MentorValue} Manuf.: {ManufacturerValue}"); | |
// Clipboard.SetText(parameters_string.ToString()); | |
/* | |
foreach (var param in ParentContainer.AllAttributes) | |
{ | |
if (param.NameKey.Contains("attr") || param.NameKey.Contains("Name") || param.NameKey.Contains("Order")){ | |
parameters_string.Append($"{param.NameKey} : {param.Value.Value}"); | |
} | |
if (param.NameKey == "Name" && param.Value.ValueAsString == nameIzdelie) | |
{ | |
attrReadMode = true; | |
} | |
if (attrReadMode && param.NameKey == "Order") | |
{ | |
attrReadMode = false; | |
break; | |
} | |
if (attrReadMode && calculatedAttrs.ContainsValue(param.NameKey)) | |
{ | |
if (param.NameKey == calculatedAttrs["FSC"]) | |
{ | |
FSCValue = param.Value.ValueAsString; | |
} | |
if (param.NameKey == calculatedAttrs["P/N Mentor"]) | |
{ | |
PN_MentorValue = param.Value.ValueAsString; | |
} | |
if (param.NameKey == calculatedAttrs["Производитель"]) | |
{ | |
ManufacturerValue = param.Value.ValueAsString; | |
} | |
} | |
} | |
Clipboard.SetText(parameters_string.ToString()); | |
for (int i = ParentContainer.AllAttributes.Count() - 1; i >= 0; i--) { | |
var param = ParentContainer.AllAttributes.ElementAt(i); | |
if (param.NameKey == "Name" && param.Value.ValueAsString == nameIzdelie) { | |
attrReadMode = true; | |
} | |
if (attrReadMode && param.NameKey == "Order") { | |
attrReadMode = false; | |
} | |
if (attrReadMode && calculatedAttrs.ContainsValue(param.NameKey)) | |
{ | |
if (param.NameKey == calculatedAttrs["FSC"]) | |
{ | |
FSCValue = param.Value.ValueAsString; | |
} | |
if (param.NameKey == calculatedAttrs["P/N Mentor"]) | |
{ | |
PN_MentorValue = param.Value.ValueAsString; | |
} | |
if (param.NameKey == calculatedAttrs["Производитель"]) | |
{ | |
ManufacturerValue = param.Value.ValueAsString; | |
} | |
} | |
} | |
//parameters_string.Append($"{FSCValue}, {PN_MentorValue}, {ManufacturerValue}"); | |
//Service.UI.ShowMessage(string.Join(", ", parameters_string)); | |
/* | |
var fsc_inner_value = ""; | |
var pn_mentor_inner_value = ""; | |
foreach (var param in ParentContainer.AllAttributes) { | |
parameters_string.Append($"{param.NameKey}: {param.Value.Value} "); | |
if (param.NameKey == fsc_attr){ | |
fsc_inner_value = param.Value.Value.ToString(); | |
} | |
if (param.NameKey == pn_mentor_attr){ | |
pn_mentor_inner_value = param.Value.Value.ToString(); | |
} | |
if (param.NameKey == "Name" && param.Value.Value.ToString() == nameIzdelie){ | |
if (fsc_inner_value != ""){ | |
FSCValue = fsc_inner_value; | |
} | |
if (pn_mentor_inner_value != ""){ | |
PN_MentorValue = pn_mentor_inner_value; | |
} | |
fsc_inner_value = ""; | |
pn_mentor_inner_value = ""; | |
} | |
} */ | |
var documentVersion = pvc.GetInfoObject("ProductVersion.OriginalDocument"); | |
var newCE = exportDataAttr.AddCollectionElement(); | |
if (!isRoot || setRootLevel) | |
newCE["Quantity"] = quantity; | |
newCE["ProductItem"] = pvc; | |
newCE["OriginalDocument"] = documentVersion; | |
newCE["Level"] = level; | |
newCE["FSC"] = FSCValue; | |
newCE["PN_Mentor"] = PN_MentorValue; | |
newCE["OriginalContainer"] = OriginalContainer; | |
newCE["Manufacturer"] = ManufacturerValue; | |
// определения атрибутов, которые будут заполняться вручную | |
var manualyHandledAttributes = new[] { "Quantity", "Level", "ProductItem", "OriginalDocument", | |
"FSC", "PN_Mentor", "OriginalContainer", "Manufacturer"}; | |
// AA attrNamesDict - словарь ключей из моей коллекции атрибутов "Экспортируемые элементы" | |
foreach (var kvp in attrNamesDict) | |
{ | |
var attrName = kvp.Key; | |
var attrTags = kvp.Value; | |
// АА Этим можно вывести "Part Number" из коллекции Экспорт. элементы | |
// errors.AppendLine($"{attrName} |"); | |
// пропустим ручные атрибуты | |
if (manualyHandledAttributes.Contains(attrName)) | |
continue; | |
// пропустим авторассчётные атрибуты чтоб они сами считались | |
// AA Авторассчётные атрибуты - те, которые имеют включённое автовычисление и собств. скрипт (подлинник STEP и подлинник PDF) | |
if (newCE.GetAttributeDef(attrName).AutoCalculationKind == AttributeDefBase.AutoCalculationKindEnum.Calculating) | |
{ | |
newCE.GetAttribute(attrName).TurnToCalculated(); | |
continue; | |
} | |
if (newCE.GetAttributeDef(attrName).AutoCalculationKind != AttributeDefBase.AutoCalculationKindEnum.None){ | |
continue; | |
} | |
IAttributableObject valueSource = pvc; | |
// если в тэгах содержится ключевое слово, то нужно использовать другой источник данных | |
if (attrTags.Any(str => str.StartsWith("DataSource"))) | |
{ | |
var sourceString = attrTags.First(str => str.StartsWith("DataSource")); | |
if (sourceString.Contains("Version")) | |
valueSource = productVersion; | |
else if (sourceString.Contains("Configuration")) | |
valueSource = productConfiguration; | |
else if (sourceString.Contains("Element") && sourceElement != null) | |
valueSource = sourceElement; | |
} | |
if (valueSource == null) | |
errors.AppendLine("<font color=\"Yellow\">Предупреждение!</font> атрибут <font color=\"Green\">" + attrName + "</font> не может быть выгружен из ИИВ <a href=\"" + Service.UI.FormatLink((ScriptingObject)pvc, true) + "\">" + pvc.ToString() + "</a> с тэгами <font color=\"Green\">" + attrTags.ToString() + "</font> <br>"); | |
else{ | |
newCE[attrName] = valueSource[attrName]; | |
} | |
} | |
int levelCounter = 1; | |
// АА песочница с выводом функций и атрибутов элемента | |
/* | |
foreach (var itemz in pvc.GetCollectionElements("Items")) { | |
errors.Append(itemz.GetString("Part_Number")); | |
} | |
*/ | |
foreach (var item in pvc.GetCollectionElements("Items").Safe().OrderBy(ce=>ce.GetString("SortedKey"))) | |
{ | |
// aa | |
// item - это Name + Quantity | |
var childQuantity = item.GetDouble("Quantity"); | |
/* | |
if (item.ToString().Contains("C331")){ | |
errors.Append(item); | |
} | |
*/ | |
if (!isRoot && multiply) | |
childQuantity *= quantity; | |
var childLevel = string.Format("{0}{1}", isRoot ? "" : level + ".", levelCounter++.ToString()); | |
// errors.Append(string.Join(", ", item.GetInfoObject("ProductItem").AllAttributes)); | |
// АА Эта часть заполняет данными в интерфейсе | |
FillItems(item.GetInfoObject("ProductItem"), item, childQuantity, childLevel, false); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment