|
|
#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 | |||
|