AX2009 SP1 RU7 / MS SQL 2008 R2
При формировании обновляемого запроса в некоторых случаях происходит двойное обновление записи. Задваиваться могут как все записи, так и часть. Полной логики я не смог раскопать, но это как-то связано с индексами. Ниже привожу пример с которым я возился, вместо
"Номенлатурная Группа" нужно подставить вашу группу с числом элементов не менее 20. Далее, если все индексы штатные, то у меня получается предсказуемый вариант поведения, т.е. кол-во обновляемых записей равно числу записей в запросе. Для получения задвоения необходимо в индексе InventTable / GroupItemIdx поле ItemId заменить на ItemName, после этого у меня на некоторых группах происходят двойные обновления. В 3-ке SP4 на аналогичных данных все ОК.
X++:
static void DEV_QueryUpdateBag(Args _args)
{
Query query = new Query();
QueryRun queryRun;
QueryBuildDataSource qbds;
InventTable inventTable;
int sel, upd, i;
container c;
;
qbds = query.addDataSource(tablenum(InventTable));
qbds.addRange(fieldnum(InventTable, ItemGroupId)).value("Номенлатурная Группа");
qbds.update(true);
queryRun = new QueryRun(query);
while (queryRun.next())
{
sel++;
}
queryRun = new QueryRun(query);
ttsbegin;
while (queryRun.next())
{
inventTable = queryRun.get(tablenum(InventTable));
if (confind(c, inventTable.ItemId))
info (strfmt("%1 %2 %3", i, inventTable.ItemId, inventTable.ItemName));
else
{
c += inventTable.ItemId;
i++;
}
inventTable.ItemName = inventTable.ItemName + ".";
inventTable.doUpdate();
upd++;
}
ttsabort;
info(strfmt("SELECT %1 UPDATE %2 DELTA %3", sel, upd, upd-sel));
}