|
![]() |
#1 |
Участник
|
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/ |
|
|
За это сообщение автора поблагодарили: MikeR (1), alex55 (1). |
![]() |
#2 |
Участник
|
Цитата:
Цитата:
И надо помнить, что стандартное закрытие склада ограничено глубиной 50 уровней на чисто программистском уровне. Тупо чтобы не было бесконечных циклов. Но они все равно возникают время от времени ![]() может быть и здесь нужно было ограничить? Хороший программист должен был поднять этот метод до постановщика и обсудить возможность появления бесконечных циклов. Скорее всего, надо было менять ТЗ. Но похоже здесь проявился Программистский подход (Хоть я и обещал этот термин не использовать) |
|
![]() |
#3 |
Участник
|
Цитата:
если же постановку на человеческом языке привести не получается, то... с деревом в реляционной базе именно так... через зад. |
|
|
|