Вариант с навешиванием функциональности на SysSetupFormRun рассматривается?:
Classes\SysSetupFormRun\dimensionDenyEdit(...):
X++:
void dimensionDenyEdit( SysDimension _sysDimension )
{
FormDataSource formDataSource ;
FormDataObject formDataObject ;
SysDictTable sysDictTable ;
SysDictField sysDictField ;
Counter counterSource ;
Counter counterFields ;
int dimArrayIdx = Dimensions::code2ArrayIdx( _sysDimension ) ;
;
for( counterSource=1; counterSource<=this.dataSourceCount(); counterSource++ )
{
formDataSource = this.dataSource( counterSource ) ;
sysDictTable = new SysDictTable( formDataSource.table() ) ;
for( counterFields=1; counterFields <= sysDictTable.fieldCntWithoutSys(); counterFields++ )
{
sysDictField = sysDictTable.fieldObject( sysDictTable.fieldCnt2Id( counterFields ) ) ;
if( sysDictField.typeId() == extendedTypeNum( Dimension ) )
{
formDataObject = formDataSource.object( fieldId2Ext( sysDictField.id(), dimArrayIdx ) ) ;
if( formDataObject )
{
formDataObject.allowEdit( false ) ;
// formDataObject.enabled( false ) ;
}
}
}
}
}
Classes\SysSetupFormRun\init():
X++:
public void init()
{
super();
SysSecurityFormSetup::loadSecurity(this);
this.dimensionDenyEdit( SysDimension::Department ) ;
}