Example #1
0
        public static void CreateMateriaPrima(MpProduct mp)
        {
            cn = DBConnection.MainConnection();
            try
            {
                using (OleDbCommand cmd = cn.CreateCommand())
                {
                    cmd.CommandText = @"INSERT INTO materia_prima ([codigo],[unidad_metrica],[nombre_producto],[conversion_unitaria],[unidad_muestra]) " +
                                      "VALUES (@codProd,@uniMetrica,@nombre,@conversion,@uniMuestra) ";

                    cmd.Parameters.AddRange(new OleDbParameter[]
                    {
                        new OleDbParameter("@codProd", mp.Id),
                        new OleDbParameter("@uniMetrica", mp.UnidadMetrica),
                        new OleDbParameter("@nombre", mp.NombreProducto),
                        new OleDbParameter("@conversion", mp.Conversion),
                        new OleDbParameter("@uniMuestra", mp.UnidadMuestra)
                    });

                    cmd.ExecuteNonQuery();
                }

                cn.Close();
            }
            catch (Exception ex)
            {
                System.Windows.MessageBox.Show("Error al crear Entrada de Producto Terminado en el Inventario " + ex);
            }
        }
        public void OpenNewModal(object parameter)
        {
            var test = new NewMpModal(this);

            NewProduct = new MpProduct();

            test.ShowDialog();
        }
 public void updateCollectionInstance(MpProduct updatedInstance)
 {
     SelectedMP.Id             = updatedInstance.Id;
     SelectedMP.NombreProducto = updatedInstance.NombreProducto;
     SelectedMP.Conversion     = updatedInstance.Conversion;
     SelectedMP.UnidadMetrica  = updatedInstance.UnidadMetrica;
     SelectedMP.UnidadMuestra  = updatedInstance.UnidadMuestra;
 }
Example #4
0
        // Удаление позиций
        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 = MpProduct.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 OpenUpdateModal(object parameter)
        {
            NewProduct = new MpProduct(SelectedMP);

            /*NewProduct = new MpProduct();
            *  SelectedMP = new MpProduct();*/

            NewModal = new EditMpModal(this);
            NewModal.ShowDialog();
        }
Example #6
0
        public static List <MpProduct> GetMP()
        {
            var mp = new List <MpProduct>();


            cn = DBConnection.MainConnection();

            try
            {
                cmd = new OleDbCommand("SELECT SUM(cantidad_unidad_lote) as Cantidad_Actual, SUM(cantidad_original) as Cantidad_Original, SUM(cantidad_unidad_formula) as Cantidad_Formula, lote_entrada.cod_mp, materia_prima.nombre_producto, materia_prima.conversion_unitaria, materia_prima.unidad_muestra, materia_prima.unidad_metrica " +
                                       "FROM lote_entrada INNER JOIN materia_prima on materia_prima.codigo = lote_entrada.cod_mp " +
                                       "GROUP BY cod_mp, materia_prima.nombre_producto, materia_prima.conversion_unitaria, materia_prima.unidad_muestra, materia_prima.unidad_metrica;", cn);
                dr = cmd.ExecuteReader();



                while (dr.Read())
                {
                    MpProduct temp = new MpProduct();

                    temp.Id             = dr["cod_mp"].ToString();
                    temp.NombreProducto = dr["nombre_producto"].ToString();
                    //temp.Precio = float.Parse(dr["precio"].ToString());
                    temp.UnidadMetrica  = dr["unidad_metrica"].ToString();
                    temp.UnidadMuestra  = dr["unidad_muestra"].ToString();
                    temp.Conversion     = double.Parse(dr["conversion_unitaria"].ToString());
                    temp.Entrada        = double.Parse(dr["Cantidad_Original"].ToString());
                    temp.Existencia     = double.Parse(dr["Cantidad_Actual"].ToString());
                    temp.Salida         = temp.Entrada - temp.Existencia;
                    temp.CantidadExacta = double.Parse(dr["Cantidad_Formula"].ToString());


                    mp.Add(temp);
                }

                dr.Close();
                cn.Close();
            }
            catch (Exception ex)
            {
                System.Windows.MessageBox.Show("Error al buscar el inventario de materia prima " + ex.ToString());
            }



            return(mp);
        }
