// Удаление позиций private static void DeletePositions() { var doc = AcApp.DocumentManager.MdiActiveDocument; var ed = doc.Editor; var db = HostApplicationServices.WorkingDatabase; var opts = new PromptSelectionOptions { MessageForAdding = $"\n{Language.GetItem(LangItem, "h5")}: " }; var res = ed.GetSelection(opts); if (res.Status != PromptStatus.OK) { return; } using (var tr = db.TransactionManager.StartTransaction()) { try { foreach (var objectId in res.Value.GetObjectIds()) { var ent = (Entity)tr.GetObject(objectId, OpenMode.ForWrite); // Расширенные данные в виде спец.класса var productInsert = (MpProductToSave)XDataHelpersForProducts.NewFromEntity(ent); if (productInsert == null) { continue; } // Теперь получаем сам продукт var product = DbProduct.GetProductFromSaved(productInsert); // Если есть данные и нет позиции if (product != null) { product.Position = string.Empty; XDataHelpersForProducts.SaveDataToEntity(product.SetProductToSave(), ent, tr); } } } catch (Exception ex) { ExceptionBox.Show(ex); } finally { // В любом случае убираем подсветку со всех объектов foreach (var objectId in res.Value.GetObjectIds()) { var ent = (Entity)tr.GetObject(objectId, OpenMode.ForWrite); ent.Unhighlight(); } tr.Commit(); } } }
public void AddPositions() { #if !DEBUG Statistic.SendCommandStarting(new ModPlusConnector()); #endif var doc = AcApp.DocumentManager.MdiActiveDocument; var ed = doc.Editor; var db = doc.Database; var opts = new PromptSelectionOptions(); opts.Keywords.Add(Language.GetItem(LangItem, "h2")); var kws = opts.Keywords.GetDisplayString(true); opts.MessageForAdding = $"\n{Language.GetItem(LangItem, "h1")}: {kws}"; opts.KeywordInput += (sender, e) => { if (e.Input.Equals(Language.GetItem(LangItem, "h2"))) { DeletePositions(); } }; var res = ed.GetSelection(opts); if (res.Status != PromptStatus.OK) { return; } using (var tr = db.TransactionManager.StartTransaction()) { try { // Создаем список "элемент + марка" и список позиций var elements = new List <string>(); var elementsExist = new List <string>(); var positions = new List <string>(); var markTypes = new List <int>(); // Тип маркировки foreach (var objectId in res.Value.GetObjectIds()) { var ent = (Entity)tr.GetObject(objectId, OpenMode.ForWrite); // Расширенные данные в виде спец.класса var productInsert = (MpProductToSave)XDataHelpersForProducts.NewFromEntity(ent); if (productInsert == null) { continue; } // Теперь получаем сам продукт var product = DbProduct.GetProductFromSaved(productInsert); // Если есть данные и нет позиции if (product != null) { int markType; if (string.IsNullOrEmpty(product.Position?.Trim())) { var element = product.GetNameByRule(); if (!element.Contains(product.BaseDocument.ShortName)) { element = $"{product.BaseDocument.ShortName} {element}"; } // Если еще не было if (!elements.Contains(element)) { // Подсвечиваем ent.Highlight(); // Запрос пользователю var pso = new PromptStringOptions( $"{Language.GetItem(LangItem, "h3")}: {element}. {Language.GetItem(LangItem, "h4")}: ") { AllowSpaces = true }; var pres = ed.GetString(pso); if (pres.Status != PromptStatus.OK) { ent.Unhighlight(); continue; } elements.Add(element); positions.Add(pres.StringResult); product.Position = pres.StringResult; XDataHelpersForProducts.SaveDataToEntity(product.SetProductToSave(), ent, tr); // Маркировка AddPositionMarker(ent, 0, pres.StringResult, element, out markType); // Убираем подсветку ent.Unhighlight(); markTypes.Add(markType); } else //// Если уже был { product.Position = positions[elements.IndexOf(element)]; XDataHelpersForProducts.SaveDataToEntity(product.SetProductToSave(), ent, tr); // Маркировка AddPositionMarker(ent, markTypes[elements.IndexOf(element)], positions[elements.IndexOf(element)], element, out markType); } } // Если позиция уже есть else { // Подсвечиваем ent.Highlight(); var element = product.GetNameByRule(); // Если еще не было if (!elementsExist.Contains(element)) { // Маркировка AddPositionMarker(ent, 0, product.Position, element, out markType); elements.Add(element); elementsExist.Add(element); markTypes.Add(markType); } else { if (markTypes.Count > 0 & elements.Count > 0) { AddPositionMarker(ent, markTypes[elements.IndexOf(element)], product.Position, element, out markType); } else { AddPositionMarker(ent, 0, product.Position, element, out markType); } } // Убираем подсветку ent.Unhighlight(); } } } } catch (Exception ex) { ExceptionBox.Show(ex); } finally { // В любом случае убираем подсветку со всех объектов foreach (var objectId in res.Value.GetObjectIds()) { var ent = (Entity)tr.GetObject(objectId, OpenMode.ForWrite); ent.Unhighlight(); } tr.Commit(); } } }