Дело в том, что свойство AutoDeclaration, насколько я могу судить, действует на FormXXControl'ы, но не на FormBuildXXControl'ы. Более того, если попытаться даже присвоить переменной типа FormBuildXXControl ссылку на элемент управления с AutoDeclaration == Yes, то такой код просто не скомпилируется по причине несовместимости типов. Соответственно, если требуется на форме до вызова super() в init() получить ссылку на какой-либо FormBuildXXControl, скажем, чтобы передать ее параметром в класс, то тут AutoDeclaration никак не поможет.
Вот пример из моего скромного опыта: есть «многофункциональная» форма, работающая на базе строк журналов. Многофункциональность заключается в том, что в зависимости от параметров вызова эта форма должна показывать немного различающиеся наборы полей и реализовывать немного различающуюся логику. Для этого ею рулит семейство классов, каждый из которых (наследник от базового) реализует эти незначительные отличия. И вот встает задача: в зависимости от параметров вызова, кроме прочего, показывать на гриде формы разные наборы полей, причем для простоты каждый набор задан группой полей на соотв. таблице. Варианты были такие:
- сделать на гриде кучу скрытых групп - по одной на нужную группу полей, а соответствующий класс будет делать видимой "свою" группу; но тут, выходит, надо ссылки на все эти группы передавать в класс, управляющий формой, либо реализовывать какую-то логику на форме (это хотелось делать в последнюю очередь, потому что исходно форма в плане логики "голая" - она только передает в класс ссылки на свои элементы и для некоторых событий дергает его обработчики);
- сделать на гриде одну группу полей и менять из класса ее свойство DataGroup после инициализации формы - этот вариант показал свою полную несостоятельность;
- сдалать на гриде одну группу полей и менять из класса ее свойство DataGroup до инициализации формы через ссылку на соотв. FormBuildGroupControl - на этом варианте я остановился.
Но тут встал вопрос: откуда добыть на форме ссылку на соотв. FormBuildGroupControl до инициализации формы, чтобы передать эту ссылку в класс? Я это сделал так:
X++:
element.form().design().control( Control::GrpGridFields );
тут, как видно, используется упомянутый enum Control, но AutoDeclaration задействовать в этом случае не представляется возможным.