Настроил древовидный раздел согласно стандартным инструкциям, сама иерархи работает отлично, но есть кейс, фильтрация должна работать на дочерние объекты. Отсюда вопрос, есть ли возможность реализовать корректную фильтрацию по полям в случае с древовидным реестром(фильтрация только по родителям не подходит) как варианты рассматривал догружать родителя, если дочерний элемент попадает в выборку или отключать иерархичность раздела при фильтрации, оба варианта реализовать не получилось.

 

Надеюсь на скорый ответ.

Нравится

1 комментарий

Добрый день.

 

По дефолту поиск выполняется по первому уровню вложенности(иерархии) и это корректно, так реализована базовая логика. 

Аналогичный вопрос рассматривался в статье

 

Переопределить логику LookupPageViewModelGenerator  нет возможности.

Однако в будущих релизах планируется перевод иерархических реестров на Angular, где этот подход поменяется.

Показать все комментарии

Добрый день!

 

Пытаюсь реализовать быстрый фильтр формата чек-бокс у себя в разделе по аналогии с тем, как это сделано в разделе Обращения:



Изображение удалено.

 

В define добавляю CheckBoxFixedFilterStyle, заполняю properties, attributes, diff и methods по аналогии с CaseSection

Чек-бокс в разделе появился, но при его нажатии в консоли падает ошибка CheckBoxFixedFilterStyle.onClick is not a function

 

Подскажите, в чём может быть ошибка?

Нравится

1 комментарий

Добрый день, Ирина.



Прошу предоставить скриншот кода, где вызывается данный метод, + секцию define.



Попробуйте перед вызовом присвоить этот метод другой переменной и вызывать ее, возможно проблема с видимостью данной функции.

Показать все комментарии

Всем доброго дня! 

Добавила свои кастомные быстрые фильтры через аттрибуты и переопределение функции initQueryFilters , фильтры работают как нужно. Теперь не могу найти где находится базовый пересчет количества. Может быть кто-то знает.

Изображение удалено.

Прикрепленные файлы

Нравится

6 комментариев
              var activeViewName = this.getActiveViewName();
              if (activeViewName === this.get("AnalyticsDataViewName")) {
                this.sandbox.publish("SectionUpdateFilter",
                                     null, [this.getQuickFilterModuleId()]);
              }

Пробуйте запустить такой код после применения ваших фильтров

не помогло, пробовала также и без проверки условия.

Можете отправить полный код, где делаете фильтр?

Трефилов Павел Сергеевич,

