Показать сообщение отдельно
Старый 27.03.2017, 14:57   #9  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Вот так получается универсально получить пользовательские фильтры из родительской части формы. Исключаются "случайные связи", если форма просто была вызвана из другой формы, для которой она не является частью.

X++:
void new(FormRun _callerFormRun)
{
    Query                   localQuery;  
    FormDatasource          formDatasource;
    int                     i;
    PartList                partList;
    Object                  obj;
    
    boolean partExists(FormRun _formRun, str _name)
    {
        PartList partListLocal = new PartList(_formRun);
        FormRun part;
        int j;
 
        for(j = 1; j <= partListLocal.partCount(); j++)
        {
            part = partListLocal.getPartById(j);
 
            if (part && part.name() == _name)
            {
                return true;
            }
        }
        return false;
    }    
    ;
    
    partList = new PartList(_callerFormRun);
    if (!partList.partCount()) //если на форме нет частей, то предполашаем, что эта форма - часть родительскрй формы, которая находится в args().caller()
    {
        obj = _callerFormRun.args();
        if (obj)
            obj = obj.caller(); //получаем родительскую форму
        if (obj && (obj is FormRun))
        {
            if (partExists(obj, _callerFormRun.name())) //проверяем, что текущая форма действительно является частью родительской формы, а не просто вызвана из другой формы
            {
                formDatasource = obj.dataSource(1);
                localQuery  = formDatasource.queryRun().Query();
                info(localQuery.datasourceNo(1).toString()); //достаем запрос родительской формы
                for (i = 1; i <= localQuery.queryFilterCount(); i++)
                {
                    info(localQuery.queryFilter(i).toString()); //достаем пользовательские фильтры из родительской формы
                    //if (localQuery.queryFilter(i).dataSource().name() == qbds.name())
                    //    Query.addQueryFilter(qbds, localQuery.queryFilter(i).field()).value(localQuery.queryFilter(i).value());
                }
            
            }    
        }
    }    
}
За это сообщение автора поблагодарили: Jorj (1).