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

Проблема в следующем:

При создании стандартного фильтра (по группе ответственных) в разделе Обращения, на страницу выводится список обращений не только данной группы, но и других групп.

Оказалось, что при создании такого фильтра, по умолчанию выставляется  условие сравнения "СОДЕРЖИТ", а не  "=" (равно).  

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

Можно ли как-то изменить "условие сравнения по умолчанию" для стандартного фильтра?

Спасибо!

Нравится

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

Добрый день!

Стандартный фильтр действительно работает по принципу "СОДЕРЖИТ". Внести изменения в его условия сравнения возможности нет. 

Рекомендуем использовать расширенный фильтр, где есть возможность выбрать "=".

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

Добрый день.

Можно ли добавить быстрый фильтр по дате и ответственному в раздел Итоги?

В других разделах - всё получается, но не в итогах.

Спасибо.

Нравится

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

Здравствуйте, Александр!

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

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

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

Нравится

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

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

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

Выглядеть он будет так: http://prntscr.com/io67sn

Настройка: http://prntscr.com/io689w

"Количество" потом поменять на "Существует", и внутри указать, собственно, фильтр по текущему контакту.

Спасибо большое!

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

Есть sql-запрос вида:

select *

from Table T

where T.ProjectId = @ProjectId

    and not exists (select * from Table T1

                    where T1.ContactId = @ContactId

                        and T1.ParameterId = T.ParameterId)

Использование метода CreateFilterWithParameters() позволяет построить параметризированный запрос, но только exists:

var esqCardBlock = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Table");

esqCardBlock.AddAllSchemaColumns();

var CardBlockFilters = esqCardBlock.Filters;                  CardBlockFilters.Add(esqCardBlock.CreateFilterWithParameters(FilterComparisonType.Equal,

                        "Project", projectId));                CardBlockFilters.Add(esqCardBlock.CreateFilterWithParameters(FilterComparisonType.Equal,

                        "[Table:Parameter:Parameter].Contact", contact));

Если же использовать CreateNotExistsFilter(), то не понятно, куда добавлять значение параметра @ContactId.

Какой всё-таки метод использовать для построения параметризированного запроса Not Exists?

Нравится

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

Алла, возможно, такое получится при помощи выставления группе фильтров свойства .IsNot = true;

Как тут:

			var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Activity");
			esq.AddAllSchemaColumns();
			esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Owner", currentUserId));
			esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Greater, "ModifiedOn", LastSyncDate));
			if (IsFirstSync) {
				esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Greater, "DueDate", Today));
			}
			esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "ShowInScheduler", true));
			var filtersByExisting = new EntitySchemaQueryFilterCollection(esq);
			filtersByExisting.IsNot = true;
			var notExFilter = esq.CreateFilterWithParameters(
				FilterComparisonType.IsNotNull,
				"[ActivityCorrespondence:Activity].SourceActivityId");
			filtersByExisting.Add(notExFilter);
			filtersByExisting.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal,
				"[ActivityCorrespondence:Activity].SourceAccount.Id", SourceAccountId));
			esq.Filters.Add(filtersByExisting);
			esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.LessOrEqual, "CreatedOn", CurrentSyncDateTime));
			var entityCollection = esq.GetEntityCollection(UserConnection);

 

Саша,

спасибо за ответ. Я тоже уже думала так сделать, попробую и напишу о результате smiley

Саша,

таким способом, как ты предложил, получилось построить нужный фильтр.

Ещё вопрос: почему в документации на академии написано, что метод CreateFilterWithParameters перегруженный https://academy.terrasoft.ru/documents/technic-sdk/7-11/dobavlenie-vych…;Что имеется ввиду?

Алла, у меня по этой ссылке нет слов «перегруженный»  и «CreateFilterWithParameters».

Ошибка, речь идет об этой ссылке: https://academy.terrasoft.ru/documents/technic-sdk/7-11/ispolzovanie-en…

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

А подскажите, пожалуйста, есть ли аналог ".IsNot = true" в entitySchemaQuery на стороне клиента?

И если нет, то как по другому в js можно построить подобный фильтр?

См. верхний ответ тут.

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

Хочу настроить функцию Количество по связанному объекту и вывести значение в реестр как здесь https://academy.terrasoft.ru/documents/marketing/7-8/nastroyka-kolonok-…

