![]() |
#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 |
Участник
|
|
|
|
|