Подскажите какой метод (название метода и файла) отвечает за нажатие этой кнопки? 

Нравится

1 комментарий

Добрый день.

При нажатии этой кнопки срабатывает метод applySimpleFilter из файла CustomFilterViewModelV2.

Показать все комментарии
  updateFilters: function (filter) {
 
                    var esq = this.getGridDataESQ();
                    switch(filter) {
                        case "TsOwner":
                            var user = this.Terrasoft.SysValue.CURRENT_USER_CONTACT.value;
                           	esq.filters.add("CurrentUser", this.Terrasoft.createColumnFilterWithParameter(
                                this.Terrasoft.ComparisonType.EQUAL, "TsOwner", user)); 
                            break;
                        case "TsOt": 
                            esq.filters.add("NotCurrentUser", this.Terrasoft.createColumnFilterWithParameter(
                                this.Terrasoft.ComparisonType.EQUAL, "TsOwner", user)); 
                            break;   
                    }
                },

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

Нравится

8 комментариев

Добрый день,
предоставьте, пожалуйста, конфигурацию кнопки в массиве diff.

Mykhailo Storozhuk,

 {

                    "operation": "insert",

                    "name": "SearchQueryButton",

                    "parentName": "ActionButtonsContainer",

                    "propertyName": "items",

                    "values": {

                        "caption": "Все клиенты филиала",

                        "itemType": Terrasoft.ViewItemType.BUTTON,

                        "style": Terrasoft.controls.ButtonEnums.style.GREEN,

                        "click": {"bindTo": "TsOwnerQueryFilter"},

                        "layout": {

                            "column": 6,

                            "row": 0,

                            // "colSpan": 9,

                            // "rowSpan": 1,

                        },

                    },

                    "index": 2

                },

 

 

  TsOwnerQueryFilter: function () {

                    this.updateFilters("TsOwner");

                },

После того как Вы добавили фильтр нужно получить данные с новым фильтром и перезагрузить страничку реестра через метод this.refreshGridData().

sad

Не помогло. 

Предоставьте код в методе, пожалуйста

Mykhailo Storozhuk, 

initQueryFilters: function (filter) {

                    var esq = this.getGridDataESQ();

                    if (filter == "TsOwner") {

                        var user = '{218A312F-C5FB-4E8F-E053-223E1EAC50CA}'; 

                        esq.filters.add("CurrentUser",

                        this.Terrasoft.createColumnFilterWithParameter(

                            this.Terrasoft.ComparisonType.EQUAL, "TsOwner", user));

                    }

 

                    else if (filter == "TsNotOwner") {

                        var people = '{B1B7A389-130F-6EDB-E040-007F01000437}';

                        esq.filters.add("CurrenNottUser",

                            this.Terrasoft.createColumnFilterWithParameter(

                                this.Terrasoft.ComparisonType.EQUAL, "TsOwner", people));

                    }

                },

 

                updateFilters: function (filter) {

 

                    var esq = this.getGridDataESQ();

                    switch(filter) {

                        case "TsOwner":

                            var user = this.Terrasoft.SysValue.CURRENT_USER_CONTACT.value;

                            esq.filters.add("CurrentUser", this.Terrasoft.createColumnFilterWithParameter(

                                this.Terrasoft.ComparisonType.EQUAL, "TsOwner", user)); 

                            break;

                        case "TsNotOwner": 

                            esq.filters.add("NotCurrentUser", this.Terrasoft.createColumnFilterWithParameter(

                                this.Terrasoft.ComparisonType.EQUAL, "TsOwner", user)); 

                            break;   

                    }

 

                    this.reloadGridData();

 

                },

 

 

2 метода, ни один не работает. привязаны к кнопке на странице. 

По логике в разделе должен обновлить и применить фильтр 

