Был ли у кого-то опыт добавление счетчика записей в заголовок групп?

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

 

Изображение удалено.

Нравится

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

Вадим, задача отображения к-ва не сложная. А вот задача "как избавиться от большой нагрузки на сервера" гораздно сложнее. После того, как N пользователей откроют группы, то сразу же уйдет масса запросов. Да, их конечно можно поставить в очередь, чтобы одинаковые группы не пересчитывались несколько раз, но это будет неверно. Разные пользователи имеют разные права. 

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

 

Если подытожить, то мысли добавления были, но проблем в разы больше

 

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

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

Допустим руководитель входит в раздел, у него есть группа по его филиалу, и он видит только свой филиал так как может просматривать только эту группу.

Знаю что можно через настройки "Прав доступа", но там есть нюанс по которой эта настройка не дает возможности сделать нужное, а вот с группами выходит как нужно, но вот вопрос по видимости

Нравится

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

Александр Тыра,

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

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

Уточните, какой нюанс мешает настроить доступ через права доступа?

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

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

Кроме жирного курсива можно ещё КАПСОМ писать, чтобы заметнее было.wink

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

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

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

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

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

вот и я не вижу, жалко

Александр Тыра,

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

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

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

в правах доступа вижу сколько настройки доступа только по колонке "кто создал" и "кому дано право". Если имеете введу " доступ по объектам в конфигураторе.

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

Конфигуратор тут не нужен, права на конкретную запись настраиваются по действию в карточке.

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

но это руками нужно править

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

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

​​​​​​это заказчик). Хотят что бы сразу все

Если хотят, чтобы видели сразу все, пусть добавят доступ группе «Все пользователи». Если хотят ограничивать, нужно выдавать другие права доступа на записи. Их можно выдавать либо вручную из интерфейса, либо различными способами программно.

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

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

Нравится

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

Добрый день, Никита!

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

"Липатов Юрий Сергеевич" написал:

Добрый день, Никита!

Если я правильно Вас понял, Вам необходимо, чтобы в разделе [Активности],[Планирование визитов] в списке контрагентов, слева, была возможность настройки динамических групп.

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


Юрий,доброго времени суток!
Это я прекрасно понимаю. Хотелось бы услышать от вас как это можно решить с точки зрения программирования на js

Добрый день.

Можно попробовать сделать следующее: необходимо добавить в функциональную кнопку детали Контрагентов(PlanningAccountDetailV2) пункт меню с вызовом метода ShowFolderTree из BaseSectionV2, но отрендерить в контейнер PlaningCardContainer. Так же нужно будет добавить пункт меню с возвратом к детали Контрагентов.

Представление «Планировение» сильно переделывалось и такое решение может не помочь.

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

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

Добрый день!

Есть задача фоновой обработки данных (через триггеры, джобы), при этом выборка данных для обработки должна браться из некой динамической группы. Вопрос - как это можно сделать? В таблице групп есть поле FilterData. Как я понял, именно здесь и хранится условие выборки. Но, они в специфическом внутреннем формате Terrasoft. Вопрос - как можно на стороне SQL прочитать и распарсить условие фильтра?

Спасибо

Нравится

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

Вариант - получаем выборку на основании динамической группы в скрипте TS аналогично как это сделано в разделе рассылка при прикреплении контактов из динамической группы. Потом делаем с ней что угодно - во временную таблицу ее, где триггер подхватит, в хранимку и так далее.
(+) не надо мучаться с парсером фильтра на уровне sql
(-) не будет работать без запуска/какого либо шевеления клиента Terrasoft (который формирует выборку)

Спасибо. Обозначенный Вами вариант заслуживает внимания (и есть таки у меня задача, в решении которой он очнь даже поможет), но, в данном случае необходимость работы в бекграунде (без запуска клиента) - критична :confused:

"bayborodin" написал:работы в бекграунде

Точно не знаю формат FilterData, но наверное ж это xml, который хранится блобом.
Если да и вы хотите именно делать это из SQL Server, то придется в джобе из SQL'a пользовать activeX для работы с xml ... сам никогда не пробовал, но видел код.
Я бы лучше написал какого демона, который в тихую раз в n минут хватал бы данные из FilterData и делал бы все, что надо. К слову, можно даже написать на террасфоте (вызвать окно с параметров, отключить таймаут выплнения скрипта и там уже все крутить), но тут надо учитывать события свала, тоесть наш террасофтный демон может упасть и ничего не сказать, а свое самописное можно подписать на тотальный свал и может какое письмо кому отослать.
Или вот еще вариант. Фиксировать где-то в БД признак, мол "ИДЕТ РАБОТА" с датой и временем(эту дату и время будет обновлять демон при каждой итеррации). Каждый клиент террасофта, на том же таймере что и напоминания, например, шлет легкий запрос на условие дата "ИДЕТ РАБОТА" < текущая - n минут. И если меньше - то каждому пользователю (ну или только админу) сигнализирует мол "ВСЕ УПАЛО, АДМИН, ПОМОГИ!!!11".

