А о какой версии Аксаты идет речь?
Помнится, при попытке передать серверную временную таблицу на клиентский курсор с помощью вызова setTmpData() в трешке, валилась клиентская сессия.
Вообще, setTmpData() ничего не копирует, а устанавливает указатель на тотже временный файл, что и у передаваемого аргумента. При этом табличная переменная, вызывающая метод, так же оказывается на той стороне, что и аргумент.
При этом есть большой ньюанс.
Если табличная переменная находится на противоположной стороне от агргумента, в табличной переменной аргумента не было вставлено данных и в момент вызова функции счетчик ссылок аргумента равен 1, то вызывающая табличная перенная не поменяет своего положения, но файл временной таблицы будет пересоздан.
X++:
server class MyTable MyClass // Экземпляр класса будет создан на сервере
{
MyTable myTable;
}
public MyTable MyClass.getMyTableTmp()
{
;
myTable.setTmp(); //табличная переменная создана на сервере
//Здесь не важно заполнение. Клиентский курсор всегда переезжает на сервер
return myTable;
}
static server MyTable MyClass::getMyTableTmpStatic()
{
MyTable myTable;
;
myTable.setTmp(); //табличная переменная создана на сервере
//Не заполняем myTable, если будет вставка, то клиентский курсор переедет на сервер
return myTable;
}
static client void processMyTable()
{
MyTable myTable;
MyClass myClass = new MyClass();
;
myTable.setTmp(); //Таблиная переменная создана на клиенте
myTable.setTmpData(MyClass::getMyTableTmpStatic()); //табличная переменная указывает на клиентский временный файл
myTable = null;
myTable.setTmp(); //Таблиная переменная создана на клиенте
myTable.setTmpData(myClass.getMyTableTmp()); // табличная переменная будет указывать на серверный временный файл, копирования на клиент не будет
}
Последнее утверждение верно для DAX2009RU7 и выше.
Для более ранних версий, скорее всего, так же верно, но я не проверял
Замечу еще, что setTmpData() не сбрасывае и не устанавливает данные в самой табличной переменной. Т.е. если до вызова функции установить значения каких-либо полей, то они останутся уставновленными и после вызова функции. Но в файле временной таблицы этих данных не окажется (если не были вставлены в передаваемом курсоре, естественно) - select их не вернет