Прошу прощения, правильнее будет переопределить метод initQueryFilters и потом вызывать метод reloadGridData. Пример кода:
define("ContactSectionV2", [], function() {
    return {
        entitySchemaName: "Contact",
          attributes: {
            "UsrTest": {
                "dataValueType": Terrasoft.DataValueType.BOOLEAN
         }
        },
        methods: {
            onTestClick: function() {
                this.set("UsrTest", true);
                this.reloadGridData();
            },
              initQueryFilters: function(esq) {
                this.callParent(arguments);
                //номер в пп
                var usrTestFilter = this.get("UsrTest");
                if (usrTestFilter) {
                    esq.filters.add("UsrTestFiltertest", 
                      esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Name", "111"));
                }
            }
        },
        diff: /**SCHEMA_DIFF*/[
            {
                "operation": "insert",
                "parentName": "ActionButtonsContainer",
                "propertyName": "items",
                "name": "MainContactSectionButton",
                "values": {
                    itemType: Terrasoft.ViewItemType.BUTTON,
                    caption: "Button test",
                    click: { bindTo: "onTestClick" },
                    "layout": {
                        "column": 1,
                        "row": 6,
                        "colSpan": 1
                    }
                }
            }
        ]/**SCHEMA_DIFF*/
    };
});

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

Всем доброго дня! Подскажите можно ли как-то отфитровать список  в "Фильтры/группы" - "Добавить условие" ? Изменение поведения в Объекте на режим "Никогда" не подходит(нужно видеть фильтры в расширенном режиме). 

Нравится

2 комментария

Анастасия, в каждом разделе системы отображение первого поля при быстром поиске заложено в параметре PRIMARY_DISPLAY_COLUMN (Отображаемое значение). Например, для раздела Контакты это поле [ФИО].
В быстром фильтре указывать приоритетность отображения полей нет возможности. Перечень заложен на уровне конфигурации приложения и пользовательскими средствами решить задачу нет возможности.
На практике для фиксирования определенных полей для фильтрации используются быстрые фильтры - это фильтр, который внедряется на страницу раздела средствами разработкой и помогает закрепить несколько полей в шапке раздела для удобного указания параметров фильтрации.
Однако данный вариант также предполагает использование средств разработки. Более детальнее описано в статье по ссылке: https://academy.terrasoft.ua/docs/developer/elements_and_components/bas…

Алёна Доля,

Хотелось бы отредактировать значения именно в базовом списке, 

в "Фильтры/группы" - "Добавить условие" и повыкидывать оттуда не нужные поля. 

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

Есть справочник "Стадия", по нему нужно сделать быстрый фильтр по типу как в расширенном фильтре(т.е с множественным выбором). Как это можно реализовать?

 

Нравится

3 комментария

Гусейн, судя по одинаковой иконке, Вы добавили логику для справочника стадий по аналогии с выбором ответственного тут же левее. Так там уже есть множественный выбор, только добавлять ответственных нужно по одному:

Если для стадий реализовали аналогично, там тоже должно такое работать.

 

Идея в быстром фильтре добавить возможность множественного выбора значений уже зарегистрирована.

Зверев Александр,
Да, добавил по типу как с ответственным, но если так делать все работает криво(не подстраивается под нужный справочник). Нужен именно множественный выбор с галками и тд.

Атамогланов Гусейн пишет:
все работает криво(не подстраивается под нужный справочник)

Нужно смотреть, как именно доработали в OpportunitySectionV2, что в результате не так отрабатывает для функций из FixedFilterViewV2 и FixedFilterViewModelV2.

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

Добрый день.

Например имеется объект UsrEntity. Хочу открыть справочник для добавления элемента на деталь с возможностью выбора из списка этого объекта. Но, чтобы в списке НЕ БЫЛО тех элементов, которые удовлетворяют условию UsrEntity.UsrA in existedA && UsrEntity.UsrB in existedB && UsrEntity.UsrC in existedC. Пока вижу только один путь это создать представление в SQL и открывать это представление. А возможно ли сделать подобный фильтр на фронте? Может быть есть возможность сделать кастомный фильтр и вставить в конфиг при открытии справочника?

Нравится

2 комментария

Решил задачу. Можно же просто 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);
				},

 

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

Добрый день!

Есть реестр объектов O, на странице используется деталь D, в ней несколько записей, связь детали D с объектом O через атрибут A.

Нужно создать сложный фильтр, по которому в реестре объектов X буду выводиться только те записи, в которых в связанной детали нет записи со значением атрибута Z=1. 

Просто вывести фильтр объектов O, где в записях детали D атрибут Z не равен 1, не поможет. Потому что в детали D могут быть и другие строчки, где атрибут Z = 1. Нам такие записи объекта не нужны.

Можно ли это сделать или такой фильтр настроить нереально?
Конкретно на примере.

Нужно вывести договоры, в которых в детали Визы нет строчки со значением визирующего = Петров Петр Петрович.

