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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.02.2007, 17:39   #1  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
tmpTable и Grid
разъясните бедолаге, как можно отобразить временную таблицу на грид. Отрабатывает класс импорта файла в АХ. И данные эти нужно отобразить на гриде.Понимаю, что нужно инициализировать и в qwery прописать.Пыталась сделать следующее...прописать в init(){..... qbds = this.query().dataSourceTable(TableNum(TmpTable)); } и public ... TmpTable_DS.query().dataSourceTable(TableNum(ERG_TmpTable)); А что ещё нужно - ума ни приложу (
можете посоветуете что-н. из стандартного, чтобы хоть посмотреть, как делается...
Старый 09.02.2007, 17:42   #2  
DenNik is offline
DenNik
Участник
 
62 / 9 (1) +
Регистрация: 24.05.2005
Я так понимаю табличка уже заполнена?
Тогда tmpTable.setTmpData(tmpTable);
Старый 09.02.2007, 17:44   #3  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
пробывала не помогло (
Старый 09.02.2007, 17:47   #4  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Воспользуйтесь методом SetTmpData.

(Подразумеваю что временная таблица заполнена в классе и передана на форму, далее с помощью метода SetTmpData временная таблица датасоурса сопоставляется с переданной таблицей)

upd: Уже сказали
Старый 09.02.2007, 17:49   #5  
Gad is offline
Gad
Участник
 
136 / 18 (1) ++
Регистрация: 21.05.2003
Адрес: Москва
Цитата:
Сообщение от DenNik Посмотреть сообщение
Тогда tmpTable.setTmpData(tmpTable);
все правильно, нужно только в качестве параметра setTmpData() активный (заполненный) курсор передать
Старый 09.02.2007, 17:54   #6  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Цитата:
Сообщение от fialka Посмотреть сообщение
qbds = this.query().dataSourceTable(TableNum(TmpTable)); }
Поправьте, если не прав, но формировать query для временной таблицы бессмысленно, т.к. это объекты создающиеся только приложением, а не базой данных.
Старый 09.02.2007, 17:55   #7  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
Цитата:
Сообщение от DreamCreator Посмотреть сообщение
Поправьте, если не прав, но формировать query для временной таблицы бессмысленно, т.к. это объекты создающиеся только приложением, а не базой данных.
да, это действительно , так .. осталось с тех времён , пока табл. была неВременная.. ) забыла убрать...
Старый 09.02.2007, 17:57   #8  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
Цитата:
Сообщение от Gad Посмотреть сообщение
все правильно, нужно только в качестве параметра setTmpData() активный (заполненный) курсор передать
Сделала на ините формыpublic void init(){ super(); TmpTable_ds.cursor().setTmpData(ERG_TmpTable);}Но ничего не изменилось...
Старый 09.02.2007, 18:04   #9  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Цитата:
Сообщение от DreamCreator Посмотреть сообщение
Поправьте, если не прав, но формировать query для временной таблицы бессмысленно, т.к. это объекты создающиеся только приложением, а не базой данных.
http://forum.mazzy.ru/index.php?showtopic=2898&hl=
За это сообщение автора поблагодарили: DreamCreator (1).
Старый 09.02.2007, 18:04   #10  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
fialka, пользуйтесь пожалуйста тегом [xpp] для выделения кода

