29.03.2007, 11:00 | #1 |
Участник
|
query
Пишу код:
X++: query.addDataSource(tableNum(ProdTable)); qbs = query.dataSourceTable( tableNum(ProdTable) ); query.addDataSource(tableNum(SalesTable)); qbs = query.dataSourceTable( tableNum(SalesTable) ); if( SalesEditFilter.valueStr() ) { qbs.addRange( fieldNum( SalesTable, SalesId )).value(SalesEditFilter.valueStr()); } qbs.addLink(fieldNum( SalesTable, SalesId ), fieldNum( ProdTable, InventRefId ));
__________________
Рабочий день сокращает жизнь на 8 часов |
|
29.03.2007, 11:12 | #2 |
Программатор
|
Честно говоря ломает напрягать свои телепатические способности... Чё за ошибка то???
|
|
29.03.2007, 11:13 | #3 |
Программатор
|
X++: qbs = query.addDataSource( tableNum(ProdTable) ); qbs = qbs.AddDataSource( tableNum(SalesTable) ); if( SalesEditFilter.valueStr() ) { qbs.addRange( fieldNum( SalesTable, SalesId )).value(SalesEditFilter.valueStr()); } qbs.addLink(fieldNum( SalesTable, SalesId ), fieldNum( ProdTable, InventRefId )); Последний раз редактировалось Sada; 29.03.2007 в 11:23. Причина: косячокс |
|
29.03.2007, 11:21 | #4 |
Участник
|
Ошибка в том, что второй источник нужно добавлять дочерним к первому. А вы их оба добавляете к запросу на одном уровне.
X++: qbs = qbs.addDataSource(tableNum(SalesTable)); |
|
29.03.2007, 11:44 | #5 |
Участник
|
пишу в executeQuery() следущее:
X++: qbs = prodTable_ds.query().dataSourceTable(tableNum( ProdTable )).addDataSource(tableNum(SalesTable)); qbs.addLink(fieldNum( SalesTable, SalesId ), fieldNum( ProdTable, InventRefId )); if( SalesEditFilter.valueStr() ) { qbs.addRange( fieldNum( SalesTable, SalesId )).value(SalesEditFilter.valueStr()); }
__________________
Рабочий день сокращает жизнь на 8 часов |
|
29.03.2007, 12:36 | #6 |
Участник
|
Syntax
public QueryBuildLink addLink(fieldId _parentField, fieldId _thisField) а у вас как я вижу наоборот идет - _thisField, _parentField эт про линк второе: условие накладывается до супер или после в методе? |
|
29.03.2007, 13:00 | #7 |
Участник
|
Цитата:
до супера Ктонить пробовал таблицу саму с собой связать ProdTable, поля ProdId и CollectRefProdId.. просто очень надо такую фишку сделать)
__________________
Рабочий день сокращает жизнь на 8 часов Последний раз редактировалось Himan; 29.03.2007 в 13:10. |
|
29.03.2007, 13:20 | #8 |
Участник
|
нет ничего трудного.
Query q = new Query(); QueryBuildDataSource qbs; ; qbs = q.addDataSource(tableNum(ProdTable)); qbs = qbs.addDataSource(tableNum(ProdTable)); qbs.addLink(fieldNum( ProdTable, ProdId), fieldNum( ProdTable, CollectRefProdId)); или что-то другое имелось ввиду? |
|
|
За это сообщение автора поблагодарили: Himan (1). |
29.03.2007, 13:27 | #9 |
Участник
|
X++: qbs = prodTable_ds.query().dataSourceTable(tableNum( ProdTable )).addDataSource(tableNum(ProdTable)); qbs.addLink( fieldNum( ProdTable, CollectRefProdId ), fieldNum( ProdTable, ProdId ) ); prodTable_ds.query().dataSourceTable(tableNum( ProdTable )).addRange( fieldNum( ProdTable, InventRefType ) ).value( Enum2Str(InventRefType::Sales) ); if( SalesEditFilter.valueStr() ) { prodTable_ds.query().dataSourceTable(tableNum( ProdTable )).addRange( fieldNum( ProdTable, InventRefId ) ).value( SalesEditFilter.valueStr() ); qbs.addRange( fieldNum( ProdTable, InventRefId ) ).value( SalesEditFilter.valueStr() ); }
__________________
Рабочий день сокращает жизнь на 8 часов |
|
29.03.2007, 13:38 | #10 |
Участник
|
ну "неахти" это не показатель совсем.
а както так оно может работать, потаму, что надо не добавлять ренж на каждый вызов, а только изменять значение его. |
|
29.03.2007, 13:54 | #11 |
Участник
|
Цитата:
а както так оно может работать, потаму, что надо не добавлять ренж на каждый вызов, а только изменять значение его.
clearRanges() и все)
__________________
Рабочий день сокращает жизнь на 8 часов |
|
29.03.2007, 14:11 | #12 |
Участник
|
X++: public void executeQuery() { QueryBuildDatasource qbs; ; prodTable_ds.query().dataSourceTable(tableNum( ProdTable )).clearLinks(); prodTable_ds.query().dataSourceTable(tableNum( ProdTable )).clearRanges(); if( SalesCheckFilter.value( ) ) { qbs = prodTable_ds.query().dataSourceTable(tableNum( ProdTable )).addDataSource(tableNum(ProdTable)); qbs.addLink( fieldNum( ProdTable, CollectRefProdId ), fieldNum( ProdTable, ProdId ) ); prodTable_ds.query().dataSourceTable(tableNum( ProdTable )).addRange( fieldNum( ProdTable, InventRefType ) ).value( Enum2Str(InventRefType::Sales) ); if( SalesEditFilter.valueStr() ) { prodTable_ds.query().dataSourceTable(tableNum( ProdTable )).addRange( fieldNum( ProdTable, InventRefId ) ).value( SalesEditFilter.valueStr() ); qbs.addRange( fieldNum( ProdTable, InventRefId ) ).value( SalesEditFilter.valueStr() ); } } super(); }
__________________
Рабочий день сокращает жизнь на 8 часов |
|
29.03.2007, 14:48 | #13 |
Дмитрий Ерин
|
Почему-то мне это напомнило старый русский обычай - бить стакан об пол после выпивания его содержимого...
Извините, не сдержался P.S.: Himan, прислушайтесь к совету Jony. Лучше сразу привыкать к общепринятым правилам - и Вам, и вашим коллегам потом легче будет читать такой код. |
|
|
За это сообщение автора поблагодарили: Himan (1). |
29.03.2007, 15:00 | #14 |
Участник
|
Ruff, просто их может быть, а может нет, так что держать их не вижу смысла)
__________________
Рабочий день сокращает жизнь на 8 часов |
|
29.03.2007, 15:40 | #15 |
Участник
|
формируйте запрос в инит источника данных, запомните ранж, в executeQuery только меняйте его значение.
|
|
29.03.2007, 15:47 | #16 |
Участник
|
А как или сделать или, чтоб
prodTable_ds.query().dataSourceTable(tableNum( ProdTable )).addRange( fieldNum( ProdTable, InventRefId ) ).value( SalesEditFilter.valueStr() ); или qbs = prodTable_ds.query().dataSourceTable(tableNum( ProdTable )).addDataSource(tableNum(ProdTable)); qbs.addLink( fieldNum( ProdTable, CollectRefProdId ), fieldNum( ProdTable, ProdId ) ); qbs.addRange( fieldNum( ProdTable, InventRefId ) ).value( SalesEditFilter.valueStr() ); подскажите)
__________________
Рабочий день сокращает жизнь на 8 часов Последний раз редактировалось Himan; 29.03.2007 в 15:50. |
|
29.03.2007, 15:52 | #17 |
Участник
|
сделать можно повсякому, за что я и люблю аксапту , но все зависит от конкретной задачи.
Опишите задачу как можно полнее, что есть и что надо получить, тогда и можно что-то думать. |
|
29.03.2007, 15:54 | #18 |
Участник
|
1. Все заказы которые имеют в поле номер ссылки номер указанного в фильтре заказа.
2. Все заказы которые ссылаются (через поле ссылка производства т.е. ) на производственный заказ у которого в поле номер ссылки указан заказ из фильтра. При этом если я наложил стандартный фильт, то твой запрос должен накладывать ограничения сверх этого заказа.
__________________
Рабочий день сокращает жизнь на 8 часов Последний раз редактировалось Himan; 29.03.2007 в 16:06. |
|
29.03.2007, 16:11 | #19 |
Участник
|
т.е. показать заказы с номером из фильта и заказы, связанные с первым по полю CollectRefProdId ?
т.е. показать основной заказ и его дочерние? я прально понял? |
|
29.03.2007, 16:16 | #20 |
Участник
|
ну да
__________________
Рабочий день сокращает жизнь на 8 часов |
|
Теги |
datasource, query, датасорс (datasource), источник данных (datasource), подчиненный источник данных, программно, запрос (query) |
|
|