13.10.2016, 22:00 | #21 |
Administrator
|
Вопрос исключительно для моего общего развития: а чего такого не умеет Query?
Ну и для полноты картины замечу, что если уж вам хочется ещё больше гибкости, то можно сделать наследника класса SysSearchBase, всю логику отбора записей упаковать в него, и возвращать его вместо Query. Код, использующий этот класс, будет только дёргать метод next(). Хотите примеров - смотрите класс BOMSearch и то, как он используется в BOMCopyFromBOM.copy().
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
|
За это сообщение автора поблагодарили: S.Kuskov (5). |
13.10.2016, 22:12 | #22 |
Участник
|
|
|
13.10.2016, 22:38 | #23 |
Administrator
|
Цитата:
Как и многие другие проблемы, эта решается с помощью создания промежуточных View. Во view можно сделать сколько угодно полей, которые будут разными агрегатными функциями на основе одного поля физической таблиц (см. View CustPackingSlipMinMaxDates; к сожалению, только в AX2012, но в AX2009 это тоже работает). Правда, собрать дебет отдельно от кредита это не поможет. Тут как раз агрегатная функция одна, но фильтры разные. Но и эту задачу можно решить путём создания промежуточных View. В AX2012 во view можно добавлять computed columns, так что можно сделать View на основе базовой таблицы и добавить в него поля AmountDebit и AmountCredit, а потом суммировать их сколько угодно. В AX2009 computed columns нет, но задача, в принципе, тоже решаема, только придётся повозиться, чтобы правильно сделать cross join между двумя датасорсами, в одном из которых будут собраны дебетовые проводки, а в другом - кредитовые.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
13.10.2016, 22:50 | #24 |
Administrator
|
Понятно. Я думал, while select что-то такое умеет, чего не умеет Query, но while select тоже не умеет case when.
В AX2012 эта проблема решена с помощью computed columns, которые можно добавлять к View (например, см. View VendTableCube). В AX2009 с этим сложнее, но часто можно обойти с помощью обычных display-методов на таблицах.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
13.10.2016, 22:53 | #25 |
Участник
|
Цитата:
другими словами, нужен класс, который бы отвечал за бизнес-сущность )))) |
|
13.10.2016, 22:55 | #26 |
Участник
|
|
|
13.10.2016, 22:59 | #27 |
Administrator
|
Цитата:
На View тоже можно создавать display-методы
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
13.10.2016, 23:10 | #28 |
Administrator
|
Цитата:
Речь идет о переносе товара между складами, когда товар со склада А переносится на склад Б, с Б на В, с В на Г и т.д. А потом где-то с Ж снова на А или на Б. А теперь представим себе, что у нас помимо склада еще есть что-нибудь типа номера ГТД и/или партии и ... далее по списку аналитик. В 4.0 была масса косяков в проставлении складских аналитик у заказов на перемещений. В результате могло получиться так, что товар списывался по одним аналитикам, а зачислялся по другим. Само собой АХ дальше-то работала верно, но закрытие склада вешалось из-за того, что переносы, перемещения, спецификации, закупки и продажи сопоставлялись ээээ ну в общем не так, как это ожидалось пользователями.
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 13.10.2016 в 23:13. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
13.10.2016, 23:13 | #29 |
Administrator
|
Цитата:
Комбинироваться эти view могут с помощью других view, и таких примеров уже очень много в стандартном приложении. Посмотри, например, на View InventValueTransView, который собирается (через View InventValueTransUnionAll) из нескольких других View, которые в основе своей имеют InventTrans и InventSettlement, отфильтрованные по разным наборам критериев. Скажу так: за бизнес-сущность вовсе не обязан отвечать класс. Это может быть и View, и Query. Ну или правильнее будет сказать, что класс, отвечающий за бизнес-сущность - это совсем не обязательно класс в смысле объекта AOT типа "класс". P.S.: Я, наверное, дальше в этой ветке буду только на прикладные вопросы отвечать. Абстрактные идеологические рассуждения, конечно, тоже иногда интересны, но, пожалуй, не сегодня
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
|
За это сообщение автора поблагодарили: mazzy (2), Weez (1). |
14.10.2016, 00:31 | #30 |
Administrator
|
Чтобы окончательно добить тему, поделюсь небольшой идей.
Как я уже писал, в AX2009 нет computed columns, но это, разумеется, не преграда пытливому уму и неугомонным рукам В качестве дисклеймера:
Итак, задача: сделать в AX2009 view на основе таблицы LedgerTrans, в котором дебетовые и кредитовые суммы будут в разных полях, чтобы потом можно было группировками собирать дебетовые и кредитовые обороты.
Ура, в поле AmountMSTDebit остались только дебетовые балансы, а в поле AmountMSTCredit - кредитовые.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
|
За это сообщение автора поблагодарили: mazzy (10), AlGol (2). |
14.10.2016, 00:41 | #31 |
Участник
|
хитрый! прикольно
только: не стоит возвращать null в числовое поле. лучше 0. чтобы можно было оставить в качестве готового примера, стоит добавить обработку поля correction. это признак сторно. он есть и в международном функционале. а в dbSynchronize точно попадает только пользователь с правами на изменение схемы? там точно никакой подмены на аосовского пользователя не происходит? может в дисклаймер стоит добавить, что пользователю нужны права на alter view? |
|
14.10.2016, 01:43 | #32 |
Banned
|
Мне всегда DISTINCT во всей AX страшно не хватало: "найди самое последнее по времени Y с типом X, и выведи один раз для каждого X".
Решал, кстати, двумя view, в одном из которых был GROUP BY(X) и MAX(Y) того, что хотелось иметь первым, а второй view был построен на query inner join с первым view. Последний раз редактировалось EVGL; 14.10.2016 в 01:51. |
|
|
За это сообщение автора поблагодарили: mazzy (2), trud (2), sukhanchik (2). |
14.10.2016, 07:26 | #33 |
Участник
|
Цитата:
практический пример Добавление даты из партии в форму в наличие |
|
14.10.2016, 07:26 | #34 |
Участник
|
Цитата:
Сообщение от Maxim Gorbunov
Комбинироваться эти view могут с помощью других view, и таких примеров уже очень много в стандартном приложении. Посмотри, например, на View InventValueTransView, который собирается (через View InventValueTransUnionAll) из нескольких других View, которые в основе своей имеют InventTrans и InventSettlement, отфильтрованные по разным наборам критериев
|
|
14.10.2016, 10:25 | #35 |
Administrator
|
Application живет на сервере. Поэтому код исполняется пользователем, от имени которого запущен АОС. А уж этот-то пользователь обладает всеми правами на БД, ибо иначе никогда бы не проходила синхронизация. Метод Максима на вьюхе запускается там, откуда был вызван, т.е. с сервера. Т.о. дополнительных прав никому не нужно.
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: mazzy (10). |
14.10.2016, 10:33 | #36 |
Участник
|
Цитата:
Сообщение от S.Kuskov
Хотите таких примеров? Их есть у меня Сортировка Query
практический пример Добавление даты из партии в форму в наличие noFetch в Query(Run) |
|
Теги |
distinct, recordrefrencelist_ru, recordsortedlist, view |
|
|