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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.07.2012, 19:33   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
MikeR, отвечу поскольку ты попросил.
В целом согласен с предыдущими авторами.

Прежде всего - насколько я понимаю, вопрос не об оформлении кода, а о сути метода. Метод по сути выполняет обход и обновление дерева. Причем почему-то достраивает дерево на лету. На человеческий язык пользовательской задачи этот метод я не могу перевести.

========================
С деревом в реляционных базах - плохо.
Я об этом писал http://axapta.mazzy.ru/lib/tree2/ (там ссылки есть на обсуждения у других)
Особенно плохо с универсальным деревом parent/child с произвольной глубиной.

Обход универсального дерева в реляционых базах никак не делается в один запрос.
Это по запросам.

Кроме того, работа с универсальным деревом с произвольной глубиной именно через бесконечный цикл и делается. Или через рекурсию. (Но рекурсия на сложных структурах в java выполняется сложно, поскольку в java все переменные передаются по ссылке)
Это по циклу/рекурсии.

по поводу ttsbegin/ttscommit - тоже согласен. для сохранения целостности правильно поставлено.

Цитата:
Сообщение от MikeR Посмотреть сообщение
Этот табличный метод
X++:
static void updateParent(InventoryGuidInvoice inventoryGuidInvoice)
{
    InventoryGuid           current, parent;
    InventoryGuidInvoice    parentDistr;
...
        SELECT FIRSTONLY current WHERE current.InvGuid == InvGUID;
...
        SELECT FIRSTONLY parent WHERE current.ParentInvGUID == parent.InvGUID;
...
}
можно было бы чуть пооптимизировать и сделать в один запрос.
но если у таблицы задано кэширование, то два простых запроса по одному ключу каждый будут брать данные из кэша самой Аксапты, что здорово сэкономит на запросах к SQL. Поэтому может быть и правильно, что два запроса.

====================
в общем: если в постановке задачи стояло универсальное дерево, то по-другому написать было сложно

другое дело, что деревья в реляционной базе - зло. и их просто не нужно допускать по возможности. А если уж необходимость в дереве есть, то рассмотреть возможность другого хранения ссылок (не parent/child). Почитай по ссылкам со страницы http://axapta.mazzy.ru/lib/tree2/
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: MikeR (1), alex55 (1).
Старый 18.07.2012, 19:47   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Такое ощущение, что реализована попытка решить задачу, обычно решаемую с помощью закрытия склада, т.е. будто бы на каждом обновлении идет проход по графу зависимостей проводок и накручиваются коррекции.
Цитата:
Сообщение от mazzy Посмотреть сообщение
Особенно плохо с универсальным деревом parent/child с произвольной глубиной.
Да, и полностью согласен с gl00mie. Похоже на закрытие склада.
И надо помнить, что стандартное закрытие склада ограничено глубиной 50 уровней на чисто программистском уровне. Тупо чтобы не было бесконечных циклов. Но они все равно возникают время от времени

может быть и здесь нужно было ограничить?

Хороший программист должен был поднять этот метод до постановщика и обсудить возможность появления бесконечных циклов. Скорее всего, надо было менять ТЗ. Но похоже здесь проявился Программистский подход (Хоть я и обещал этот термин не использовать)
__________________
полезное на axForum, github, vk, coub.
Старый 18.07.2012, 19:53   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от mazzy Посмотреть сообщение
Метод по сути выполняет обход и обновление дерева. Причем почему-то достраивает дерево на лету. На человеческий язык пользовательской задачи этот метод я не могу перевести.
и еще одно. похоже, что метод часть большой подсистемы. если бы можно было бы привести постановку задачи на исходом человеческом языке, то можно было бы обсудить насколько метод и выбранные в нем структуры отражает постановку.

если же постановку на человеческом языке привести не получается, то... с деревом в реляционной базе именно так... через зад.
__________________
полезное на axForum, github, vk, coub.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
.NET business connector не видит изменений в коде Аксапты rkorchagin DAX: Программирование 2 22.01.2010 11:43
Номерная серия длиннее 20 символов - баг в коде Максимка DAX: Функционал 17 29.12.2009 02:11
Нужно сделать выборку из нескольких таблиц (в данном случае из четырех). niktata DAX: Программирование 10 30.09.2008 09:42
Как быстро найти "главную" процедуру обработки в коде X++ ? Gustav DAX: Программирование 12 14.02.2006 12:15
Можно ли в коде управлять свойством Mandatory? kostas DAX: Программирование 5 10.03.2004 11:14

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

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

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