А точно ли FilterData - это XML в BLOB? Не могу найти пример, где бы бралось значение FilterData и из него извлекись условия фильтра :(

"bayborodin" написал:пример, где бы бралось значение FilterData и из него извлекись условия фильтра

wnd_ContactInMassMailGridAreaScript, но там хитро и не совсем так - создается объект FilterBuilder и потом им пользуются для фильтрации датасета, то есть непосредственно содержимое из него никто не извлекает и не парсит))

Да... печально как-то :(

"bayborodin" написал:в бекграунде (без запуска клиента) - критична

А если клиент сам будет запускаться? Если сервер с ОС windows, то на нем можно поставить клиент Terrasoft или на какой-то пользовательской машине, которую не выключают, можно запускать.
Была когда-то подобная задача, нужно было делать раз в день групповую операцию над контактами с нетривиальной логикой, а, поскольку эта логика уже была реализована на JScript, то, чтобы долго не переписывать ее на PL/SQL, пользовались планировщиком задач Windows. Раз в день он запускал определенное окно, его, кстати, можно сделать невидимым, а при показе в окне запускался нужный скрипт. Просто работа с фильтрами из этого поля уже реализована в системе, берите и пользуйтесь, а в случае с ХП это придется изобретать заново. Вот пример из wnd_CampaignAudienceGridAreaScript

var FilterBuilder = System.CreateObject('TSObjectLibrary.FiltersBuilder');
var Dataset = GetContactDataset();
FilterBuilder.Dataset = Dataset;
FilterBuilder.FilterDataFieldName = 'FilterData';
FilterBuilder.UseDummyFilter = true;
FilterBuilder.FilterDataset = GroupDataset;
FilterBuilder.Load();
FilterBuilder.ApplyFilter();
Dataset.Open();

Dataset содержит данные, отфильтрованные согласно фильтрам из поля FilterData определенного поля GroupDataset.

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

"Раловец Ольга" написал:А если клиент сам будет запускаться? Если сервер с ОС windows, то на нем можно поставить клиент Terrasoft или на какой-то пользовательской машине, которую не выключают, можно запускать.

+ опять же защита от сбоев либо ручками проверять жив ли клиент Terrasoft либо писать того самого демона))

"Евгений Либин" написал:Если настройка динамической группы не будет меняться (во всяком случае не часто), то сделайте нужное вью руками и обрабатывайте его на сервере. Да, решение может не очень красивое, но будет работать уже сейчас.

+1 кстати

а все-таки, известен ли кому способ извечь фильтры из FilterData?

"bayborodin" написал:а все-таки, известен ли кому способ извечь фильтры из FilterData?

Вам это не поможет, т.к. там находится XML для построения SQ в формате Terrasoft CRM. Т.е. парсить этот XML и применять его опять-таки к чему? к SQ_...? он на стороне сервера тоже только в блобе....

Может нужно искать другой путь решения?

"Евгений Либин" написал:Вам это не поможет, т.к. там находится XML для построения SQ в формате Terrasoft CRM. Т.е. парсить этот XML и применять его опять-таки к чему? к SQ_...? он на стороне сервера тоже только в блобе....

ну вот потом вторым шагом генерить блок where для запроса на основании данных из xml sq_***, найдя нужные фильтры по именам из xml из FilterData (и значения параметров и отношений оттуда же)
Путь джедая, тернистый трудный но красивый:smile:

Ок, допустим - выносим функционал на сторну клиента (совершив святотатство и предав свою религию), тогда, если у меня несколько динамических групп, как мне при создании FilterBuilder указать, по какой из динамических групп формировать итоговый DataSet?

"bayborodin" написал:Ок, допустим - выносим функционал на сторну клиента (совершив святотатство и предав свою религию), тогда, если у меня несколько динамических групп, как мне при создании FilterBuilder указать, по какой из динамических групп формировать итоговый DataSet?

Luke, join the dark side... :smile:
А изначально как задумывалось выбирать группу? ID группы - получаем FilterData

FilterBuilder.FilterDataset нужно отфильтровать по id выбранной группы

Спасибо. Буду пробовать

