Показать сообщение отдельно
Старый 18.11.2020, 09:46   #8  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Есть универсальный способ находить заданные пользователем фильтры в то числе если пользователь задал фильтр по полю, изначально не прошитому в Query.

Данная функция возвращает значение фильтра по заданному Query, коду таблицы и коду поля в таблице.Если фильтр не найден или не задан, то возвращает пустую строку.

X++:
    str     getRangeValue(Query _query, TableId _tableId, FieldId _fieldId)
    {
        QueryBuildDataSource    innerQbds;
        QueryBuildRange         innerQbr;
        int                     idx;
        str                     ret;

        innerQbds = _query.dataSourceTable(_tableId);

        if (innerQbds && innerQbds.enabled())
        {
            innerQbr = innerQbds.findRange(_fieldId);
            if (innerQbr && innerQbr.value())
            {
                ret = innerQbr.value();
            }
            else
            {
                for (idx = 1; idx <= _query.queryFilterCount(); idx++)
                {
                    if (_query.queryFilter(idx).dataSource().name() == innerQbds.name() && _query.queryFilter(idx).value())
                    {
                        ret = _query.queryFilter(idx).value();
                        break;
                    }
                }
            }
        }

        return ret;
    }
Для вашего случая вызов этой функции будет выглядеть так:
X++:
getRangeValue(q, tableNum(CustTransOpen), fieldnum(CustTransOpen, dueDate));
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/

Последний раз редактировалось Ace of Database; 18.11.2020 в 09:52.
За это сообщение автора поблагодарили: sukhanchik (6), alicedr (1).