Есть у меня раздел, а у сущности есть поле "дата доставки".

Как мне отфильтровать так, чтобы вывести только объекты доставленные более Х дней назад, где Х - произвольное число?

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

Там есть фильтр "Предыдущих дней", но он как-то странно работает.

Нравится

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

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

Прошу Вас уточнить что Вы имеете ввиду под "...но он как-то странно работает"?

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

Denys Diachenko,

Я ставлю <= Предыдущих дней "5" и получаю все сущности, как будто и фильтрации не было.

Если я что-то делаю не так, подскажите как. И, если знаете, расскажите, что это за фильтр такой? В какой запрос он конвертируется?

У функции сравнения с датой есть интересная фича (кажется, недокументированная):

Когда Вы используете фильтр <= 100 то учитываются предыдущие 100 дней.
А когда Вы устанавливаете <100, то учитываются даты которые были до предыдущих 100 дней.

 

Владимир Соколов,

Блин, точно! Равенство здесь применять нельзя для моего случая.

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

Добрый день!

Часто возникают ситуации, когда в различных разделах системы добавляются новые категории (например, в поле Состояние заказа добавилась новая категория - Перевод в проект). Из-за такого рода обновлений в системе  фильтры некоторых блоков итогов в дашборде становятся неактуальными, а если дашбордов много, то то держать их в тонусе тяжело.

Вопрос - есть ли возможность выгружать настроенные фильтры во всех  дашбордах в отдельный файл?

Нравится

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

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

На данный момент, в системе не предусмотрена выгрузка в файл фильтров, согласно которым формируются дашборды В приложении есть возможность выгружать отфильтрованные данные в файл формата *.csv.

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

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

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

 Всем пример

Делаю быстрый фильтр по примеру из документации.

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

Кейс простой при клике на элементе "Контрагенты"- отобразить уже отфильтрованный реестр. 

Подскажите где моя ошибка или чего я не понимаю

define("AccountSectionV2", ["BaseFiltersGenerateModule","jQuery"], function(BaseFiltersGenerateModule) {
	
	
	
	
	return {
		entitySchemaName: "Account",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		attributes: {
           
        },
		methods: {
			initFilters: function() {
				  console.log("initFilters");
					this.initFilterActions();
					this.initFixedFiltersConfig();
					this.subscribeFiltersChanged();
					this.subscribeFilterGetConfigMessages();
					this.loadFiltersModule();
				},
			initQueryFilters: function(esq) {
				//this.callParent(arguments);
				console.log("initQueryFilters");
					var filters = this.getFilters();
					if (filters) {
						console.log(filters);
						esq.filters.addItem(filters);
                 	}
			
	          },
			
			// Инициализирует фиксированные фильтры.
            initFixedFiltersConfig: function() {
            	console.log("initFixedFiltersConfig");
                // Создание конфигурационного объекта.
                var fixedFilterConfig = {
                    // В качестве схемы объекта для фиксированных фильтров указывается схема объекта раздела.
                    entitySchema: this.entitySchema,
                    // Массив фильтров.
                    filters: [
                                   // Фильтр периода.
                        {
                            // Название фильтра.
                            name: "PeriodFilter",
                            // Заголовок фильтра.
                            caption: this.get("Resources.Strings.PeriodFilterCaption"),
                            // Тип данных — дата.
                            dataValueType: this.Terrasoft.DataValueType.DATE,
                            // Дата начала периода фильтрации.
                            startDate: {
                                // Фильтруются данные из колонки [Date].
                                columnName: "StartDate",
                                // Значение по умолчанию.
                                defValue: this.Terrasoft.startOfWeek(new Date())
                            },
                            // Дата завершения периода фильтрации.
                            dueDate: {
                                columnName: "StartDate",
                                defValue: this.Terrasoft.endOfWeek(new Date())
                            }
                        },
                        // Фильтр ответственного.
                        {
                            // Название фильтра.
                            name: "Owner",
                            // Заголовок фильтра.
                            caption: this.get("Resources.Strings.OwnerFilterCaption"),
                            // Фильтрация данных из колонки [Owner].
                            columnName: "Owner",
                            // В качестве значения по умолчанию указывается контакт текущего пользователя.
                            // Значение берется из системной настройки.
                            defValue: this.Terrasoft.SysValue.CURRENT_USER_CONTACT,
                            // Тип данных — справочник.
                            dataValueType: this.Terrasoft.DataValueType.LOOKUP,
                            // Фильтр.
                            filter: BaseFiltersGenerateModule.OwnerFilter
                        }
                    ]
                };
                // Колонке [FixedFilterConfig] присваивается ссылка на созданный конфигурационный объект.
                this.set("FixedFilterConfig", fixedFilterConfig);
            }
			

		}
	};
});

Нравится

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

1) Сложно без кода страницы что-то конкретное сказать.

