Показать сообщение отдельно
Старый 21.05.2004, 13:36   #4  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 646 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Здесь дело в том, что по правилам 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