02.03.2013, 18:22 | #1 |
Участник
|
Отмена использования временной таблицы в FormDatasource
Доброго времени суток!
Можно ли при использовании временной таблицы в источнике данных формы переключаться на использование нормальной таблицы? Вот пример кода (к сожалению не работающего как надо) X++: public void executeQuery() { InventTable inventTableTmp; InventTable inventTableData; ; if (! InventTable_DS.cursor().isTmp()) { // Используем временную таблицу InventTable_DS.cursor().setTmp(); inventTableTmp.setTmp(); select firstonly inventTableData; inventTableTmp.data(inventTableData); inventTableTmp.insert(); InventTable_DS.cursor().setTmpData(inventTableTmp); } else { // Пытаемся использовать таблицу из БД (не работает) InventTable_DS.setRecord(inventTableData); } super(); } Практическая задача состоит в использовании временной таблицы для построения выборки данных из разных компаний. Но в то же время пользователь может сбросить выборку с помощью галочки на форме. Использование временной таблицы в таком случае жутко замедляет процесс выборки, т.к. приходится загонять во временную таблицу все стопятсот тыщ записей, хранящихся в БД. PS: Надеюсь понятно описал проблему |
|
02.03.2013, 18:58 | #2 |
Участник
|
Отвечу не по существу вопроса, но по существу проблемы.
Я так понял что для отображения всех строк вы хотите связывать датасурс с постоянной таблицей, а для отображения сокращённого перечня строк со временной? Я правильно вас понял? Я бы советовал вам всегда использовать постоянную таблицу, а для реализации фильтра присоединять вспомогательную таблицу через ExistsJoin. Выборка произвольных записей одним запросом связанные данные из разных компаний Последний раз редактировалось S.Kuskov; 02.03.2013 в 19:26. |
|
|
За это сообщение автора поблагодарили: A_BAS (1). |
02.03.2013, 19:52 | #3 |
Участник
|
Спасибо за ответ. Хорошая идея.
Но использовать это буду только если другого выхода не будет. Поскольку очень не хочется переписывать код предшественников. |
|
02.03.2013, 20:11 | #4 |
Участник
|
Хоть это вроде бы и тоже самое, но на всякий случай попробуйте
X++: InventTable_ds.QueryRun().setRecord(inventTableData); Ещё вопрос. А вы делаете executeQuery() после подмены или ещё как-нибудь перевыбираете данные? |
|
02.03.2013, 21:11 | #5 |
Участник
|
Неа. Не работает. Даже если подставить другую таблицу в датасорс, курсор все равно остается временным.
Цитата:
Ещё вопрос. А вы делаете executeQuery() после подмены или ещё как-нибудь перевыбираете данные?
|
|