define("OrderSectionV2", ["ProcessModuleUtilities","BaseFiltersGenerateModule","css!UsrStylesOrderSectionV2"], function(ProcessModuleUtilities,BaseFiltersGenerateModule) {
	return {
		entitySchemaName: "Order",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		attributes: {
            "UsrPPNumberFilter": {
                "dataValueType": Terrasoft.DataValueType.TEXT
            },
            "UsrPPNumbers": {
                "dataValueType": Terrasoft.DataValueType.TEXT,
                "values": ""
            },
			"UsrMyNumberFilter": {
                "dataValueType": Terrasoft.DataValueType.TEXT
            },
            "UsrMyNumbers": {
                "dataValueType": Terrasoft.DataValueType.TEXT,
                "values": ""
            },
			"UsrContrFilter": {
                "dataValueType": Terrasoft.DataValueType.TEXT
            },
            "UsrContr": {
                "dataValueType": Terrasoft.DataValueType.TEXT,
                "values": ""
            },
			"UsrNameFilter": {
                "dataValueType": Terrasoft.DataValueType.TEXT
            },
            "UsrMyName": {
                "dataValueType": Terrasoft.DataValueType.TEXT,
                "values": ""
            },
			"UsrQua": {
                "dataValueType": Terrasoft.DataValueType.INTEGER,
                "values": ""
            },
        },
		diff: /**SCHEMA_DIFF*/[	
			{
                "operation": "insert",
                "name": "MyFilterContainer",
                "parentName": "LeftGridUtilsContainer",
                "propertyName": "items",
                "index": 3,
                "values": {
                    "id": "MyFilterContainer",
                    "itemType": this.Terrasoft.ViewItemType.CONTAINER,
                    "items": [],
 
                }
            },
 
 
			{
                "operation": "insert",
                "parentName": "MyFilterContainer",
                "propertyName": "items",
                "name": "PP_Number",
				"index": 1,
                "values": {
                    "bindTo": "UsrPPNumberFilter",
                    "caption": {"bindTo": "Resources.Strings.UsrPPNumberCaption"},
 
					"controlConfig": {
                        "change": {
                            "bindTo": "ppNumChanged"
                        }
                    }
 
                }
            },
 
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "DeleteButton1",
					"index": 2,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.del_but"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "onDel" },
					}
			},
			{
                "operation": "insert",
                "parentName": "MyFilterContainer",
                "propertyName": "items",
                "name": "my_Number",
				"index": 3,
                "values": {
                    "bindTo": "UsrMyNumberFilter",
                    "caption": {"bindTo": "Resources.Strings.myNumber"},
 
					"controlConfig": {
                        "change": {
                            "bindTo": "myNumberChanged"
                        }
                    }
 
                }
            },
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "DeleteButton2",
					"index": 4,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.del_but"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "onDel2" },
					}
			},
			{
                "operation": "insert",
                "parentName": "MyFilterContainer",
                "propertyName": "items",
                "name": "my_Contr",
				"index": 5,
                "values": {
                    "bindTo": "UsrContrFilter",
                    "caption": {"bindTo": "Resources.Strings.myContr"},
 
					"controlConfig": {
                        "change": {
                            "bindTo": "myContrChanged"
                        }
                    }
 
                }
            },
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "DeleteButton3",
					"index": 6,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.del_but"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "onDel3" },
					}
			},
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "PeriodSelectButton",
					"index": 7,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.LookupIcon"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "openMyLook" },
					}
			},
			{
                "operation": "insert",
                "parentName": "MyFilterContainer",
                "propertyName": "items",
                "name": "my_Name",
				"index": 8,
                "values": {
                    "bindTo": "UsrNameFilter",
                    "caption": {"bindTo": "Resources.Strings.myName"},
 
					"controlConfig": {
                        "change": {
                            "bindTo": "myNameChanged"
                        }
                    }
 
                }
            },
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "DeleteButton4",
					"index": 9,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.del_but"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "onDel4" },
					}
			},
 
        ]/**SCHEMA_DIFF*/,
 
		methods: {
 
		clearFilter: function() {
			this.set("UsrPPNumberFilter", "");
			this.onUsrFilterChanged();
		},
 
		onUsrFilterChanged: function() {
			this.reloadGridData();
		},
 
		initQueryFilters: function(esq) {
			this.callParent(arguments);
			//номер в пп
			var usrEmailFilter = this.get("UsrPPNumbers");
			if (usrEmailFilter) {
				esq.filters.add("UsrPPNumberFilter", this.Terrasoft.createColumnFilterWithParameter(
					this.Terrasoft.ComparisonType.CONTAIN, "UsrNumberInPP".substring(), usrEmailFilter));
			} else {
				esq.filters.removeByKey("UsrPPNumberFilter");
			}		
 
			//Номер
			var usrMyFilter = this.get("UsrMyNumbers");
			if (usrMyFilter) {
				esq.filters.add("UsrMyNumberFilter", this.Terrasoft.createColumnFilterWithParameter(
					this.Terrasoft.ComparisonType.CONTAIN, "Number".substring(), usrMyFilter));
			} else {
				esq.filters.removeByKey("UsrMyNumberFilter");
			}
			//Контрагент
			var usrContrFilter = this.get("UsrContr");
			if (usrContrFilter) {
				esq.filters.add("UsrContrFilter", this.Terrasoft.createColumnFilterWithParameter(
					this.Terrasoft.ComparisonType.CONTAIN, "Account.Name".substring(), usrContrFilter));
			} else {
				esq.filters.removeByKey("UsrContrFilter");
			}
			//Название
			var usrNameFilter = this.get("UsrMyName");
			if (usrNameFilter) {
				esq.filters.add("UsrNameFilter", this.Terrasoft.createColumnFilterWithParameter(
					this.Terrasoft.ComparisonType.CONTAIN, "UsrName".substring(), usrNameFilter));
			} else {
				esq.filters.removeByKey("UsrNameFilter");
			}
 
 
		},
 
		ppNumChanged: function(a, b, c) {
			this.set("UsrPPNumbers", a);
			this.onUsrFilterChanged();
 
		},
 
		myNumberChanged: function(a, b, c) {
			this.set("UsrMyNumbers", a);
			this.onUsrFilterChanged();
		},
 
		myContrChanged: function(a, b, c) {
			this.set("UsrContr", a);
			this.onUsrFilterChanged();
		},
 
		myNameChanged: function(a, b, c) {
			this.set("UsrMyName", a);
			this.onUsrFilterChanged();	
		},
 
		addCallBack: function(args) {
		  this.selectedRows = args.selectedRows.getItems();
 
			var ids = [];
			var names = [];
			this.selectedRows.forEach(function(item) {
				ids.push(item.Id);
				names.push(item.Name);
		   });
			this.set("UsrContr",names);
			document.getElementById('OrderSectionV2my_ContrTextEdit-el').value = names;
			document.getElementById('OrderSectionV2my_ContrTextEdit-el').focus();
			document.getElementById('OrderSectionV2my_ContrTextEdit-el').blur();
		},
 
 		openMyLook: function(){
			var config = {
				entitySchemaName: "Account",
				columns: ["Name"]
			};
			this.openLookup(config, this.addCallBack, this);
		},
		onDel: function(){
			document.getElementById('OrderSectionV2PP_NumberTextEdit-el').value = null;
			this.set("UsrPPNumberFilter", "");
			this.onUsrFilterChanged();
		},
		onDel2: function(){
			document.getElementById('OrderSectionV2my_NumberTextEdit-el').value = null;
			this.set("UsrMyNumberFilter", "");
			this.onUsrFilterChanged();
		},
		onDel3: function(){
			document.getElementById('OrderSectionV2my_ContrTextEdit-el').value = null;
			this.set("UsrContrFilter", "");
			this.onUsrFilterChanged();
		},
		onDel4: function(){
			document.getElementById('OrderSectionV2my_NameTextEdit-el').value = null;
			this.set("UsrNameFilter", "");
			this.onUsrFilterChanged();
		},
 
		}
	};
});

 

