Добрый день. Подскажите, пожалуйста, как сделать фильтр в детали с редактируемым реестром для справочного поля, что бы при выборе из него убирались уже выбранные записи. К примеру есть список овощей, и при добавлении записи с выбранной "капустой", выбрать снова этот овощ нельзя для другой записи
Нравится
Добрый день.
Вам нужно добавить дополнительную фильтрацию для справочного поля и отображать только те значения, которые не используются в других записях этой детали.
Ниже привожу пример подобной фильтрации:
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