|
|
#1 |
|
Участник
|
Корректное наложение filter by selection
Добрый день.
Сразу скажу, что нижеописанное относится к Axapta 3.0. Как известно, при использовании "filter by selection" (правый клик по полю на grid'е -> фильтр) текущее значение поля интерпретируется как регулярное выражение, поэтому, если там есть специальные символы (*, " и т.п.), фильтр работает неожиданно/неправильно (т.к. выбранное значение обычно не зафильтровывается). Я вот попытался исправить это добавлением такого кода в SysSetupFormRun.task: Код: //ysch: Корректное наложение 'filter by selection':
if (_p1 == #taskShortCutMenuFilter) {
formDataSource = this.objectSet();
if (formDataSource && formDataSource.queryRun()) {
formControl = this.selectedControl();
if (classidget(formControl) == classnum(formStringControl)) {
formStringControl = formControl;
if (formStringControl.dataField()) {
formDataSource.filter(formStringControl.dataField(), queryvalue(formStringControl.valueStr()));
return 1;
}
}
}
}Последний раз редактировалось Ярослав Щекин; 29.07.2014 в 17:20. |
|
|
|
|
#2 |
|
Участник
|
Я бы проверил корректность выбора датасорса на формах где их несколько.
Ваша вариант похоже заточен на формочки с одним датасорсом. |
|
|
|
|
#3 |
|
Участник
|
Да вроде бы работает и на формах с несколькими datasource... Буду ещё тестировать.
|
|
|
|
|
#4 |
|
Участник
|
В процессе тестирования выяснилось, что не работает с полями из Datasource-ов с linkType == InnerJoin, поэтому теперь тестируем такой вариант:
Код: if (_p1 == #taskShortCutMenuFilter) {
formControl = this.selectedControl();
if (formControl && classidget(formControl) == classnum(formStringControl)) {
formStringControl = formControl;
if (formStringControl.dataField()) {
for (f = 1; f <= this.dataSourceCount(); f++) {
formDataSource = this.dataSource(f);
if (formDataSource.id() == formStringControl.dataSource()) {
formDataSource.filter(formStringControl.dataField(), queryvalue(formStringControl.valueStr()));
joinSourceId = formDataSource.joinSource();
if (joinSourceId && formDataSource.linkType() == FormLinkType::InnerJoin) {
for (i = 1; i <= this.dataSourceCount(); i++) {
formDataSource = this.dataSource(i);
if (formDataSource.id() == joinSourceId) {
formDataSource.research();
break;
}
}
}
return 1;
}
}
}
}
} |
|
|
|
|
#5 |
|
Участник
|
|
|
|
|
|
#6 |
|
Участник
|
|
|
|
|
|
|