Попробовал вот так:

function ButtonOnClick(Control) {
	var FilterBuilder = System.CreateObject('TSObjectLibrary.FiltersBuilder');
	var Dataset =  Services.GetNewItemByUSI('ds_Account');
	var GroupDataset = GetGroupContactDataset('C8ADE26B-304B-44C8-A657-C9A6A6EC98BF');
	FilterBuilder.Dataset = Dataset;
	FilterBuilder.FilterDataFieldName = 'FilterData';
 	FilterBuilder.UseDummyFilter = true;
 	FilterBuilder.FilterDataset = GroupDataset;
 	FilterBuilder.Load();
 	FilterBuilder.ApplyFilter();
    Dataset.Open();
}
 
function GetGroupContactDataset(GroupID){
	var Dataset = GetGroupDataset('tbl_AccountGroup');
	ApplyDatasetFilter(Dataset, 'OwnerID', Connector.CurrentUser.ContactID,
		true);
	if (GroupID != null) {
		ApplyDatasetFilter(Dataset, 'ID', GroupID, true);
		Dataset.Open();
	}
	return Dataset;
}

получаю пустой dataset :(

"bayborodin" написал:var GroupDataset = GetGroupContactDataset('C8ADE26B-304B-44C8-A657-C9A6A6EC98BF');

Попробуйте взять в фигурные скобки:

var GroupDataset = GetGroupContactDataset('{C8ADE26B-304B-44C8-A657-C9A6A6EC98BF}');

"Лабьяк Олег Игоревич" написал:Попробуйте взять в фигурные скобки:

var GroupDataset = GetGroupContactDataset('{C8ADE26B-304B-44C8-A657-C9A6A6EC98BF}');

Фигурные скобки не помогли. Меня гложат сомнения - если C8ADE26B-304B-44C8-A657-C9A6A6EC98BF - это айдишка динамической группы, правильно ли я делаю?

дааа... шаманство :( Пойду увольняться... или требовать повышения зарплаты

Может, группу создал не текущий пользователь?
Попробуйте не включать фильтр по OwnerID.

"Лабьяк Олег Игоревич" написал:Может, группу создал не текущий пользователь?

Ага, мне такая же идея в голову пришла. Проверил - так и есть. Исправил - GroupDataset теперь не пустой. Но, итоговый Dataset по прежнему пуст - пойду в профилировщик глядеть...

Уважаемые коллеги! Не работайте после 3 часов ночи! Что касается меня, то утром все таинственным образом заработало :)

"bayborodin" написал:Не работайте после 3 часов ночи! Что касается меня, то утром все таинственным образом заработало :)

Защита от полуночников:) встроенная охрана труда и соблюдение ТК

"bayborodin" написал:Ок, допустим - выносим функционал на сторну клиента (совершив святотатство и предав

Вот не надо тут неправославных действий. Вот тут говорят, что FilterData - это таки xml. Собственно какая проблема разбирать xml и формировать нужное условие для выборки?

"Доленко Юрий" написал:Вот не надо тут неправославных действий. Вот тут говорят, что FilterData - это таки xml. Собственно какая проблема разбирать xml и формировать нужное условие для выборки?

Юрий, не стоит так категорично говорить.
Вот пример одной динамической группы к sq_Account

<?xml version="1.0" encoding="UTF-8"?> <FiltersBuilderRootNode Type="FiltersBuilderItems"><Item Type="LookupFiltersBuilderItem" DataFieldName="AccountTypeID"><Item Value="{E3E1E8B8-3C90-49DB-B7D6-0970CDF889CA}"></Item><DisplayFiledValues><Item Value="Terrasoft" UID="243891E27BCB4A399C5BBC5C10F42529"></Item></DisplayFiledValues></Item></FiltersBuilderRootNode> 

Сам sq_Account приводить не буду т.к. он очень большой, вы его можете посмотреть в своей конфигурации.
Если у вас получится объединить эти два XML-а и получить из них правильный SQL-запрос (при этом не используя объекты Terrasoft) то тогда вам РЕСПЕКТ.

Теоретически можно сделать всё (или почти всё) но это не всегда оправдывает понесенные затраты (человеческие, временные финансовые....)

"Евгений Либин" написал:Теоретически можно сделать всё (или почти всё) но это не всегда оправдывает понесенные затраты (человеческие, временные финансовые....)

+1 об этом собственно и спорим.
Кстати, вспомнила еще один случай, когда в карточке продукта находился FilterBuilder, данные из которого помимо стандартного поля сохранялись еще и в текстовое поле в виде условия Where SQL-запроса, а потом использовались в ХП, добавлялись к select конкатенацией. Если выбрали этот путь, наверное было все же быстрее.

"Евгений Либин" написал:Сам sq_Account приводить не буду т.к. он очень большой, вы его можете посмотреть в своей конфигурации.
Если у вас получится объединить эти два XML-а и получить из них правильный SQL-запрос

Я может задачи до конца не понял. А зачем нам вообще sq_Account?
Из узлов Item вытянули три атрибута - сформировали условие - выбрали что надо из tbl_Account по этому условию.
Тут еще ж вопрос надежности, нагрузки, отказоустойчивости и т.п.

"Раловец Ольга" написал:Кстати, вспомнила еще один случай, когда в карточке продукта находился FilterBuilder, данные из которого помимо стандартного поля сохранялись еще и в текстовое поле в виде условия Where SQL-запроса, а потом использовались в ХП, добавлялись к select конкатенацией.

Ольга, если Вас не затруднит, можно об этом подробней? Похоже, это то, что я искал!

Дело в том, что в sq_Account идет выборка не только из tbl_Account, фильтр может содержать условия не связанные напрямую с tbl_Account

"Евгений Либин" написал:Дело в том, что в sq_Account идет выборка не только из tbl_Account, фильтр может содержать условия не связанные напрямую с tbl_Account

хм.. не подумал, действительно )

