Показать сообщение отдельно
Старый 01.07.2008, 14:55   #3  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Интересно стало.

Вот один из способов достижения результата. Код, правда, не дописан. Но как академический пример сойдет.

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.

Но это теория. Просто хотелось разобраться и узнать что-то новое. На практике лучше так не делать. Проще создать расширенный тип. Я так делаю всегда.
__________________
С уважением,
glibs®