AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.07.2007, 17:54   #1  
Andrux is offline
Andrux
Участник
Axapta Retail User
 
263 / 17 (1) ++
Регистрация: 29.05.2007
Сново про временные таблицы
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));
}
такой код, нужно чтобы грид (у которого источник данных custVendTable_ds) показывал данные из _tempCustVendTable

Последний раз редактировалось Andrux; 10.07.2007 в 18:11.
Старый 10.07.2007, 18:12   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Код у вас избыточный.

достаточно чего-то такого:
X++:
public void init()
{
    CustVendGroupTable _custVendTableData;
    ;
    CustVendTable.setTmp();

    while select custVendTableData group by CustVendGroupId
    {
        CustVendTable.data(custVendTableData.data());
        CustVendTable.doInsert();
    }

    super();
}
А вот что происходит дальше, после super(), я уже не пойму.
Вы сгруппировали данные по одному полю CustVendGroupId, поэтому это единственное поле, которое будет заполнено.

Накладывать фильтры по другим полям - как-то странно.
Думаю, что вы просто хотите заполнять таблицу совсем не так, как заполняете.
Старый 10.07.2007, 18:15   #3  
Andrux is offline
Andrux
Участник
Axapta Retail User
 
263 / 17 (1) ++
Регистрация: 29.05.2007
вообще, мне надо сделать SELECT DISTINCT. После super() устанавливаются фильтры. Вот мне надо, чтобы после фильтров не было одинаковых значений
Старый 10.07.2007, 18:27   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Ну, во-первых на временную таблицу фильтры накладывать в init - это как-то странно.
Возьми просто не выбирай лишние данные.

То есть, задача твоя в том, чтобы написать обычный
while select по табличке этой, который тебе вернет нужные данные, и запихнуть их во временную табличку. все.

Сделать SELECT DISTINCT - это не очень подробное описание.
Какие поля должны стать уникальными? по ним группировку и делайте.
а остальные подтягивайте из базы по любой из записей, удовлетворящих условия на эти поля.
За это сообщение автора поблагодарили: Andrux (1).
Старый 10.07.2007, 18:33   #5  
Andrux is offline
Andrux
Участник
Axapta Retail User
 
263 / 17 (1) ++
Регистрация: 29.05.2007
вообщем в таблице содержится код группы, название группы, код контрагенты, принадлежность к группе
При лукапе выбираются либо клиенты, либо поставщики с признаком принадлежности к группе. Но код группы может повторяться, а мне при лукапе нужно показывать только разные группы, т.е. код группы должен быть неповторяющимся
Старый 10.07.2007, 19:06   #6  
Andrux is offline
Andrux
Участник
Axapta Retail User
 
263 / 17 (1) ++
Регистрация: 29.05.2007
Цитата:
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 is offline
Andrux
Участник
Axapta Retail User
 
263 / 17 (1) ++
Регистрация: 29.05.2007
народ, у меня почему-то данный так и выбираются из основной таблицы, в чем косяк может быть

Последний раз редактировалось Andrux; 11.07.2007 в 09:34.
Старый 11.07.2007, 10:06   #8  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Показывайте полный код, а еще лучше выложите форму и таблицу.
Что-то неправильно делаете.
И опять же - по идее никакой фильтрации не нужно уже...

Еще уточню:
это лукап форму делаете?
какое поле вы хотите выбрать в лукапе? контрагента или группы?
Старый 11.07.2007, 10:16   #9  
Andrux is offline
Andrux
Участник
Axapta Retail User
 
263 / 17 (1) ++
Регистрация: 29.05.2007
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  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
сделайте промежуточный буфер, и дайте ему значение, равное "":
X++:
CustVendGroupId buf = "";
;
потом бежите по таблице сортировав по Вашему полю, и если выбранное значение не совпадает с буфером, то doInsert();
иначе просто пропускаете итерацию:
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  
Andrux is offline
Andrux
Участник
Axapta Retail User
 
263 / 17 (1) ++
Регистрация: 29.05.2007
так курсор заполняется правильно, я проверял, не правильно данные отображаются, отображаются данные из старого датасорса
Старый 11.07.2007, 10:28   #12  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA

Вы забыли указать, что источник формы - это "временная таблица".

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 = "";
;
потом бежите по таблице сортировав по Вашему полю, и если выбранное значение не совпадает с буфером, то doInsert();
иначе просто пропускаете итерацию:
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  
Andrux is offline
Andrux
Участник
Axapta Retail User
 
263 / 17 (1) ++
Регистрация: 29.05.2007
кому интересно, это вот так делается
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  
Мариночка is offline
Мариночка
Microsoft Dynamics
Аватар для Мариночка
Сотрудники Microsoft Dynamics
 
75 / 56 (2) ++++
Регистрация: 31.01.2005
Адрес: Киев
А зачем вам лукап форма в таком случае? Можно ограничиться обыкновенным лукапом (это если другая логика не навешана на саму форму).
Старый 11.07.2007, 11:27   #15  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
ну скажем, если на EDT навешивать
Старый 11.07.2007, 14:08   #16  
johny77 is offline
johny77
Участник
 
31 / 27 (1) +++
Регистрация: 04.07.2006
Может нужно использовать так?
X++:
while select CustVendGroupId from _custVendTable
   order by CustVendGroupId
{
...
}
Старый 11.07.2007, 14:57   #17  
Мариночка is offline
Мариночка
Microsoft Dynamics
Аватар для Мариночка
Сотрудники Microsoft Dynamics
 
75 / 56 (2) ++++
Регистрация: 31.01.2005
Адрес: Киев
Цитата:
Сообщение от johny77 Посмотреть сообщение
Может нужно использовать так?
X++:
while select CustVendGroupId from _custVendTable
   order by CustVendGroupId
{
...
}
А как же группировка по групИД?
И это все решилось обыкновенной фильтрацией квери датасорса формы.
Вопрос в том, нужно ли вообще форму создавать, тоже самое можно сделать в лукапе обыкновенном.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
И снова Query и временные таблицы Def DAX: Программирование 19 08.12.2006 15:46
Временные таблицы должны быть вложенными (inner)... Deep Dreamer DAX: Программирование 14 08.09.2005 16:23
Временные таблицы в отчетах konfet DAX: Программирование 5 19.01.2005 11:32
Временные таблицы vasiliy DAX: Программирование 6 09.11.2004 11:04
Временные таблицы Diamond DAX: Программирование 3 30.12.2003 09:33

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:34.