|  29.07.2014, 17:02 | #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. | 
|  | 
|  29.07.2014, 17:55 | #2 | 
| Участник | 
			
			Я бы проверил корректность выбора датасорса на формах где их несколько. Ваша вариант похоже заточен на формочки с одним датасорсом. | 
|  | 
|  29.07.2014, 20:25 | #3 | 
| Участник | 
			
			Да вроде бы работает и на формах с несколькими datasource... Буду ещё тестировать.
		 | 
|  | 
|  01.08.2014, 09:36 | #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;
               }
            }
         }
      }
   } | 
|  | 
|  01.08.2014, 09:59 | #5 | 
| Участник | |
|  | 
|  01.08.2014, 10:35 | #6 | 
| Участник | |
|  | 
|  | 
| 
 |