D365FOE July 2017 release. Метод класса inventCostitemDim
X++:
private void insertReferenceForDeferredAssemblyUpdate(
InventTransOrigin _inventTransOrigin,
InventTrans _inventTrans
)
{
InventCostListAssembly costListAssembly;
InventTrans assemblyInventTrans;
UserConnection connection;
Integer logPointBegin;
if (_inventTrans.StatusIssue <= StatusIssue::Sold &&
_inventTrans.StatusReceipt <= StatusReceipt::Purchased &&
this.inventModelGroup(_inventTransOrigin.ItemId).inventModelType().stdCostBased())
{
try
{
select firstonly RecId
from costListAssembly
where costListAssembly.InventClosing == inventClosing.RecId
&& costListAssembly.inventTransOrigin == _inventTransOrigin.RecId;
if (!costListAssembly)
{
logPointBegin = infologLine();
assemblyInventTrans = InventTrans::findByInventTransOrigin(_inventTransOrigin.RecId);
connection = new UserConnection();
connection.ttsbegin();
costListAssembly.setConnection(connection);
costListAssembly.inventClosing = inventClosing.RecId;
costListAssembly.inventTransOrigin = _inventTransOrigin.RecId;
costListAssembly.itemId = _inventTransOrigin.itemId;
costListAssembly.ReferenceId = _inventTransOrigin.referenceId;
costListAssembly.ReferenceCategory = _inventTransOrigin.ReferenceCategory;
costListAssembly.CostGroupId = this.inventTable(_inventTransOrigin.ItemId).costGroup();
costListAssembly.ModelGroupId = this.inventModelGroup(_inventTransOrigin.ItemId).ModelGroupId;
costListAssembly.DateFinancial = assemblyInventTrans.DateFinancial;
costListAssembly.DefaultDimension = assemblyInventTrans.dimensionFinancialDefaultDimension();
costListAssembly.insert();
connection.ttscommit();
}
}
catch (Exception::DuplicateKeyException)
{
connection.ttsabort();
infolog.cut(logPointBegin + 1, infologLine());
}
finally
{
connection.finalize();
}
}
}
Если присмотреться, то переменная connection инициализируется только если costListAssembly не пустое.А вот connection.finalize() выполняется во всех случаях (Обычно с null reference exception).