09.02.2007, 17:39 | #1 |
Участник
|
tmpTable и Grid
разъясните бедолаге, как можно отобразить временную таблицу на грид. Отрабатывает класс импорта файла в АХ. И данные эти нужно отобразить на гриде.Понимаю, что нужно инициализировать и в qwery прописать.Пыталась сделать следующее...прописать в init(){..... qbds = this.query().dataSourceTable(TableNum(TmpTable)); } и public ... TmpTable_DS.query().dataSourceTable(TableNum(ERG_TmpTable)); А что ещё нужно - ума ни приложу (
можете посоветуете что-н. из стандартного, чтобы хоть посмотреть, как делается... |
|
09.02.2007, 17:42 | #2 |
Участник
|
Я так понимаю табличка уже заполнена?
Тогда tmpTable.setTmpData(tmpTable); |
|
09.02.2007, 17:44 | #3 |
Участник
|
пробывала не помогло (
|
|
09.02.2007, 17:47 | #4 |
Moderator
|
Воспользуйтесь методом SetTmpData.
(Подразумеваю что временная таблица заполнена в классе и передана на форму, далее с помощью метода SetTmpData временная таблица датасоурса сопоставляется с переданной таблицей) upd: Уже сказали |
|
09.02.2007, 17:49 | #5 |
Участник
|
|
|
09.02.2007, 17:54 | #6 |
Moderator
|
|
|
09.02.2007, 17:55 | #7 |
Участник
|
|
|
09.02.2007, 17:57 | #8 |
Участник
|
|
|
09.02.2007, 18:04 | #9 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: DreamCreator (1). |
09.02.2007, 18:04 | #10 |
Участник
|
fialka, пользуйтесь пожалуйста тегом [xpp] для выделения кода
X++: void init() { super(); TmpTable_ds.setTmpData(ERG_TmpTable); } (то есть если напишите select count(recId) from ERG_tmpTable, то вернет в поле RecId не 0 |
|
10.02.2007, 10:22 | #11 |
Участник
|
|
|
10.02.2007, 14:35 | #12 |
MCTS
|
есть такая идея. Если датасорс создан по временной таблице, то нужно на этой самой таблице создать метод, который ее заполнит, то есть что то вроде этого:
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(); } } Затем в init() формы просто вызываете данный метод после super(). И тогда, если источником данных Грида служит датасорс формы по временной таблице, все отобразится. Что интересно, не нужно никаких setTmpData(), почему, хотелось бы узнать... |
|
10.02.2007, 15:14 | #13 |
Member
|
Я не уверен, что правильно понял суть последней идеи, но если речь идет о том, что при открытии формы в буфер одного из источников данных формы будут вставляться записи, рассчитанные на сервере, то это плохая идея.
Если временная таблица содержит большое количество записей, то на небыстром канале форма будет открываться с большой задержкой, что будет приводить в гнев пользователей. Обычно при открытии формы с сервера забирается только n-е количество записей. Остальные подтягиваются по мере необходимости. Например, если вы случайно открыли форму... пусть будет проводок по номенклатуре... ну ошиблись... ткнули не туда... А теперь представьте, что вы не туда ткнули, и ждете открытия формы столько, сколько строится отчет Складские проводки из модуля УЗ (желательно проверять на хорошо напичканной данными базе). Либо можете взять для тестирования отчет по проводкам по клиентам, если у вас там много данных. setTmpData() позволяет... ну если простым человеческим языком, то сказать, что источник данных — это "вон та таблица" (которая рассчитана на сервере). Если данные из таблицы, которая рассчитана на сервере, понадобятся на клиенте, то они будут передаваться по мере необходимости (см. руководство разработчика, раздел "Temporary tables"). При открытии формы Аксапта считает с сервера только часть данных временной таблицы. Т.о. от времени расчета всей таблицы на сервере вы никуда не убежите, а вот от загрузки канала лишним трафиком — вполне. Я понимаю, что большинство работают в предах 100 MBt сетей, и с трудом себе могут представить, как оно работается в Аксапте на тонких каналах, но кто знает, что (хорошего) может случиться с вашей компанией, и какими словами о вас потом будут вспоминать пользователи и ваши коллеги, которые будут разбираться с вашим кодом?
__________________
С уважением, glibs® |
|
10.02.2007, 19:12 | #14 |
MCTS
|
...ну тогда применительно к предыдущему решению - в свойствах грида нужно указать датасорс. Уж не знаю почему, но без этого не работает... Fialka, а код выглядит так?:
X++: public void init() { super(); tmpTable_tmptst.settmpdata(<>::<, .. >()); } Последний раз редактировалось Eldar9x; 10.02.2007 в 19:25. |
|
12.02.2007, 12:59 | #15 |
Участник
|
Цитата:
Сообщение от Eldar9x
...ну тогда применительно к предыдущему решению - в свойствах грида нужно указать датасорс. Уж не знаю почему, но без этого не работает... Fialka, а код выглядит так?:
X++: </p><p>public void init()</p><p>{</p><p> super();</p><p> tmpTable_tmptst.settmpdata(<класс>::<метод, заполняющий вр.табл. и возвращающий ее>());</p><p> </p><p>}</p><p> |
|
12.02.2007, 13:27 | #16 |
Member
|
Выложите проект. Хотябы формы. Класс точно возвращает данные?
__________________
С уважением, glibs® |
|
12.02.2007, 13:39 | #17 |
Участник
|
Еще есть такой маленький ньюанс. Во всяком случае, я по-моему натыкался неоднократно.
вместо X++: tmpTableDataSource.setTmpData(myEngine.tmptableData()); X++: tmptableData tmpTableDataTmp;
;
tmpTableDataTmp = myEngine.tmptableData();
tmpTableDataSource.setTmpData(tmpTableDataTmp);
//Ну и не забудьте после этого сделать
tmpTableDataSource_ds.executeQuery(); ( research()) |
|
12.02.2007, 15:58 | #18 |
Участник
|
Вот проект. В класе таблица заполняется в методе createLine. А форма пустая
|
|
12.02.2007, 16:18 | #19 |
Участник
|
Цитата:
Сообщение от 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> И что у вас в данном случае myEngine? |
|
12.02.2007, 16:26 | #20 |
Участник
|
по проекту
1- Временная таблица должна существовать (ссылка на нее) - это определяет ее врямя жизни так сказать 2- в классе объявлено 2 переменных типа врем. таб., - зачем? 3 - в форму не передается никак указатель на врем табл из класса Надо: Объявить в классе врем таблицу , используя объявленную в classDeclaration переменную- заполнить ее. Затем с помощю метода класса, передать ее (tmpTable) в форму, и там делать setTmpData. У вас получается в объявлении одно, заполняется другое и в итоге ничего не передается в форму. Вобщем вот. ПС: и вообще форма про класс то не знает ничего. Последний раз редактировалось Jony; 12.02.2007 в 16:29. |
|