|
13.10.2016, 21:22 | #1 |
Administrator
|
Альтернативный вариант - немного поменять взгляд на задачу. Вместо того, чтобы возвращать записи, упаковкнные в какой-то контейнер, можно возвращать сформированный запрос. Например, в виде объекта Query или QueryRun. Если возвращаемая таблица во всех вариантах запроса одна, то можно инициализировать табличный курсор с помощью select noFetch и вернуть его.
__________________
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), NetBus (2). |
13.10.2016, 21:36 | #2 |
Administrator
|
Посмотрите для примера на класс TradeLoopTrans. Пример его использования - метод CustInvoiceJour.queryCustInvoiceTrans и отчёт SalesInvoice метод fetch. Если я правильно понял вашу задачу, то в стандартных отчётах-документах по заказу/закупке реализовано нечто похожее.
__________________
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, 21:45 | #3 |
Участник
|
Цитата:
Сообщение от Maxim Gorbunov
Альтернативный вариант - немного поменять взгляд на задачу. Вместо того, чтобы возвращать записи, упаковкнные в какой-то контейнер, можно возвращать сформированный запрос. Например, в виде объекта Query или QueryRun. Если возвращаемая таблица во всех вариантах запроса одна, то можно инициализировать табличный курсор с помощью select noFetch и вернуть его.
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
13.10.2016, 22:00 | #4 |
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 | #5 |
Участник
|
|
|
13.10.2016, 22:50 | #6 |
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:55 | #7 |
Участник
|
|
|
13.10.2016, 22:59 | #8 |
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). |
14.10.2016, 01:43 | #9 |
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). |
Теги |
distinct, recordrefrencelist_ru, recordsortedlist, view |
|
|