
Сборка своей основной надписи (штамп)
Привязка штампа к своему масштабируемому формату.
- Read more...
-
- 0 comments
- 118 views
мысли и возможно полезное
Сборка своей основной надписи (штамп)
Привязка штампа к своему масштабируемому формату.
По многочисленным просьбам трудящихся, нашел и скопипастил код
немного причесал его.
Вызов drz_LayerImport
что делает:
========================
Важно:
код работает бесхитростно , как удар серпом по причинному месту, просто копирует LayerFilterTree из одного файла в другой.
соответственно существующие фильтры слоев (если есть) будут затерты.
Добавление фильтров к существующим будет реализовано когда/если нанодев допилит наноапи (ну и всякие плюшки типа экспорта импорта фильтров в текстовые форматы по аналогии с LayerFilter_gile.LSP, DotSoft Layer Filter Import/Export)
----------------
Пользуемся как есть, на свой страх и риск, проверок и защит от пытливых пользователей и вообще.... сделано по минимуму))))
using System.IO; using System.Runtime.CompilerServices; using System.Windows.Forms; using HostMgd.ApplicationServices; using HostMgd.EditorInput; using Teigha.DatabaseServices; using Teigha.LayerManager; using Teigha.Runtime; using App = HostMgd.ApplicationServices; using Db = Teigha.DatabaseServices; using DialogResult = System.Windows.Forms.DialogResult; namespace LayerFilterIO { public class AppCommand : IExtensionApplication { [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public void Initialize() { } public void Terminate() { } /// <summary> /// https://www.caduser.ru/forum/post278685.html#p278685 /// </summary> [CommandMethod("drz_LayerImport", CommandFlags.Session | CommandFlags.Modal)] public static void LFilterImp() { string sFilName = string.Empty; // set full path of container file that contains desired layer filter using (OpenFileDialog openFileDialog = new OpenFileDialog()) { openFileDialog.Filter = "All supported formats (*.dwg;*.dws;*.dwt;*.dxf)|*.dwg;*.dws;*.dwt;*.dxf"; openFileDialog.Title = "Select drawing files to import layer filters"; if (openFileDialog.ShowDialog() != DialogResult.OK) { return; } sFilName = openFileDialog.FileName; } ImortLFilterFromFile(sFilName); } public static void ImortLFilterFromFile(string sourcefile) { // Find the file containing layer filter to clone if (!File.Exists(sourcefile)) { MessageBox.Show("Could not find file !"); return; } DocumentCollection dm = App.Application.DocumentManager; Document doc = dm.MdiActiveDocument; //!старая база запомним Db.Database dbCarent = Db.HostApplicationServices.WorkingDatabase; Database db = doc.Database; Editor ed = doc.Editor; try { //Document sourcedoc = dm.Open(sourcefile, false); // Needed for source document since the source database has to be active. //dm.MdiActiveDocument = sourcedoc; //Editor sourced = sourcedoc.Editor; //Database sourcedb = sourcedoc.Database; using (Db.Database db0 = new Db.Database(false, false)) { db0.ReadDwgFile(sourcefile, Db.FileOpenMode.OpenForReadAndAllShare, false, "", false); Db.HostApplicationServices.WorkingDatabase = db0; using (Transaction sourcetr = db0.TransactionManager.StartTransaction()) { BlockTable sourcebt = null; sourcebt = sourcetr.GetObject(db0.BlockTableId, OpenMode.ForRead) as BlockTable; if (db0.LayerFilters.Root == null) { MessageBox.Show("The Layer Filters aren't found !"); return; } LayerFilterTree lt = db0.LayerFilters; using (DocumentLock doclock = doc.LockDocument()) { using (Transaction tr = db.TransactionManager.StartTransaction()) { LayerFilterTree ltc = db.LayerFilters; dm.MdiActiveDocument = doc; db.LayerFilters = lt; sourcetr.Commit(); // Close source file without changes //sourcedoc.CloseAndDiscard(); tr.Commit(); } } } } Db.HostApplicationServices.WorkingDatabase = db; ed.WriteMessage("\nFilter import completed successfully"); //using (Transaction sourcetr = sourcedb.TransactionManager.StartTransaction()) //{ // BlockTable sourcebt = null; // sourcebt = sourcetr.GetObject(sourcedb.BlockTableId, OpenMode.ForRead) as BlockTable; // if (sourcedb.LayerFilters.Root == null) // { // MessageBox.Show("The Layer Filters aren't found !"); // return; // } // LayerFilterTree lt = sourcedb.LayerFilters; // using (DocumentLock doclock = doc.LockDocument()) // { // using (Transaction tr = db.TransactionManager.StartTransaction()) // { // LayerFilterTree ltc = db.LayerFilters; // dm.MdiActiveDocument = doc; // db.LayerFilters = lt; // sourcetr.Commit(); // // Close source file without changes // sourcedoc.CloseAndDiscard(); // tr.Commit(); // } // } //} } catch (System.Exception ex) { App.Application.ShowAlertDialog(string.Format("\n{0}\n{1}", ex.Message, ex.StackTrace)); } } } }
традиционно пожелания и конструктивная критика...
Иногда пара нажатий на клавиатуру заменяет кучу движений мышкой и вообще...
например кому не хотелось сперва выбрать объекты чертежа, а потом ткнуть в нужный объект и применить к выбранным его свойства))
две строчки с dwg.ru и вот оно ккс
(defun c:ккс (/ ss) ;;выбрать, потом копировать свойства (if (setq ss (ssget)) (command "_.matchprop" pause ss "") ) (princ) )
или работаешь, а некоторые объекты мешаются.. убрать бы их гамузом сглаз подальше.. пока...
выбрал один мешающийся выс и все такие жэж скрыты
(defun c:выс () ;;выбрать похожие и изолировать (command "_SelectSimilar") (command "_HideObjects") (princ) )
иногда нужно поместить объект на задний слой... мышой елозить по менюшке.. , но можно просто набрать 3 пробел и объект на заднем слое
(defun C:3 () ;;на задний план выбранное (command "draworder2") (princ) ) ;_ end defun
а если несколько одинаковых на задний слой... легко жэж
выберем образец и три троечки и подобные выбранному позади...
(defun C:333 () ;; выбрать подобные и переместить на задний план (command "ВЫБРПОХОЖИЕ ") (command "draworder2") (princ) ) ;_ end defun
=========================
понятно, что это всего лишь командные методы, но они экономят время, а время ...
После того как стопитсотый пользователь по команде SAVEUISTATE вместо saveduistate.cfg пересохранил cfg.ini ...nCadBase.cfg... nanoCAD.cfg...
Решил, что надо что то с этим делать.
Понимаю, что команда недокументированная, но непонятно отчего разработчик сразу не прибил гвоздями путь и имя сохранения(((
поэтому в меру своего умения набросал лиспик
; saveuistate (defun c:drz_saveuistate ( / sfiledia ) (setq sfiledia (getvar "filedia")) (setvar "filedia" 0) (command "saveuistate" (strcat (getvar "ROAMABLEROOTPREFIX") "\\config\\saveduistate.cfg")) (setvar "filedia" sfiledia) (princ) )
т.к. для многих пользователей ком строка это заумь инопланетная, вытащил эту команду в меню
[\Cfg] [\menu] [\menu\drzTools] name=sdrzTools [\menu\drzTools\drz_saveuistate] name = sСохранить настройки интерфейса intername=sdrz_saveuistate ; =========================== ; saveuistate [\configman\commands\drz_saveuistate] weight=i0 cmdtype=i0 intername=sdrz_saveuistate DispName=sСохранить интерфейс StatusText=sСохраняет настройки интерфейса, положение и видимость панелей BitmapDll=snewbtns.dll Icon=sDSETTINGS IsUserCommand=f1
Благодаря @Lidia.Antipina BGTOOLS почти полностью заработал в nanoCAD
Команд реально много, все не упомнишь, поэтому собрал на скорую руку менюшку (затолкал в нее все команды, некоторые работают не во всех нановерсиях)
подробное описание команд можно посмотреть в конце файла bgtools 3.11a_Nc_22.lsp ( @Lidia.Antipina достаточно подробно все расписала)
Собрал панельку из четырех команд (муторно им иконки подбирать)))
Ну и заодно пристегнул свою утилиту по нормализации блоков (старые куски кода собрал в кучу, когда BGTOOLS еще в нано не работала)
кое в чем повторяет функционал BGTOOLS
из уникального:
------------------
Как этим добром пользоваться:
==========================
Естественно я все программы на всех возможных конфигурациях не тестировал, поэтому используем как есть, сохраняемся делаем копии, в общем обычная наноработа.
Отзывы, пожелания, критику в комментарии
Автоматическая печать из nanoCAD (только форматы СПДС)
Работает с nanoCAD22,23+СПДС или Механика
с nano20 работает (upd отдельная сборка)
с nano21 не тестировал
Скачать архивчик (в аттаче)
Если установлена предыдущая версия PublishNC AnyCpu - надо удалить его из автозагрузки
Распаковать zip-архив с программой;
Папку PlotSPDS_for_nanoCAD поместить в любой каталог, куда у пользователя есть доступ;
Добавить файл PlotSPDS_22.package (для nanoCAD22,23, для nanoCAD20-> PlotSPDS_20.package) в автозагрузку, как показано на скриншоте.
Перезапустить nanoCAD.
На ленте появится вкладка “drzTools” с панелью Публикация СПДС.
Кроме вызова через меню, панель или ленту, программу можно запустить из командной строки
СППУБЛИКАЦИЯ
spPublish
drz_PublishMC
откроется вот такое окошко
Публикация в пакетном режиме:
на бумагу, (три различных устройства в зависимости от размера формата), поддержка преднастроенных шаблонов печати
в файл (PDF)
Выбор:
ручным выбором на чертеже,
с активного пространства,
открытого чертежа (чертежей),
из заданного каталога (каталогов)
Доступны опции:
поиск форматов в модели или листах
учитывать слои (прямым выбором или по маске)
Сортировка форматов:
обозначение->номер листа
по расположению в пространстве чертежа, учитывается порядок следования листов
Группировка форматов при печати в файл
Закладки (оглавление для файла PDF)
Для PDF настройки не требуются, просто выберите принтер PDF и стиль
==========
Для печати на бумагу
Откроются настройки шаблонов
Можно добавить новый или удалить существующий шаблон
В размерах форматов задаем размер формата включительно, который может напечатать выбранный принтер в этой строке
Малые форматы предполагается принтер (только основные форматы, А4, А3, А2)
Средние и большие форматы это плоттер, печать на рулон (умеет дополнительные форматы А4х3, А3х5 и т.д.) Формат определяется максимальной шириной рулона плоттера, для А1 это ~594, для А0~841
т.е. для настроек с рисунка выше:
на малый плоттер попадут А4, А3
на средний например А4х3, А3х3, А2, А2х3, А1
на большой А0, А1х3 и т.д.
Задаем стили печати
Сохраняем шаблон!!!!
Выход и можно печатать
При печати в PDF концепция такая:
Если задан "Путь вывода PDF":
напечатанные файлы будут по этому пути, если файл с таким именем уже есть, то добавляется суффикс (1), (2)....
Путь печати не задан:
Файл чертежа сохранен-> PDF будет рядом с файлом чертежа
Файл чертежа не сохранен->PDF будет в папке Мои документы
Несколько файлов сохраненных и не сохраненных->при сборке в один PDF -> файл PDF будет рядом с файлом первого формата (если первый формат не сохранен, в моих документах)
Пока вроде все, по мере поступления вопросов и замечаний статью буду дополнять.
Баги и пожелания эту тему.
Вышло очередное обновление 0.2.8656 от 13.09.2023 что нового?
Смотрю тут как народ пытается поясниловки в нанокаде писать, опросники и прочее текстовое...
Имха все от того, что нужен один общий PDF для текста и графики.. простых решений навскидку вроде нет?
есть
PDFUnisci
здесь https://github.com/Clouz/PDFUnisci/releases собранная утилита
тут исходники https://github.com/Clouz/PDFUnisci
алгоритм прост... собрать/разобрать PDF на листы или собрать PDF из JPG
Установить утилиту
Собрать
Разбить
Уважаемый Clouz (Claudio Mola) в readme все подробно описал, но если кто не понял или не получилось.. спрашивайте
На этом и других форумах периодически возникает вопрос, как сделать растровый PDF средствами CAD, при том, что nanoCAD выводит PDF вектором.
Собственно эта фича произрастает из древней нанобаги или оно просто так работает...
Если в любом месте листа вставить видовой экран (ВЭ), можно даже пустой, в область печати ему попадать совсем не обязательно, важно, что
Для печати из пространства модели ставим аналогичный визуальный стиль, но там не торт((( все будет серенькое, при печати из листа эффект интереснее
Выбираем принтер "Встроенный PDF принтер", печатаем и вуаля, получаем растровый PDF. Правда побочный эффект значительное увеличение размера файла.
-----------------
Если вывести на "Печать в формате PDF" то получим удивительный эффект, наложение вектора на растр!!!
Естественно размер файла будет еще больше.
----------------------
PS эксперименты проводил в nanoCAD22, но думаю в прошлых версиях все то же.
PPS поправить не прошу, если б могли давно исправили.
Сделал автозаполнялку , по результатам боевых стрельб внезапно выяснилось, что нана не умеет работать с полями нативных объектов.
Зато умеет вставлять поля из свойств документа (хотя возможно в следующей версии пофиксят и все будет наоборот)))
Возник вопрос, как запихнуть данные в свойства документа....
Руками прям не вдохновляет
Второй вопрос откуда эти данные брать, решился просто, коль у нас на чертеже есть таблица, (автозаполнялка) в которую мы занесли все сведения...
отчего бы данные не подтянуть из нее.
Принцип в кратце:
------------------------
Некритичные проверки исключений я не делал, кому надо вполне может дописать, как надо
Если изменить "комментарии" ячеек, то соответственно в свойства документа запишутся другие ключи
Все ключи пишутся в пользовательские свойства документа, но при желании можно писать и в
Под спойлером код, старался комментировал))
Dim ThisDrawing As Object Sub docProp() 'заполнялка полей документа из таблицы (именованных ячеек) 'без проверки исключений, чисто для общего понятия как Set objApp = GetObject(, "nanoCAD.Application") 'цепляемся к нане, или AutoCAD Set SPDS = CreateObject("McCOM2.Server") 'Получаем COM-сервер СПДС Set ThisDrawing = objApp.ActiveDocument 'хватаем активный документ Set ff = ThisDrawing TabName = "Заполнялка Таблица в таблицы" 'эту таблицу будем искать на чертеже Set FindTable = SPDS.Query("McCom2.SymTable", "Name=""" & TabName & """") _ 'ищем таблицу, можно изменить на свое If FindTable.Count > 0 Then 'если хоть одна таблица с таким именем найдена Set PropTable = FindTable(1).Properties 'хватаем первую из коллекции с таким именем (предполагается, что она одна))) Dim varr '<тут готовим путь для записи в таблицу (мне так надо) If ThisDrawing.FullName Like "*\*" Then 'НАНОКОСТЫЛЬ если файл сохранялся FulPatch = ThisDrawing.FullName '<тут получаем имя файла без расширения varr = Split(ThisDrawing.Name, ".") ReDim Preserve varr(UBound(varr) - 1) Filename = Join(varr, "") Else FulPatch = "ФАЙЛ НЕ СОХРАНЯЛСЯ!!" Filename = ThisDrawing.Name End If Dim PropKey As String 'ключ для записи в свойства документа (коментарий ячейки) Dim PropVal As String 'свойство ключа)) (содержимое ячейки) On Error Resume Next 'страховочка вдруг такой ячейки нет(( PropTable("Путь к файлу") = FulPatch 'пишем в ячейку полный путь PropTable("Имя файла") = Filename 'пишем в ячейку имя файла On Error GoTo 0 'тут в цикле заполняем свойства документа из именованных ячеек For Each namProp In PropTable.Names 'перебираем имена свойств Set PropProp = PropTable(namProp) 'получаем свойство по имени PropCategory = PropProp.Category If PropCategory = "Именованные ячейки" Then 'из свойств нам нужны только именованные ячейки PropKey = namProp 'коментарий ячейки будет ключ PropVal = PropProp.Value 'значение ячейки SetOrAddKey PropKey, PropVal 'идем писать в свойства End If Next res = "Значения именованных ячеек из " & "<" & TabName & ">" & _ " записаны в свойства документа" ThisDrawing.SendCommand "(alert """ & res & """)" & vbCrLf SPDS.Message (res) Else MsgBox "Таблица: """ & TabName & """" & vbCrLf & _ "не найдена на чертеже!", vbInformation, "docProp" End If End Sub Function SetOrAddKey(Key1 As String, val As String) On Error Resume Next ThisDrawing.SummaryInfo.SetCustomByKey Key1, val 'НАНОКОСЯК если ключа нет в каде будет исключение, но нана создаст ключ))) If Err.Number <> 0 Then ThisDrawing.SummaryInfo.AddCustomInfo Key1, val Err.Number = 0 End If On Error GoTo 0 End Function Sub main() docProp End Sub
Сразу скажу из скрипта VBS внутри наны этот код работать не будет, хотя конечно заманчиво... (значения ключей и свойства должны быть String и никак иначе, а в скриптах типы данных я не умею )
Поэтому этот код запускается из Excel большой красной кнопкой.
В принципе, как дальнейшее развитие, этот код можно причесать, откомпилировать и запускать, хоть из командной строки нано, из меню или кнопкой на панели.
В аттаче шаблон чертежа и большая красная кнопка.
PS кода без багов не бывает, поэтому по мере... буду улучшать
Disclaimer сразу оговорюсь, способа узнать ID объекта в платформе пока не существует (по крайней мере мне неизвестно).
Хотя разработчики могли бы добавить такую возможность, например в утилиту конфигурации.
Но подставить костылики можно.
Простой способ открыть в мастере объектов и посмотреть ID не рассматриваем (СПДС, Механик и прочие вертикалки работодатель не купил, а пробник выдохся))))
_________________________________________________________
Для чего нужен этот ID?
Для того, что бы иметь возможность в вставлять таблицы с кнопок, палитры инструментов или посредством lisp из командной строки.
Вот такое выражение для кнопок, менюшек и инструментов:
^C^C_stdselected <ID>
для lisp (кстати лисп выражения прекрасно работают в менюшках и инструментах)
(defun C:ИмяКоманды () (command "spStdSelected" "<ID>") (princ) )
Что такое этот ID?
Уникальный идентификатор объекта в базе данных (БД), именно по нему программа узнает какой объект вставить на чертеж.
Что мы знаем о таблицах и их ID?
У каждой таблицы в БД есть свой ID:
Что дает нам это знание?
Суть идеи...
---------------
PS Если вдруг кто не в курсе
Никак не связаны и не обязательно должны совпадать,
Ждать пока nanoDev выгребет все баги мне некогда, работать надо сейчас, поэтому...
Под свои потребности сделал сборочку, на основе кода Андрея Бушмана (с небольшими изменениями).
взять сборочку можно тут: https://disk.yandex.ru/d/87lVPPumz3FPzA
В архиве две сборки под Autocad 2018-2021 и nanoCad 21. Также в архиве простенький тестовый dwg пример.
Для вызова доступны две команды:
что делает:
2. от Gilles Chanteau drz-MySynchHard
что делает:
!!!! Важно:
Короче кому интересно скачивайте пробуйте.
В nano 20.х добавили функциональную панель "Инструменты" (в Autocad называлось палитра)
Сама по себе неплохая штука и порой весьма удобная..
Но местами весьма глючная, а глючная в плане того, что при вставке блоков путает порядок прорисовки и поднимает маскировку этих блоков на передний план.
В nano21 эту багу исправили.
В принципе казалось бы, в чем проблема..
открой блок на редактирование и утопи маскировку, ан нет, nana20 не умеет редактировать динамические блоки.
Да и статические после вставки нового блока с функциональной панели "Инструментов" каждый раз править, то еще удовольствие(((
Но решение достаточно простое
#if NC using Teigha.DatabaseServices; using Teigha.Runtime; using HostMgd.ApplicationServices; using HostMgd.EditorInput; #else using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Runtime; #endif namespace drz { public class Utils : IExtensionApplication { [CommandMethod("drz-WipBot", CommandFlags.Modal)] public void WipeoutToBotton() /*Топит маскировку внутри блоков */ { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; Editor ed = doc.Editor; int count = 0; //using (Transaction tr = db.TransactionManager.StartOpenCloseTransaction())//вот нельзя тут так делать, только для UpgradeOpen(), DowngradeOpen(); //иначе Автокад валится, нане пофих using (Transaction tr = db.TransactionManager.StartTransaction()) { BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead); foreach (ObjectId btrId in bt) { BlockTableRecord btr = (BlockTableRecord)tr.GetObject(btrId, OpenMode.ForRead); if (!btr.IsFromExternalReference && !btr.IsDependent && !btr.IsLayout)// not xref and not xref|block and not Layout { foreach (ObjectId id in btr) { Entity ent = tr.GetObject(id, OpenMode.ForRead) as Entity; if (ent != null) { Wipeout wpt = ent as Wipeout; if (wpt != null)//если маскировка { // получаем таблицу порядка отрисовки блока DrawOrderTable drawOrder = tr.GetObject(btr.DrawOrderTableId, OpenMode.ForWrite) as DrawOrderTable; ObjectIdCollection ids = new ObjectIdCollection(); ids.Add(wpt.ObjectId); drawOrder.MoveToBottom(ids);//топим маскировку count++; } } } } } tr.Commit(); } ed.Regen(); ed.WriteMessage( "Move to bottom in blocks " + count + " wipeout" ); } //----------------------------- public void Initialize() { Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; ed.WriteMessage("\n\"drz\" загружен"); ed.WriteMessage("\nВызов drz-WipBot"); } public void Terminate() { } } }
Проходит по всем описаниям блоков находит в них маскировки и топит их на дно.
вызов из командной строки drz-WipBot
Тестировался в nano20.1-21, Autocad2018-2021 (естественно в каждый CAD) надо загружать свою сборку (NETLOAD или APPLOAD)
Форум не позволяет загружать dll и архивы, поэтому ссылка на сборку и там же пример блоков которые режут линию под собой
В рамках самообучения VB.NET решил портировать VBA из Автозаполнялка. Часть 2
Естественно, я сильно не заморачивался, просто добавил нужные функции для себя, ну и прикрутил интерфейс для других))
Для чего это нужно можете прочитать выше по ссылке...
Возможности утилиты:
=====================
В принципе функционал можно наращивать до бесконечности (если кто-то проявит интерес)...собирал для себя, то что необходимо мне)))
upd Накрутил там еще шашечек))) по мелочи и продолжаю пилить
Как всегда конструктивная и не очень критика, а также замечания и пожелания только приветствуются
На днях колеги подогнали файл со схемами предприятия
Ну а чо они так видят, им удобно и они в этом чертеже ориентируются вполне комфортно, в отличие от меня.
Вблизи схемы как схемы
Среди этой красоты мне нужно было найти определенную подстанцию ТП-8/7 и фидера откуда она питается
Долог и неинформативен
Благо коллеги в кадах не сильно искушены и все надписи были сделаны просто текстом
И я подумал ведь есть служебная команда SPREFSHOW которая укажет мне путь)))
Добавил таблицу на чертеж
Добавил раздел отчета
если кому надо искать в мтекстах или других объектах, то добавляется по аналогии...
Для того что бы показывало объекты по SPREFSHOW, должно быть взято хотя бы одно свойство с объекта, ничего оригинальнее чем взять =Object.Text я придумать не смог
Больше свойств брать не стоит, лишние связи будут мешать, загромождать... короче не надо
Ну и для перфекционизму объединил первый столбец и поставил на него счетчик
выходим из редактора таблиц
выделяем нашу табличку и в ком строке вводим вожделенное SPREFSHOW
линии связей укажут искомое)))
---------------
ЗЫ мне реально лениво переключаться на инглиш раскладку, а потом еще и набирать такое длинное слово
можно добавить через НПИ в команды, менюшки и панельки..... но тогда нано, все мои красиво расположенные функциональные и не очень панельки смешает в кучу..
я работаю в основном из ком строки..
поэтому добавил в подгружаемый lisp команду
(defun C:спсс ();;Показать зависимости (command "SPREFSHOW" ) (princ) )
благо что lisp команды можно добавлять, изменять не перезагружая нану (достаточно перезагрузить лисп))))..
в отличие от добавления команд через интуитивно понятный и чертовски удобный НПИ(((который после рестарта нано нарушит гармонию панелек настроенных мной, на строгий порядок определенный суровым разработчиком)))
По мотивам видео уважаемого @MCAD
Собрал заполнялку форматок СПДС на основе таблиц...
Коротенько что умеет и зачем...
1. Заполняет реквизитную часть основных надписей
Но в связи с тем, что в таблицах бага (несколько (много ) отчетов начинают глючить, а мне надо много)
Эта таблица заполняет данными другие таблицы..
Собирает данные с форматов в чертеже (мне надо для статистики по разделам, листов и приведение к А1)
UPD 19.05.2021 15:50 Заполняет данными блок с атрибутами (иначе как мне взять полем в текст или мтекст??)
И берет с этого блока поля имени файла и путь файла ( заодно объехали еще одну багу с отцепляющимися полями в таблице при изменении в таблице количества строк и еще одну багу лишний пробел в начале строки)
из за баги в нано (атрибуты из блоков в тексты не держатся, слетают и глючит)
поэтому написал простенький VBA который значения именованных ячеек таблицы записывает в пользовательские свойства документа, а вот оттуда уже можно подтянуть полем в любой объект.
Бонусом при вставке текста с полем в любой документ, если у документа есть такие пользовательские свойства все подтянется автоматически.
-------------------
Маленькие таблицы:
непосредственно заполняют основные надписи форматок
нумеруют форматки (слева направо снизу вверх, можно перенастроить)
В первом формате ставят количество форматов.
В маленьких таблицах нужно только задать область в которой расположен раздел и имя раздела (то что в обозначении после точки... СО, КЖ, Д, Р)
Кому интересно качайте шаблончик, включайте скрытые строки и разделы (их там есть), разбирайтесь как это работает и конечно адаптируйте под свои нужды (кто проектирует проект файл)
Связи можно посмотреть-проверить по SPREFSHOW
------------------------
Критика только приветствуется))
ЗЫ возможно чего вспомню еще допишу, но проще раз увидеть
------------
upd перезалил шаблон, чегойто два файла прицепилось)))