// Удаление позиций
        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();
                }
            }
        }