10.07.2007, 17:54 | #1 |
Участник
|
Сново про временные таблицы
X++: public void init() { CustVendGroupTable _custVendTable; CustVendGroupTable _tempCustVendTable ; _tempCustVendTable.setTmp(); while select _custVendTable group by CustVendGroupId { _tempCustVendTable.data(_custVendTable.data()); _tempCustVendTable.doInsert(); } custVendTable_ds.cursor().setTmpData(_tempCustVendTable); custVendTable_ds.executeQuery(); _custVendTable = CustVendTable_ds.cursor(); super(); CustVendTable_ds.query().dataSourceNo(1).clearDynalinks(); _queryBuildRange = this.query().dataSourceNo(1).addRange(fieldnum(CustVendGroupTable, CustVendType)); _queryBuildRange.value(QueryValue(element.setFilter(_custVendTable.CustVendType))); _queryBuildRange = this.query().dataSourceNo(1).addRange(fieldnum(CustVendGroupTable, isGroup)); _queryBuildRange.value(QueryValue(boolean::false)); } Последний раз редактировалось Andrux; 10.07.2007 в 18:11. |
|
10.07.2007, 18:12 | #2 |
Участник
|
Код у вас избыточный.
достаточно чего-то такого: X++: public void init() { CustVendGroupTable _custVendTableData; ; CustVendTable.setTmp(); while select custVendTableData group by CustVendGroupId { CustVendTable.data(custVendTableData.data()); CustVendTable.doInsert(); } super(); } Вы сгруппировали данные по одному полю CustVendGroupId, поэтому это единственное поле, которое будет заполнено. Накладывать фильтры по другим полям - как-то странно. Думаю, что вы просто хотите заполнять таблицу совсем не так, как заполняете. |
|
10.07.2007, 18:15 | #3 |
Участник
|
вообще, мне надо сделать SELECT DISTINCT. После super() устанавливаются фильтры. Вот мне надо, чтобы после фильтров не было одинаковых значений
|
|
10.07.2007, 18:27 | #4 |
Участник
|
Ну, во-первых на временную таблицу фильтры накладывать в init - это как-то странно.
Возьми просто не выбирай лишние данные. То есть, задача твоя в том, чтобы написать обычный while select по табличке этой, который тебе вернет нужные данные, и запихнуть их во временную табличку. все. Сделать SELECT DISTINCT - это не очень подробное описание. Какие поля должны стать уникальными? по ним группировку и делайте. а остальные подтягивайте из базы по любой из записей, удовлетворящих условия на эти поля. |
|
|
За это сообщение автора поблагодарили: Andrux (1). |
10.07.2007, 18:33 | #5 |
Участник
|
вообщем в таблице содержится код группы, название группы, код контрагенты, принадлежность к группе
При лукапе выбираются либо клиенты, либо поставщики с признаком принадлежности к группе. Но код группы может повторяться, а мне при лукапе нужно показывать только разные группы, т.е. код группы должен быть неповторяющимся |
|
10.07.2007, 19:06 | #6 |
Участник
|
Цитата:
public void init(){ CustVendGroupTable _custVendTableData; ; CustVendTable.setTmp(); while select custVendTableData group by CustVendGroupId { CustVendTable.data(custVendTableData.data()); CustVendTable.doInsert(); } super();}
|
|
11.07.2007, 09:26 | #7 |
Участник
|
народ, у меня почему-то данный так и выбираются из основной таблицы, в чем косяк может быть
Последний раз редактировалось Andrux; 11.07.2007 в 09:34. |
|
11.07.2007, 10:06 | #8 |
Участник
|
Показывайте полный код, а еще лучше выложите форму и таблицу.
Что-то неправильно делаете. И опять же - по идее никакой фильтрации не нужно уже... Еще уточню: это лукап форму делаете? какое поле вы хотите выбрать в лукапе? контрагента или группы? |
|
11.07.2007, 10:16 | #9 |
Участник
|
X++: CustVendGroupTable _custVendTable; CustVendGroupTable _tempCustVendTable; ; /* _custVendTable = CustVendTable_ds.cursor(); super(); CustVendTable_ds.query().dataSourceNo(1).clearDynalinks(); _queryBuildRange = this.query().dataSourceNo(1).addRange(fieldnum(CustVendGroupTable, CustVendType)); _queryBuildRange.value(QueryValue(element.setFilter(_custVendTable.CustVendType))); _queryBuildRange = this.query().dataSourceNo(1).addRange(fieldnum(CustVendGroupTable, isGroup)); _queryBuildRange.value(QueryValue(boolean::false));*/ super(); _tempCustVendTable.setTmp(); while select _custVendTable group by CustVendGroupId { //info(_custVendTable.CustVendGroupId); _tempCustVendTable.data(_custVendTable.data()); _tempCustVendTable.doInsert(); } CustVendGroupTable.setTmpData(_tempCustVendTable); //custVendTable_ds.executeQuery(); |
|
11.07.2007, 10:22 | #10 |
MCTS
|
сделайте промежуточный буфер, и дайте ему значение, равное "":
X++: CustVendGroupId buf = "";
; иначе просто пропускаете итерацию: X++: [COLOR=blue][COLOR=blue]while[/COLOR][COLOR=blue]select[/COLOR][COLOR=#000000] _custVendTable order[/COLOR] by[/COLOR] CustVendGroupId { if (custVendTable .CustVendGroupId != buf) { _tempCustVendTable.data(_custVendTable.data()); doInsert(); buf = custVendTable .CustVendGroupId ; } } Последний раз редактировалось Eldar9x; 11.07.2007 в 10:24. |
|
11.07.2007, 10:26 | #11 |
Участник
|
так курсор заполняется правильно, я проверял, не правильно данные отображаются, отображаются данные из старого датасорса
|
|
11.07.2007, 10:28 | #12 |
Участник
|
Вы забыли указать, что источник формы - это "временная таблица". X++: CustVendGroupTable _custVendTable; CustVendGroupTable _tempCustVendTable; ; CustVendGroupTable.setTmp(); _tempCustVendTable.setTmp(); while select _custVendTable group by CustVendGroupId { //info(_custVendTable.CustVendGroupId); _tempCustVendTable.data(_custVendTable.data()); _tempCustVendTable.doInsert(); } CustVendGroupTable.setTmpData(_tempCustVendTable); super(); Цитата:
Сообщение от Eldar9x
сделайте промежуточный буфер, и дайте ему значение, равное "":
X++: CustVendGroupId buf = "";
; иначе просто пропускаете итерацию: X++: while select _custVendTable order by CustVendGroupId { if (custVendTable .CustVendGroupId != buf) { _tempCustVendTable.data(_custVendTable.data()); doInsert(); buf = custVendTable .CustVendGroupId ; } } |
|
11.07.2007, 10:31 | #13 |
Участник
|
кому интересно, это вот так делается
X++: CustVendGroupTable _custVendTable; QueryBuildDataSource qbr1; ; _custVendTable = CustVendTable_ds.cursor(); super(); CustVendTable_ds.query().dataSourceNo(1).clearDynalinks(); qbr1 = CustVendTable_ds.query().dataSourceNo(1); qbr1.orderMode(OrderMode::GroupBy); qbr1.addSortField(fieldNum(CustVendGroupTable,CustVendGroupId)); qbr1.addSortField(fieldNum(CustVendGroupTable,name)); _queryBuildRange = this.query().dataSourceNo(1).addRange(fieldnum(CustVendGroupTable, CustVendType)); _queryBuildRange.value(QueryValue(element.setFilter(_custVendTable.CustVendType))); _queryBuildRange = this.query().dataSourceNo(1).addRange(fieldnum(CustVendGroupTable, isGroup)); _queryBuildRange.value(QueryValue(boolean::false)); |
|
11.07.2007, 10:56 | #14 |
Microsoft Dynamics
|
А зачем вам лукап форма в таком случае? Можно ограничиться обыкновенным лукапом (это если другая логика не навешана на саму форму).
|
|
11.07.2007, 11:27 | #15 |
MCTS
|
ну скажем, если на EDT навешивать
|
|
11.07.2007, 14:08 | #16 |
Участник
|
Может нужно использовать так?
X++: while select CustVendGroupId from _custVendTable order by CustVendGroupId { ... } |
|
11.07.2007, 14:57 | #17 |
Microsoft Dynamics
|
Цитата:
И это все решилось обыкновенной фильтрацией квери датасорса формы. Вопрос в том, нужно ли вообще форму создавать, тоже самое можно сделать в лукапе обыкновенном. |
|
|
Похожие темы | ||||
Тема | Ответов | |||
И снова Query и временные таблицы | 19 | |||
Временные таблицы должны быть вложенными (inner)... | 14 | |||
Временные таблицы в отчетах | 5 | |||
Временные таблицы | 6 | |||
Временные таблицы | 3 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|