/// <summary>
        /// Вставка элемента спецификации в строку таблицы AutoCAD с выбором таблицы и указанием строки
        /// </summary>
        /// <param name="specificationItemForTable">Экземпляр вспомогательного элемента для заполнения строительной спецификации</param>
        public static void AddSpecificationItemToTableRow(SpecificationItemForTable specificationItemForTable)
        {
            var doc = AcApp.DocumentManager.MdiActiveDocument;
            var db  = doc.Database;
            var ed  = doc.Editor;

            using (doc.LockDocument())
            {
                var options = new PromptEntityOptions($"\n{Language.GetItem(LangItem, "msg11")}");
                options.SetRejectMessage($"\n{Language.GetItem(LangItem, "msg13")}");
                options.AddAllowedClass(typeof(Table), false);
                var entity = ed.GetEntity(options);
                if (entity.Status == PromptStatus.OK)
                {
                    using (var tr = db.TransactionManager.StartTransaction())
                    {
                        var table       = (Table)tr.GetObject(entity.ObjectId, OpenMode.ForWrite);
                        var selectedRow = 2;
                        var ppo         = new PromptPointOptions($"\n{Language.GetItem(LangItem, "msg12")}");
                        var end         = false;
                        var vector      = new Vector3d(0.0, 0.0, 1.0);
                        while (end == false)
                        {
                            var ppr = ed.GetPoint(ppo);
                            if (ppr.Status != PromptStatus.OK)
                            {
                                return;
                            }
                            try
                            {
                                var tableHitTestInfo = table.HitTest(ppr.Value.TransformBy(ed.CurrentUserCoordinateSystem), vector);
                                if (tableHitTestInfo.Type == TableHitTestType.Cell)
                                {
                                    selectedRow = tableHitTestInfo.Row;
                                    end         = true;
                                }
                            }
                            catch
                            {
                                MessageBox.Show(Language.GetItem(LangItem, "msg14"));
                            }
                        }

                        TableHelpers.AddSpecificationItemToTableRow(table, selectedRow, specificationItemForTable);
                        tr.Commit();
                    }
                }
            }
        }
 /// <summary>Вставка нескольких элементов спецификации в выбранную таблицу AutoCAD</summary>
 /// <param name="table">Таблица AutoCAD</param>
 /// <param name="rowNumber">Номер строки с которой начинается заполнение таблицы</param>
 /// <param name="specificationItemsForTable">Список экземпляров вспомогательного элемента для заполнения строительной спецификации</param>
 /// <remarks>Метод проверяет в таблице наличие нужного количества пустых строк и в случае их нехватки добавляет новые</remarks>
 /// <remarks>Метод нужно вызывать внутри открытой транзакции и открытой на запись таблицы</remarks>
 public static void AddSpecificationItemsToTable(Table table, int rowNumber,
                                                 List <SpecificationItemForTable> specificationItemsForTable)
 {
     TableHelpers.FillTableRows(table, rowNumber, specificationItemsForTable);
 }
        /// <summary>
        /// Вставка нескольких элементов спецификации в таблицу AutoCAD с выбором таблицы
        /// </summary>
        /// <param name="specificationItemsForTable">Список экземпляров вспомогательного элемента для заполнения
        /// строительной спецификации</param>
        /// <param name="askForSelectRow">Указание пользователем строки, с которой начинается заполнение</param>
        /// <remarks>Метод проверяет в таблице наличие нужного количества пустых строк и в случае их нехватки
        /// добавляет новые</remarks>
        public static void AddSpecificationItemsToTable(
            List <SpecificationItemForTable> specificationItemsForTable,
            bool askForSelectRow)
        {
            var doc = AcApp.DocumentManager.MdiActiveDocument;
            var db  = doc.Database;
            var ed  = doc.Editor;

            using (doc.LockDocument())
            {
                var options = new PromptEntityOptions($"\n{Language.GetItem(LangItem, "msg11")}");
                options.SetRejectMessage($"\n{Language.GetItem(LangItem, "msg13")}");
                options.AddAllowedClass(typeof(Table), false);
                var entity = ed.GetEntity(options);
                if (entity.Status == PromptStatus.OK)
                {
                    using (var tr = db.TransactionManager.StartTransaction())
                    {
                        var table    = (Table)tr.GetObject(entity.ObjectId, OpenMode.ForWrite);
                        var startRow = 2;
                        if (!askForSelectRow)
                        {
                            if (table.TableStyleName.Equals("Mp_GOST_P_21.1101_F8"))
                            {
                                startRow = 3;
                            }

                            TableHelpers.CheckAndAddRowCount(table, startRow, specificationItemsForTable.Count, out var firstEmptyRow);
                            TableHelpers.FillTableRows(table, firstEmptyRow, specificationItemsForTable);
                        }
                        else
                        {
                            var ppo    = new PromptPointOptions($"\n{Language.GetItem(LangItem, "msg15")}");
                            var end    = false;
                            var vector = new Vector3d(0.0, 0.0, 1.0);
                            while (end == false)
                            {
                                var ppr = ed.GetPoint(ppo);
                                if (ppr.Status != PromptStatus.OK)
                                {
                                    return;
                                }
                                try
                                {
                                    var tableHitTestInfo = table.HitTest(ppr.Value.TransformBy(ed.CurrentUserCoordinateSystem), vector);
                                    if (tableHitTestInfo.Type == TableHitTestType.Cell)
                                    {
                                        startRow = tableHitTestInfo.Row;
                                        end      = true;
                                    }
                                }
                                catch
                                {
                                    MessageBox.Show(Language.GetItem(LangItem, "msg14"));
                                }
                            }

                            TableHelpers.CheckAndAddRowCount(table, startRow, specificationItemsForTable.Count, out _);
                            TableHelpers.FillTableRows(table, startRow, specificationItemsForTable);
                        }

                        tr.Commit();
                    }
                }
            }
        }
 /// <summary>
 /// Вставка элемента спецификации в указанную строку выбранной таблицы AutoCAD
 /// </summary>
 /// <param name="specificationItemForTable">Экземпляр вспомогательного элемента для заполнения строительной спецификации</param>
 /// <param name="table">Таблица AutoCAD</param>
 /// <param name="rowNumber">Номер строки для вставки элемента спецификации</param>
 /// <remarks>Метод нужно вызывать внутри открытой транзакции и открытой на запись таблицы</remarks>
 public static void AddSpecificationItemToTableRow(
     SpecificationItemForTable specificationItemForTable, Table table, int rowNumber)
 {
     TableHelpers.AddSpecificationItemToTableRow(table, rowNumber, specificationItemForTable);
 }