Вопрос

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

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

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

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

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

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

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

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