Интересно стало.
Вот один из способов достижения результата. Код, правда, не дописан. Но как академический пример сойдет.
X++:
#Define.underline("_")
#Define.fieldNameTemplate("\%1_\%2")
static server void glibs(Args _args)
{
Dialog dialog = new Dialog();
DialogField dialogField;
FormStringControl formStringControl;
FieldName fieldName;
Counter pos,
i;
;
dialogField = dialog.addField(typeid(Dimension));
fieldName = dialogField.name();
pos = strfind(fieldName, #underline, 1, 9999);
if (pos)
{
fieldName = substr(fieldName, 1, pos - 1);
}
for (i = 1; i <= 3; i++)
{
if (i != SysDimension::Department + 1)
{
formStringControl = dialogField.control(strfmt(#fieldNameTemplate, fieldName, i));
formStringControl.visible(false);
}
}
formStringControl = dialogField.control(dialogField.name());
dialog.run();
}
Есть вариант написать альтернативный .addField() в классе Dialog.
Но это теория. Просто хотелось разобраться и узнать что-то новое. На практике лучше так не делать. Проще создать расширенный тип. Я так делаю всегда.