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