![]() |
#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. |
|
![]() |
#2 |
Участник
|
Код у вас избыточный.
достаточно чего-то такого: X++: public void init() { CustVendGroupTable _custVendTableData; ; CustVendTable.setTmp(); while select custVendTableData group by CustVendGroupId { CustVendTable.data(custVendTableData.data()); CustVendTable.doInsert(); } super(); } Вы сгруппировали данные по одному полю CustVendGroupId, поэтому это единственное поле, которое будет заполнено. Накладывать фильтры по другим полям - как-то странно. ![]() Думаю, что вы просто хотите заполнять таблицу совсем не так, как заполняете. |
|
![]() |
#3 |
Участник
|
вообще, мне надо сделать SELECT DISTINCT. После super() устанавливаются фильтры. Вот мне надо, чтобы после фильтров не было одинаковых значений
|
|
![]() |
#4 |
Участник
|
Ну, во-первых на временную таблицу фильтры накладывать в init - это как-то странно.
Возьми просто не выбирай лишние данные. То есть, задача твоя в том, чтобы написать обычный while select по табличке этой, который тебе вернет нужные данные, и запихнуть их во временную табличку. все. Сделать SELECT DISTINCT - это не очень подробное описание. Какие поля должны стать уникальными? по ним группировку и делайте. а остальные подтягивайте из базы по любой из записей, удовлетворящих условия на эти поля. |
|
|
За это сообщение автора поблагодарили: Andrux (1). |
![]() |
#5 |
Участник
|
вообщем в таблице содержится код группы, название группы, код контрагенты, принадлежность к группе
При лукапе выбираются либо клиенты, либо поставщики с признаком принадлежности к группе. Но код группы может повторяться, а мне при лукапе нужно показывать только разные группы, т.е. код группы должен быть неповторяющимся |
|
![]() |
#6 |
Участник
|
Цитата:
public void init(){ CustVendGroupTable _custVendTableData; ; CustVendTable.setTmp(); while select custVendTableData group by CustVendGroupId { CustVendTable.data(custVendTableData.data()); CustVendTable.doInsert(); } super();}
![]() |
|
![]() |
#7 |
Участник
|
народ, у меня почему-то данный так и выбираются из основной таблицы, в чем косяк может быть
Последний раз редактировалось Andrux; 11.07.2007 в 09:34. |
|
![]() |
#8 |
Участник
|
Показывайте полный код, а еще лучше выложите форму и таблицу.
Что-то неправильно делаете. И опять же - по идее никакой фильтрации не нужно уже... Еще уточню: это лукап форму делаете? какое поле вы хотите выбрать в лукапе? контрагента или группы? |
|
![]() |
#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(); |
|
![]() |
#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 |
Участник
|
так курсор заполняется правильно, я проверял, не правильно данные отображаются, отображаются данные из старого датасорса
|
|
![]() |
#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 ; } } |
|
![]() |
#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)); |
|
![]() |
#14 |
Microsoft Dynamics
|
А зачем вам лукап форма в таком случае? Можно ограничиться обыкновенным лукапом (это если другая логика не навешана на саму форму).
|
|
![]() |
#15 |
MCTS
|
ну скажем, если на EDT навешивать
|
|
![]() |
#16 |
Участник
|
Может нужно использовать так?
X++: while select CustVendGroupId from _custVendTable order by CustVendGroupId { ... } |
|
![]() |
#17 |
Microsoft Dynamics
|
Цитата:
И это все решилось обыкновенной фильтрацией квери датасорса формы. Вопрос в том, нужно ли вообще форму создавать, тоже самое можно сделать в лукапе обыкновенном. |
|
|
![]() |
||||
Тема | Ответов | |||
И снова Query и временные таблицы | 19 | |||
Временные таблицы должны быть вложенными (inner)... | 14 | |||
Временные таблицы в отчетах | 5 | |||
Временные таблицы | 6 | |||
Временные таблицы | 3 |
|