На всякий случай напишу все подробно.
В методе 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;
тоже ничего не возвращает.
Первый запрос (с условием) начинает нормально работать только если перезагрузить аос. Как это исправить?