04.06.2008, 17:25 | #1 |
Участник
|
Отображение AOT_Query на форме часть 2
Уж не пинайте - обошел весь форум , ответа на свой вопрос не нашел. Задача - на форме (в Grid) отобразить отфильтрованную по определенному признаку номенклатуру с колонкой наличия на складе. Имею AOT_Query с группировкой на подчиненной таблице(InventSum, группировка по ItemId). В принципе , этот AOT_QUERY содержит весь необходимый набор данных. На Init DS пишу
X++: q = new Query(querystr(MySuperAotQuery)); ; this.query(q); Не хотелось бы использовать дисплейные методы. Или это единственный вариант ? Спасибо. |
|
04.06.2008, 17:49 | #2 |
Боец
|
Нет, так просто кверю на форме не подменишь
Проще всего написать дисплей методы. В них, для вычисления колличества на складе можно использовать класс InventOnhand, который очень просто использутся. Ещё эти дисплей методы не мешало бы закэшировать, иначе скорее всего будет формочка тормозить |
|
04.06.2008, 17:59 | #3 |
Участник
|
Что все не так просто , я уже понял : ))
Уже несколько раз возвращаюсь к этой теме , до сих пор откладывал. Если существует рашение , хотелось бы его знать. |
|
04.06.2008, 18:18 | #4 |
Боец
|
1. Если на форме в качестве датасорса InventTable, то в методе init() датасорса пишете
X++: InventTable_ds.query().datasourceTabe(tablenum(Inventtable)).addRange(fieldnum(InventTable, ItemId)).value(SysQuery::Value("нужные айтемы")) 2. Дисплей методы пишите на таблице InventTable X++: inventOnhand = InventOnhand::newParameters( this.ItemId, inventDim, inventdimParm); Затем возвращаете нужное вам значение, например inventOnhand.availPhysical() Есть ещё вариант: использования методов таблицы InventSum, если у вас получится её приджоинить. Но это если не хотите использовать класс + будет по-быстрее. |
|
05.06.2008, 10:01 | #5 |
Участник
|
DSPIC , спасибо за совет, но в нашей компании не разрешена модификация стандартных обьектов , в том числе и добавление дисплейных методов на InventTable без дополнительного утверждения. Именно поэтому я решил отказаться от них , о чем указал в своей шапке. Кроме того хотелось бы все таки прикрутить AOT_query к своей форме , так как этот вопрос все равно рано или поздно придется решать. Если query не содержит агрегатных полей , то все решается на ура, и проблем не возникает. Как добавить агрегатное поле на грид(из AOT_query) ?
|
|
05.06.2008, 15:59 | #6 |
Участник
|
Вот здесь http://forum.mazzy.ru/index.php?show...90&#entry24890 нашел обсуждение как раз моего случая , но тот момент , который меня интересует более всего , затронут вскользь. У нас в компании Ах 3.0, и я не знаю как создать тот самый контрол , о котором упомянул Mazzy. Если кому то удалось создать на гриде агригирующую колонку из AOT_QUERY , поделитесь пожалуйста ...
|
|
05.06.2008, 16:26 | #7 |
MCTS
|
Цитата:
Как добавить агрегатное поле на грид(из AOT_query) ?
Создал форму с двумя ds InventSum и InventDim В ините InventSum датасорса прописал следующее X++: public void init() { Query query = new Query(queryStr(InventSum)); ; query.dataSourceNo(1).addRange(fieldNum(InventSum, ItemId)).value('0_Frog'); query.dataSourceNo(1).addSelectionField(fieldNum(InventSum, PostedQty), SelectionField::Sum); query.dataSourceNo(1).addSortField(fieldNum(InventSum, ItemId)); query.dataSourceNo(1).orderMode(OrderMode::GroupBy); InventSum_ds.query(query); super(); }
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
|
За это сообщение автора поблагодарили: radya (1). |
05.06.2008, 17:33 | #8 |
Участник
|
На всякий случай , может кому пригодится.. Не пытаться прикрутить AOT_query на форме. Лучше прописать все связи , группировки и фильтры на самой форме. Что я сделал : на ExecuteQuery родительского датасорса :
X++: Query query = new Query(); QueryRun qr ; QueryBuildDataSource qbds1,qbds2; ; if (InventTable_ds.queryRun()) query = InventTable_ds.queryRun().query(); else query = InventTable_ds.query(); qbds1 = query.dataSourceTable(tablenum(InventTable)); if (Query.dataSourceCount() < 2) qbds1.addDynalink(fieldnum(InventTable,ItemId),InventSum,fieldnum(InventSum,ItemId)); qbds2 = query.dataSourceTable(tablenum(InventSum)); qbds1.addRange(fieldnum(InventTable,A_LineCode)).value("ACM"); qbds2.addRange(fieldnum(InventSum,Closed)).value("0"); qbds1.addSortField(fieldnum(InventTable,A_PartNumber)); qbds1.addSortField(fieldnum(InventTable,NameAlias)); qbds1.addSortField(fieldnum(InventTable,ItemId)); qbds1.orderMode(orderMode::GroupBy); qbds2.addSelectionField(fieldnum(InventSum,AvailPhysical),SelectionField::Sum); qbds2.addSortField(fieldnum(InventSum,ItemId)); qbds2.orderMode(orderMode::GroupBy); super(); Повторюсь , это только для Ах 3.0, с четверкой надеюсь все проще. |
|
Теги |
ax3.0 |
|
|