Добрый день. Подскажите, пожалуйста, как сделать фильтр в детали с редактируемым реестром для справочного поля, что бы при выборе из него убирались уже выбранные записи. К примеру есть список овощей, и при добавлении записи с выбранной "капустой", выбрать снова этот овощ нельзя для другой записи
Нравится
Добрый день.
Вам нужно добавить дополнительную фильтрацию для справочного поля и отображать только те значения, которые не используются в других записях этой детали.
Ниже привожу пример подобной фильтрации:
if (project && project.value) { var filterGroup = this.Terrasoft.createFilterGroup(); var subFilters = Terrasoft.createFilterGroup(); subFilters.addItem(Terrasoft.createColumnFilterWithParameter( Terrasoft.ComparisonType.EQUAL, "EWBProject", project.value)); filterGroup.addItem(this.Terrasoft.createExistsFilter("[BTProjectDisease:BTDiseaseType:Id].Id", subFilters)); var subFilters1 = Terrasoft.createFilterGroup(); subFilters1.addItem(Terrasoft.createColumnFilterWithParameter( Terrasoft.ComparisonType.EQUAL, "ProjectSpecification", this.get("MasterRecordId"))); filterGroup.addItem(this.Terrasoft.createNotExistsFilter(" [SpecificationByDiseaseType:DiseaseType:Id].Id", subFilters1)); }
В результате в базу данных сформируется такой SQL-запрос:
SELECT [BTDiseaseType].[Id] [Id], [BTDiseaseType].[Name] [Name], [BTDiseaseType].[BTTherapeuticAreaId] [BTTherapeuticAreaId], [BTTherapeuticArea].[Name] [BTTherapeuticArea.Name] FROM [dbo].[BTDiseaseType] [BTDiseaseType] WITH(NOLOCK) LEFT OUTER JOIN [dbo].[BTTherapeuticarea] [BTTherapeuticArea] WITH(NOLOCK) ON ([BTTherapeuticArea].[Id] = [BTDiseaseType].[BTTherapeuticAreaId]) WHERE (EXISTS ( SELECT [SubBTProjectDisease].[Id] [Id] FROM [dbo].[BTProjectDisease] [SubBTProjectDisease] WITH(NOLOCK) WHERE [SubBTProjectDisease].[BTDiseaseTypeId] = [BTDiseaseType].[Id] AND [SubBTProjectDisease].[EWBProjectId] = @EWBProjectId) AND NOT EXISTS ( SELECT [SubSpecificationByDiseaseType].[Id] [Id] FROM [dbo].[SpecificationByDiseaseType] [SubSpecificationByDiseaseType] WITH(NOLOCK) WHERE [SubSpecificationByDiseaseType].[DiseaseTypeId] = [BTDiseaseType].[Id] AND [SubSpecificationByDiseaseType].[ProjectSpecificationId] = @ProjectSpecificationId)) ORDER BY [BTTherapeuticArea.Name] DESC
Добрый день.
Вам нужно добавить дополнительную фильтрацию для справочного поля и отображать только те значения, которые не используются в других записях этой детали.
Ниже привожу пример подобной фильтрации:
if (project && project.value) { var filterGroup = this.Terrasoft.createFilterGroup(); var subFilters = Terrasoft.createFilterGroup(); subFilters.addItem(Terrasoft.createColumnFilterWithParameter( Terrasoft.ComparisonType.EQUAL, "EWBProject", project.value)); filterGroup.addItem(this.Terrasoft.createExistsFilter("[BTProjectDisease:BTDiseaseType:Id].Id", subFilters)); var subFilters1 = Terrasoft.createFilterGroup(); subFilters1.addItem(Terrasoft.createColumnFilterWithParameter( Terrasoft.ComparisonType.EQUAL, "ProjectSpecification", this.get("MasterRecordId"))); filterGroup.addItem(this.Terrasoft.createNotExistsFilter(" [SpecificationByDiseaseType:DiseaseType:Id].Id", subFilters1)); }
В результате в базу данных сформируется такой SQL-запрос:
SELECT [BTDiseaseType].[Id] [Id], [BTDiseaseType].[Name] [Name], [BTDiseaseType].[BTTherapeuticAreaId] [BTTherapeuticAreaId], [BTTherapeuticArea].[Name] [BTTherapeuticArea.Name] FROM [dbo].[BTDiseaseType] [BTDiseaseType] WITH(NOLOCK) LEFT OUTER JOIN [dbo].[BTTherapeuticarea] [BTTherapeuticArea] WITH(NOLOCK) ON ([BTTherapeuticArea].[Id] = [BTDiseaseType].[BTTherapeuticAreaId]) WHERE (EXISTS ( SELECT [SubBTProjectDisease].[Id] [Id] FROM [dbo].[BTProjectDisease] [SubBTProjectDisease] WITH(NOLOCK) WHERE [SubBTProjectDisease].[BTDiseaseTypeId] = [BTDiseaseType].[Id] AND [SubBTProjectDisease].[EWBProjectId] = @EWBProjectId) AND NOT EXISTS ( SELECT [SubSpecificationByDiseaseType].[Id] [Id] FROM [dbo].[SpecificationByDiseaseType] [SubSpecificationByDiseaseType] WITH(NOLOCK) WHERE [SubSpecificationByDiseaseType].[DiseaseTypeId] = [BTDiseaseType].[Id] AND [SubSpecificationByDiseaseType].[ProjectSpecificationId] = @ProjectSpecificationId)) ORDER BY [BTTherapeuticArea.Name] DESC