2) У вас точно колонка Owner в объекте есть? И точно ли она ссылается на Контактов.

3) " ...при клике на элементе "Контрагенты"..." — При чём тут контрагенты?

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

1. Код щас приложу

2. Owner - точно есть

3. Мне надо показать пользователю в реестре только созданных им контрагентов

1) Resources.Strings.OwnerFilterCaption не определён в localizableStrings, поэтому на скрине пустота

2) Пусто внутри выборки контрагентов потому, что срабатывает фильтр 

filter: BaseFiltersGenerateModule.OwnerFilter

Подробнее - посмотрите в BaseFiltersGenerateModule, если не нужна фильтрация - закомментируйте эту строчку

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

Здравствуйте, продолжаю осваивать версию 7.10 после 10 лет использования 3.0.4.122.

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

Нравится

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

Попробуйте строить примерно такую фильтрацию для совмещения даты и времени:

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

Здравствуйте, Коллеги! У меня возник вопрос по фильтрам, почему когда массив arrayNeededIdOfSalesCenter пуст, он мне выводит все значения, а не пустоту? Когда массив не пуст, все нормально отрабатывает. Как получить именно пустоту? Заранее спасибо за помощь.
"ITSaleCenter": {
"lookupListConfig": {
"filters": [
function() {
var currentSaleArea = this.get("ITSaleArea"),
filterGroupMain = Ext.create("Terrasoft.FilterGroup");
if (currentSaleArea) {
var arrayNeededIdOfSalesCenter = [];
this.get("CollectionSaleCenter").each(function(item) {
arrayNeededIdOfSalesCenter.push(item.get("ITSysAdminUnit.Name"));
});
filterGroupMain.add("IsNeededNameSaleCenter",
Terrasoft.createColumnInFilterWithParameters(
"Name",
arrayNeededIdOfSalesCenter));
}
return filterGroupMain;
}
]
}
},

Нравится

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

del

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

"ITSaleCenter": {
"lookupListConfig": {
"filters": [
function() {
var currentSaleArea = this.get("ITSaleArea"),
filterGroupMain = Ext.create("Terrasoft.FilterGroup");
if (currentSaleArea) {
var arrayNeededIdOfSalesCenter = [];
this.get("CollectionSaleCenter").each(function(item) {
arrayNeededIdOfSalesCenter.push(item.get("ITSysAdminUnit.Name"));
});

if (arrayNeededIdOfSalesCenter.length == 0) {
arrayNeededIdOfSalesCenter.push("#!@^");
}

filterGroupMain.add("IsNeededNameSaleCenter",
Terrasoft.createColumnInFilterWithParameters(
"Name",
arrayNeededIdOfSalesCenter));
}
return filterGroupMain;
}
]
}
},

В таком случае при отсутствии значений в arrayNeededIdOfSalesCenter, ITSaleCenter будет пуст.

Да, поведение не совсем очевидное, но оно действительно такое.
Необходимо проверять массив на пустоту, перед формированием фильтра, если он не пуст - формируем Ваш createColumnInFilterWithParameters, в случае пустого массива - возвращать другой фильтр, специальный который всегда в окне справочника будет выдавать "пустоту"
я обычно использую такой "попросим вернуть Id равные NULL":

Terrasoft.createColumnIsNullFilter("Id");

решение универсальное, колонка Id у нас есть везде, а нулевые значения в ней не встречаются :)

Всем спасибо :)

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

В окне выбора контрагента при первом нажатии на лупу пусто. При повторном появляются нужные строки. Происходит это из-за того, что в запрос дописываются строки
LEFT OUTER JOIN
[dbo].[tbl_AccountInGroup] AS [tbl_AccountInGroupAccountID] ON [tbl_AccountInGroupAccountID].[AccountID] = [tbl_Account].[ID]

[tbl_AccountInGroupAccountID].[GroupID] = @P4

Нам эта таблица вообще не нужна, мы ею не пользуемся. Во вьюшке vw_Account ее нет. Почему она цепляется к запросу и как от нее избавиться?

Детали в прикрепленном файле

Нравится

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

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

В sq этой связи нет. В коде не нашел. Код ниже. Может быть, подскажете, где конкретно это может быть?

function edtAccountOnPrepareSelectWindow(LookupDataControl, SelectWindow) {
if (System.GetLocalComputerName() == 'PEUWUD14431') {
debugger;
}
var LookupDataset = LookupDataControl.DataField.LookupDataset;
var CallContactID = dlData.Dataset('ContactID');
var CallDeliveryPointID = dlData.Dataset('DeliveryPointID');
EnableDatasetFilters(LookupDataset, false);
EnableDatasetFilters(LookupDataset, true, ['LawOrPersonType']);
EnableDatasetFilters(LookupDataset, true, ['IsTurnedOff']);
ApplyDatasetFilter(LookupDataset, 'CallDeliveryPointID', CallDeliveryPointID,
!IsEmptyValue(CallDeliveryPointID));
if (IsEmptyValue(CallDeliveryPointID)) {
ApplyDatasetFilter(LookupDataset, 'CallContactID', CallContactID,
!IsEmptyValue(CallContactID));
}
}