Анастасия Шумейко,

Добрый день.

 

Вам нужно проверить уходит ли запрос на получение количества записей.

Если запрос уходит, то нужно проверить фильтрацию которая уходит в запросе. Возможно, что количество обновляется, но неправильно, поскольку используется та же фильтрация.

Если запрос не уходит, то нужно проверить как он формируется в базовой версии и вызвать обновление количества записей.

Анастасія Шумейко,

А поделитесь, пожалуйста, способом сделать свои кастомные быстрые фильтры ?

Показать все комментарии

Коллеги, добрый день!

Проблема в следующем:

При создании стандартного фильтра (по группе ответственных) в разделе Обращения, на страницу выводится список обращений не только данной группы, но и других групп.

Оказалось, что при создании такого фильтра, по умолчанию выставляется  условие сравнения "СОДЕРЖИТ", а не  "=" (равно).  

Соответственно, при таком фильтре, в список обращений "по группе" могут попасть обращения других групп, имена которых частично совпадают.

Можно ли как-то изменить "условие сравнения по умолчанию" для стандартного фильтра?

Спасибо!

Нравится

1 комментарий

Добрый день!

Стандартный фильтр действительно работает по принципу "СОДЕРЖИТ". Внести изменения в его условия сравнения возможности нет. 

Рекомендуем использовать расширенный фильтр, где есть возможность выбрать "=".

Показать все комментарии

Рады сообщить о выпуске видеоурока по работе с тегами в bpm'online.
Узнайте, как использовать теги в системе для быстрого и удобного поиска необходимой информации по ключевым словам. Данный видеоурок ознакомит вас с видами тегов в bpm'online и их функциональными особенностями. Если вам интересно, как создать тег, как тегировать запись и как отфильтровать записи в разделе по тегам, не проходите мимо!

Видео доступно по ссылке: Работа с тегами в bpm'online

Больше обучающих видео смотрите на сайте академии Terrasoft.

Нравится

Поделиться

0 комментариев
Показать все комментарии

Необходимо улучшить поиск в мобильном приложении. Поиска по основной колонке зачастую недостаточно. Как и добавлять колонки в конфигурацию раздела.Как минимум нужна возможность пользоваться настроенными группами (например, работая в полях, найти клиентов, расположенных в данном районе)

4 комментария

Добрый день, Владимир!