Example #7
0
        /*
         *
         *      public static void removeInventarioMpAfterLoteActive(string codMp, double existencia, double cantidadExacta)
         *      {
         *
         *          cn = DBConnection.MainConnection();
         *          try
         *          {
         *
         *
         *
         *              cmd = new OleDbCommand("UPDATE materia_prima " +
         *                  "SET  existencia = (existencia + " + existencia + "), cantidad_exacta = (cantidad_exacta + " + cantidadExacta + " ), salida = (salida - " + existencia + " )  " +
         *                  "where codigo = '" + codMp + "'; ", cn);
         *              cmd.ExecuteNonQuery();
         *
         *
         *
         *
         *
         *
         *              cn.Close();
         *
         *          }
         *          catch (Exception ex)
         *          {
         *              System.Windows.MessageBox.Show("Error al borar existencia the MP  " + ex);
         *          }
         *
         *      }
         *
         *      public static void removeFlatAmounts(string codMP, double formUnitAmount, double CurrentDisplayAmount, double displayUnitAmountOriginal)
         *      {
         *          var salida = displayUnitAmountOriginal - CurrentDisplayAmount;
         *          cn = DBConnection.MainConnection();
         *          try
         *          {
         *
         *
         *
         *              cmd = new OleDbCommand("UPDATE materia_prima " +
         *                  "SET entrada = (entrada - " + displayUnitAmountOriginal + "), existencia = (existencia - " + CurrentDisplayAmount + "), cantidad_exacta = (cantidad_exacta - "+formUnitAmount+" ), salida = (salida - " + salida + " )  " +
         *                  "where codigo = '" + codMP + "'; ", cn);
         *              cmd.ExecuteNonQuery();
         *
         *
         *
         *
         *
         *
         *              cn.Close();
         *
         *          }
         *          catch (Exception ex)
         *          {
         *              System.Windows.MessageBox.Show("Error al borar existencia the MP  " + ex);
         *          }
         *
         *      }
         *
         *      public static void reAddAmount(string codMP, double newEntrada, double newCurrent, double formAmount)
         *      {
         *          var test = newEntrada - newCurrent;
         *          cn = DBConnection.MainConnection();
         *          try
         *          {
         *
         *
         *
         *              cmd = new OleDbCommand("UPDATE materia_prima " +
         *                  "SET entrada = (entrada + " + newEntrada + "), existencia = (existencia + " + newCurrent + "), cantidad_exacta = (cantidad_exacta + " + formAmount + "), salida = (salida + "+ test  +  ")  "  +
         *                  "where codigo = '" + codMP + "'; ", cn);
         *              cmd.ExecuteNonQuery();
         *
         *
         *
         *
         *
         *
         *              cn.Close();
         *
         *          }
         *          catch (Exception ex)
         *          {
         *              System.Windows.MessageBox.Show("Error al reingresar existencia the MP  " + ex);
         *          }
         *      }
         *
         *      public static void exitAmounts(String codMP, double existencia, double cantidadExacta)
         *      {
         *          cn = DBConnection.MainConnection();
         *          try
         *          {
         *
         *
         *
         *              cmd = new OleDbCommand("UPDATE materia_prima " +
         *                  "SET  existencia = (existencia - " + existencia + "), cantidad_exacta = (cantidad_exacta - " + cantidadExacta + " ), salida = (salida + " + existencia + " )  " +
         *                  "where codigo = '" + codMP + "'; ", cn);
         *              cmd.ExecuteNonQuery();
         *
         *
         *
         *
         *
         *
         *              cn.Close();
         *
         *          }
         *          catch (Exception ex)
         *          {
         *              System.Windows.MessageBox.Show("Error al eliminar existencia the MP  " + ex);
         *          }
         *
         *          System.Windows.MessageBox.Show("Cantidad Actualizada en Inventario Materia Prima");
         *      }
         *
         *
         *
         *      public static void updateProductAmountAdd(string codMP, double amountChange)
         *      {
         *          cn = DBConnection.MainConnection();
         *          try
         *          {
         *              cmd = new OleDbCommand("UPDATE materia_prima " +
         *                  "SET entrada = (entrada + " + amountChange + "), existencia = (existencia + " + amountChange + "), cantidad_exacta = (cantidad_exacta + (" + amountChange + " * conversion_unitaria) ) " +
         *                  "where codigo = '" + codMP + "'; ", cn);
         *              cmd.ExecuteNonQuery();
         *
         *
         *
         *
         *
         *
         *              cn.Close();
         *
         *          }
         *          catch (Exception ex)
         *          {
         *              System.Windows.MessageBox.Show("Error al actualizar existencia the MP  " + ex);
         *          }
         *      }
         *
         *      public static void updateProductAmountRemove(string codMP, double amountChange)
         *      {
         *          cn = DBConnection.MainConnection();
         *          try
         *          {
         *              cmd = new OleDbCommand("UPDATE materia_prima " +
         *                  "SET salida = (salida + " + amountChange + "), existencia = (existencia + " + amountChange + "), cantidad_exacta = (cantidad_exacta + (" + amountChange + " * conversion_unitaria) ) " +
         *                  "where codigo = '" + codMP + "'; ", cn);
         *              cmd.ExecuteNonQuery();
         *
         *
         *
         *
         *
         *
         *              cn.Close();
         *
         *          }
         *          catch (Exception ex)
         *          {
         *              System.Windows.MessageBox.Show("Error al actualizar existencia the MP  " + ex);
         *          }
         *      }
         *
         *      public static void updateProductAmountFromExactRemove(string codMP, double amountChangeExact)
         *      {
         *          cn = DBConnection.MainConnection();
         *
         *          double conversion = 0.00;
         *
         *
         *          try
         *          {
         *              cmd = new OleDbCommand("SELECT conversion_unitaria from materia_prima where codigo = '" + codMP + "' ; ", cn);
         *              dr = cmd.ExecuteReader();
         *
         *
         *
         *
         *
         *              while (dr.Read())
         *              {
         *                  conversion = double.Parse(dr["conversion_unitaria"].ToString());
         *
         *
         *              }
         *
         *              dr.Close();
         *
         *
         *          }
         *          catch (Exception ex)
         *          {
         *              System.Windows.MessageBox.Show("Error al obtener conversion  " + ex);
         *          }
         *
         *
         *
         *
         *          try
         *          {
         *              cmd = new OleDbCommand("UPDATE materia_prima " +
         *                  "SET salida = (salida + " + Math.Round((amountChangeExact / conversion), 2, MidpointRounding.AwayFromZero) + "), existencia = (existencia + " + Math.Round((amountChangeExact / conversion), 2, MidpointRounding.AwayFromZero) + "), cantidad_exacta = (cantidad_exacta + " + amountChangeExact + " ) " +
         *                  "where codigo = '" + codMP + "'; ", cn);
         *              cmd.ExecuteNonQuery();
         *
         *
         *
         *
         *
         *
         *              cn.Close();
         *
         *          }
         *          catch (Exception ex)
         *          {
         *              System.Windows.MessageBox.Show("Error al actualizar existencia the MP Exact - " + ex);
         *          }
         *      }
         *
         *      public static void updateProductAmountFromtExactAdd(string codMP, double amountChangeExact)
         *      {
         *          cn = DBConnection.MainConnection();
         *
         *
         *          double conversion = 0.00;
         *
         *
         *          try
         *          {
         *              cmd = new OleDbCommand("SELECT conversion_unitaria from materia_prima where codigo = '" + codMP + "' ; ", cn);
         *              dr = cmd.ExecuteReader();
         *
         *
         *
         *
         *
         *              while (dr.Read())
         *              {
         *                  conversion = double.Parse(dr["conversion_unitaria"].ToString());
         *
         *
         *              }
         *
         *              dr.Close();
         *
         *
         *          }
         *          catch (Exception ex)
         *          {
         *              System.Windows.MessageBox.Show("Error al obtener conversion  " + ex);
         *          }
         *
         *
         *
         *
         *
         *          try
         *          {
         *              cmd = new OleDbCommand("UPDATE materia_prima " +
         *                  "SET entrada = (entrada + " + Math.Round((amountChangeExact / conversion), 2, MidpointRounding.AwayFromZero) + "), existencia = (existencia + " + Math.Round((conversion / amountChangeExact), 2, MidpointRounding.AwayFromZero) + "), cantidad_exacta = (cantidad_exacta + " + amountChangeExact + " ) " +
         *                  "where codigo = '" + codMP + "'; ", cn);
         *              cmd.ExecuteNonQuery();
         *
         *
         *
         *
         *
         *
         *              cn.Close();
         *
         *          }
         *          catch (Exception ex)
         *          {
         *              System.Windows.MessageBox.Show("Error al actualizar existencia the MP exact + " + ex);
         *          }
         *      }*/

        public static void updateMateriaPrimaInfo(MpProduct mp, string oldId)
        {
            cn = DBConnection.MainConnection();
            try
            {
                cmd = new OleDbCommand("UPDATE materia_prima " +
                                       "SET codigo = '" + mp.Id + "', nombre_producto = '" + mp.NombreProducto + "', unidad_metrica = '" + mp.UnidadMetrica + "', conversion_unitaria = " + mp.Conversion + ", unidad_muestra = '" + mp.UnidadMuestra + "'  " +
                                       "where codigo = '" + oldId + "'; ", cn);
                cmd.ExecuteNonQuery();



                cn.Close();
            }
            catch (Exception ex)
            {
                System.Windows.MessageBox.Show("Error al actualizar informacion the MP  " + ex);
            }
        }
 public void Limpiar(object parameter)
 {
     NewProduct = new MpProduct();
 }
