К чему пришёл.
На тех записях recId в InventTableModule неправильный(две параллельных сессии запускал).
Т.е. при join-e система взяла к примеру 20 записей в InventTable, 3 по 20 InventTableModule и 20 InventItemLocation. Один recId из этих таблиц не правильный (взят не со своей записи). Такой состав из 100 вагонов только последний вагон не наш.
Как можно исправить
1) в методах validateWrite() этих датасорсов убрать
//inventItemLocation.ItemId = inventTable.ItemId;
Всё ok становиться. Только update сработает не для своей записи.
Следовательно не подходит.
У нас как раз и выходит та 20 запись recId не тот, ItemId не тот, но так как в validateWrite идёт подмена ItemId. То на момент update получается в системе две записи с одной и тойже номенклатурой, но с разными recId. Вот она на уровне индекса и ругается.
2) В методе active InventTable добавить
X++:
purch_ds.reread();
invent_ds.reread();
sales_ds.reread();
InventItemLocation_ds.reread();
Если хотя бы один из датасорсов коментируем, на этой таблице эта ошибка и возникает.
Конечно не правильно каждую раз перечитывать эти датасорсы, но лучше не нашёл.