Добавлять дополнительные поля в мобильное приложение возможно с версии 7.5, посредством мастера мобильного приложения.
Расширенный поиск по всем полям уже запланирован, в версию 7.7 он еще не войдет, но в последующие планируем включить.
Что касается добавления работы со статическими группами\тегами – планируем в 7.7.

Добрый день!

В релизе 7.11 реализована функциональность быстрой фильтрации в разделах и деталях мобильного приложения. Для поиска нужных записей в разделе (или на детали) можно настроить "быстрый" фильтр по колонкам объекта. 

Наталия Крылова,

Добрый день! А как можно искать в мобильном приложении не по самим колонкам объекта, а по связанным колонкам. Например, находясь в активностях, отфильтровать активности по контрагенту определенного типа, и т.п.

Фильтровать по связанным колонкам нельзя, зато скоро обещают добавить динамические группы. То есть в веб-версии настраиваем, потом в мобильной в онлайн-режиме заходим в группу и фильтруем по её условию.

Показать все комментарии

Есть ли какой-нибудь кейс установки фильтров в модуле раздела (файлы с названием Section.js)? Нужен именно быстрый фильтр, а не fixedFilter. fixedFilter написан так, что если поле фильтрации лукапное, то он считает, что это поле - "Owner" и подставляет в выбор текущего пользователя. Мне же нужно фильтровать по кастомному полю.
В клиентских схемах нашел модуль QuickFilterHelper, но не разобрался как с ним работать, а примеров работы с ним не нашел.
Если у кого-то может предоставить готовые примеры фильтрации по кастомному полю - буду премного благодарен!

Нравится

5 комментариев

Богдан, здравствуйте!

Пример установки быстрого фильтра в разделе по указанной колонке, при нажатии на кнопку в другом разделе:

var module = "SectionModuleV2";
var section = "ActivitySectionV2";
var filterColumnName = "Type";
var filterValue = "Задача";
var filterState = {
                ignoreFixedFilters: true,
                ignoreFolderFilters: true,
                customFilterState: {}
};
filterState.customFilterState[filterColumnName] = {
                displayValue: filterValue
};
var state = this.sandbox.publish("GetHistoryState");
var newState = this.Terrasoft.deepClone(state.state || {});
this.Ext.apply(newState, {
                activeTab: "mainView",
                filterState: filterState,
                searchState: true,
                moduleId: "ViewModule_SectionModule"
});
var storage = this.Terrasoft.configuration.Storage.Filters = this.Terrasoft.configuration.Storage.Filters || {};
var sessionFilters = storage[section] = storage[section] || {};
sessionFilters.CustomFilters = {};
var filter = Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.START_WITH, filterColumnName, filterValue);
sessionFilters.CustomFilters[filterColumnName] = {
                value: filterValue,
                displayValue: filterValue,
                filter: filter.serialize({serializeFilterManagerInfo: true})
};
this.sandbox.publish("PushHistoryState", {
                hash: this.Terrasoft.combinePath(module, section),
                stateObj: newState
});

Благодарю! Вроде работает, но в консоли вот такая ошибка.

Да, и фильтр работает только со второго раза.
Первый раз, если перейти по кнопке - фильтр применяется, но список в разделе пуст.
Перейдя по кнопке второй раз - список отображается нормально.
И так для каждого значения фильтра.

"Вильшанский Дмитрий" написал:

Богдан, здравствуйте!

Пример установки быстрого фильтра в разделе по указанной колонке, при нажатии на кнопку в другом разделе:

var module = "SectionModuleV2";

var section = "ActivitySectionV2";

var filterColumnName = "Type";

var filterValue = "Задача";

var filterState = {

                ignoreFixedFilters: true,

                ignoreFolderFilters: true,

                customFilterState: {}

};

filterState.customFilterState[filterColumnName] = {

                displayValue: filterValue

};

var state = this.sandbox.publish("GetHistoryState");

var newState = this.Terrasoft.deepClone(state.state || {});

this.Ext.apply(newState, {

                activeTab: "mainView",

                filterState: filterState,

                searchState: true,

                moduleId: "ViewModule_SectionModule"

});

var storage = this.Terrasoft.configuration.Storage.Filters = this.Terrasoft.configuration.Storage.Filters || {};

var sessionFilters = storage[section] = storage[section] || {};

