Я тут в очередной раз занимался оптимизацией разноски розничных продаж и наткнулся еще на пару возможных улучшений.
1. Метод writeTaxAmount_W, который тут ранее оптимизировали вызывает в цикле метод CustVendInvoiceTrans.initFromTaxWorkTrans_RU(). Там выполняется неиндексируемый запрос к злосчастной темповухе TmpTaxWorkTrans. Единственный селективный фильтр там это номер лота InventTransId, но индекса по нему нету. Получается примерно такая трассировка

В общем нужно добавить индекс и плюс пришлось еще поменять немного код на поиске.
X++:
if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoRU]))
{
//+ sergey.m 03.02.2022 FRE_20421639_001
if (!_sourceRecId)
{
select taxWorkTrans index hint InventTransIdx
where taxWorkTrans.SourceTableId == _sourceTableId &&
taxWorkTrans.InventTransId == _inventTransId &&
taxWorkTrans.TaxDirection != TaxDirection::UseTax &&
taxWorkTrans.TaxOrigin != TaxOrigin::TaxReversed;
}
else
{
//- sergey.m 03.02.2022 FRE_20421639_001
select taxWorkTrans
where taxWorkTrans.SourceTableId == _sourceTableId &&
((_sourceRecId &&
taxWorkTrans.SourceRecId == _sourceRecId) ||
(! _sourceRecId &&
taxWorkTrans.InventTransId == _inventTransId)) &&
taxWorkTrans.TaxDirection != TaxDirection::UseTax &&
taxWorkTrans.TaxOrigin != TaxOrigin::TaxReversed;
}
Хинт на inMemory срабатывает. Без него у меня улучшений не было. Не знаю как тут аксапта выбирает какой индекс использовать, думаю хватает первый попавшийся по совпадению поля.
2. В классе Tax метод lineTaxAmount. В начале метода проверяется что в таблице есть записи немного экзотическим методом, считая их количество. Я поменял так, хотя можно было наверное вообще убрать запрос, меня пока и так устраивает.
X++:
if (this.taxParameters().TaxSpecifyLine)
{
if (this.taxParameters().TaxSpecifyLine)
{
//+ sergey.m 03.02.2022 FRE_20421639_001
//select count(RecId) from taxWorkTrans;
select firstOnly RecId from taxWorkTrans;
//- sergey.m 03.02.2022 FRE_20421639_001
if (taxWorkTrans.RecId > 0 && !this.useSubLedgerJournalLines())
{
// Posting out of TmpTaxWorkTrans
Еще тормозит российская корреспонденция фин. проводок. Так не хочется глубоко погружаться в это. Никто не правил случаем? Я там кое-что правил, но вот этот кошмар остался. Без единового вызова субд.