Добрый день.
Например имеется объект UsrEntity. Хочу открыть справочник для добавления элемента на деталь с возможностью выбора из списка этого объекта. Но, чтобы в списке НЕ БЫЛО тех элементов, которые удовлетворяют условию UsrEntity.UsrA in existedA && UsrEntity.UsrB in existedB && UsrEntity.UsrC in existedC. Пока вижу только один путь это создать представление в SQL и открывать это представление. А возможно ли сделать подобный фильтр на фронте? Может быть есть возможность сделать кастомный фильтр и вставить в конфиг при открытии справочника?
Нравится
Решил задачу. Можно же просто UsrEntity.UsrA not in existedA || UsrEntity.UsrB not in existedB || UsrEntity.UsrC not in existedC.
Но так как по колонке A, я уже фильтровал, достаточно было только B и C. А ещё засунул в группу фильтров, другую группу фильтров. Не знал, что так можно
addRecord: function () {
let activeRowId = this.get("ActiveRow");
if (!activeRowId) {
return;
}
const gridData = this.getGridData();
let rowData = gridData.get(activeRowId).values;
if (rowData.IDSBParent){
activeRowId = rowData.IDSBParent.value;
rowData = gridData.get(activeRowId).values;
}
let filterCollection = Terrasoft.createFilterGroup();
const productFilter = Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
"IDSBProductId", rowData.IDSBProduct.value);
filterCollection.add("productFilter", productFilter);
let existed = [];
gridData.collection.items.forEach(function(item){
if (!item.values.IDSBParent){
return;
}
if (item.values.IDSBParent.value !== activeRowId){
return;
}
existed.push(item.values);
}, this);
let notExistedFilterCollection = Terrasoft.createFilterGroup();
notExistedFilterCollection.logicalComparisonTypes = Terrasoft.LogicalOperatorType.OR;
let existsWarehouseFilter = Terrasoft.createColumnInFilterWithParameters("IDSBWarehouseId", existed.map(item => item.IDSBWarehouse.value));
existsWarehouseFilter.comparisonType = Terrasoft.ComparisonType.NOT_EQUAL;
notExistedFilterCollection.add(existsWarehouseFilter);
let existsPercentFilter = Terrasoft.createColumnInFilterWithParameters("IDSBPercent", existed.map(item => item.IDSBPercent));
existsPercentFilter.comparisonType = Terrasoft.ComparisonType.NOT_EQUAL;
notExistedFilterCollection.add(existsPercentFilter);
filterCollection.add("notExistedFilterCollection", notExistedFilterCollection);
const config = {
entitySchemaName: "IDSBVwExpiredRemaining",
multiSelect: true,
columns: ["IDSBWarehouseId", "IDSBProductId", "IDSBPercent"],
filters: filterCollection
};
this.openLookup(config, this.IDSBAddSelectedProducts, this);
},