|
21.05.2004, 12:47 | #1 |
Участник
|
В форму InventOnhandItem нужно добавить поле ItemName из таблицы InventTable для фильтрации данных по названию номенклатуры. Добавлял DataSource в дизайн, пробовал изменять Query и настраивать связь с InventTable программно, ничего не помогает – поле в форме выводится пустым. Подскажите, пожалуйста, что делать?
|
|
21.05.2004, 12:54 | #2 |
Шаман форума
|
Извиняюсь за "непрограммистский" ответ, но существует штатная возможность фильтрации по связанным таблицам, а именно: в поле фильтр нужно хлопнуть правой кнопкой мыши на названии исходной таблицы, и выведется список всех связанных - по ним можно тоже ставить фильтр.
__________________
All information in this post is strictly confidential. If you have read it in error, please forget it immediately. |
|
21.05.2004, 12:58 | #3 |
Участник
|
не. тут дело не в этом.
Форма InventOnHand создает сложный запрос с group by. В стандартной аксапте названия номенклатуры в списке группировки нет. Максим Горубнов неоднократно такую штуку делал. Когда освободиться, думаю, ответит. |
|
21.05.2004, 13:36 | #4 |
Administrator
|
Здесь дело в том, что по правилам SQL при использовании GROUP BY нельзя напрямую (в смысле, без использования агрегатной функции) выбирать в запросе поля, по которым не задана группировка. Форма InventOnHand генерирует достаточно большой запрос с кучей группировок по складским аналитикам. Когда Вы добавляете поле ItemName из InventTable Axapta сначала пытается добавить его в обычный список полей для SELECT'а, а потом, когда выясняется, что группировки по нему нет, выбрасывает его. Соответственно, запрос не возвращает значения ItemName.
Что делать. Самый простой способ - добавить в запрос агрегатную функцию по полю ItemName. Для этого в методе init() у DataSource InventTable после super() добавьте такую строчку:<div class='XPPtop'>X++</div><div class='XPP'>this.query().dataSourceTable(this.table()).addSelectionField([color=:blue]fieldnum[/color](InventTable, ItemName), SelectionField::Max);</div> Это приведет к тому, что в запросе к БД вместо SELECT ItemName появится SELECT MAX(ItemName). Способ сложнее - исправить запрос на форме так, чтобы в нем появилась группировка по полю ItemName. Чтобы это сделать, смотрите класс InventDimCtrl_Frm_OnHand, а в нем метод modifyQuery(). Именно в этом методе в запрос, генерирующийся формой, добавляются различные группировки. Вызывается метод на форме из метода executeQuery() у DataSource InventSum.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
21.05.2004, 13:58 | #5 |
Участник
|
Большое спасибо, всё работает.
|
|
21.05.2004, 20:53 | #6 |
Участник
|
В форме InventOnhandItem после изменения складской аналитики (например, добавили / убрали код палеты) теряется исходная группировка по InventSum и остаётся та, что была после добавления аналитики (по InventDim). Делал reread, research, refresh DataSource'ов, но группировка остаётся по InventDim. Подскажите, пожалуйста, можно ли (при снятии всех "галок" в аналитике) вернуть группировку по InventSum?
|
|
24.05.2004, 12:44 | #7 |
Участник
|
а что значит добавили/убрали код паллеты?
это значит галочку включили? тогда правильно. не понимаю вопроса. |
|
24.05.2004, 19:29 | #8 |
Участник
|
Цитата:
Сообщение от mazzy
а что значит добавили/убрали код паллеты?
это значит галочку включили? тогда правильно. не понимаю вопроса. |
|
24.05.2004, 20:53 | #9 |
Участник
|
Дык, это править класс надо, который за галочки отвечает.
|
|
28.05.2004, 17:57 | #10 |
Участник
|
Оказалось, что класс править не нужно, после установки SP3 всё заработало само. После снятия всех галок в аналитике группировка восстанавливается по InventSum.
Большое спасибо всем за Ваши ответы. |
|