Спасибо!

Нравится

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

Боже, как просто, совсем глаз замылился, спасибо))))))))

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

Добрый день.
В справочник было добавлено значение "Районы города"  http://joxi.ru/RmzZXRBCRvpXkm.
Как вынести  в фильтр колонку "районы города" - чтоб можно было по названию района делать фильтрацию в реестре?  http://joxi.ru/zANW0KMi61Elgr
либо в обычный фильтр вынести "районы города" http://joxi.ru/LmGMVYgiJBMR3A

Нравится

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

Добрый день!
Район города у вас добавлен в объект [Адрес контрагента].

У контрагента может быть сразу несколько адресов (это деталь), так что вывести колонку из адреса контрагента в реестр контрагентов у вас не получится (только функции: количество адресов, макс/мин даты изменения и тд).
Вам можно построить фильтр вида:
Контрагенты у которых существует адрес с заданным районом.

Например (фильтр по городу):

Построение фильтра:

Сидоров Александр В. пишет:

Добрый день!
Район города у вас добавлен в объект [Адрес контрагента].

У контрагента может быть сразу несколько адресов (это деталь), так что вывести колонку из адреса контрагента в реестр контрагентов у вас не получится (только функции: количество адресов, макс/мин даты изменения и тд).
Вам можно построить фильтр вида:
Контрагенты у которых существует адрес с заданным районом.

Например (фильтр по городу):

Построение фильтра:

Сидоров Александр В.,

доброе утро.Спасибо за инфо.
Возможно в функции можно добавить "название" - чтоб выводить и наименование адреса? 

Необходимо делать сортировку не по количеству (или наличию), а именно по наименованию района. В таком варианте "районы города" необходимо создать, как отдельную единицу без привязки к объекту "адрес"? 

 

Hyalual,

Если у вас у контрагента только 1 район города (т.е. нет разделения как с адресами: фактический, доставки, юридический), то можно поле район добавить напрямую в контрагента

Hyalual пишет:
Возможно в функции можно добавить "название" - чтоб выводить и наименование адреса? 

Это деталь, на ней может быть несколько значений. При настройке колонок реестра в разделе с такой детали можно вытянуть только обобщённые данные: количество, для полей с датой — максимум и минимум, для числовых — ещё и сумма и среднее.

Сидоров Александр В.,

Необходимо вынести поле, как отдельный объект ? 

 

Зверев Александр,

выходит, что текстовые значения с справочника никак не отобразить ?

 

Добавьте в  мастере в разделе контрагентов новое справочное поле, которое ссылается на справочник районов, и пользуйтесь им.

Hyalual пишет:
выходит, что текстовые значения с справочника никак не отобразить ?

С детали. Справочные поля в основном объекте (например, тип контрагента) отобразятся нормально.

Зверев Александр,

Спасибо. Первоначально получилось

Зверев Александр,

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

Либо добавлять район в синхронизацию в обе стороны, либо вообще не связываться с деталью адресов и хранить район только в карточке.

 

Синхронизация сделана во встроенном БП объекта «Контакт» в функции SynchronizeContactAddress, а обратно — во встроенном БП объекта «Адрес контакта», где вызывается логика из схемы BaseAddressSynchronizer.

Зверев Александр,

вообще не связывать - не подойдет.
Синхронизация для БП объекта "Контакт" связана с объектом "Контрагент" - верно?
 

Нет. Контакт синхронизируется с адресом контакта, контрагент — с адресом контрагента.

В позапрошлом сообщении я напутал, сказал о контакте, а у Вас новое поле в контрагенте. Там всё аналогично. Но и забывать об этом тоже не стоит, ведь BaseAddressSynchronizer общий для всех и если там прописать поле без дополнительных проверок, может сломаться другой раздел, где поля нет.

Зверев Александр,

ок. спасибо. буду смотреть дальше, как лушче реализовать

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

Добрый день, коллеги!

 

Необходимо добавить в модальное окно количество обращений за промежуток времени с 9-12, 12-15, 15-17 часов на 10 дней.

 

Прилагаю код модального окна.

https://pastebin.com/RP0JvZ8S

Как делать esq запросы и интегрировать в данную схему, чтобы отображалось всё в модальном окне.

Буду очень благодарен любой помощи! 

Нравится

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