function Initialize(Window) { // if (System.GetLocalComputerName() == 'PEUWUD14431') { debugger; }
InitializeGlobalVariables();
InitializeDataset(Window);
InitializeButtons(SelectData.Dataset);
InitializeGlobalDatalinks();
InitializeGroups(SelectData.Dataset, Window);
InitializeGridArea(Window);
SetWindowCaption(Window);
ReadAttributes(Window);
InitalizeImages(Window);
edtSearchFor.Value = SelectData.SearchValue;
if (SelectData.IsInitialized != true) {
AddDisplayFields();
SelectData.IsInitialized = true;
}
AddSearchFields();
}

function SimpleWindowOnPrepare(Window) {
if (Window.Attributes('EventsLogTag') == 2) {
return;
}
if (Main.ToLogGridWindow && (Window.TemplateWindowUSI == 'wnd_BaseGridArea')) {
EventLog_ParseObjectInfo(Window);
} else if (Main.ToLogEditWindow &&
((Window.TemplateWindowUSI == 'wnd_BaseDBEdit') ||
(Window.TemplateWindowUSI == 'wnd_BaseDBEditEx'))) {
EventLog_ParseObjectInfo(Window);
}
Window.Attributes('EventsLogTag') = 2;
}

В sq этой связи нет. В коде не нашел. Код ниже. Может быть, подскажете, где конкретно это может быть?

function edtAccountOnPrepareSelectWindow(LookupDataControl, SelectWindow) {
if (System.GetLocalComputerName() == 'PEUWUD14431') {
debugger;
}
var LookupDataset = LookupDataControl.DataField.LookupDataset;
var CallContactID = dlData.Dataset('ContactID');
var CallDeliveryPointID = dlData.Dataset('DeliveryPointID');
EnableDatasetFilters(LookupDataset, false);
EnableDatasetFilters(LookupDataset, true, ['LawOrPersonType']);
EnableDatasetFilters(LookupDataset, true, ['IsTurnedOff']);
ApplyDatasetFilter(LookupDataset, 'CallDeliveryPointID', CallDeliveryPointID,
!IsEmptyValue(CallDeliveryPointID));
if (IsEmptyValue(CallDeliveryPointID)) {
ApplyDatasetFilter(LookupDataset, 'CallContactID', CallContactID,
!IsEmptyValue(CallContactID));
}
}

function Initialize(Window) { // if (System.GetLocalComputerName() == 'PEUWUD14431') { debugger; }
InitializeGlobalVariables();
InitializeDataset(Window);
InitializeButtons(SelectData.Dataset);
InitializeGlobalDatalinks();
InitializeGroups(SelectData.Dataset, Window);
InitializeGridArea(Window);
SetWindowCaption(Window);
ReadAttributes(Window);
InitalizeImages(Window);
edtSearchFor.Value = SelectData.SearchValue;
if (SelectData.IsInitialized != true) {
AddDisplayFields();
SelectData.IsInitialized = true;
}
AddSearchFields();
}

function SimpleWindowOnPrepare(Window) {
if (Window.Attributes('EventsLogTag') == 2) {
return;
}
if (Main.ToLogGridWindow && (Window.TemplateWindowUSI == 'wnd_BaseGridArea')) {
EventLog_ParseObjectInfo(Window);
} else if (Main.ToLogEditWindow &&
((Window.TemplateWindowUSI == 'wnd_BaseDBEdit') ||
(Window.TemplateWindowUSI == 'wnd_BaseDBEditEx'))) {
EventLog_ParseObjectInfo(Window);
}
Window.Attributes('EventsLogTag') = 2;
}

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

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

Добавил новые условия фильтрации в группу Задачи в разделе Контакты. Фильтры видны только у администратора у остальных пользователей не работают. В чем может быть проблема? Terrasoft Sale 3

Нравится

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

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

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

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

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

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

Нравится

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

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

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

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


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

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

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

Нравится

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

А почему должна добавляться фильтрация, если она не включена?
У Вас InvoiceFilters в фильтрации MyAcc не влючен и плюс ко всему, отсутствует связь Контрагента со Счетом в фильтрации.

Обратите внимание как настроена фильтрация IndustryFilters или InvoiceFilters в сервисе sq_Account.

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

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

Заранее спасибо

Нравится

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

Здравствуйте!

Уточните, пожалуйста, версию продукта, который Вы используете.

Terrasoft XRM 3.3.2.43

Этот же вопрос обсуждается здесь.

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