Идея

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

Ревью
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,

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

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

В базовых фильтрах есть преднастроенные условия типа : Текущая дата, Текущий пользователь.

Где можно добавлять подобные условия? В каких схемах поковыряться? Может есть примеры?

Хочу сделать фильтры для выбора и пользовательского использования в папках фильтрации по полям Текущего пользователя.

К примеру, чтобы задать условие Отделение = Текущий пользователь.Отделение.

 

У меня такой же вопрос

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

Скорее всего, без изменений ядра добавить не получится. Нашёл перечень макросов в MacrosMenuItemsMappingUtilities пакета ProcessDesigner, но сомневаюсь, что его доработки появятся в фильтре раздела, а не дизайнере процессов.

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

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

А вот эта инфа не про добавление макросов в фильтрацию?

https://academy.terrasoft.ua/documents/technic-sdk/7-14/klass-entitysch…

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

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

Пробую использовать createInFilter. При дебаге четко вижу, что filteredAgreementsKeys это массив из двух Id. Однако фильтр не отрабатывает и ошибок в консоль не сыпется. Кто нибудь использовал in-Filter в конфигурационных схемах при открытии справочника?

openAgreementsLookup: function (filteredAgreementsKeys, scope) {
					debugger;
					var filterCollection = Terrasoft.createFilterGroup();
					var filter = Terrasoft.createInFilter("Id", filteredAgreementsKeys);
					filter.Name = "filter";
					filterCollection.add("filter", filter);
					var config = {
						entitySchemaName: "IDSBAgreement",
						multiSelect: true,
						columns: ["IDSBName", "IDSBPartnerCode"],
						filters: filterCollection
					};

					scope.openLookup(config, function (args) {
						scope.addCallBack(args, scope);
					}, scope);
				}

 

У меня такой же вопрос

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

поменял 

createInFilter на

createColumnInFilterWithParameters и всё заработало

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

Всем доброго времени суток!

Подскажите пожалуйста как так получается, что фильтры которые я применяю к реестру Контакта накладываются на поле Ответственный в Заказе - http://prntscr.com/of9vys?
А то что мне необходимо фильтровать в данном поле не отображает - http://prntscr.com/of9wvo
 

 

 

У меня такой же вопрос

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

И почему то вообще не срабатывает бизнес правило фильтрации:
http://prntscr.com/ofa2wb - правило добавилось
http://prntscr.com/ofa4mc - в списке пусто
http://prntscr.com/ofa5ds - контакты есть удовлетворяющие условиям фильтрации

фильтры которые я применяю к реестру Контакта накладываются на поле Ответственный в Заказе

Скорее всего, Вы их применяете к полю Owner в  Order, а Contact — название объекта справочника. Более подробно о наложении фильтров можно почитать в статье о бизнес-правилах мобильного приложения.

А для прояснения всех тонкостей поведения Вашей системы со всеми внесенными доработками можно воспользоваться отладкой мобильной версии.

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

Всем доброго времени суток!

Столкнулся с такой проблемой. Есть орг. роли в которых есть поле Область/Штат, заполнено неким значением, в эту роль входит пользователь Иванов. При работе с моб. приложения под этим пользователем необходимо отображать только те контакты у которых на детали есть адрес с полем Область/Штат соответсвующий полю Область/Штат орг. роли.
Реализовал функцию которая считывает роли данного пользователя и заносит в глобальную переменную.

Далее добавил фильтр в реестре:

Terrasoft.sdk.Module.addFilter("Contact", Ext.create("Terrasoft.Filter", {
	type: Terrasoft.FilterTypes.Group,
	logicalOperation: Terrasoft.FilterLogicalOperations.Or,
	subfilters: Terrasoft.WaContactFiltersByRegionInCurrentUserRole()
}));


Terrasoft.WaContactFiltersByRegionInCurrentUserRole = function () {
	var subfilters = [];
	for (var i = 0; i < Terrasoft.WaRoleRegions.length; i++) {
		subfilters.push({property:"[ContactAddress:Contact:Id].Region", value:Terrasoft.WaRoleRegions[i]});
	}
	return subfilters;
};

