Простой пример (проект из 3.0 во вложении):
Таблица ZVVTestTable, на ней одно поле ID, на ней же метод update
X++:
public void update()
{
super();
info("Update " + this.ID);
}
и джоб
X++:
static void ZVVTestJob(Args _args)
{
ZVVTestTable ZVVTestTable;
int i;
;
ttsBegin;
delete_from ZVVTestTable;
for (i=1; i<=5; i++)
{
ZVVTestTable.clear();
ZVVTestTable.ID = int2str(i);
ZVVTestTable.insert();
}
info("First Update:");
update_recordset ZVVTestTable
setting ID = ZVVTestTable.ID;
info("Second Update:");
select ZVVTestTable
where ZVVTestTable.ID == "НЕТУ ТАКОГО";
update_recordset ZVVTestTable
setting ID = ZVVTestTable.ID;
info("Third Update:");
select firstOnly ZVVTestTable
where ZVVTestTable.ID == "НЕТУ ТАКОГО";
update_recordset ZVVTestTable
setting ID = ZVVTestTable.ID;
ttsCommit;
}
Результат:
Цитата:
Сообщение (17:13:38)
First Update:
Update 1
Update 2
Update 3
Update 4
Update 5
Second Update:
Update 1
Update 2
Update 3
Update 4
Update 5
Third Update:
Update 1
В отличие от недавней темы
Изменение "курсора" в цикле здесь изменения курсора в цикле не происходит, а скорее как-то сохраняется _свойство_
firstOnly курсора из предыдущей операции. Хотя мне лично не понятно зачем?
Склонен считать это багом...
UPD:
PS Кстати, попробовал на 4-ке то же самое - уже такого эффекта нет, обновляет все строчки в последнем случае тоже.
Значит всё-таки был баг и исправили.
На 3-ке - будьте бдительны.