Показать сообщение отдельно
Старый 26.05.2015, 07:04   #1  
Pandasama is offline
Pandasama
Участник
 
459 / 138 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
проблема с перекрытием lookupreference в dialog
Товарищи, начинаю активно работать в 2012 и встречаюсь с некоторыми проблемами.
В данный момент проблема следующая:
есть класс (наследник RunBase), в классе диалог, в диалоге следующее:
X++:
protected Object dialog()
{
    Dialog                  dialog = super();
    Object                  formCtrl;
    ;

    dlgAgreementClassification = dialog.addFieldValue(extendedTypeStr(agreementClassificationRecId), agreementClassificationRecId, "Выберите новую классификацию");
    //formCtrl = dlgAgreementClassification.control();
    //formCtrl.replacementFieldGroup(identifierStr(AutoIdentification));
    //formCtrl.registerOverrideMethod(identifierStr(lookupReference), tableMethodStr(AgreementHeader, lookupReferenceAgreementClassification), this);
    dlgAgreementClassification.registerOverrideMethod(identifierStr(lookupReference), tableMethodStr(AgreementHeader, lookupReferenceAgreementClassification), this);

    return dialog;
}
метод AgreementHeader::lookupReferenceAgreementClassification, соответственно следующий
X++:
public Common lookupReferenceAgreementClassification(FormReferenceControl _formReferenceControl)
{
    AgreementHeaderExt_RU   agreementHeaderExt;
    Query query = new Query();
    QueryBuildDataSource qbds;
    QueryBuildDataSource QbdsJoin;
    SysReferenceTableLookup sysTableLookup = SysReferenceTableLookup::newParameters(tableNum(AgreementClassification), _formReferenceControl)
    ;
    qbds = query.addDataSource(tableNum(AgreementClassification));
    switch (agreementHeaderExt.AgreementType)
    {
        case AgreementType::Contract:
            qbds.addRange(fieldNum(AgreementClassification, MainAgreement)).value(queryValue(NoYes::Yes));
            break;
        case AgreementType::AdditionalAgreement:
            qbds.addRange(fieldNum(AgreementClassification, MainAgreement)).value(queryValue(NoYes::Yes));
            break;
    }
    qbds.addRange(fieldnum(AgreementClassification, AgreementRelationType)).value(queryValue(this.InstanceRelationType));

    sysTableLookup.parmQuery(query);
    sysTableLookup.addLookupfield(fieldNum(AgreementClassification, Name));
    sysTableLookup.addLookupfield(fieldNum(AgreementClassification, Description_PSN));
    return sysTableLookup.performFormLookup();
}
в другом месте, на статичной форме, этот lookupreference работает нормально
запустив же класс и в его диалоге попробовав сделать лукап - получаю ошибку
Код:
Ошибка времени выполнения: FormReferenceGroupControl (Объект), метод lookupReference вызван с недопустимыми параметрами.

Трассировка стека

(C)\Classes\FormReferenceGroupControl\lookupReference
(C)\Classes\FormReferenceGroupControl\Lookup
(C)\Classes\FormStringControl\Lookup
пошерстив АОТ на предмет классов с методом диалог и registerOverrideMethod нашел ряд стандартных примеров, и кардинальных отличий от своего кода не увидел

что я делаю не так?