01.08.2011, 09:18 | #21 |
Участник
|
Цитата:
Как правило, наличие дерева означает что есть очень жесткие ограничения, которые скорее всего противоречат реальной жизни. |
|
01.08.2011, 09:55 | #22 |
Модератор
|
А я бы добавил про вариативность: ряд товаров можно отнести к нескольким категориям. И только "хранители знаний" смогут точно определить раздел. Остальные будут кидать новый товар туда, куда, по их мнению, его место. Следовательно в этой категории его не будут искать другие, у которых свое отношение на счет того, чье где место. Я приводил как-то пример с памятью для ноутбука, она могла быть в 4-5 местах прайса, не буду повторяться.
В вашем случае: а куда определеть элетропилу? Электроинструмент или садовая техника? А мин вата - это шумоизоляция или теплоизоляция? ДВП - это ДСП или отделка? А почему? С Уважением, Георгий |
|
02.08.2011, 22:17 | #23 |
Участник
|
В одном из решений, которое я постоянно использую, в главной форме фильтрация данных осуществляется с помощью дерева.
Я уже настолько привык к этой структуре, что с трудом представляю на ее месте набор стандартных фильтров по гриду. Почитал аргументацию Mazzy, и вот думаю - то ли это настолько удачная интерфейсная находка именно в этом месте, или это просто привычка. А может кому-то реально неудобно? Ну вот все было нормально, работали в форме и работали. А теперь мучаюсь - может попробовать переделать?
__________________
Ален ноби, ностра алис. Что означает - если один человек построил, другой завсегда разобрать может. |
|
02.08.2011, 22:41 | #24 |
Участник
|
Картинку покажите? может и правда, там удобно все?
__________________
Ivanhoe as is.. |
|
03.08.2011, 07:13 | #25 |
Участник
|
Цитата:
дерево будет предельно неудобным, если таких правил нет. ну, и плюс технические аспекты: = программист должен заполнять treeView по мере открытия веток, а не сразу. см. форму SysUserGroupSecurity. = программист должен обеспечить непротиворечивость дерева и грида = программист должен предусмотреть кучу ограничений - дерево должно быть деревом, а не произвольным графом, чтобы не зацикливалось, не суммировалось дважды и было целостностной структурой = программист должен не забывать о явных и неявных ограничениях, которые превращают структуру реальной жизни в дерево. например, в иерархическом штатном расписании вводится понятие ставка, но зато сотрудник может принадлежать нескольким элементам штатного расписания. не говоря уже о том, что представление штатного расписания в виде дерева делает практически невозможным работу с матричным и проектным типами штатного расписания. и т.п. =================== я что хочу сказать я вовсе не настаиваю, что от дерева надо отказаться. иногда это полезный опциональный инструмент. но дерево не панацея. и очень часто вводит больше ограничений и добавляет кучу работы программисту, не добавляя особой ценности пользователям. на мой взгляд если, как было в первом сообщении, "возникла необходимость создать дерево", то стоит еще раз пересмотреть структуру данных и постановку задачи. |
|
03.08.2011, 15:17 | #26 |
Участник
|
С деревом немного разобрался, написал рекурсивную функцию для заполнения, пока все идет хорошо. Возник вопрос каким образом можно из обработчика событий на дереве изменить содержание на гриде, как я понимаю нужно выполнить запрос для датасорса, но с этим не разу не сталкивался направьте на путь истинный, будьте любезны.
|
|
03.08.2011, 15:26 | #27 |
Участник
|
Цитата:
Сообщение от AngelDominantes
С деревом немного разобрался, написал рекурсивную функцию для заполнения, пока все идет хорошо. Возник вопрос каким образом можно из обработчика событий на дереве изменить содержание на гриде, как я понимаю нужно выполнить запрос для датасорса, но с этим не разу не сталкивался направьте на путь истинный, будьте любезны.
|
|
03.08.2011, 15:35 | #28 |
Участник
|
не, не хочу чтобы другие давали такие отсылки.
пусть на форуме будут развернутые ответы. итак. 1. на форме должы быть обычные табличные датасоры 2. один из самых верхних датасорсов должен "соответствовать" элементам дерева 3. на treeView перехватываете метод selectionChanged 4. в котором так или иначе вызываете метод table_ds.findRecord метод findRecord выполняет позиционирование датасорса. И изменение всех подчиненных датасорсов. что неизбежно отобразится на форме. грид для датасорса верхнего уровня (который соответствует дереву) можно на форме не отображать. и без этого форма будет чудесно работать. пример того, как это работает см. в форме projTable |
|
03.08.2011, 15:41 | #29 |
Участник
|
Цитата:
Сообщение от mazzy
не, не хочу чтобы другие давали такие отсылки.
пусть на форуме будут развернутые ответы. итак. 1. на форме должы быть обычные табличные датасоры 2. один из самых верхних датасорсов должен "соответствовать" элементам дерева 3. на treeView перехватываете метод selectionChanged 4. в котором так или иначе вызываете метод table_ds.findRecord метод findRecord выполняет позиционирование датасорса. И изменение всех подчиненных датасорсов. что неизбежно отобразится на форме. грид для датасорса верхнего уровня (который соответствует дереву) можно на форме не отображать. и без этого форма будет чудесно работать. пример того, как это работает см. в форме projTable Последний раз редактировалось AngelDominantes; 03.08.2011 в 15:47. |
|
03.08.2011, 15:46 | #30 |
Участник
|
Извини, не покажу. Основу составляют данные заказчиков, и выкладывать это на широкое обозрение не буду.
Но в приципе все просто: - форма трекера задач - слева в дереве заказчики и статусы задач как первый и второй уровень дерева. - справа в гриде собственно список задач. Удобно, как я понимаю (теперь то я задумался об этом...) потому, что все элементы первого уровня легко умещаются на одном экране - соответственно получается типа панель быстрого доступа, в которой легко можно перепрыгнуть с задач Заказчика 1 в разработке к запланированным для Заказчика 2.
__________________
Ален ноби, ностра алис. Что означает - если один человек построил, другой завсегда разобрать может. |
|
03.08.2011, 15:49 | #31 |
Участник
|
можно и так. но это закат солнца вручную.
ваше дерево наверняка имеет соответствие 1:1 в какой-то таблице. так? вот эту таблицу и помещаете как ведущий датасорс формы. остальные таблицы делаете подчиненными. связи с первой должны быть выражены обычными для аксапты способами безо всякого программирования. через relation в типах или в таблицах. поэтому позиционировать из treeView надо только одну таблицу - главную. остальные отфильтруются сами как в master/detail форме. (при этом в отличие от master/detail грид главной таблицы можно не показывать) |
|
03.08.2011, 15:52 | #32 |
Участник
|
Цитата:
нарисуйте сначала нормальную master/detail форму (это делается легко и просто. и безо всякого программирования) потом вместо master-грида используйте treeView. вот и весь секрет. |
|
03.08.2011, 17:19 | #33 |
Участник
|
Цитата:
Сообщение от AlGol
Удобно, как я понимаю (теперь то я задумался об этом...) потому, что все элементы первого уровня легко умещаются на одном экране - соответственно получается типа панель быстрого доступа, в которой легко можно перепрыгнуть с задач Заказчика 1 в разработке к запланированным для Заказчика 2.
|
|
03.08.2011, 17:34 | #34 |
Участник
|
Цитата:
Сообщение от mazzy
можно и так. но это закат солнца вручную.
ваше дерево наверняка имеет соответствие 1:1 в какой-то таблице. так? вот эту таблицу и помещаете как ведущий датасорс формы. остальные таблицы делаете подчиненными. связи с первой должны быть выражены обычными для аксапты способами безо всякого программирования. через relation в типах или в таблицах.
__________________
Ivanhoe as is.. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
03.08.2011, 17:42 | #35 |
Участник
|
Цитата:
С деревом программировать придется много. Очень много. |
|
11.01.2012, 10:04 | #36 |
Участник
|
ох уж это дерево.... я думаю, мой вопрос вам понравится не меньше:
На форме спланированные заказы-развёртывание строится дерево по конкретному заказу и через кнопку настройки можно указать то, что будет видно в данном дереве. Я хочу добавить туда некоторые поля из InventTable, ну нравятся они мне, так приятнее. Для этого в форме настроек добавляем новое поле в TmpReqExplosionTree, затем новый пункт, например пусть это будет DisplayItemNameAlias. В форму развёртывания добавляем источник данных InventTable... а дальше? в туториале ничего толком об этом нет, к сожалению... Ну даже если я хочу жёстко прописать отображение какого-то поля из нового источника данных не из формы настроек, а вообще, откуда-то из связанной таблицы - с этим деревом можно с ума сойти... у него же нет источника, всё так жёстко, никакой фильтрации нет... Аналогичная ситуация с конструктором спецификаций, там например нет возможности добавить что-то ещё, что иногда ну очень неудобно. Если там уж пусть всё будет, как было и редактирование через таблицу более удобно, то развёртывание спланированных заказов - дело другое. Это реально необходимо. Последний раз редактировалось niksen; 11.01.2012 в 10:37. |
|
Теги |
дерево, как правильно |
|
Похожие темы | ||||
Тема | Ответов | |||
Экспорт/Импорт прав доступа | 28 | |||
Дерево Tree | 7 | |||
Вопрос про Web Apps | 18 | |||
Дерево сопоставлений в SP2? | 4 | |||
дерево ФК | 1 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|