13.09.2011, 19:19 | #1 |
Участник
|
Бага в Query update(true)
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)); } |
|