Вопрос в том, что где-то фильтрация доступна, а где-то нет, хотя всё как будто одинаково.

Почему? Что влияет на это?

Нравится

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

Здравствуйте, Алексей!

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

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

Собственно вопрос в заголовке.
Дело в том, что в лиде это отдельные схемы контейнеров LeadAccountProfileSchema и LeadContactProfileSchema.
А мне нужно вывести список контактов выбранного контрагента.
Как организовать данный фильтр? Пробовал замещать карточку лида и в ней указывать но не работает.
Да и не понятно какие колонки они используют? Такие: Account и Contact? Или что-то другое?

Можете дать готовое решение или хотя-бы объяснить всё понятно.

Нравится

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

Добрый день, Максим!

Думаю, самый простой вариант - добавить бизнес-правило. Если у Вас 7.10 - можно через мастер, если нет - то в карточке. Поля, которые Вам нужно - QualifiedContact и QualifiedAccount, это можно подсмотреть в объекте. Просто Contact и Account - это текстовые поля, а не справочные. Насколько я понимаю, потому что в момент создания лида не всегда они известны, да и можно написать название с ошибками.

"Мотков Илья" написал:

Добрый день, Максим!

Думаю, самый простой вариант - добавить бизнес-правило. Если у Вас 7.10 - можно через мастер, если нет - то в карточке. Поля, которые Вам нужно - QualifiedContact и QualifiedAccount, это можно подсмотреть в объекте. Просто Contact и Account - это текстовые поля, а не справочные. Насколько я понимаю, потому что в момент создания лида не всегда они известны, да и можно написать название с ошибками.

Спасибо. Помогло с этими полями - QualifiedContact и QualifiedAccount!

"Сазонов Максим" написал:А мне нужно вывести список контактов выбранного контрагента.

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

Ответьте мне на эти вопросы, и я помогу Вам реализовать Ваш кейс.

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

Добрый день,

Задал фильтр по Дате = Текущая неделя.
Смотрю что в БД по фильтру в CustContractFolder
Запрос такой:

SELECT
        [CustContract].[Id] [Id]
FROM
        [dbo].[CustContract] [CustContract]
WHERE
        ([CustContract].[Number] = N'92319851'
        AND ([CustContract].[ModifiedOn] >= CONVERT(DATETIME, '2017-06-25 21:00:00.000', 121)
        AND [CustContract].[ModifiedOn] CONVERT(DATETIME, '2017-07-02 21:00:00.000', 121)))

Почему время до 21:00 только?
Подскажите это настраивается?

Нравится

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

Укажите пожалуйста версию продукат.

Время до 21 — из-за того, что на сервере время по Гринвичу. Когда у них 21:00 — у Вас полночь и конец недели.

Возможно, настраивается путём смены времени на сервере, но реально текущая реализация должна фильтровать верно. Нужно только помнить о расхождении при написании напрямую SQL-запросов.

Спасибо. С временем понятно.

Заметили еще такую странность при фильтре по дате: даты в БД не обновляются.
Например сейчас хоть фильтр стоит в GUI пред. неделя, а даты по прежнему старые

AND ([CustContract].[ModifiedOn] >= CONVERT(DATETIME, '2017-06-25 21:00:00.000', 121)
AND [CustContract].[ModifiedOn] < CONVERT(DATETIME, '2017-07-02 21:00:00.000', 121)))

Это стандартное поведение фильтров по датам?

Антон, в смысле, не обновляется?
Может, страница раздела не перезагружалась с прошлой недели?

Страница раздела была обновлена, был новый вход. Открыт фильтр http://www.community.terrasoft.ru/system/files/2017-06-30_1531.png, условия фильтра не менялись, не сохранялись.

В БД же запрос прежний и даты прежние как 30.06

AND ([CustContract].[ModifiedOn] >= CONVERT(DATETIME, '2017-06-25 21:00:00.000', 121)
AND [CustContract].[ModifiedOn] < CONVERT(DATETIME, '2017-07-02 21:00:00.000', 121)))

я ожидал что будет вида '2017-07-02 21:00:00.000' по '2017-07-09 21:00:00.000', т.е. как в GUI предыдущая неделя.

