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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.11.2015, 09:20   #1  
r2d2 is offline
r2d2
Участник
 
62 / 10 (1) +
Регистрация: 25.11.2013
Создание иерархического справочника
День добрый Товарищи! MS DAX 2009. Необходимо реализовать иерархическую таблицу-справочник. Не соображу каким образом указать родителя текущему элементу. Есть мысль добавить поле "Родитель" в таблицу, но каким значением его заполнять было бы правильнее не пойму. Подскажите пожалуйста!
Старый 06.11.2015, 09:32   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Правильнее было бы его вообще не делать.
Это не в идеологии аксапты.

На форуме обсуждалось.
Старый 06.11.2015, 09:39   #3  
axm2013
Гость
 
n/a
Цитата:
Сообщение от r2d2 Посмотреть сообщение
... Есть мысль добавить поле "Родитель" в таблицу, но каким значением его заполнять было бы правильнее не пойму. Подскажите пожалуйста!
Не очень понятно в чем собственно проблема?
Ну добавьте поле родителя и заполняйте его соответствующим идентификатором.
За это сообщение автора поблагодарили: r2d2 (1).
Старый 06.11.2015, 09:40   #4  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
На форуме обсуждалось, но однозначного вывода я не припомню. В 2012 есть много примеров иерархий. Иерархию категорий продуктов только ленивый не делал для ритейла начиная еще с Axapta 2.5.

Есть конкретные задачи, которые отлично решаются деревом. Есть задачи, которые не решаются. А есть задачи, которые просто не умеет Аксапта, но это не значит, что задача не правильная.
__________________
Ivanhoe as is..
Старый 06.11.2015, 09:42   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от r2d2 Посмотреть сообщение
Есть мысль добавить поле "Родитель" в таблицу, но каким значением его заполнять было бы правильнее не пойму. Подскажите пожалуйста!
Значением первичного ключа родительской записи? Или вы о чём-то другом хотели спросить?
За это сообщение автора поблагодарили: r2d2 (1).
Старый 06.11.2015, 12:03   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Если прям очень нужен иерархический справочник, то стоит посмотреть, как реализованы те же категории продуктов (таблица EcoResCategory) в AX2012, в первую очередь с т.з. схемы данных и поддержки дополнительных служебных полей и таблиц:
  • ссылка на родительский узел (поле EcoResCategory.ParentCategory) - куда же без нее
  • уровень текущего узла (поле Level)
  • левые и правые ключи для работы с моделью вложенных множеств (поля NestedSetLeft, NestedSetRight) и логика их обновления - используются для реляционной работы с деревом вместо рекурсивного обхода уровней, см. также Nested Set model
  • соответствующие индексы, в т.ч. уникальные
Кроме этого, в AX2012 для Розницы в дереве иерархий могут быть сделаны "исключения", когда иерархические отношения настраиваются не в самом дереве, а в рамках тех или иных акций. Для поддержки таких исключений и упрощения реляционной работы с узлами дерева в модуле Розница есть вспомогательная таблица RetailCategoryContainmentLookup, содержащая все комбинации {узел, родительский узел}, и соотв. логика ее обновления. Также надо обратить внимание на то, что в иерархиях категорий, как и во многих других местах AX2012, первичным ключом записи является RecId, и все ссылки тоже сделаны по RecId.
В таком варианте (ссылки по RecId, модель вложенных множеств) SQL-запросы по категориям работают весьма шустро даже на очень больших и многоуровневых деревьях.
За это сообщение автора поблагодарили: r2d2 (1).
Старый 06.11.2015, 12:13   #7  
r2d2 is offline
r2d2
Участник
 
62 / 10 (1) +
Регистрация: 25.11.2013
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Если прям очень нужен иерархический справочник, то стоит посмотреть, как реализованы те же категории продуктов (таблица EcoResCategory) в AX2012, в первую очередь с т.з. схемы данных и поддержки дополнительных служебных полей и таблиц:
  • ссылка на родительский узел (поле EcoResCategory.ParentCategory) - куда же без нее
  • уровень текущего узла (поле Level)
  • левые и правые ключи для работы с моделью вложенных множеств (поля NestedSetLeft, NestedSetRight) и логика их обновления - используются для реляционной работы с деревом вместо рекурсивного обхода уровней, см. также Nested Set model
  • соответствующие индексы, в т.ч. уникальные
