Показать сообщение отдельно
Старый 31.07.2015, 16:29   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Речь идет о форме DirPartyQuickCreateForm и его объекте partyTypeComboBox.

В методе init() формы этот объект передается как параметр при создании нового объекта typeComboBox

X++:
// \Forms\DirPartyQuickCreateForm\Methods\init
typeComboBox = DirPartyFormHandler::updateTypeComboBox(element, formControlStr(Dirpartyquickcreateform, partyTypeComboBox));
Далее, смотрим, что объект typeComboBox выбирает свое значение в событии active() источника данных формы DirPartyEntity

X++:
// \Forms\DirPartyQuickCreateForm\Data Sources\DirPartyEntity\Methods\active
typeComboBox.select(dirPartyTable.baseType());

Смотрим определение метода dirPartyTable.baseType()

X++:
//\Data Dictionary\Tables\DirPartyTable\Methods\baseType

//BP deviation documented
[SysClientCacheDataMethodAttribute(true)]
display DirPartyBaseType baseType()
{
    DirPartyBaseType baseType;

    switch (this.getInstanceRelationType())
    {
        case tableStr(DirPerson) :
        baseType = DirPartyBaseType::Person;
        break;

        default :
        baseType = DirPartyBaseType::Organization;
        break;
    }

    return baseType;
}

Т.е. текущее значение зависит от выбранного источника данных. Поскольку речь идет this.getInstanceRelationType(), то это пронаследованные таблицы от головной таблицы DirPartyTable

Собственно, если посмотреть, а что происходит при изменении выбранного значения, т.е. в методе modified, то видно, что происходит изменение источника данных

X++:
//\Forms\DirPartyQuickCreateForm\Designs\Design\[Group:DialogContent]\[Group:PartyHeaderGroup]\ComboBox:partyTypeComboBox\Methods\modified

public boolean modified()
{
    boolean ret;

    ret = super();
    // if the party type has been modified then clear and recreate the buffer through
    // the formhandler class
    if (ret && typeComboBox.selection() != lastPartyType)
    {
        dirpartytable_ds.delete();                          // удаляем текущую запись
        partyForm.parmPartyType(typeComboBox.selection());  // изменяем источник данных
        partyForm.create();                                 // создаем запись в новом источнике данных
        lastPartyType = typeComboBox.selection();
    }

    return ret;
}
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...