forgeprojects Posted July 2, 2021 Report Share Posted July 2, 2021 3 минуты назад, dromandon сказал: Я, если честно, не пользуюсь частью функционала помещений как раз из-за кривызны реализации) а зачем тогда эта программа?) Quote Link to comment Share on other sites More sharing options...
doctorraz Posted July 2, 2021 Report Share Posted July 2, 2021 10 минут назад, forgeprojects сказал: а зачем тогда эта программа?) Хороший вопрос!!! Зачем микроскоп если им нельзя забивать гвозди))) 1 Quote Link to comment Share on other sites More sharing options...
Volkov Posted July 3, 2021 Report Share Posted July 3, 2021 В 02.07.2021 в 23:19, doctorraz сказал: им нельзя забивать гвозди))) чойта??? 2 Quote Link to comment Share on other sites More sharing options...
doctorraz Posted July 4, 2021 Report Share Posted July 4, 2021 7 часов назад, Volkov сказал: чойта??? На пальцы соскальзывает Quote Link to comment Share on other sites More sharing options...
MCAD Posted July 4, 2021 Report Share Posted July 4, 2021 17 минут назад, doctorraz сказал: На пальцы соскальзывает Да. Только к таблицам не имеет никакого отношения. 2 Quote Link to comment Share on other sites More sharing options...
MCAD Posted September 10, 2021 Report Share Posted September 10, 2021 Часто спрашивают, почему ctlSetValue передаёт в объект данные не соответствующие тому, что Видно в таблице Если строки сгруппированы, то нужно в выражении это учитывать и писать sum(ctlSetValue(Cell;object property)) sum CtlSetValue.dwg 4 1 Quote Link to comment Share on other sites More sharing options...
MCAD Posted September 16, 2021 Report Share Posted September 16, 2021 Очередной вопрос "Из зала" Пользователи платформы нанокад, не имеющие возможности сделать выноску в виде универсального маркера и подключить таблицу параметров, вынуждены записывать значения руками и одной строкой. Соответственно, при создании отчёта, нет возможности получения данных записанных одной строкой, в качестве параметров. Например, значение выноски %%с5 L=5000 мм придёт одной «строкой» Для разбора такой строки и определения условия для отбора можно воспользоваться выражением: iff(xNum(Object.String2)==Diam1;xNum(subSplit(Object.String2;"L=";2));0) Object.String2 – вторая строка выноски Diam1 – переменная (в данном случае определена на пользовательской форме) доступная в таблице в Инспекторе subSplit – разделить строку (Object.String2) по значению "L=" и «2» оставит левую часть после аргумента деления Так, как после удаления правой части мы получим 5000 мм, то нам нужно значение строка перевести в число функцией xNum Дополнительно в примере: В чертеже нет выносок с диаметром 6 во второй строк. Соответственно, это колонка "G" будет скрыта, так как в Итоге вычисляется ширина колонки =iff(summ(section(-1))==0;ctlSetColumnWidth(w_cell0);ctlSetColumnWidth(w_cell)) +summ(section(-1)) subSplit ctlSetColumnWidth.dwg 2 2 Quote Link to comment Share on other sites More sharing options...
Zueva Posted September 24, 2021 Report Share Posted September 24, 2021 В 02.07.2021 в 17:25, forgeprojects сказал: Решил вернутся к СПДС, но опять только трачу время. Почему та неправильно считает плинтусы. У вас в назначенной отделке стоит подсчет по Периметру, программа данным образом и считает. Нужно переключить на Периметр (без учета дверных проемов) Данная возможность реализована начиная с версии 20.0 4 Quote Link to comment Share on other sites More sharing options...
Zueva Posted September 24, 2021 Report Share Posted September 24, 2021 5 часов назад, Zueva сказал: У вас в назначенной отделке стоит подсчет по Периметру, программа данным образом и считает. Нужно переключить на Периметр (без учета дверных проемов) Данная возможность реализована начиная с версии 20.0 https://redmine.mcad.ru/issues/13282 Quote Link to comment Share on other sites More sharing options...
MCAD Posted January 29 Report Share Posted January 29 Автоматическое составление данных спецификации в голом nanocad. Рутинная работа получения актуальных данных с моделей давно перестала удивлять пользователей. Однако стоит заметить, что пользователи аналога давно и успешно используют различные средства автоматизации для получения табличных данных используя инструмент _DATAEXTRACTION (Извлечение данных) Рассмотрим аналогичную задачу в nanocad. В качестве исходных данных имеем чертёж, где все оборудование представлено в виде обычных блоков. Все блоки имеют одинаковый набор атрибутов, необходимый и достаточный для составления спецификации оборудования. Нам необходимо cобрать данные с чертежа, подсчитать количество, массу (ту, которая попадает в спецификацию) и, проставив позиции в таблице, вернуть их значение в атрибуты блоков. Вставляем заготовку из базы данных или делаем нестандартную таблицу по вашим потребностям В открывшемся редакторе таблицы в пункте «Разделы» выбираем «Вставить раздел отчёта» Теперь нам нужно выбрать, какие объекты будут попадать в отчёт Нажимаем на И, выбрав в качестве объектов «Вхождение блока», накладываем дополнительное условие, что значение атрибута блока «Отчёт» =1 Теперь в наш отчёт автоматически будут собираться все блоки, удовлетворяющие нашим условиям. Дополнительно можно добавить любые доступные условия фильтрация. Например, ограничить выбор блоков только на определённом слое или по имени блока. Причём, в условие можно добавить не имя блока или слоя целиком, а только часть «строки» Теперь, собственно, переходим к получению самого отчёта (спецификации) Для этого щёлкнем правой клавишей мышки в колонке «B» строки отчёта и выберем нужное свойство. =Object."АРТИКУЛ" В колонке «В» появятся все доступные свойства блоков с данным атрибутом Последовательно назначаем нужные свойства колонкам, выбрав их в контекстном меню После этого все данные атрибутов блоков отображаются в таблице и нам необходимо правильным образом и структурировать. Для этого нажимаем «Группировать и объединять» в шапке строки отчёта В отрывшемся диалоге нужно мышкой перетащить нужные колонки в область «Группировки и объединения» и определить нужные действия. Колонку «C» мы отсортируем по возрастанию, а данные колонки «B» сгруппируем по одинаковым значениям Добавим в колонку «А» =row. Теперь в колонке будет отображаться порядковый номер строки отчёта. А для «F» сделаем некоторое усовершенствование. Так как «Заказчик» не любит простых решений, то для данного конкретного случая пустая ячейка вызывает неприятие такого отчёта. Проверяем, что если значение атрибута МАССА не заполнено, то пишем «-», иначе указываем массу =iff(Object."МАССА"=="";"-";Object."МАССА") Такую же подстановку сделаем при вычислении общей массы Теперь наша таблица имеет вид. Как видно на экране, данные, которые не вошли в одну ячейку, увеличили её строку по высоте. Что бы избежать этого, в редакторе таблиц для колонки «D» назначаем «Переносить по словам» и «Добавить строки» А для колонок «E, F и G» становиться доступным флажок «Разместить внизу». Так, как нам не нужно переносить эти ячейки, то ставим "Сжать по горизонтали" Теперь строки в таблице отображаются нужным образом. Щёлкнув по «Шаблону отчёта», Добавляем «Итог отчёта» Теперь нам нужно вычислить полную массу всего оборудования. Так как в колонке «Масса ед» она указана с «кг», то нам проще сделать это в скрытой колонке Пишем в ячейке отчёта «J» =Object."МАССА"*count() И считаем полную массу в строке «Итог» отчёта =summ(section(-1)) Так, как столбцы «C, H, I, J» у нас "скрытые", то итоговая сумма не будет видна на чертеже В общем случае достаточно сослаться на ячейку (= off(0;3)) и вывести полученное значение, но перфекционизм заказчика требует сделать проверку , что если масса больше тысячи килограмм, то нужно выводить в тоннах. Да и фиг бы с ним. Нам не трудно. В ячейке "G" "Итога" отчёта вычисляем: =iff(off(0;3)<1000;round(off(0;3);2)+" кг.";round(off(0;3)/1000;2)+" т.") ____________________________________________________________ Теперь можно сказать, что мы смогли повторить функционал _DATAEXTRACTION (Извлечение данных), не используя никаких дополнительных инструментов, а просто повторяя логику проектировщика при составлении спецификации. Собрать в кучу, подсчитав блоки с одинаковым именем и получив в таблице номера позиций, вернуть их в атрибут блоков. В колонке отчёта "I", введём =sum(ctlSetValue(off(0;-1);Object."ПОЗИЦИЯ")). Буквально это означает, что мы берём вычисленное значение из левой колонки off(0;-1) и передаём его в атрибут блока "ПОЗИЦИЯ" Используя обычную выноску платформы мы можем указать блок и взять значение атрибута позиция. Далее, используя команду платформы addCopy с опцией <Несколько> Последовательно указываем нужные блоки и расставляя позиции (выноски) на чертеже. Теперь, при любом изменении количества блоков, изменения массы блока (если постоянный атрибут) или изменении значения атрибута "Отчёт" на <не равно Один> Спецификация всегда будет иметь данные актуальные на для данного чертежа. ____________________________________________________________ PS: Не буду перегружать этот пост информацией по более полной автоматизации. Например все это можно посмотреть в ролике. Отдельно следует добавить, что таблица, сохранённая в базе данных, будет всегда доступна для повторного использования всеми пользователями локальной сети организации и легко импортируется для передачи другим пользователям средствами утилиты конфигурации. Файл примера и пошаговое описание действий моно посмотреть под роликом 1 6 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.