Сложно)
На базовом классе DimensionControllerObject есть несколько делегатов, вызовы которых используются при создании контролов аналитик
делегат DimensionLinkShowField отвечает за пропуск создания контрола (parmCancel() класса-события DimensionLinkCancelEventArgs должен вернуть True)
делегат DimensionLinkAllowFieldEdit - за возможность блокирования изменения контрола (DimensionLinkCancelEventArgs.parmCancel() == true)
делегат DimensionLinkMarkFieldOptional - за обязательность (DimensionLinkCancelEventArgs.parmCancel() == true)
Для подписки на событие, необходимо реализовать паблик-метод, соответствующий подписываемому делегату, в классе-обработчике формы (на самой форме нельзя - подписка не будет выполнена)
Определение аналитики выполняется по идентификатору аналитики (DimensionAttributeRecId)
X++:
// Метод в классе-обработчике
public void showDimensionControl(DimensionLinkCancelEventArgs _e)
{
;
if (_e)
_e.parmCancel(_e.parmDimensionAttributeId() != ViewDimensionAttributeRecId);
}
//Подпись на событие DimensionLinkShowField
...
dimensionDefaultingController = DimensionDefaultingController::constructInGroupWithValues(
...
//подписка на событие
//myHadlerClass.showDimensionControl - это Instance-метод класса
dimensionDefaultingController.DimensionLinkShowField += eventhandler(myHadlerClass.showDimensionControl);
//если потребуется использовать статический метод
dimensionDefaultingController.DimensionLinkShowField += eventhandler(MyHadlerClass::staticShowDimensionControl);
...