12.08.2010, 10:29 | #1 |
Участник
|
Конструктор Query
Столкнулся с такой на первый взгляд простой задачей.
Есть форма, у ней есть DataSource ProdRoute. Вот у него в методе init. Идет привязка готового Query из AOT. Там запрос составленый из 2-х таблиц ProdRoute - ProdTable. this.query(new Query(querystr(ProdRouteOprOverview))); Необходимо также в связку добавить таблицу RouteOprTable... связь возможна только: ProdRoute- ProdTable - ProdRoute. - RouteOprTable либо ProdRoute - ProdTable - RouteOprTable Ни в том, ни в другом случае это нормально не работает... Как понимаю в первом случае, когда я на таблицу ProdRoute накладываю Ranges, то на вторую такуюже таблицу оно не накладывается. Как мне это обойти? Может есть возможность наложить на обе одноимённые таблицы условие? Поменять очерёдность DataSource-ов не могу....вообще всё перестаёт работать. Заранее спасибо. Последний раз редактировалось raniel; 12.08.2010 в 11:10. |
|
12.08.2010, 11:21 | #2 |
Мрачный тип
|
Цитата:
X++: datasource = query.datasourceTable(< >) Т.е. обращаетесь и накладываете фильтр только на первый экземпляр. Чтобы наложить Range на второй экземпляр - инициализируйте доп.датасорс с явным указанием номера экземпляра, равным двум, и уже на него накладывайте такой же Range
__________________
Мы летаем, кружимся, нагоняем ужасы ... |
|
|
За это сообщение автора поблагодарили: raniel (1). |
12.08.2010, 12:09 | #3 |
Участник
|
Примерно так выглядит код:
Цитата:
void init()
{ super(); this.query(new Query(querystr(ProdRouteOprOverview2))); criteriaTaskGroupId = this.query().dataSourceTable(tablenum(ProdRoute)).addRange(fieldnum(ProdRoute,TaskGroupId)); criteriaWrkCtrId = this.query().dataSourceTable(tablenum(ProdRoute)).addRange(fieldnum(ProdRoute,WrkCtrId)); criteriaOprId = this.query().dataSourceTable(tablenum(ProdRoute)).addRange(fieldnum(ProdRoute,OprId)); criteriaProdStatus = this.query().dataSourceTable(tablenum(ProdTable)).addRange(fieldnum(ProdTable,ProdStatus)); criteriaOprName = this.query().dataSourceTable(tablenum(ProdTable)).addRange(fieldnum(ProdTable,Name)); criteriaExpired = this.query().dataSourceTable(tablenum(ProdRoute)).addRange(fieldnum(ProdRoute,ToDate)); criteriaRouteOprName = this.query().dataSourceTable(tablenum(RouteOprTable)).addRange(fieldnum(RouteOprTable,Name)); ... Цитата:
void executeQuery()
{ if (ctrlLockTaskGroup.value()) criteriaTaskGroupId.value(queryValue(ctrlTaskGroupId.text())); else criteriaTaskGroupId.value(SysQuery::valueUnlimited()); if (ctrlLockOprId.value()) criteriaOprId.value(queryValue(ctrlOprId.text())); else criteriaOprId.value(SysQuery::valueUnlimited()); ... |
|
12.08.2010, 12:20 | #4 |
Участник
|
Попробуйте в конце метода executeQuery() вставить такой код:
X++: info(this.Query().DataSourceNo(1).toString()); |
|
12.08.2010, 12:41 | #5 |
Участник
|
Цитата:
Цитата:
Info Сообщение (12:41:44) SELECT * FROM ProdRoute ORDER BY ProdRoute.FromDate ASC, ProdRoute.FromTime ASC
Info Сообщение (12:41:44) SELECT * FROM ProdTable WHERE ProdRoute.ProdId = ProdTable.ProdId Info Сообщение (12:41:44) SELECT * FROM RouteOprTable WHERE ProdRoute.OprId = RouteOprTable.OprId |
|
12.08.2010, 12:45 | #6 |
Участник
|
Цитата:
вы же напрочь убиваете весь механизм dynalink. понятно, что сейчас вы вашу форму не вызываете из других. но это не значит, что вы не захотите открыть вашу форму из другого места. А dynalink у вас и не работает. |
|
12.08.2010, 12:50 | #7 |
Участник
|
Это так было.....изначально так было написано до меня....моя задача добавить связь с другой таблицей...чтоб на форме можно было бы фильтровать значения...
|
|
12.08.2010, 12:55 | #8 |
Участник
|
Стоп! Откуда три запроса? executeQuery() какого DataSource вы перекрываете?
Должен быть один текст запроса, полученный по первому (верхнему) DataSource. В тексте запроса должны быть видны все подчинйнные таблицы и связи между ними. Попробуйте вот так: X++: info(this.Query().DataSourceName(this.name()).toString()); |
|
12.08.2010, 13:02 | #9 |
Участник
|
Цитата:
Сообщение от S.Kuskov
Стоп! Откуда три запроса? executeQuery() какого DataSource вы перекрываете?
Должен быть один текст запроса, полученный по первому (верхнему) DataSource. В тексте запроса должны быть видны все подчинйнные таблицы и связи между ними. Попробуйте вот так: X++: info(this.Query().DataSourceName(this.name()).toString()); info(this.Query().DataSourceNo(1).toString()); info(this.Query().DataSourceNo(2).toString()); info(this.Query().DataSourceNo(3).toString()); чтоб всё увидеть. а при info(this.Query().DataSourceName(this.name()).toString()); выходит Ошибка: Ошибка времени выполнения: QueryBuildDataSource Объект не инициализирован. Трассировка стека (C)\Classes\QueryBuildDataSource\toString (C)\Forms\ProdRouteOprOverview\Data Sources\ProdRoute\Methods\init - line 68 |
|
12.08.2010, 13:14 | #10 |
Участник
|
|
|
12.08.2010, 13:26 | #11 |
Участник
|
Цитата:
Сообщение (13:31:07) SELECT * FROM ProdRoute ORDER BY ProdRoute.FromDate ASC, ProdRoute.FromTime ASC WHERE ((NOT (Stopped = 1))) SELECT * FROM ProdTable WHERE ProdRoute.ProdId = ProdTable.ProdId AND ((ProdStatus>=2 AND ProdStatus<=4)) SELECT * FROM RouteOprTable WHERE ProdRoute.OprId = RouteOprTable.OprId |
|
12.08.2010, 13:31 | #12 |
Ищущий знания...
|
Цитата:
Сообщение от raniel
Там тоже так же ругается... а по трём пред идущим info вот что выходит
Сообщение (13:31:07) SELECT * FROM ProdRoute ORDER BY ProdRoute.FromDate ASC, ProdRoute.FromTime ASC WHERE ((NOT (Stopped = 1))) SELECT * FROM ProdTable WHERE ProdRoute.ProdId = ProdTable.ProdId AND ((ProdStatus>=2 AND ProdStatus<=4)) SELECT * FROM RouteOprTable WHERE ProdRoute.OprId = RouteOprTable.OprId
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: raniel (1). |
12.08.2010, 13:34 | #13 |
Ищущий знания...
|
и что то я в коде не нашел строчки, в которой вы прикрепляете таблицу ProdRoute к запросу полученному из ProdRouteOprOverview2.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
12.08.2010, 13:36 | #14 |
Участник
|
|
|
12.08.2010, 13:38 | #15 |
Ищущий знания...
|
Цитата:
Сообщение от raniel
так вот же эта таблица на самом вверху
Вложение 6013
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
12.08.2010, 13:43 | #16 |
Ищущий знания...
|
попробуйте для начала посмотреть что получается из "чистого" АОТовского запроса.
Т.е. закоментируйте добавление ренджы в методе формы init() и добавление value в эти ренджы в методе формы executeQuery(). В методе executeQuery() напишите перед супер строку X++: info(this.Query().DataSourceNo(1).toString());
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: S.Kuskov (1). |
12.08.2010, 13:44 | #17 |
Участник
|
Цитата:
Но меня ещё всё-таки волнует чистота эксперимента. Попробуйте запустить ещё такой тестовый джоб: X++: static void JobTestQueryProdRouteOprOverview2(Args _args) { Query Query = new Query(querystr(ProdRouteOprOverview2)); ; info(Query.dataSourceNo(1).toString()); } |
|
12.08.2010, 13:54 | #18 |
Ищущий знания...
|
ещё вопрос
в АОТовском запросе ProdRouteOprOverview2, у датаСорсов прикрепленных к ProdRoute свойство FetchMode какое?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
12.08.2010, 13:59 | #19 |
Участник
|
Цитата:
Цитата:
Информация:
SELECT * FROM ProdRoute ORDER BY ProdRoute.FromDate ASC, ProdRoute.FromTime ASC Все связи в Query я прописал через AOT Кстати вот убрал свою ветку в запросе и результат стал вот таким: Цитата:
Информация:
SELECT * FROM ProdRoute ORDER BY ProdRoute.FromDate ASC, ProdRoute.FromTime ASC EXISTS JOIN * FROM ProdTable WHERE ProdRoute.ProdId = ProdTable.ProdId |
|
12.08.2010, 14:04 | #20 |
Ищущий знания...
|
вопрос остается открытым
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|