Интересное обсуждение.
Предлагаю такое решение: просто посмотреть какой запрос пойдет в БД после применения фильтра с FilterBilder.

function ButtonOnClick(Control) {
        var FilterBuilder = System.CreateObject('TSObjectLibrary.FiltersBuilder');
        var Dataset =  Services.GetNewItemByUSI('ds_Account');
        var GroupDataset = GetGroupContactDataset('C8ADE26B-304B-44C8-A657-C9A6A6EC98BF');
        FilterBuilder.Dataset = Dataset;
        FilterBuilder.FilterDataFieldName = 'FilterData';
        FilterBuilder.UseDummyFilter = true;
        FilterBuilder.FilterDataset = GroupDataset;
        FilterBuilder.Load();
        FilterBuilder.ApplyFilter();
        // Определить текст запроса
 
Dataset.Open();
}

Вот так

SQText = Connector.DBEngine.GetSelectQuerySQLText(Dataset.SelectQuery);

"bayborodin" написал:Ольга, если Вас не затруднит, можно об этом подробней? Похоже, это то, что я искал!

Есть небольшое отличие. У меня по кнопке OK записывалось все, а у Вас в поле FilterData сохраняется по кнопке "Сохранить" FilterBuildera, не уверена, что можно в ее событие влезть, чтобы сохранить фильтр в виде текста в тот же момент. Но смысл тот же, что и обсуждался выше. Брался экземпляр запроса, к нему применялись фильтры и у него из GetSelectQuerySQLText вырезался нужный текст, но тут еще могут быть нюансы с псевдонимами, еще попытаюсь повспоминать детали.

Развивая мысль Ольги, удалось реализовать такой подход:
Для интересующих нас групп разделов (tbl_<Имя раздела>Group) добавляем поле FilterSQL типа строка Unicode, размер 4000 (Для некоторых запросов SQL 4000 может и не хватить, но больше сделать не дает :smile:)
Это же поле должно быть добавлено в Common\Details\Groups\sq_ItemGroup и в Common\Details\Groups\ds_ItemGroup (здесь также не забыть указать размер 4000)

В сервисе scr_BaseWorkspace изменяем функцию SaveFilters (добавляем блок try)

function SaveFilters() {
	var FilterDataset = fbcFilters.FilterDatasetLink.Dataset;
	if (!CurrentGroupIsFiltered(FilterDataset)) {		
		return; 
	}     
	FilterDataset.Edit();
 
	try  {
			var mdSQL = mf_GetDynamicFilterSQLText(Connector.DBEngine.GetSelectQuerySQLText(fbcFilters.DatasetLink.Dataset.SelectQuery));
			FilterDataset.Values('FilterSQL') = mdSQL;
		}
	catch (e)
		{
// Здесь произвольным образом обрабатываем ошибку -2147418113. Можно вообще оставить catch пустым 
			System.MessageDialog("Ошибочка вышла....\n"+e.number+'\n'+e.description, mdtConfirmation, mdbYes, 0);
			Log.Write(1, "Не удалось записать значение поля FilterSQL для сервиса " + FilterDataset.USI);
		}
	fbcFilters.Save();
	FilterDataset.Post();
}