После того как в фильтре нажал сохранить, в бд запрос обновился и стал отбирать как ожидается. Можно как то программно через БД инициировать "сохранить" по всем группам?

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

IIS APP остановил, редис почистил.
Все равно в БД по прежнему старый запрос.
В ГУИ BPMOnline фильтр работает верно, но в БД по другому.
Если нажимаю сохранить в фильтре, то в БД запрос обновляется на корректный.

"Антон Сидоров" написал:В ГУИ BPMOnline фильтр работает верно

В таком случае ничего менять не нужно.

Проблема в том, что у нас реализован функционал генерации активностей по группам договоров на уровне БД (делали Вы(Террасофт) при внедрении проекта), т.е. из за этого по не верным договорам создаются активности.
Бизнес смотрит в ГУИ и ожидает, что по займам будут активности, в реальности оказывается фильтр берется из БД по другим фильтрам дат.

Поэтому и интересует вопрос это нормальное поведение BPMOnline?
Можно как то программно через БД инициировать "сохранить" по всем группам, для актуализации запросов и в БД?

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

По фильтру Текущая неделя еще вопрос:
В БД записывается такой запрос при создании сегодня.

SELECT
	[CustContract].[Id] [Id]
FROM
	[dbo].[CustContract] [CustContract]
WHERE
	([CustContract].[Number] = N'92319851'
	AND ([CustContract].[ModifiedOn] >= CONVERT(DATETIME, '2017-07-23 21:00:00.000', 121)
	AND [CustContract].[ModifiedOn] < CONVERT(DATETIME, '2017-07-30 21:00:00.000', 121)))

т.е. в БД все верно с учетом часового пояса сервера +3.
Если ставлю дату на сервере 30.07.17 13:41.
Через интерфейс BPM не отображается (см. вложение), в БД - ок.

30.07.17 ещё не настало. У Вас часы идут неправильно.

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

Вероятно, логика системы не рассчитана на такое необычное поведение часов.

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

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

rules: {
"Offering": {
"FiltrationAmountByProduct": {
"ruleType": BusinessRuleModule.enums.RuleType.FILTRATION,
//"autocomplete": true,
"autoClean": true,
"baseAttributePatch": "Price",
"comparisonType": Terrasoft.ComparisonType.EQUAL,
"type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
"attribute": "Amount"
}
}
}

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

Нравится

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

Мария,

такой функционал, действительно, можно реализовать с помощью правила.

Для решения проблемы попробуйте раскомментировать параметр "autocomplete" - он ведь как раз и отвечает за обратную фильтрацию.

А также ознакомьтесь со статьей на эту тему: https://academy.terrasoft.ru/documents/technic-sdk/7-9/primer-primeneni…

спасибо за помощь :smile:, по этой статье и делали, с полями, которые являются оба справочниками такое получилось, а в этом случае, если раскомментировать autocomplete в итоге вообще все поля очищаются :sad:

Попробуйте сделать по аналогии с этим примером: https://academy.terrasoft.ru/documents/technic-sdk/7-9/dobavlenie-vychi…

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

Нужно отфильтровать операции по состоянию связанной с операцией продажи.

В разделе продажи есть, например, вот такой фильтр по отрасли контрагента:

Мне нужно что-то похожее. Каким образом это сделать?
Спасибо!

Нравится

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

Такие фильтры делаются в TSAdmin. В частности, «отрасль» настроена в сервисе «sq_Opportunity».
фильтр «отрасль»
Вам нужно создать свой фильтр аналогично.

"Зверев Александр" написал:

Такие фильтры делаются в TSAdmin. В частности, «отрасль» настроена в сервисе «sq_Opportunity».

Вам нужно создать свой фильтр аналогично.


Александр, спасибо!

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

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

ФИЛЬТР.JPG
(там где начало и завершение)

Нравится

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

Здравствуйте.
При установке вручную, вызывается метод базовой секции:
setFilter: function(key, value, filtersValue) {
Вы можете поставить в нем точку остановки, и посмотреть какие значения он принимает. Зная формат данных, вы можете вызывать его программно в любой момент, с такого же формата данными, но другими датами, что вызовет сохранение фильтрации в профиль. После чего вызвать: this.initFilters(); что обновит фильтрацию и грид под выше сохраненную в профиле фильтрацию.

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