Цитата:
Сообщение от
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(), а потом обнуляется переменная, поэтому все нормально отрабатывает