Добрый день.
Например имеется объект 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); },