sessionFilters.CustomFilters = {};

var filter = Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.START_WITH, filterColumnName, filterValue);

sessionFilters.CustomFilters[filterColumnName] = {

                value: filterValue,

                displayValue: filterValue,

                filter: filter.serialize({serializeFilterManagerInfo: true})

};

this.sandbox.publish("PushHistoryState", {

                hash: this.Terrasoft.combinePath(module, section),

                stateObj: newState

});

Добрый день!
В вашем примере вы говорите о кнопке в разделе - скажите, пожалуйста, как можно добавить свою кнопку в раздел - именно кнопку, а не действие ( в SDK приведен пример с действием)

В вашем примере, filterValue принимает фиксированное значение "Задача", скажите, пожалуйста, можно ли добавить в сам раздел строку для ввода, с которой можно считывать значение?

Дарья, реализацию кнопки в разделе вы можете посмотреть в схеме BaseSectionV2 (например, кнопка "AddRecordButton").

Показать все комментарии

День добрый, коллеги!

Возникла следующая проблема - при использовании быстрого фильтра по дробному числу в поле ввода значения некоторые пользователи не могут ввести число, больше 8-ми символов, хотя размер числа установлен 15 и точность 4, а некоторые могут. А в фильтрах Workspace-а уже все пользователи могут ввести только 11 символов.

Может кто сталкивался с данной проблемой?
Заранее спасибо.

Нравится

3 комментария

Какая используется версия бинарников?

Александр, добрый день.
Там, где работает, бинарники 3.3.2.210
А где нет - 3.3.2.43

Как я понимаю, всё дело в этом?

Денис,

да, исправления были внесены в новую версию бинарных файлов.

Вам необходимо обновить бинарные файлы.

По запросу в техническую поддержку (support@terrasoft.ru) мы можем предоставить Вам самую актуальную версию (на данный момент - 3.3.2.311).

Показать все комментарии

Иногда и такое нужно. Как пример -- есть окно с несколькими гридами на основе записей меморидатасет. Записей много -- поэтому у клиента возникает необходимость их быстро искать.
Сам фильтр сложно реализовать(потому что при закрытии, как известно, меморидатасет очищается. тем более, если функционал сложный, то при "собирании заново" тратится время на проверку всех условий и т.п.), но можно сделать иначе: просто выделять нужные записи.

Как это работает -- ищет по полям, где содержится слово, введенное в поле (то есть, принцип тот же, что и в обычном поиске, тип поиска можно поменять в системных настройках) -- и выделяет найденные записи. При нажатии на "крестик"(то есть "убираем" быстрый поиск) оно снимает выделение.

Этот код можно добавить прямо в скрипт scr_BaseMemDSGridArea, а в окошке wnd_BaseMemDSGridArea прописать на гриде события grdDataOnQuickFilter (запуск быстрого фильтра) и grdDataOnClearFilter (снятие быстрого фильтра).
Еще момент -- код "ориентируется" на поле ID в мемори датасете, поэтому, если у Вас такого поля нет, то нужно или добавить его, или соответствующе изменять функции.

//-------- quick filter  --------------

function grdDataOnQuickFilter(DataGrid, DataField, Value, QuickFilterLikeType, DoFilter, DoQuickFilter) {
        DataGrid.DisableEvents();  //debugger;
        var QuickFilterLikeType = GetSystemParameterValueEx('QuickFilterLikeType');            
        LastSearchRecordID = LocateOnSearchRecord(DataGrid, dlData.Dataset,DataField.Name,Value,QuickFilterLikeType);
        DataGrid.EnableEvents();
        if (!!LastSearchRecordID) {
                if (dlData.Dataset('ID') != LastSearchRecordID) {
                        DataGrid.UnSelectRow(dlData.Dataset('ID'));
                }
        } else {
            DataGrid.UnSelectRow(dlData.Dataset('ID'));
        }
}



