Table Section Data

Автор Тема: Table Section Data  (Прочитано 5474 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AlexanderАвтор темы

  • ADN OPEN
  • Сообщений: 27
  • Карма: 0
Table Section Data
« : 10-02-2014, 09:30:48 »
Добрый день!

В своей спецификации я использовал:
TableSectionData tsd = colTableData.GetSectionData(SectionType.Header);
для изменения свойств заголовка в спецификации.
Но если я меняю SectionType.Body то ревит выдаёт ошибку. В api help пишут, что можно менять только заголовок.(http://help.autodesk.com/view/RVT/2014/ENU/?guid=GUID-76A3927E-6DA6-495F-A89C-00F760E3702C)

Это действительно так или я где-то ошибаюсь?

Спасибо.

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Table Section Data
« Ответ #1 : 10-02-2014, 10:02:46 »
Александр, здравствуйте.

Только для заголовка можно добавлять и удалять строки. И вполне логично что в само содержание спецификации добавить свои данные нельзя, так как спецификация основывается на данных из модели.

Вы не написали что вы конкретно хотели изменить, но могу дать стандартный совет - попробуйте сделать то, что вы хотите сделать программно, вручную в интерфейсе. Если это невозможно сделать в интерфейсе, то в 99% случаев это нельзя сделать и с помощью API.

Оффлайн shss

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Re: Table Section Data
« Ответ #2 : 23-01-2017, 15:20:59 »
Виктор, здравствуйте!
Столкнулся с такой же делеммой, как обновить данные в секции Body.
Наткнулся на такой пример:
=1m53s
Плагин, насколько я понял может выгружать данные в Excel, изменять их там, и загружать обратно. Но в документации написано: Also, for ViewSchedules, while the header section has read/write permissions, the body section is read-only.

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Table Section Data
« Ответ #3 : 24-01-2017, 07:39:44 »
shss, Сергей, все верно, тело спецификации менять нельзя.
Но работоспособность плагина легко объяснить. Тело спецификации состоит из списка объектов, а столбцы - свойства этих объектов. Соответственно, чтобы изменить значение в ячейки спецификации, нужно изменить значение свойства объекта.
Плагин не добавляет новых строк, а только лишь изменяет существующие.
Думаю алгоритм работы при импорте примерно такой:
  • Берем строку спецификации, соответствующую строке в экселевском листе
  • Получаем связанный с этой строкой элемент
  • Ищем параметр элемента по имени
  • Изменяем значение параметра

Я не проверял, но уверен, что плагин не сработает или споткнется на следующих случаях, сделанных в экселе:
  • Добавить строку
  • Поменять порядок строк
  • Изменить значение параметра только для чтения
  • Если будут два параметра с одинаковым названием

Оффлайн shss

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Re: Table Section Data
« Ответ #4 : 24-01-2017, 10:43:09 »
Виктор, а как же быть с полями которые для ручного заполнения, например у меня есть поле порядкового номера, которое можно поменять вручную, причем любым значением помимо цифр, их получается нельзя поменять, с помощью API?

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Table Section Data
« Ответ #5 : 24-01-2017, 16:58:49 »
Сергей, я честно говоря не знал о том, что можно в спецификацию добавить поля для ручного заполнения. В интерфейсе тоже не нашел такого. Можешь привести пример, лучше даже файл с тестовой спецификацией. Покопаюсь на предмет редактирования.

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Table Section Data
« Ответ #6 : 24-01-2017, 17:02:48 »
Сергей, видимо ты вот это имел ввиду. Такая ячейка - это отдельный ревитовский элемент. Найдя ее, можно записать в нее значения.

Оффлайн shss

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Re: Table Section Data
« Ответ #7 : 26-01-2017, 20:19:28 »
Виктор, да, примерно, то что надо.
Но у меня возникает сразу же вопрос по этой строчке:
Код - C# [Выбрать]
  1.  foreach (Element element in collector)
  2.             {
  3.                 element.LookupParameter("Комментарии").Set(s);
  4.             }
А если Revit на английском или другом языке. Скорее всего нужно брать внутреннее имя параметра.
Но как получить все внутренние имена полей спецификации?

Оффлайн shss

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Re: Table Section Data
« Ответ #8 : 26-01-2017, 20:26:17 »
Кажется нашел, можно получить список добавленных в спецификацию полей через GetSchedulableField().

Оффлайн shss

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Re: Table Section Data
« Ответ #9 : 27-01-2017, 11:44:54 »
Виктор, спасибо за ссылку. Сделал все что хотел:
Код - C# [Выбрать]
  1. using (Transaction tr = new Transaction(doc, "WriteToSchedule")) {
  2.         tr.Start();
  3.         foreach (Element element in collector) {
  4.         count++;
  5.         for (int i = table.Columns.Count - 1; i >= 0; i--) {
  6.                    try {
  7.                           Parameter parameter = element.LookupParameter(table.Columns[i].ColumnName);
  8.                           if ((!parameter.IsReadOnly) & (null != parameter))
  9.                                   parameter.Set(table.Rows[count][table.Columns[i].ColumnName].ToString());
  10.                           }
  11.                           catch (Exception ex) { Debug.Print("{0}: {1}", ex.Source, ex.Message); }
  12.                      }
  13.           }
  14.           tr.Commit();
  15. }
  16.  

Получилось заполнение полей спецификации (которые не "read-only") из datatable.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Table Section Data
« Ответ #10 : 22-12-2018, 18:25:18 »
А что будет, если установлена IsItemized = False? Т.е. не стоит галочка "Для каждого экземпляра"
« Последнее редактирование: 22-12-2018, 19:20:39 от Александр Пекшев aka Modis »