При помощи Tracing утилиты обнаружил в методе CustVendPaymNote.buildPaymNote() очень медленно выполняющийся запрос:
X++:
while select crossCompany RecId from specTrans
order by specTrans.RecId
where specTrans.SpecCompany == _specCompany
&& specTrans.SpecTableId == _specTableId
&& specTrans.SpecRecId == _specRecId
join RecId from custVendTransOpen
where custVendTransOpen.DataAreaId == specTrans.RefCompany
&& custVendTransOpen.TableId == specTrans.RefTableId
&& custVendTransOpen.RecId == specTrans.RefRecId
join TransDate, DocumentNum, Invoice, PaymId, Voucher from custVendTrans
where custVendTrans.RecId == custVendTransOpen.RefRecId
Выполнил его рефакторинг:
X++:
while select crossCompany TransDate, DocumentNum, Invoice, PaymId, Voucher
from custVendTrans
join RecId
from custVendTransOpen
where custVendTransOpen.RefRecId == custVendTrans.RecId
join RecId
from specTrans
where specTrans.RefCompany == custVendTransOpen.DataAreaId
&& specTrans.RefTableId == custVendTransOpen.TableId
&& specTrans.RefRecId == custVendTransOpen.RecId
&& specTrans.SpecCompany == _specCompany
&& specTrans.SpecTableId == _specTableId
&& specTrans.SpecRecId == _specRecId
И создал на таблице SpecTrans индекс:
X++:
#SpecTransIdx
PROPERTIES
Name #SpecTransIdx
ENDPROPERTIES
INDEXFIELDS
#SpecRecId
#SpecTableId
#SpecCompany
#Partition
#RecId
#INCLUDEDCOLUMNPRESENT
#RefRecId
#INCLUDEDCOLUMNPRESENT
#RefTableId
#INCLUDEDCOLUMNPRESENT
#RefCompany
#INCLUDEDCOLUMNPRESENT
ENDINDEXFIELDS
До рефакторинга запрос выполнялся 12 сек, после - меньше 1 сек. Пролем в работе бизнес-логики пока не обнаружил.