05.11.2019, 12:55 | #1 |
Участник
|
2012, корректировка фильтра
При выборе фильтра SalesOrder, необходимо чтобы выводились только заказы с пустым ServiceOrderType. Сейчас не работает.
X++: public void setFilterSales() { Query qry = new Query(); QueryBuildDataSource qbds = qry.addDataSource(tablenum(TmpCRMPreSalesTable)); QueryBuildRange qbr = qbds.addRange(fieldNum(TmpCRMSalesTable, ServiceOrderType)); if (SalesFilterComboBox.selection() == CRMSalesFilter::All) { qbrSalesOrder.value(SysQuery::valueUnlimited()); } else { qbrSalesOrder.value(queryValue(SalesFilterComboBox.selection())); if(CRMSalesFilter::SalesOrder) { qbrSalesOrder.value(SysQuery::valueEmptyString()); } } } Последний раз редактировалось GSP; 05.11.2019 в 13:49. |
|
05.11.2019, 14:02 | #2 |
Участник
|
X++: switch (SalesFilterComboBox.selection()) { case CRMSalesFilter::All : qbrSalesOrder.value(SysQuery::valueUnlimited()); break; case CRMSalesFilter::SalesOrder : qbrSalesOrder.value(SysQuery::valueEmptyString()); break; default : qbrSalesOrder.value(queryValue(SalesFilterComboBox.selection())); break; }
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
05.11.2019, 14:13 | #3 |
Участник
|
Так получается, что совсем ничего не выводится.
Нужно выводить заказы , у которых только ServiceOrderType пустой |
|
05.11.2019, 14:27 | #4 |
Участник
|
|
|
05.11.2019, 14:32 | #5 |
Участник
|
Вот это условие
if (CRMSalesFilter::SalesOrder) Синтаксически, конечно, допустимо, но логически смысла не имеет. Вы же, наверное, хотели эту константу с чем-то сравнить? Переменные qry, qbds, qbr в Вашем примере "повисли в воздухе". Они здесь никак не используются Из Вашего описания не понятно "кто на ком стоял". Поэтому я просто исправил логическую ошибку исходя из написанного кода. Если же это не работает, то Вам надо более подробно описать задачу 1. Поле ServiceOrderType - это одно из полей существующего источника данных формы? Я так понимаю, речь идет о какой-то временной таблице. Эта таблица является источником данных формы (в узле Data Sources в дизайнере формы указана)? 2. Переменная qbrSalesOrder - это Range по какому полю? Она имеет какое-то отношение к ServiceOrderType ? ----- Если ServiceOrderType - это перечисление (Base Enum), то, возможно, "пустое значение" - это вовсе не 0, а какое-то другое значение. Посмотрите, чему равно "пустое значение". Кстати, попробуйте просто значение 0 указать qbrSalesOrder.value("0");
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... Последний раз редактировалось Владимир Максимов; 05.11.2019 в 14:36. |
|
05.11.2019, 14:39 | #6 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Вот это условие
1. Поле ServiceOrderType - это одно из полей существующего источника данных формы? Я так понимаю, речь идет о какой-то временной таблице. Эта таблица является источником данных формы (в узле Data Sources в дизайнере формы указана)? 2. Переменная qbrSalesOrder - это Range по какому полю? Она имеет какое-то отношение к ServiceOrderType ? 2. X++: QueryBuildRange qbrSalesOrder; Изначально был такой код: X++: public void setFilterSales() { if (SalesFilterComboBox.selection() == CRMSalesFilter::All) { qbrSalesOrder.value(SysQuery::valueUnlimited()); } else { qbrSalesOrder.value(queryValue(SalesFilterComboBox.selection())); } } Вот и была мысль проверки через это условие |
|
05.11.2019, 14:44 | #7 |
Участник
|
|
|
05.11.2019, 15:14 | #8 |
Участник
|
Так поищите по коду формы, где происходит присвоение значения этой переменной. Должно быть что-то вроде
qbrSalesOrder = (...); Интересует, что стоит справа от знака равенства? Это фильтр по какому полю и по какой таблице? Есть какая-то связь с полем ServiceOrderType ?
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
05.11.2019, 16:00 | #9 |
Участник
|
Цитата:
X++: qbrSalesOrder = this.queryBuildDataSource().addRange(fieldNum(TmpCRMSalesTable, CRMSalesFilter));
element.setFilterSales(); setFilt - метод, где пишем логику всю со switch case Последний раз редактировалось GSP; 05.11.2019 в 16:02. |
|
05.11.2019, 16:12 | #10 |
Участник
|
1. Добавляете в ClassDeclaration строку
X++: QueryBuildRange qbrSalesOrder;
QueryBuildRange qbrServiceOrderType; // Новая переменная X++: qbrSalesOrder = this.queryBuildDataSource().addRange(fieldNum(TmpCRMSalesTable, CRMSalesFilter)); // Новая переменная qbrServiceOrderType = this.queryBuildDataSource().addRange(fieldNum(TmpCRMSalesTable, ServiceOrderType)); element.setFilterSales(); X++: public void setFilterSales() { if (SalesFilterComboBox.selection() == CRMSalesFilter::All) { qbrSalesOrder.value(SysQuery::valueUnlimited()); } else { qbrSalesOrder.value(queryValue(SalesFilterComboBox.selection())); } // Ограничение для новой переменной if (SalesFilterComboBox.selection() == CRMSalesFilter::SalesOrder) { qbrServiceOrderType.value(SysQuery::valueEmptyString()); } else { qbrServiceOrderType.value(SysQuery::valueUnlimited()); } }
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: GSP (1). |
11.11.2019, 12:46 | #11 |
Участник
|
|
|