Фильтр для поля детали с редактируемым реестром

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

Нравится

1 комментарий
Лучший ответ

Добрый день.

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

Ниже привожу пример подобной фильтрации:

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

 

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