Вариантов решения много, мне кажется проще сделать  свое представление в БД  (view) которая бы формировала несколько колонок например 

Дата,

Кол-во обращения поступили с 9 до 12,

Кол-во обращения поступили с 12 до 15,

 

Наложить ваше представления в БД (view) на обїект в конфигурации и выводить в видек грида отфильтровав по диапазону дат...

Для этого необходимо создать в БД представление,  создать в Конфигурации объект, где установить признак для свойства [Представление в БД] Объект в Конфигурации должен иметь такое же название, как и представление в БД.
В системе есть объекты, имя которых начинается на "VW*"

Вариантов решения много, мне кажется проще сделать  свое представление в БД  (view) которая бы формировала несколько колонок например 

Дата,

Кол-во обращения поступили с 9 до 12,

Кол-во обращения поступили с 12 до 15,

 

Наложить ваше представления в БД (view) на обїект в конфигурации и выводить в видек грида отфильтровав по диапазону дат...

Для этого необходимо создать в БД представление,  создать в Конфигурации объект, где установить признак для свойства [Представление в БД] Объект в Конфигурации должен иметь такое же название, как и представление в БД.
В системе есть объекты, имя которых начинается на "VW*"

Как вообще использовать ESQ в странице модального окна (https://pastebin.com/RP0JvZ8S). Чтобы отобразить хоть какой нибудь результат.  GRID создал, VIEW создал. 

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

 

А вообще, вариантов действительно много, в зависимости от того, что хотите увидеть. Может, будет проще вместо модального окна вообще настроить в разделе панель итогов из нескольких показателей, выводящих числа по данным той же view.

 

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

Было бы здорово иметь возможность в фильтрах элементов БП сравнивать со списком значений, это бы значительно ускорило разработку типовых БП.

1 комментарий

Здравствуйте, Кирилл!

Передали данное пожелание команде разработки для анализа возможности внедрения такой возможности в будущих версиях продукта.

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

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

Коллеги, привет. 

Не могу найти внятного мануала на тему использования фильтрация в БП. 

Хочу отфильтровать ответственного по тикету по группе ответственных. (Выбираем группу -> список ответственных уменьшается). 

Подскажите как реализовать "хотелку" или укажите на гайд, где подобная задача решается?

Нравится

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

Вашу задачу можно решить не только с помощью бизнес-правил.

Например, в базовой версии фильтрация поля 'Ответственный' настраивается через атрибуты таким образом:

"Owner": {
	"dataValueType": Terrasoft.DataValueType.LOOKUP,
	"lookupListConfig": {"filter": BaseFiltersGenerateModule.OwnerFilter}
}

Более того некоторые задачи по фильтрации данных с помощью бизнес-правил вообще не решаются.

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

Начните с просмотра этой статьи. В ней несколько ссылок на более подробное описание различных моментов связаных с БП. Так же просмотрите  статью СТРУКТУРА КЛИЕНТСКОЙ СХЕМЫ

 

 

 

Вашу задачу можно решить не только с помощью бизнес-правил.

Например, в базовой версии фильтрация поля 'Ответственный' настраивается через атрибуты таким образом:

"Owner": {
	"dataValueType": Terrasoft.DataValueType.LOOKUP,
	"lookupListConfig": {"filter": BaseFiltersGenerateModule.OwnerFilter}
}

Более того некоторые задачи по фильтрации данных с помощью бизнес-правил вообще не решаются.

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

Алла Савельева,  требуется следующую логику: 

1) При выборе ответственного, список доступных для выбора групп ответственных должен содержать только те группы, в которые входит ответственный

И обратное:

2) При выборе группы ответственных, список ответственных должен быть ограничен только теми специалистами, которые входят в данную группу. 

Sunrise challenge,

Напишите sql-запрос, который должен выполниться в базе данных, чтобы получить нужные Вам данные.

Потом попробуйте интерпретировать этот запрос в программный код согласно тому, как описано в статье на Академии (обратите внимание, что для клиентского кода принцип присоединения полей тот же).

Алла Савельева, 

Нужно ли где-то определять BaseFiltersGenerateModule.OwnerFilter? 

Sunrise challenge,

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

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

Алла Савельева,

Компилятор не выдаёт ошибок, схема сохраняется, при этом фильтрация не осуществляется

Sunrise challenge,

А в консоли браузера есть такие-то ошибки при выборе значения для этого поля?

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