пользуюсь таким вариантом, последний необязательный аргумент - список полей, которые нужно оставить редактируемыми.
X++:
//Установить AllowEdit = _allowEdit для всех полей исключая _fieldListExclude
static void setFieldsAllowEdit(FormDataSource _formDataSource, boolean _allowEdit, container _fieldListExclude = connull())
{
FormDataObject fdo;
FormObjectSet fos;
DictTable dictTable = new DictTable(_formDataSource.table());
DictField dictField;
int fieldCount = dictTable.fieldCnt();
int i;
int j;
FieldId fieldId;
boolean allowEdit;
;
fos = _formDataSource;
for (i = 1; i <= fieldCount; i++)
{
dictField = new DictField(dictTable.id(), dictTable.fieldCnt2Id(i));
for (j = 1; j <= dictField.arraySize(); j++)
{
fdo = fos.object(fieldId2ext(dictField.id(), j));
allowEdit = confind(_fieldListExclude, dictField.id()) ? ! _allowEdit : _allowEdit;
if (fdo)
{
fdo.allowEdit(allowEdit);
}
}
}
}