Конкретно для строк закупок проблема связана с модулем хранения версий закупок. Всякие PurchTableVersion, PurchTableHistory, PurchLineHistory...
Там
может получиться так, что при обновлении первой строки закупки будет установлен признак IsModified для
всех остальных строк этой же закупки. В результате и получаем конфликт обновления
Т.е., во-первых, ошибка "плавающая". Может быть, а может не быть. Во-вторых, первая строка всегда обновляется корректно. Проблема возникает при обновлении второй строки. Точнее, той порции строк, которые Axapta считывает "за раз" в свой кеш. И тут только reread() помогает
PS: Посмотрел, где же я на это натыкался. Ситуация обратная. Признак IsModifed снимается у всех строк вот в этом методе
\Classes\VersioningPurchaseOrder\archivePurchLine
Соответственно, можно во все циклы по PurchLine добавлять условие
X++:
if (purchLine.IsModified)
{
purchLine.reread();
}