/// <summary>
        /// Копирование блоков сечений из шаблона блоков и доп списка блоков blNames
        /// </summary>
        /// <param name="fileBlocksTemplate"></param>
        /// <param name="service"></param>
        /// <param name="blNames"></param>
        /// <returns></returns>
        public static List <BlockSectionAbstract> LoadSections(string fileBlocksTemplate, BaseService service, List <string> blNames,
                                                               out Dictionary <string, ObjectId> blNamesCopy)
        {
            blNamesCopy = new Dictionary <string, ObjectId>();
            Dictionary <ObjectId, BlockSectionAbstract> blSecToCopy = new Dictionary <ObjectId, BlockSectionAbstract>();

            using (var dbBlocks = new Database(false, true))
            {
                dbBlocks.ReadDwgFile(fileBlocksTemplate, FileOpenMode.OpenForReadAndAllShare, false, "");
                dbBlocks.CloseInput(true);
                using (var bt = dbBlocks.BlockTableId.Open(OpenMode.ForRead) as BlockTable)
                {
                    foreach (ObjectId idBtr in bt)
                    {
                        using (var btr = idBtr.Open(OpenMode.ForRead) as BlockTableRecord)
                        {
                            var blNameToCopy = blNames.Find(n => n.Equals(btr.Name, StringComparison.OrdinalIgnoreCase));
                            if (!string.IsNullOrEmpty(blNameToCopy))
                            {
                                blNamesCopy.Add(blNameToCopy, btr.Id);
                                continue;
                            }

                            BlockSectionAbstract blSec = null;
                            if (btr.Name.StartsWith(Settings.Default.BlockPanelSectionVerticalPrefixName, StringComparison.OrdinalIgnoreCase))
                            {
                                blSec = new BlockSectionVertical(btr.Name, service);
                            }
                            else if (btr.Name.StartsWith(Settings.Default.BlockPanelSectionHorizontalPrefixName, StringComparison.OrdinalIgnoreCase))
                            {
                                blSec = new BlockSectionHorizontal(btr.Name, service);
                            }

                            if (blSec != null)
                            {
                                var resParse = blSec.ParseBlName();
                                if (resParse.Success)
                                {
                                    blSecToCopy.Add(idBtr, blSec);
                                    //Определение ассоциативных штриховок и объектов с которыми они связаны
                                    blSec.getHatchAssociateIds(btr);
                                }
                                else
                                {
                                    Inspector.AddError($"Не определены параметры блока сечения в файле шаблона блоков. {btr.Name}. {resParse.Error}",
                                                       icon: System.Drawing.SystemIcons.Error);
                                }
                            }
                        }
                    }
                }
                if (blSecToCopy.Count > 0)
                {
                    using (ObjectIdCollection ids = new ObjectIdCollection(blSecToCopy.Keys.ToArray()))
                    {
                        foreach (var item in blNamesCopy.Values)
                        {
                            ids.Add(item);
                        }

                        using (IdMapping map = new IdMapping())
                        {
                            service.Db.WblockCloneObjects(ids, service.Db.BlockTableId, map, DuplicateRecordCloning.Replace, false);
                            foreach (var item in blSecToCopy)
                            {
                                item.Value.IdBtr = map[item.Key].Value;
                                if (item.Value._hatchsAssociatedIdsDictInTemplate != null)
                                {
                                    item.Value.setHatchIdsMapping(map);
                                    //item.Value.ReplaceAssociateHatch();
                                }
                            }
                            foreach (var name in blNames)
                            {
                                ObjectId idBl;
                                if (blNamesCopy.TryGetValue(name, out idBl))
                                {
                                    blNamesCopy[name] = map[idBl].Value;
                                }
                            }
                        }
                    }
                }
                else
                {
                    Inspector.AddError("Не найдены блоки сечений панелей в файле шаблона блоков АКР. " +
                                       $"Файл шаблона {fileBlocksTemplate}. Префикс блоков {Settings.Default.BlockPanelSectionVerticalPrefixName} " +
                                       $"и {Settings.Default.BlockPanelSectionHorizontalPrefixName}", icon: System.Drawing.SystemIcons.Error);
                }
            }
            return(blSecToCopy.Values.ToList());
        }