AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.04.2010, 08:31   #1  
pwp is offline
pwp
Участник
 
76 / 16 (1) ++
Регистрация: 08.07.2008
Адрес: Обнинск
? Работа с деревом.
Добрый день. Подскажите пож-та примерчики по работе с деревьями в AX 4.0 Что то в моем АХ нет tutorial на эту тему. Пишу сразу что не прав, не смотрел в формах. В формах что то есть.

Последний раз редактировалось pwp; 24.04.2010 в 08:34.
Старый 24.04.2010, 11:06   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от pwp Посмотреть сообщение
Добрый день. Подскажите пож-та примерчики по работе с деревьями в AX 4.0 Что то в моем АХ нет tutorial на эту тему. Пишу сразу что не прав, не смотрел в формах. В формах что то есть.
прежде всего хотелось бы сказать, что дерево - это всего лишь способ ограничить выборку, способ фильтрации.
Способ не самый удобный и эргономичный в многопользовательских системах
http://axapta.mazzy.ru/lib/tree/
http://axapta.mazzy.ru/lib/tree2/
http://axapta.mazzy.ru/lib/tree3/

кроме того, в дереве отсутствует механизм поиска.

по вопросу.
деревья в Аксапте есть конечно.

прежде всего - модуль проекты.
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 293
Размер:	78.4 Кб
ID:	5739

хрестоматийным примером неудачного применения дерева является структура настройки прав доступа (в форму даже Progress Bar добавили, чтобы пользователям не было так сильно грустно ждать загрузки дерева)
Нажмите на изображение для увеличения
Название: 2.PNG
Просмотров: 250
Размер:	61.2 Кб
ID:	5740

есть дерево и в tutorial, конечно.
причем в tutorial показано как подгружать дерево не целиком, а частями при открытии ветки, чтобы не заставлять пользователя ждать. (Обратите внимание, какой объем программирования требуется для поддержки такой фичи.)
Нажмите на изображение для увеличения
Название: 3.PNG
Просмотров: 235
Размер:	48.3 Кб
ID:	5741