В оффлайн режиме фильтрует, в онлайн нет, иногда выдает ошибки.

Так вот собственно вопрос, с чем это может быть связанно и как с этим бороться?

Заранее благодарен!

У меня такой же вопрос

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

Мне кажется, такое вообще лучше делать не программным скрытием, а раздачей прав доступа на чтение на записи в разделе контактов. Логику реализовать на стороне БП на событиях добавления и изменения объектов адреса и  роли. В итоге в мобильную версию, хоть онлайн, хоть оффлайн, будет подтягивать только те, что ему положено видеть.

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

 Здравствуйте! Согласен, изначально так и было, но в стандартном реестре записи не отображаются пользователи видят следующее -

http://prntscr.com/o6ypsp. Пользователям не нравится такой вид, поэтому задавал фильтр по ответсвенному - фильтровало, но потом как оказалось не подходит по бизнес логике фильтрации, пришлось придумать такой костыль, вот и выплыло следующее в оффе фильрует в онлайн нет - http://prntscr.com/o6yr3i

Как с таким бороться?

Вообще, это стандартное поведение с 14 версии, отображает сначала пустой список, а потом — последние посещённые 10 записей:

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

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

это понятно. Однако помимо реестра нужно ещё накладывать фильтр в справочных полях Контакт что бы фильтровало какие описано выше))

Разобрался чего не фильтровало, я в фильтр передавал объект - https://prnt.sc/o7a23e
перестроил фильтрацию по Id и все заработало как в оффлайн так и в онлайн режиме

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

Добрый день!

Внутри CRM есть большое число позиций изделий из сплавов металлов. В сплав может входить от двух до четырех металлов.  

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

Есть ли способ найти только те позиции, где требуемый металл находится на первом месте?
(Например: АРбуз, АРка, АРгон. Но не: бАРжа, кАРтон, сАРай) 

У меня такой же вопрос

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

Вариантов много я бы посмотрел в сторону

1) Искать начинающиеся на #Арб

2) или изменить структуру хранения данных о составе металла

3) а лучше всего, создать свой фильтр в котором вы обработаете вашу строку с указанием сплава. (Например разобьете в массив со списком металлов и его отфильтруете)

В расширенных фильтрах

 

Варфоломеев Данила,

Спасибо за совет, но строка с указанием сплава имеет вид - #Наименование сплава# (#Металл1##Металл2##Металл3##Металл4#) Например: Мельхиор (CuNi)

Вариантов много я бы посмотрел в сторону

1) Искать начинающиеся на #Арб

2) или изменить структуру хранения данных о составе металла

3) а лучше всего, создать свой фильтр в котором вы обработаете вашу строку с указанием сплава. (Например разобьете в массив со списком металлов и его отфильтруете)