function LocateOnSearchRecord(Grid, DS, DataFieldName, DataFieldValue, FilterType) {
        //debugger;
        var Count = DS.RecordsCount;
        if (!Count) {
                return;
        }      
        var SelectedIDsCount = Grid.SelectedIDs.Count;
        if (!!SelectedIDsCount) {
                Grid = UnSelectSelectedIDs(Grid);
        } else {    
                 Grid.UnSelectRow(DS('ID'));
        }
        DS.GotoFirst();
        var SearchArray = new Array();
        for (var i = 0; i Count; i++) {
                if (IsSearchValueInCurrentDSRecord(DS,DataFieldName,DataFieldValue, FilterType)) {
                         SearchArray.push(DS('ID'));
                }
                DS.GotoNext(); 
        }
        var LastSearchRecordID = null;
        if (!!SearchArray.length) {
                SelectSearchRecords(Grid, SearchArray);
                LastSearchRecordID = SearchArray[SearchArray.length - 1];
        }
        return LastSearchRecordID;
}

function  UnSelectSelectedIDs(Grid) {           //
        var Count = Grid.SelectedIDs.Count;
        var SelectedIDs  =  GetArrayByCollection(Grid.SelectedIDs);
        for (var i=0; i Count; i++) {
                Grid.UnSelectRow(SelectedIDs[i]);
        }
        return  Grid;
}
function IsSearchValueInCurrentDSRecord(DS,DataFieldName,DataFieldValue, FilterType) {   //debugger;
        var CurrentDataFieldValue = DS(DataFieldName);
        CurrentDataFieldValue = CurrentDataFieldValue.toString();
        DataFieldValue = DataFieldValue.toString();
        var Result = false;
        switch (FilterType.toString()) {
                case qfltEqual:
                        Result = (CurrentDataFieldValue == DataFieldValue);     //поле равно значению
                break;         
                case qfltDefault:
                case qfltContain:
                        Result = (CurrentDataFieldValue.indexOf(DataFieldValue) != -1);  //значение содержится в поле
                break;
                case qfltStartsWith:
                        Result = (CurrentDataFieldValue.substr(0,DataFieldValue.length) == DataFieldValue);  //поле начинается со значения
                break;          
                case qfltEndsWith:
                        Result = (CurrentDataFieldValue.substr(CurrentDataFieldValue.length-DataFieldValue.length+1, DataFieldValue.length) == DataFieldValue);  //поле заканчивается значением
                break;
        }
        return Result;
}

function SelectSearchRecords(Grid, SearchArray) {
        for (var i=0; i SearchArray.length; i++) {
                Grid.SelectRow(SearchArray[i]);
        }
}

function grdDataOnClearFilter(DataGrid) {
        DataGrid.DisableEvents();
        UnSelectSelectedIDs(DataGrid)  ;
        DataGrid.EnableEvents();
}

Нравится

Поделиться

0 комментариев
Показать все комментарии

Здравствуйте, уважаемые коллеги!

Заметил такую штуку. Один и тот же датасет в конфигурации 3.3.2.198 и в 3.4.0.38 ведёт себя по-разному при добавлении быстрого фильтра в реестре. В 3.3.2 всё отлично работает, но в 3.4 реестр остаётся пустым. Профайлер показывает следующее:

в 3.3.2:

exec sp_executesql N'SELECT TOP 40
        [tbl_Document].[ID] AS [ID],
        [tbl_Document].[Code] AS [Code],
        case
        when [tbl_Document].[Description] is null
        then 0
        else 1
end  AS [IsHasDescription]
FROM
        [dbo].[tbl_Document] AS [tbl_Document]
WHERE((case
        when [tbl_Document].[Description] is null
        then 0
        else 1
end  = @P1))'
,N'@P1 int',1

в 3.4.0:

exec sp_executesql N'SELECT TOP 40
        [tbl_Document].[ID] AS [ID],
        [tbl_Document].[Code] AS [Code],
        case
        when [tbl_Document].[Description] is null
        then 0
        else 1
end  AS [IsHasDescription]
FROM
        [dbo].[tbl_Document] AS [tbl_Document]
WHERE((NULL = @P1))'
,N'@P1 int',1

Как тут быть?

Нравится

3 комментария

Анатолий, попробуйте поместить CustomSQL в subselect. Возможно ситуация изменится.

Спасибо, Стас! Помогло! Да, в subselecte ест вполне корректно. Давным-давно Дима Мушенко открыл этот способ обхитрить ядро, но мне не пришло в голову применять этот трюк на 3.4.
Ох, чёрт, значит, при переносе с 3.3 на 3.4 надо все такие колонки в subselect засунуть. Хоть бы их немного оказалось... :smile:

Именно, это Димин способ. :)

Показать все комментарии