Если есть возможность загляните в AX 2012 R3, может быть там не только эти баги исправлены, вот как выглядят данные выборки в InventCostItemDim
X++:
countryRegion_RU = SysCountryRegionCode::isLegalEntityInCountryRegion([#isoRU]);
X++:
// load
while select forupdate inventTrans
index hint OpenItemIdx
// <GEERU>
where (countryRegion_RU
&& ((inventTransCurrency == InventTransCurrency_RU::PrimaryCur
&& inventTrans.ValueOpen == InventTransOpen::Yes)
|| (inventTransCurrency == InventTransCurrency_RU::SecondaryCur
&& inventTrans.ValueOpenSecCur_RU == InventTransOpen::Yes))
|| (!countryRegion_RU
&& (inventTrans.ValueOpen == InventTransOpen::Yes)))
// </GEERU>
&& inventTrans.ItemId == _itemId
&& inventTrans.MarkingRefInventTransOrigin
join inventDim
where inventDim.InventDimId == inventTrans.InventDimId
X++:
protected void updateServiceItemTrans(ItemId _itemId)
{
InventTrans inventTrans;
InventSettlement inventSettlement;
RecordInsertList recordInsertList = new RecordInsertList(tableNum(InventSettlement),true,true);
// Optimization note: All columns are expected to be included in the index
while select forupdate inventTrans
index hint OpenItemIdx
// <GEERU>
where ((countryRegion_RU
&& ((inventTransCurrency == InventTransCurrency_RU::PrimaryCur
&& inventTrans.ValueOpen == InventTransOpen::Yes)
|| (inventTransCurrency == InventTransCurrency_RU::SecondaryCur
&& inventTrans.ValueOpenSecCur_RU == InventTransOpen::Yes)))
|| (!countryRegion_RU
&& inventTrans.ValueOpen == InventTransOpen::Yes))
// </GEERU>
&& inventTrans.ItemId == _itemId
&& (inventTrans.StatusIssue == StatusIssue::Sold
|| inventTrans.StatusReceipt == StatusReceipt::Purchased)
&& inventTrans.DateStatus <= inventClosing.TransDate
&& inventTrans.MarkingRefInventTransOrigin == 0 // marked service item transactions will be settled according to marking principle
{
// <GEERU>
if (countryRegion_RU)
{
inventSettlement = this.initInventSettlement(inventTrans,
inventTransCurrency == InventTransCurrency_RU::PrimaryCur ? inventTrans.financialOpenQty() : inventTrans.financialOpenQtySecCur_RU(),
inventTransCurrency == InventTransCurrency_RU::PrimaryCur ? inventTrans.financialOpenValue() : inventTrans.financialOpenValueSecCur_RU(),
0,
InventSettleModel::ServiceItem,
inventTrans.Qty >= 0 ? InventSettleType::Receipt : InventSettleType::Issue,
#initLedgerDrop
);
}
else
{
// </GEERU>
inventSettlement = this.initInventSettlement(inventTrans,
inventTrans.financialOpenQty(),
inventTrans.financialOpenValue(),
0,
InventSettleModel::ServiceItem,
inventTrans.Qty >= 0 ? InventSettleType::Receipt : InventSettleType::Issue,
#initLedgerDrop
);
// <GEERU>
}
// </GEERU>
inventSettlement.SettleTransId = InventSettlement::nextSettleTransId();
inventSettlement.insertUsingInsertList(recordInsertList);
// <GEERU>
if (!countryRegion_RU
|| inventTransCurrency == InventTransCurrency_RU::PrimaryCur)
{
// </GEERU>
inventTrans.QtySettled += inventTrans.financialOpenQty();
inventTrans.CostAmountSettled += inventTrans.financialOpenValue();
// <GEERU>
}
else
{
inventTrans.QtySettledSecCur_RU += inventTrans.financialOpenQtySecCur_RU();
inventTrans.CostAmountSettledSecCur_RU += inventTrans.financialOpenValueSecCur_RU();
}
// </GEERU>
this.updateCostAmountStd(inventTrans);
inventTrans.update();
}
recordInsertList.insertDatabase();
}
В DAX2009 насколько я помню регион как то по другому определяется, но смысл думаю ясен.