Есть универсальный способ находить заданные пользователем фильтры в то числе если пользователь задал фильтр по полю, изначально не прошитому в 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));