Example #9
0
        private void FindProducts()
        {
            try
            {
                SpecificationItems = new List <SpecificationItem>();

                var products       = new List <MpProduct>();
                var productsByAttr = new List <SpecificationItem>();

                var counts       = new List <int>();
                var countsByAttr = new List <int>();

                for (var i = 0; i < _objectIds.Length; i++)
                {
                    // Проверяем - если это блок и он имеет атрибуты для спецификации
                    if (ProductsToTable.HasAttributesForSpecification(_tr, _objectIds[i]))
                    {
                        // post progress
                        _context.Post(
                            _ =>
                        {
                            ProgressBar.Value = i;
                            ProgressText.Text = i + "/" + _objectIds.Length;
                        }, null);

                        var specificationItemByBlockAttributes =
                            ProductsToTable.GetProductFromBlockByAttributes(_tr, _objectIds[i]);
                        if (specificationItemByBlockAttributes != null)
                        {
                            if (
                                !productsByAttr.Contains(
                                    specificationItemByBlockAttributes,
                                    new SpecificationItemHelpers.EqualSpecificationItem()))
                            {
                                productsByAttr.Add(specificationItemByBlockAttributes);
                                countsByAttr.Add(1);
                            }
                            else
                            {
                                for (var j = 0; j < productsByAttr.Count; j++)
                                {
                                    if (productsByAttr[j].Position == specificationItemByBlockAttributes.Position &
                                        productsByAttr[j].BeforeName ==
                                        specificationItemByBlockAttributes.BeforeName &
                                        productsByAttr[j].Designation ==
                                        specificationItemByBlockAttributes.Designation &
                                        productsByAttr[j].Mass == specificationItemByBlockAttributes.Mass &
                                        productsByAttr[j].Note == specificationItemByBlockAttributes.Note)
                                    {
                                        countsByAttr[j]++;
                                    }
                                }
                            }
                        }
                    }
                    else //// Иначе пробуем читать из расширенных данных
                    {
                        var entity = (Entity)_tr.GetObject(_objectIds[i], OpenMode.ForRead);
                        if (!entity.IsModPlusProduct())
                        {
                            continue;
                        }

                        // post progress
                        _context.Post(
                            _ =>
                        {
                            ProgressBar.Value = i;
                            ProgressText.Text = i + "/" + _objectIds.Length;
                        }, null);

                        if (XDataHelpersForProducts.NewFromEntity(entity) is MpProductToSave mpProductToSave)
                        {
                            var productFromSaved = MpProduct.GetProductFromSaved(mpProductToSave);
                            if (productFromSaved != null)
                            {
                                if (!products.Contains(productFromSaved))
                                {
                                    products.Add(productFromSaved);
                                    counts.Add(1);
                                }
                                else
                                {
                                    var index = products.IndexOf(productFromSaved);
                                    counts[index]++;
                                }
                            }
                        }
                    }
                }

                if (!products.Any() & !productsByAttr.Any())
                {
                    DialogResult = false;
                    Close();
                }

                // Для продуктов собранных из атрибутов вставляем количество
                for (var i = 0; i < productsByAttr.Count; i++)
                {
                    productsByAttr[i].Count = countsByAttr[i].ToString();
                }

                // Добавляем продукты собранные из расширенных данных
                for (var j = 0; j < products.Count; j++)
                {
                    var specificationItem = products[j].GetSpecificationItem(counts[j]);
                    SpecificationItems.Add(specificationItem);
                }

                // Добавляем продукты, собранные из атрибутов
                foreach (var specificationItem in productsByAttr)
                {
                    SpecificationItems.Add(specificationItem);
                }

                // Сортировка по значению Позиции
                SpecificationItems.Sort(new SpecificationItemHelpers.AlphanumComparatorFastToSortByPosition());
            }
            catch (Exception exception)
            {
                ExceptionBox.Show(exception);
            }
        }
        public static void AddLeaderWithMark()
        {
            var doc = Autodesk.AutoCAD.ApplicationServices.Core.Application.DocumentManager.MdiActiveDocument;
            var ed  = doc.Editor;
            var db  = doc.Database;
            var res = ed.SelectImplied();

            if (res.Status != PromptStatus.OK)
            {
                return;
            }
            using (doc.LockDocument())
            {
                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 = MpProduct.GetProductFromSaved(productInsert);

                            // Если есть данные и нет позиции
                            if (product != null)
                            {
                                var mark = product.GetNameByRule();

                                // Если в имени нет ShortName, то добавим
                                if (!mark.Contains(product.BaseDocument.ShortName))
                                {
                                    mark = product.BaseDocument.ShortName + " " + mark;
                                }

                                // Если есть длина
                                if (product.Length != null)
                                {
                                    mark += " L=" + product.Length;
                                }
                                AddLeaderMark(ent, mark);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        ExceptionBox.Show(ex);
                    }
                    finally
                    {
                        tr.Commit();
                    }
                }
            }
        }
Example #11
0
        public void AddPositions()
        {
            Statistic.SendCommandStarting(new ModPlusConnector());

            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 = MpProduct.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();
                }
            }
        }