Показать сообщение отдельно
Старый 01.07.2008, 15:55   #6  
petergunn is offline
petergunn
Участник
 
118 / 274 (10) ++++++
Регистрация: 30.08.2005
Адрес: Tyumen
DialogField.fieldControl([...])
Цитата:
Сообщение от glibs Посмотреть сообщение
Интересно стало.

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

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.

Но это теория. Просто хотелось разобраться и узнать что-то новое. На практике лучше так не делать. Проще создать расширенный тип. Я так делаю всегда.
Для академичности примера лучше воспользоваться методом dialogField.fieldControl() для перебора диалоговых полей EDT Dimension, вариация приведенного job на эту тему:
X++:
static void jobDimensionFields(Args _args)
{
    Dialog              dialog              ;
    DialogField         dialogFieldDimension;
    FormStringControl   formStringControl   ;
    Counter             idx                 ;
    ;
    
    dialog = new Dialog() ;
    dialogFieldDimension = dialog.addField(typeId(Dimension));
 
    for( idx=2; idx<=Dimensions::numOfDimensions(); idx++ )
    {
        formStringControl = dialogFieldDimension.fieldControl(idx) ;
        formStringControl.visible( false ) ;
    }
 
    dialog.run() ;
}
За это сообщение автора поблагодарили: glibs (1).