И снова напомню - в дереве нет поиска и фильтрации.
Пользователи вас замучают вопросом о поиске и фильтрации, если вы сделаете им дерево.
А в Аксапте инструменты поиска и фильтрации - отличные.
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: pwp (1).
Старый 24.04.2010, 12:50   #3  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Ответ будет зависеть от того, что имеется ввиду под "работа с деревьями".
Если подразумевается работа в памяти с древовидными структурами, то в Аксе это ничем не отличатся от того, что описано во множестве учебников по программированию - те же структуры, позволяющие ссылаться на ветви дерева (или на вышестоящие уровни), те же принципы обхода дерева (независимо от того, на основе классов или переменных эти деревья построены.
Но, мне кажется, что под "работой с деревьями" подразумевается именно то, о чем ответил mazzy, то есть, отображение данных из базы в форме (отчете) в виде дерева.
Как сказал mazzy, обработка древовидных структур достаточно напряженная операция для реляционных данных. Тем не менее, бывает, что эти структуры приходится реализовывать. Дело в том, что достаточно много людей лучше воспринимают информацию именно в иерархическом виде, сверху вниз или снизу вверх (ну там всякие синтезы, анализы - кто в институтах изучал философию - помнит).
Поэтому, для того чтобы скрестить ужа с ежом учесть потребности пользователей и ограничения реляционной модели можно придерживаться следующих правил (список не претендует на абсолютную истину, приведен просто по опыту, возможно не лучшему):
  • Нет абсолютно всех удовлетворяющей иерархии. Продажным девушкам отделу продаж нужна одна, закупщикам - другая, аналитикам - третья. При создании одной общей иерархии придется идти на кучу компромиссов.
  • Если следовать принятой в Аксе кодировке (коды должны иметь "говорящие" значения), то обработка становится кошмаром. Для облегчения жизни программистов (и для быстродействия) приходится вводить альтернативную искусственную кодировку таким образом, чтобы по кодам была возможна фильтрация (выделено на скриншотах синим цветом) - например, поиск подчиненных значений при помощи конструкции "001*" . Это будет удобно программистам, а вот насколько это удобно пользователям? (хотя по моему опыту, через некоторое время пользователи запоминают кодировку и оперируют ей, а не названиями).
  • Обязательно нужно предоставлять пользователям возможность переключаться между иерархическим и плоским представлением (на скриншотах выделено красным цветом). По моим наблюдениям у тех пользователей, которые не особенно разбираются в предметной области (а где набрать супер разбирающихся?), флаг иерархии включен, а у опытных выключен.
  • Использовать уже то, что наработано в стандартной Аксе. Для отображения дерева есть несколько вариантов. Мне нравиться использовать классы - наследники CCFormTreeDatasource. Примеры можно посмотреть в классе HRMOrganizationTree и классах, начинающихся на KM, например KMActionTree, KMCollectionQuestionTree. Они используются в формах, которые можно найти либо при помощи перекрестных ссылок, либо поиском по приложению. Хотя, повторяю, это только один из вариантов.
Миниатюры
Нажмите на изображение для увеличения
Название: Иерархия1.JPG
Просмотров: 284
Размер:	71.2 Кб
ID:	5742   Нажмите на изображение для увеличения
Название: Иерархия2.JPG
Просмотров: 330
Размер:	69.1 Кб
ID:	5743  

За это сообщение автора поблагодарили: mazzy (2), pwp (1).
Старый 24.04.2010, 13:28   #4  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Э-эх, опять по дерево. В каждом топике про дерево почему-то пытаются доказать что это "напряженная операция для реляционных данных". Почему-то когда раньше программил под Delphi никаких напрягов это не вызывало - дерево с 1 млн. узлов грузилось пару секунд и работало быстро!
Давайте просто признаем - реализация отрисовки дерева в Аксапте - ну просто г... и д... - и просто его не нужно использовать на количестве узлов > ну скажем 500 (чисто для примеру). Не нужно все сваливать на СУБД. В данном конкретном случае она не при чем.
ps Да, с постулатом, что в Аксапте отличные фильтры и для нормальных пользователей они лучше чем дерево абсолютно согласен!
За это сообщение автора поблагодарили: Raven Melancholic (2).
Старый 24.04.2010, 13:40   #5  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от egorych Посмотреть сообщение
Почему-то когда раньше программил под Delphi никаких напрягов это не вызывало - дерево с 1 млн. узлов грузилось пару секунд и работало быстро!
Ну как бывший Дельфиец (терерь сишарповец) и как бывший одинэсник (теперь, аксаптовец) могу тоже сказать, что дерево нормально обрабатывается. Но, есть детали: нормально обрабатывается в том случае, если структура данных на это заточена. А насколько заточенная под быстродействие структура удобна для пользователей, тут уже вопрос.
В общем, как программист соглашусь, что в реализации дерева особых проблем нет, но как работающий на клиенте (а тут получатся смесь программиста, сотрудника службы сопровождения, постановщика задач и прочих вкусностей) вынужден смотреть не только на то, что может программист, но и на то, как приходится работать пользователям.
Старый 24.04.2010, 17:59   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от egorych Посмотреть сообщение
Э-эх, опять по дерево. В каждом топике про дерево почему-то пытаются доказать что это "напряженная операция для реляционных данных".
Э-э-э... Достаточно воспользоваться поиском

Цитата:
Сообщение от egorych Посмотреть сообщение
Почему-то когда раньше программил под Delphi никаких напрягов это не вызывало - дерево с 1 млн. узлов грузилось пару секунд и работало быстро!
Ключевое слово "грузилось".
Пропущенное слово "...на клиента".

Т.е. вы хотите сказать, что вы грузили на клиента 1млн узлов только для того, чтобы отобразить дерево? ...из которого пользователю нужно всего лишь десяток записей?
Ну, ну...

Тут же возникают требования к мощности клиента, требования к пропускной способности сети, требования к диску сервера, а также требования к диску клиента для свопа... О, да. У вас наверняка было хорошее железо (требования как у последней платформы 1С )

Цитата:
Сообщение от egorych Посмотреть сообщение
Давайте просто признаем - реализация отрисовки дерева в Аксапте - ну просто г... и д... - и просто его не нужно использовать на количестве узлов > ну скажем 500 (чисто для примеру). Не нужно все сваливать на СУБД. В данном конкретном случае она не при чем.
Да ну? Обычный treeview. Программист может обрабатывать раскрытие ветки дерева.
Можете расскажать подробнее об альтернативных вариантах отрисовки?
__________________
полезное на axForum, github, vk, coub.
Старый 26.04.2010, 09:36   #7  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Цитата:
Сообщение от mazzy Посмотреть сообщение
..
Ключевое слово "грузилось".
Пропущенное слово "...на клиента".
Да, ну и что тут такого страшного? Если архитектура 2-х уровневая.
Цитата:
Сообщение от mazzy Посмотреть сообщение
Т.е. вы хотите сказать, что вы грузили на клиента 1млн узлов только для того, чтобы отобразить дерево? ...из которого пользователю нужно всего лишь десяток записей?
Ну, ну...
Что ну? Опять не понял - ну миллион скажем так для теста, а тыщ 50-100 в рабочем режиме.
Цитата:
Сообщение от mazzy Посмотреть сообщение
Тут же возникают требования к мощности клиента, требования к пропускной способности сети, требования к диску сервера, а также требования к диску клиента для свопа... О, да. У вас наверняка было хорошее железо (требования как у последней платформы 1С )
Это лишь домыслы! Обычный комп - 512 памяти, ниче военного. Возможно у вас нет опята работы со средами отличными от 1С и такая скорость (как в 1с) считается нормой? Уверяю - это не так.
Цитата:
Сообщение от mazzy Посмотреть сообщение
Да ну? Обычный treeview. Программист может обрабатывать раскрытие ветки дерева.
Можете расскажать подробнее об альтернативных вариантах отрисовки?
Видимо не обычный, раз деревья рисуются несколько (мягко так) тормознуто. Подчеркиваю - тормозит именно отрисовка, а не выборки из БД - проверено экспериментально.
Посмотрите отрсовку в Delphi - VirtualTreeView, например, я в коды компонентов не лез, поэтому ничего сказать не могу.
Старый 25.04.2010, 01:50   #8  
AX2009
Гость
 
n/a
Я когда в школе учился - у нас был такой предмет - "Труды" назвался
На одном из занятий у нас была работа с деревом - я своими руками из куска дерева сделал топорище и был очень горд за себя!

Последний раз редактировалось AX2009; 25.04.2010 в 01:52.
За это сообщение автора поблагодарили: S.Kuskov (2).
Старый 26.04.2010, 07:45   #9  
pwp is offline
pwp
Участник
 
76 / 16 (1) ++
Регистрация: 08.07.2008
Адрес: Обнинск
Спасибо всем, принявшим участие.Вопрос мой был больше в плане теории :
1. Как правильно построить таблицу (таблицы?) для ведения данных в виде дерева.
2. Какие структуры данных в памяти должны быть построены для работы с этим деревом.
Наследие, конечно, изучим.
Старый 26.04.2010, 08:43   #10  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от pwp Посмотреть сообщение
Вопрос мой был больше в плане теории
Мне нравится вот эта статья - Деревья в SQL

Цитата:
Сообщение от pwp Посмотреть сообщение
Как правильно?
А это уже зависит от того что конкретно вы собираетесь делать.
Цитата:
1. Каково общее количество записей в таблице?
2. Насколько часто будут редактироваться данные дерева?
3. Какова максимальная глубина вложенности дерева?
4. Что более критично для поставленной задачи: скорость извлечения информации или размер, занимаемый данными на диске?

Расскажите для чего дерево понадобилось вам.
За это сообщение автора поблагодарили: pwp (1).
Старый 26.04.2010, 13:18   #11  
pwp is offline
pwp
Участник
 
76 / 16 (1) ++
Регистрация: 08.07.2008
Адрес: Обнинск
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Мне нравится вот эта статья - Деревья в SQL
Ок, спасибо за статью. Задача вроде достаточно несложная, представить некоторую продукция предприятия в виде совокупности сборных и конечных деталей. Причем уровень вложенности постоянный и небольшой сборка->сборка->конечная деталь. Представление нужно для удобства работы операторов с этой продукцией.
Старый 26.04.2010, 13:26   #12  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от pwp Посмотреть сообщение
Задача вроде достаточно несложная, представить некоторую продукция предприятия в виде совокупности сборных и конечных деталей
Дайте угадаю, модуля 'Производство' у вас нет?
Старый 26.04.2010, 13:36   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от pwp Посмотреть сообщение
Задача вроде достаточно несложная, представить некоторую продукция предприятия в виде совокупности сборных и конечных деталей. Причем уровень вложенности постоянный и небольшой сборка->сборка->конечная деталь. Представление нужно для удобства работы операторов с этой продукцией.

http://axapta.mazzy.ru/lib/axapta30-...oduction1.html
http://axapta.mazzy.ru/lib/axapta30-...oduction2.html
http://axapta.mazzy.ru/lib/axapta30-video/pb.html

Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 648
Размер:	97.8 Кб
ID:	5745

Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Дайте угадаю, модуля 'Производство' у вас нет?
и документации нет, и в гугле забанили.
__________________
полезное на axForum, github, vk, coub.
Теги
treeview, дерево, иерархия

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
функционал Работа с документами и создание договора в Word GM2005 DAX: Функционал 5 28.09.2009 14:49
Доступ к меню "Работа с документами" Kuat DAX: Администрирование 4 16.11.2007 17:07
Совместная работа заказчика и исполнителя в разных или одном слое? Кузин Владимир В. DAX: Программирование 6 08.08.2006 10:02
Работа с деревом ald DAX: Программирование 8 21.04.2004 17:09
Работа с деревом Dmm DAX: Программирование 5 05.02.2004 10:13

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:06.