Тема: Баг inventTable
Показать сообщение отдельно
Старый 19.03.2009, 14:12   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Баг inventTable
На всякий случай напишу все подробно.
В методе InventTable.insert() super() обрамлен транзакцией.
Есть у меня класс (от RunBaseBatch), в котором суть метода run() примерно такова:
X++:
try
{
ttsbegin;

while ()
{
this.process(container);
}

ttscommit;
}
catch
{
throw error();
}
Метод process(container) переопределен в наследниках этого класса.
В одном из таких классов происходит заполнение InventTable:
X++:
void process(container)
{
// ....

inventTable.insert();

if (- )
 throw error();

//....
}
Изначально InventTable пуста. После того, как отработает этот throw, возникает следующая ситуация. Запрос
X++:
select firstonly inventTable
where inventTable.ItemId == "Первое значение в имп. файле";
Возращает, невставленную на самом деле, запись. Так как throw отработал, то запись в базу не попадает. Это можно увидеть, сделав прямой запрос в базу.
Что удивительно:
X++:
select firstonly inventTable;
тоже ничего не возвращает.

Первый запрос (с условием) начинает нормально работать только если перезагрузить аос. Как это исправить?