13.01.2009, 11:01 | #1 |
Участник
|
Занятное поведение
Возникла такая интересная проблема.
Есть стандартная форма InventTable. (нашу убил и взял со стандарта) На неё на главный grid вывел своё поле(String). Заполняю это поле.Перехожу на другую строку. Заполняю. Перехожу на другую и т.д. По некоторым строкам выскакивает вот такое сообщение. "Невозможно отредактировать запись в "Параметры модуля "Запасы"" ("InventTableModule"). Номенклатура: 0/0351/002/01/4X25, Закупка. Запись уже существует." Цитата:
(C) \Classes\Info\add - line 12
(S) \Classes\xRecord\Update (S) \Data Dictionary\Tables\InventTableModule\Methods\Update - line 15 (C) \Classes\FormDataSource\write (C) \Classes\FormDataSource\Next (C) \Classes\FormRun\task (C) \Classes\SysSetupFormRun\task - line 20 Даже необязательно заполнять промежуточные строки. Можно курсор только на эти строки ставить и только в них заполнять, чтоб появилась ошибка. Остальные пустые. При этом сохранить даёт, хоть и ругается. Может у кого есть мысли из-за чего это может быть?
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
13.01.2009, 11:07 | #2 |
MCITP
|
Вероятно, из одной серии баги: Проблемы с отображением скл. аналитик
__________________
Zhirenkov Vitaly |
|
13.01.2009, 11:19 | #3 |
Участник
|
Если только чуть-чуть.
Ситуация зафиксированна. С аналитикой не связано, с отображением всё в порядке.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
13.01.2009, 11:45 | #4 |
Member
|
Не то, но на всякий случай
Не корректно сохраняет запись в inventTable Вдруг проблемы имеют общую или похожую причину.
__________________
С уважением, glibs® |
|
13.01.2009, 13:39 | #5 |
Участник
|
К чему пришёл.
На тех записях 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). |
13.01.2009, 14:13 | #6 |
Участник
|
Не правильно написал.
На тестовом примере reread сработал, а на следующем нет. Остановился на таком варианте в конец метода active датасорса InventTable X++: if(inventTable.ItemId != purch.ItemId ||
inventTable.ItemId != sales.ItemId ||
inventTable.ItemId != invent.ItemId ||
inventTable.ItemId != InventItemLocation.ItemId)
{
purch = InventTableModule::find(inventTable.ItemId, ModuleInventPurchSales::Purch);
invent = InventTableModule::find(inventTable.ItemId, ModuleInventPurchSales::Invent);
sales = InventTableModule::find(inventTable.ItemId, ModuleInventPurchSales::Sales);
InventItemLocation = InventItemLocation::find(inventTable.ItemId, InventDim::inventDimIdBlank());
}
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
13.01.2009, 14:15 | #7 |
Участник
|
При этом у вас теряется связь с датасорсами. То есть purch.datasource() вернет null, к примеру.
Я думаю, что не в ту сторону копаете. Но, к сожалению, времени посмотреть совместно нету. Но интересно узнать, что получится |
|
13.01.2009, 14:48 | #8 |
MCITP
|
Цитата:
Сообщение от miklenew
Не правильно написал.
На тестовом примере reread сработал, а на следующем нет. Остановился на таком варианте в конец метода active датасорса InventTable X++: if(inventTable.ItemId != purch.ItemId ||
inventTable.ItemId != sales.ItemId ||
inventTable.ItemId != invent.ItemId ||
inventTable.ItemId != InventItemLocation.ItemId)
{
purch = InventTableModule::find(inventTable.ItemId, ModuleInventPurchSales::Purch);
invent = InventTableModule::find(inventTable.ItemId, ModuleInventPurchSales::Invent);
sales = InventTableModule::find(inventTable.ItemId, ModuleInventPurchSales::Sales);
InventItemLocation = InventItemLocation::find(inventTable.ItemId, InventDim::inventDimIdBlank());
} Обратите внимание именно на это сообщение, ну и предыдущие тоже. Проблемы с отображением скл. аналитик
__________________
Zhirenkov Vitaly |
|
|
За это сообщение автора поблагодарили: miklenew (4). |
13.01.2009, 14:55 | #9 |
Участник
|
Похоже.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
|
|