А что мешает искать по «(Cu»?

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

Спасибо за совет, хорошая идея!

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

Добрый день,

 

Столкнулся с проблемой фильтрации справочных полей при помощи бизнес правил,

есть Справочник улиц (Street) у которого соответственно есть принадлежность к выше стоящим элементам(Городам, Районам, Регионам и др.) 

Выглядит примерно следующим образом

╔══════════════╤═════════════════════╤══════════════════════════════════════╤══════════════════════════════════════╤══════════════════════════════════════╤══════════════════════════════════════╗
║ Name         │ TerritorialObjectId │ LocalityId                           │ DistrictId                           │ RegionId                             │ CountryId                            ║
╠══════════════╪═════════════════════╪══════════════════════════════════════╪══════════════════════════════════════╪══════════════════════════════════════╪══════════════════════════════════════╣
║ ул. Королёва │ NULL                │ NULL                                 │ NULL                                 │ B0FDED10-AEE0-4F1B-9C8D-198F7C154257 │ 5A1FEFDA-56A4-48A2-BC77-E40C71EEC73B ║
╟──────────────┼─────────────────────┼──────────────────────────────────────┼──────────────────────────────────────┼──────────────────────────────────────┼──────────────────────────────────────╢
║ ул. Ф.Торо   │ NULL                │ 967FC3D7-EBBA-4B76-AEDD-FE1CA5B48157 │ 7B11D4CE-D3E2-487F-BE03-A620015FB4FA │ EED82307-32D6-47EF-BDD8-FA64FE399614 │ 5A1FEFDA-56A4-48A2-BC77-E40C71EEC73B ║
╚══════════════╧═════════════════════╧══════════════════════════════════════╧══════════════════════════════════════╧══════════════════════════════════════╧══════════════════════════════════════╝

То есть в некоторых местах возможны пропуски иерархии, и улица напрямую принадлежит региону.

Бизнес правило по улице заполнено следующим образом

"Street": {
	"FiltrationStreetByTerritorialObject": {
		ruleType: BusinessRuleModule.enums.RuleType.FILTRATION,
		autocomplete: true,
		autoClean: true,
		baseAttributePatch: "TerritorialObject",
		comparisonType: Terrasoft.ComparisonType.EQUAL,
		type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
		attribute: "TerritorialObject"
	},
	"FiltrationStreetByLocality": {
		ruleType: BusinessRuleModule.enums.RuleType.FILTRATION,
		autocomplete: true,
		autoClean: true,
		baseAttributePatch: "Locality",
		comparisonType: Terrasoft.ComparisonType.EQUAL,
		type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
		attribute: "Locality"
	},
	"FiltrationStreetByDistrict": {
		ruleType: BusinessRuleModule.enums.RuleType.FILTRATION,
		autocomplete: true,
		autoClean: true,
		baseAttributePatch: "District",
		comparisonType: Terrasoft.ComparisonType.EQUAL,
		type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
		attribute: "District"
	},
	"FiltrationStreetByRegion": {
		ruleType: BusinessRuleModule.enums.RuleType.FILTRATION,
		autocomplete: true,
		autoClean: true,
		baseAttributePatch: "Region",
		comparisonType: Terrasoft.ComparisonType.EQUAL,
		type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
		attribute: "Region"
	},
	"FiltrationStreetByCountry": {
		ruleType: BusinessRuleModule.enums.RuleType.FILTRATION,
		autocomplete: true,
		autoClean: true,
		baseAttributePatch: "Country",
		comparisonType: Terrasoft.ComparisonType.EQUAL,
		type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
		attribute: "Country"
	}
}

Проблема в том, что при выборе улицы из справочника не подтягиваются автоматически ее выше стоящие элементы, как например город, район и т.д.

Я что то упускаю?

У меня такой же вопрос

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

Сериков Асхат Кайратович,

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

Это решается также через другое свойство атрибута - dependencies.

Подробнее можно почитать здесь и посмотреть пример вот здесь.

Насколько мне известно, такой код работать не будет.

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

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

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

autocomplete: true,

должен был выполнять

Сериков Асхат Кайратович,

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

Это решается также через другое свойство атрибута - dependencies.

Подробнее можно почитать здесь и посмотреть пример вот здесь.

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

Спасибо, так и делаю на данный момент, думал может я что то упустил поэтому не работает автоматическое заполнение

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

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


 

У меня такой же вопрос

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

Вот пример Как я его понял исходя из условий Задачи

Михаил, не уверен, что получится именно то, что хочет автор. У Вас найдёт где есть или тот, или тот тип адреса.

Лучше так:

 

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

Идея состоит в том, что бы отбирать конкретный список контактов для рассылки, подгружая к примеру наименования контрагентов в поле фильтра ( Контакт.Контрагент.Наименование ). В фильтре по наименованию реализовать функционал операции "in" ANSI SQL. Имеющийся функционал создаёт новые позиции, а нужно именно организовывать поиск по имеющимся, к примеру просчитанный список нужных контрагентов из другой учётной или аналитической системы из которой загружались контрагенты.

Обсуждение
1 комментарий

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

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