|
![]() |
#1 |
Ищущий знания...
|
Цитата:
Сообщение от S.Kuskov
![]() Но можно попытаться явно присвоить RecId. В моём первом примере курсор InventTable2 не был проинициалицирован, но reread() сработал, если же курсор стереть явно, при помощи clear, то reread перестаёт работать (второй пример). В чём принципиальная разница между непроинициализированным курсором и курсором после clear()?
про clear() я думаю все понятно, и он делает то что я написал выше. скорее встает вопрос, а как же работает метод reread() ??? получается ему для выбора кроме RecId нужно ещё что то, что вычищается после использования метода clear().
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: samolalex (1). |
![]() |
#2 |
Участник
|
тоже так думаю
__________________
С уважением, Александр. |
|
![]() |
#3 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: lev (2), samolalex (1). |
![]() |
#4 |
Ищущий знания...
|
Цитата:
![]()
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#5 |
Administrator
|
Цитата:
Попробуйте выполнить такой код. В нем reread честно отработает (вспоминаем, что в БД индекс состоит из двух полей - RecID и dataareaid, т.о. выбрать запись просто по RecId система не может - ей нужен еще dataareaid): X++: static void Job1(Args _args) { InventTable inventTable; ; inventTable.clear(); breakpoint; inventTable = null; inventTable.(fieldnum(InventTable, dataAreaId)) = 'dat'; inventTable.RecId = 5637147343; inventTable.reread(); breakpoint; }
__________________
Возможно сделать все. Вопрос времени |
|
![]() |
#6 |
Ищущий знания...
|
Цитата:
Сообщение от sukhanchik
![]() Достаточно посмотреть в отладчик, чтобы понять, что clear() устанавливает все поля в их "нулевое" или "начальное" состояние. В частности, попутно устанавливаются и системные поля (например, код компании).
Попробуйте выполнить такой код. В нем reread честно отработает (вспоминаем, что в БД индекс состоит из двух полей - RecID и dataareaid, т.о. выбрать запись просто по RecId система не может - ей нужен еще dataareaid): X++: static void Job1(Args _args) { InventTable inventTable; ; inventTable.clear(); breakpoint; inventTable = null; inventTable.(fieldnum(InventTable, dataAreaId)) = 'dat'; inventTable.RecId = 5637147343; inventTable.reread(); breakpoint; } если посмотреть в отладчике, после выполнения метода clear() поле DataAreaId остается со значением компании (то значение, которое было в выбранном курсоре). Затем ещё присваивается значение полю RecId. Получается перед выполнением метода reread() у нас и так заполнены два нужных поля. кстати, тут уже писалось, что если обнулить память для таблицы (выполнить присвоение переменной NULL), то reread() нормально работает. а в Вашем примере в начале вызывается clear(), а потом обнуляется переменная, поэтому все нормально отрабатывает ![]()
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#7 |
Ищущий знания...
|
вот так:
X++: static void Job1(Args _args) { InventTable inventTable; ; inventTable.clear(); breakpoint; //inventTable = null; inventTable.(fieldnum(InventTable, dataAreaId)) = 'dat'; inventTable.RecId = 5637147343; inventTable.reread(); breakpoint; } ![]()
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|