X++:
void init()
{ 
    super(); 
    TmpTable_ds.setTmpData(ERG_TmpTable);
}
при этом ERG_tmpTable должна быть уже заполнена.
(то есть если напишите select count(recId) from ERG_tmpTable, то вернет в поле RecId не 0
Старый 10.02.2007, 10:22   #11  
DenNik is offline
DenNik
Участник
 
62 / 9 (1) +
Регистрация: 24.05.2005
Цитата:
Сообщение от fialka Посмотреть сообщение
...
Код в студию... А то так долго можно гадать
Старый 10.02.2007, 14:35   #12  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
есть такая идея. Если датасорс создан по временной таблице, то нужно на этой самой таблице создать метод, который ее заполнит, то есть что то вроде этого:
X++:
void fill()
{
    Table_tmptst table_tmptst;
    ;
    while select table_tmptst
    {
        this.Field1 = table_tmptst.Field1;
        this.Field2 = table_tmptst.Field2;
        this.Field3 = table_tmptst.Field3;
        this.insert();
    }
}
то есть заполняем данный экземпляр какими то данными (в этом случае - из таблицы table_tmptst).
Затем в init() формы просто вызываете данный метод после super(). И тогда, если источником данных Грида служит датасорс формы по временной таблице, все отобразится. Что интересно, не нужно никаких setTmpData(), почему, хотелось бы узнать...
Старый 10.02.2007, 15:14   #13  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Я не уверен, что правильно понял суть последней идеи, но если речь идет о том, что при открытии формы в буфер одного из источников данных формы будут вставляться записи, рассчитанные на сервере, то это плохая идея.

Если временная таблица содержит большое количество записей, то на небыстром канале форма будет открываться с большой задержкой, что будет приводить в гнев пользователей.

Обычно при открытии формы с сервера забирается только n-е количество записей. Остальные подтягиваются по мере необходимости. Например, если вы случайно открыли форму... пусть будет проводок по номенклатуре... ну ошиблись... ткнули не туда... А теперь представьте, что вы не туда ткнули, и ждете открытия формы столько, сколько строится отчет Складские проводки из модуля УЗ (желательно проверять на хорошо напичканной данными базе). Либо можете взять для тестирования отчет по проводкам по клиентам, если у вас там много данных.

setTmpData() позволяет... ну если простым человеческим языком, то сказать, что источник данных — это "вон та таблица" (которая рассчитана на сервере). Если данные из таблицы, которая рассчитана на сервере, понадобятся на клиенте, то они будут передаваться по мере необходимости (см. руководство разработчика, раздел "Temporary tables"). При открытии формы Аксапта считает с сервера только часть данных временной таблицы. Т.о. от времени расчета всей таблицы на сервере вы никуда не убежите, а вот от загрузки канала лишним трафиком — вполне.

Я понимаю, что большинство работают в предах 100 MBt сетей, и с трудом себе могут представить, как оно работается в Аксапте на тонких каналах, но кто знает, что (хорошего) может случиться с вашей компанией, и какими словами о вас потом будут вспоминать пользователи и ваши коллеги, которые будут разбираться с вашим кодом?
__________________
С уважением,
glibs®
Старый 10.02.2007, 19:12   #14  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
...ну тогда применительно к предыдущему решению - в свойствах грида нужно указать датасорс. Уж не знаю почему, но без этого не работает... Fialka, а код выглядит так?:
X++:
public void init()
{
    super();
    tmpTable_tmptst.settmpdata(<>::<,  ..   >());

}

Последний раз редактировалось Eldar9x; 10.02.2007 в 19:25.
Старый 12.02.2007, 12:59   #15  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
...ну тогда применительно к предыдущему решению - в свойствах грида нужно указать датасорс. Уж не знаю почему, но без этого не работает... Fialka, а код выглядит так?:
X++:
</p><p>public void init()</p><p>{</p><p> super();</p><p> tmpTable_tmptst.settmpdata(<класс>::<метод, заполняющий вр.табл. и возвращающий ее>());</p><p>&nbsp;</p><p>}</p><p>

в свойствах грида сразу указала темповскую таблицу. а инит так и выглядит, только всё равно. Класс заполняет таблицу, потом метод на самой таблице заполняет её же. А после обработки открывается форма - пустая... что ещё упустила , не знаю
Старый 12.02.2007, 13:27   #16  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Выложите проект. Хотябы формы. Класс точно возвращает данные?
__________________
С уважением,
glibs®
Старый 12.02.2007, 13:39   #17  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Еще есть такой маленький ньюанс. Во всяком случае, я по-моему натыкался неоднократно.

вместо
X++:
    tmpTableDataSource.setTmpData(myEngine.tmptableData());
нужно так
X++:
    tmptableData tmpTableDataTmp;
    ;
    tmpTableDataTmp = myEngine.tmptableData();
    tmpTableDataSource.setTmpData(tmpTableDataTmp);
    //Ну и не забудьте после этого сделать 
    tmpTableDataSource_ds.executeQuery(); ( research())
Старый 12.02.2007, 15:58   #18  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
Цитата:
Сообщение от glibs Посмотреть сообщение
Выложите проект. Хотябы формы. Класс точно возвращает данные?
Вот проект. В класе таблица заполняется в методе createLine. А форма пустая
Вложения
Тип файла: zip test.zip (8.5 Кб, 77 просмотров)
Старый 12.02.2007, 16:18   #19  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Еще есть такой маленький ньюанс. Во всяком случае, я по-моему натыкался неоднократно.

вместо

X++:
</p><p> tmpTableDataSource.setTmpData(myEngine.tmptableData());</p><p>



нужно так

X++:
</p><p> tmptableData tmpTableDataTmp;</p><p> ;</p><p> tmpTableDataTmp = myEngine.tmptableData();</p><p> tmpTableDataSource.setTmpData(tmpTableDataTmp);</p><p> //Ну и не забудьте после этого сделать </p><p> tmpTableDataSource_ds.executeQuery(); (или research())</p><p>

Это в ините на DS или на самой форме?
И что у вас в данном случае myEngine?
Старый 12.02.2007, 16:26   #20  
Jony is offline
Jony
Участник
 
99 / 22 (1) +++
Регистрация: 25.06.2003
Адрес: г. Барнаул
по проекту
1- Временная таблица должна существовать (ссылка на нее) - это определяет ее врямя жизни так сказать
2- в классе объявлено 2 переменных типа врем. таб., - зачем?
3 - в форму не передается никак указатель на врем табл из класса

Надо:
Объявить в классе врем таблицу , используя объявленную в classDeclaration переменную- заполнить ее. Затем с помощю метода класса, передать ее (tmpTable) в форму, и там делать setTmpData.

У вас получается в объявлении одно, заполняется другое и в итоге ничего не передается в форму. Вобщем вот.

ПС: и вообще форма про класс то не знает ничего.

Последний раз редактировалось Jony; 12.02.2007 в 16:29.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptapedia: Filter-by-Grid Blog bot DAX Blogs 2 30.05.2012 13:39
Dynamics AX: DAX 4.0 Filter by Grid [Update] Blog bot DAX Blogs 0 27.04.2007 17:10
Advanced programming: Grid data and view manipulations batiskaf_new DAX: Программирование 15 21.06.2006 11:44
Сохранение настроек GRID (ширина и порядок колонок) liza DAX: Программирование 1 25.07.2003 22:20
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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