А в чем собственно проблема ? Можно, например, использовать механизм отслеживания событий.
1. В методе dialog добавляем поле с типом EcoResCategoryId. Имя контрола, к примеру, categoryId. Разрешаем экземпляру нашего класса обработку событий при помощи allowControlMethodOverload_RU(true).
X++:
...
dialog.customFieldName_RU('categoryId');
dialog.addField(extendedTypeStr(EcoResCategoryId));
dialog.allowControlMethodOverload_RU(true);
...
А дальше создаем метод-обработчик lookupReference
X++:
private Common categoryId_lookupReference()
{
Common common;
...
common = EcoResCategory::lookupCategoryHierarchyRole(dialog.curFormControl_RU(),
EcoResCategoryNamedHierarchyRole::Procurement);
...
return common;
}