В scr_BaseWorkspace добавляем служебные функции:

function mf_GetDynamicFilterSQLText(DatasetLinkSelectQuery) {
	var re = /:\w*\b/mg; // Поиск строк параметров типа :Parameter
	var strParameters = DatasetLinkSelectQuery.match(re);
	if (strParameters!=null) {
		for (var j = 0; j < strParameters.length; j++)
			{
				DatasetLinkSelectQuery = DatasetLinkSelectQuery.replace(strParameters[j], mf_GetParameterValue)
			}
	}
	return DatasetLinkSelectQuery;
}
 
function mf_GetParameterValue(parName) {
	var SelectQuery = fbcFilters.DatasetLink.Dataset.SelectQuery;	
	var Parameter = SelectQuery.Parameters.ItemsByName(parName.substr(1, parName.length - 1));
	switch (Parameter.DataType)
		{
			case (pdtInteger) : return Parameter.ValAsInt;
			case (pdtFloat) : return Parameter.ValAsFloat;
			case (pdtBoolean) : return Parameter.ValAsInt;
			case (pdtGUID): return Parameter.ValAsGUID;
			case (pdtFunction) : return Parameter.ValAsFunction;
			case (pdtString) : 
			case (pdtDateTime) : 
			case (pdtUnicodeString) : return "'" + Parameter.ValAsStr + "'";
			default : return Parameter.Value;
		}
}

Теперь при сохранении динамической группы, текст запроса SQL будет в виде простого текста сохраняться в поле FilterSQL.
Для созданных ранее динамических групп, надо один раз нажать кнопку "Применить и сохранить".
Можно еще добавить проверку длины полученного SQL запроса, и в случае если она превышает 4000, ничего не записывать.

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

Скажите, возможно ли стандартными средствами сделать следующую рассылку?
Сделать рассылку по контрагентам с которыми есть завершенные проекты, по которым были реализованы определенные продукты

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

Так вот динамическая группа создаваемая в проектах нигде не проходит в рассылках:( Не знаю как ее подцепить

Нравится

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

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

--
www.it-sfera.com.ua

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

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

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

1. Создал группу “MainGroup” и подгруппы “SubGroup1”, “ SubGroup2” и “ SubGroup3” в разделе “Контрагенты”.
И создал динамическую группу ”Not in MainGroup ” те, которые вне “MainGroup” и “ SubGroup1”, “ SubGroup2” и “ SubGroup3”, таким образом:
Фильтры: Account: Group > MainGroup
Но, в группу “Not in MainGroup” входят и те, которые в группе “ MainGroup” и в ее подгруппах!

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

2. В деталях “Контрагенты” (“Группы”) не возможно удалить личную группу, если пользователь не имеет права Администратора!

Нравится

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

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

Фильтр типа Account: Group <> MainGroup будет выполнять фильтрацию только по MainGroup, без учета дочерних групп. В данном случае Вам нужно добавлять и дочерние группы в фильтр - кроме «MainGroup» добавить “SubGroup1”, “ SubGroup2”, “ SubGroup3”.
Такая логика работы фильтров исходит из того, что не все СУБД поддерживают технологию иерархического объединения.

Что касается второго вопроса, то, к сожалению, для более точного ответа, нам необходимо знать точную версию используемого Вами приложения. Пожалуйста, уточните версию, указанную на закладке [Версия] свойств исполнительного файла TSCRM.exe, который по умолчанию находится C:\Program Files\Terrasoft CRM X25\Bin.

Terrasoft Support Team

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

Объясните мне в терминах фильтра для динамической группы, как это организовать?
Я всегда считал, что просроченное событие - это событие, дата которого уже прошла, т.е. необходимо выполнить условие для задачи:
Дата завершения(планируемая) Меньше Даты текущей, но при выборе условия Меньше, для даты есть возможность поставить только конкретную дату, как это обойти?
P.S. Понятно, что мы еще выберем дополнительные условия
-Состояние - В работе
-Дата фактического завершения - Пусто...но как установить главное условие?

Нравится

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

Добрый день, Руслан.
Для версии 3.2.0 уже доступен фильтр, который в английской версии называется "Less Or Equal Now". В текущих версиях 3.2.0.17 этот фильтр называется "Меньше или равно", и не позволяет вводить аргументы. Название неудачное, правильный перевод - "Меньше или равно текущей даты", в скором времени это будет исправлено в новой версии 3.2.0.x. Главное - операция сравнения "Меньше или равно" работает правильно и сравнивает с текущей датой, то есть вполне пригодна для Вашей задачи.
Желаю успехов!

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

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