Кажется, понял причину проблемы потери фокуса окна поиска в формах "SalesTable" и "PurchTable"
Проблема там вызвана, судя по всему, функциональностью формата адресов доставки,
которая используется в локализации Аксапта.
Каждый раз, при отрабатывании метода active источника данных формы происходит "перерисовывание" контролов на закладке "Адрес". При этом обновление контролов происходит как в самом заказе, так и в строках заказа (даже если у вас отключен конфигурационный ключ "TradeMultiShipTo" - "Несколько получателей", и закладка "Адрес" в строках - не видима!). Именно в полях адреса имеется контрол "StaticText" который "забирает" фокус.
Решить проблему можно таким способом.
1. Если вы не используется функциональность "Несколько получателей" - лучше всего вообще отключить функциональность Адресов для строк заказа (закупки).
(или "повесить" туда конфигурационный ключ "TradeMultiShipTo")
class FormRunListener_Address_RU
X++:
public static container addressInfo(Args _args)
...
case formstr(SalesTable) :
return [[#HeaderDeliveryAddress, tablenum(AddressMap)]];
...
2. Перенести "обновление" полей адреса из метода active источника данных, например, в метод активации закладки "адрес" формы "заказы"
X++:
public void pageActivated()
{
SysSetupFormRun SysSetupFormRun = element;
;
SysSetupFormRun.active_W();
super();
}
и отключить его для метода active :
class Info:
X++:
void formNotify(FormRun formRun,FormNotify event)
...
// <GEEU>
if (SysDictClass::is(formRun, classnum(SysSetupFormRun)))
{
// исправить ошибку потери фокуса при открытии окна поиска, перерисовка происходит при активации tabPage
if (formRun.name() == FormStr(PurchTable) || formRun.name() == FormStr(SalesTable))
break;
// <--
sysSetupFormRun = formRun;
sysSetupFormRun.active_W();
}
// </GEEU>
...
Эти меры позволяют не только избежать ошибки потери фокуса, но и по моим ощущениям, ускорить работу самой формы заказы (закупки).
(Так как больше не происходит лишних действий по обновлению полей адреса)