|
|
#1 |
|
Участник
|
setTmp() и data()
Доброго!
Если взять и через setTmp сделать две временные таблицы из обычной. Потом одной из них присвоить другую через data(), то приемник перестает быть временной и становиться обычной таблицей. Почему так? |
|
|
|
|
#2 |
|
Участник
|
Не воспроизвелось.
Какая версия? У вас в процессе не перемещаются курсоры с клиента на сервер или обратно? Ваши временные курсоры - это не датасурсы на форме? Последний раз редактировалось S.Kuskov; 07.04.2016 в 07:52. |
|
|
|
|
#3 |
|
Участник
|
Dax 4.
Делаю это в job'e. Для проверки использую isTmp() Вначале он выдает true, после присвоения false. |
|
|
|
|
#4 |
|
Участник
|
AX2009:
X++: TEST_Table TEST_Table1;
TEST_Table TEST_Table2;
;
info(strfmt("TEST_Table1.isTmp() = %1", TEST_Table1.isTmp()));
info(strfmt("TEST_Table2.isTmp() = %1", TEST_Table2.isTmp()));
TEST_Table1.setTmp();
TEST_Table2.setTmp();
info(strfmt("TEST_Table1.isTmp() = %1", TEST_Table1.isTmp()));
info(strfmt("TEST_Table2.isTmp() = %1", TEST_Table2.isTmp()));
TEST_Table2.data(TEST_Table1);
info(strfmt("TEST_Table1.isTmp() = %1", TEST_Table1.isTmp()));
info(strfmt("TEST_Table2.isTmp() = %1", TEST_Table2.isTmp()));Цитата:
TEST_Table1.isTmp() = false
TEST_Table2.isTmp() = false TEST_Table1.isTmp() = true TEST_Table2.isTmp() = true TEST_Table1.isTmp() = true TEST_Table2.isTmp() = true |
|
|
|
|
#5 |
|
Участник
|
X++: TEST_Table TEST_Table1;
TEST_Table TEST_Table2;
;
TEST_Table2.Field1 = 'testValue'; // может быть поэтому?
TEST_Table2.insert();
info(strfmt("TEST_Table1.isTmp() = %1", TEST_Table1.isTmp()));
info(strfmt("TEST_Table2.isTmp() = %1", TEST_Table2.isTmp()));
TEST_Table1.setTmp();
TEST_Table2.setTmp();
info(strfmt("TEST_Table1.isTmp() = %1", TEST_Table1.isTmp()));
info(strfmt("TEST_Table2.isTmp() = %1", TEST_Table2.isTmp()));
TEST_Table2.data(TEST_Table1);
info(strfmt("TEST_Table1.isTmp() = %1", TEST_Table1.isTmp()));
info(strfmt("TEST_Table2.isTmp() = %1", TEST_Table2.isTmp()));X++: TEST_Table1.isTmp() = false TEST_Table2.isTmp() = false TEST_Table1.isTmp() = true TEST_Table2.isTmp() = false TEST_Table1.isTmp() = true TEST_Table2.isTmp() = false
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. Последний раз редактировалось Pustik; 07.04.2016 в 13:54. |
|
|
|
| За это сообщение автора поблагодарили: S.Kuskov (2). | |
|
|
#6 |
|
Участник
|
если так, то обнуление курсора перед setTmp должно помочь
X++: TEST_Table2 = NULL;
TEST_Table2.setTmp(); |
|
|
|
|
#7 |
|
Участник
|
Dax4, Dax2012
X++: CustTable tmpCust, tmpCust2;
;
tmpCust.setTmp();
tmpCust2.setTmp();
info(strFmt("tmpCust: %1", tmpCust.isTmp()));
info(strFmt("tmpCust2: %1", tmpCust2.isTmp()));
tmpCust2 = tmpCust.data();
info(strFmt("tmpCust: %1", tmpCust.isTmp()));
info(strFmt("tmpCust2: %1", tmpCust2.isTmp()));X++: tmpCust: true
tmpCust2: true
tmpCust: true
tmpCust2: falseПоследний раз редактировалось Manner; 08.04.2016 в 23:31. |
|
|
|
| За это сообщение автора поблагодарили: S.Kuskov (2). | |
|
|
#8 |
|
Участник
|
|
|
|
|
|
#9 |
|
Участник
|
Вроде всё логично: когда переменная tmpCust2 оказывается в левой части присваивания, все предыдущие манипуляции с ней, включая вызов setTmp(), перестают иметь значение, ведь теперь табличная переменная ссылается на совершенно новый объект в памяти. Получается, вопрос сводится к тому, почему Common.data() постоянных таблиц не сохраняет информацию о предшествоваших вызовах setTmp(), но это, видимо, - by design, на то он и data(), чтобы только данные возвращать, без дополнительных свойств, ссылок и проч.
|
|
|
|
|
#10 |
|
Участник
|
|
|
|
|
|
|