Кроме этого, в AX2012 для Розницы в дереве иерархий могут быть сделаны "исключения", когда иерархические отношения настраиваются не в самом дереве, а в рамках тех или иных акций. Для поддержки таких исключений и упрощения реляционной работы с узлами дерева в модуле Розница есть вспомогательная таблица RetailCategoryContainmentLookup, содержащая все комбинации {узел, родительский узел}, и соотв. логика ее обновления. Также надо обратить внимание на то, что в иерархиях категорий, как и во многих других местах AX2012, первичным ключом записи является RecId, и все ссылки тоже сделаны по RecId.
В таком варианте (ссылки по RecId, модель вложенных множеств) SQL-запросы по категориям работают весьма шустро даже на очень больших и многоуровневых деревьях.
У меня DAX 2009. Не знаю, применимо ли вами сказанное к ней. Но общую мысль уловил.
Старый 06.11.2015, 12:14   #8  
r2d2 is offline
r2d2
Участник
 
62 / 10 (1) +
Регистрация: 25.11.2013
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Значением первичного ключа родительской записи? Или вы о чём-то другом хотели спросить?
Да именно это и хотел спросить. Спасибо. Вопрос еще и в целом по методологии, правильно ли так делать.
Старый 06.11.2015, 12:26   #9  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Чтобы обсудить "методологию" нужна постановка задачи. Что нужно решить, как вы считаете, деревом?
__________________
Ivanhoe as is..
Старый 06.11.2015, 12:36   #10  
r2d2 is offline
r2d2
Участник
 
62 / 10 (1) +
Регистрация: 25.11.2013
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Чтобы обсудить "методологию" нужна постановка задачи. Что нужно решить, как вы считаете, деревом?
Необходимо создать таблицу настроек ,которая воспроизводит воспроизвести иерархию подразделений предприятия, с 3 уровенями вложенности. В дальнейшем по этой таблице будет строиться отчет. К данным подразделениям хочу "привязать" центры фин. ответственности(ЦФО), в разрезе которых и хранятся суммовые данные. ИТОГО: данные хранятся в разрезе ЦФО, отчет должен строится по подразделеням ,которых в Аксапте нет. Цель создания таблицы - построение соответствия между ЦФО и подразделениями.

Последний раз редактировалось r2d2; 06.11.2015 в 12:40.
Старый 06.11.2015, 14:55   #11  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Цитата:
Сообщение от r2d2 Посмотреть сообщение
ИТОГО: данные хранятся в разрезе ЦФО, отчет должен строится по подразделеням ,которых в Аксапте нет. Цель создания таблицы - построение соответствия между ЦФО и подразделениями.
Посмотрите форму HRPPartyOrganizationUnit и вообще таблицы DirParty***
Если по каким-то причинам не устраивает стандарт, для ваших узких целей дешевле будет сделать три отдельные таблицы (например, Подразделения, Департаменты, Отделы) и связать их иерархически:

Подразделения -> Департаменты (1:N)
Департаменты -> Отделы (1:N)
Отделы -> ЦФО (1:1)

По сравнению с древовидным справочником сильно сэкономите на разработке форм, отчетов и на дальнейшей поддержке. Если, конечно, конечная цель указана Вами достаточно полно, и всё это не является частью какой-то более комплексной задачи...
__________________
За это сообщение автора поблагодарили: r2d2 (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Пакетная обработка (повторное создание) Phoenix78 DAX: Программирование 7 06.11.2013 06:29
Запрет на создание объекта определенного типа HorrR DAX: Программирование 9 14.04.2011 13:43
SQL Server 2005, 2008: Создание недостающих индексов Poleax DAX: Прочие вопросы 6 05.06.2010 01:28
CRM создание писем и их рассылка - в чем трабл? ShadowFromXZone DAX: Функционал 9 17.06.2008 16:51
создание закупок под заказ Anthony DAX: Функционал 2 19.03.2004 11:18
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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