Показать сообщение отдельно
Старый 13.01.2009, 13:39   #5  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
К чему пришёл.
На тех записях 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();
Если хотя бы один из датасорсов коментируем, на этой таблице эта ошибка и возникает.
Конечно не правильно каждую раз перечитывать эти датасорсы, но лучше не нашёл.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
За это сообщение автора поблагодарили: George Nordic (1).