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

 

Вопрос, касающийся фильтрации графиков в разделе Итоги:

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

 

Подробнее с примером:

Мы имеем график с 5 сериями - Хвост, Решено с подтверждением за период, Поступило за период, Дубль, Отклонено.

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

 

Как нужно, чтобы работало:

Необходимо иметь возможность отфильтровать все серии (к примеру) по группам ответственных, кроме серии "Поступило за период" - этот показатель должен остаться неизменным и охватывать значение поступивших Обращений на все группы ответственных. В то время как остальные показатели должны отображать значение Обращений только по группе ответственных, заданной в фильтре.

 

Вопрос:

Есть ли возможность отмены фильтров (быстрых/расширенных) на одну из серий в рамках одного графика? И как это осуществить?

 

Прошу дать рекомендации по решению данного вопроса.

Спасибо.

Нравится

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

Добрый день!

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

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

При выведении в Итоги виджета "список" данных объекта, созданного на основе View, в Списке  иногда отображаются дублирующиеся записи. Но при экспорте в excel такие дубли отсутствуют. Есть подозрение, что такое поведение связано как-то с пагинацией.  Такая же ситуация происходит если делать на основе такого объекта деталь.

Кто-нибудь сталкивался с подобным?

Ниже пример схемы View используемый для объекта

CREATE VIEW [dbo].[VwTest] AS
SELECT
    NEWID() as Id
    ,GETDATE() as CreatedOn
    ,(SELECT Id FROM Contact WHERE Id='BE80A149-0089-4311-A775-CA6CD8937E2B') as CreatedById
    ,GETDATE() as ModifiedOn
    ,(SELECT Id FROM Contact WHERE Id='BE80A149-0089-4311-A775-CA6CD8937E2B') as ModifiedById
    ,0 as ProcessListeners
    ,Id as ContactId
    ,Age
FROM Contact
WHERE Age>30

 

 

 

Нравится

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

Добрый день!
Прошу уточнить следующую информацию:
1. Полную версию приложения
2. Данное поведение наблюдается с одним объектом, или воспроизводится вне зависимости от объекта?
3. Также просим Вас уточнить детальный пошаговый кейс воспроизведения, начиная с создания объекта.

 

Спасибо!

Роман Казекин,

 1. Версия Sale Ent 7.16.3

2. Данное поведение характерно для всех объектов созданных на основе view.

3.

- Создал View ( как описано выше)

-  в управление конфигурацией создал объект с названием View

- включил checkbox Поведение - Представление в базе данных

4. Вывод объекта в Итогах в виде Списка

Евгений Кобзарь,

 

Уточните, пожалуйста, по какому полю Вы определяете записи, как дубли?

Также прошу посмотреть Select, который приходит детали. Есть ли там одинаковые записи?

Роман Казекин,

По полю Контакт. Select с View выбирает только 1 запись. Но в таблице/списке показывает несколько. Как правило происходит такое когда нажимаешь кнопку Показать больше. См. скриншот

Евгений Кобзарь,

 

Проверьте значение колонки ContactId, если там разные значения для записей, которые дублируются, то это значит что у Вас есть дубли в контактах. То есть это разные записи с одинаковыми данными.

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

 

https://academy.terrasoft.ru/docs/user/bazis_platformy/dannye/dubli/poi…

Роман Казекин,

 

Дублей нет. На скриншоте видно, что ссылки на эти записи формируются идентичные (на основе одного Id). Мне кажется что проблема все же в offsetе и order by (по Id).  При нажатии показать больше идет повторный запрос к View у которого НЕ статический  ID (newid()). Если это так? То каким образом можно и как правильно во view создать этот ID.

Добрый день

Евгений, это абсолютно объяснимое поведение View при использовании Fetch next. Вы же получаете записи пачками, а каждая пачка имеет свои Id и сортировка может вам выдать "дубль"

Как правильно? Просто используейте Id из основного объекта. Вы же выбираете из Contact, так берите его Id вместо генерации newid()

 

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

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

Например позволит просто определить находится ли отметка времени в прошлом или будущем.

 

P.S.
Так же, в этом меню незаслуженно обделены Минуты, их часто не хватает для быстрых процессов.

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

Добрый вечер!

 

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

Разработчики рассмотрят ее в одной из будущих версий.

 

Спасибо, что делаете наш продукт лучше!

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

Добрый день всем! 
Просьба помочь кто  сталкивался:
Создала вью в БД, создала для нее объект "Представление в БД".
Данные выводит, если написать select.
В БПМ объект виден, колонки тоже (Уточнение: как видите, некоторые колонки справочного типа).
Но при попытке построить график в итогах по данному объекту получаю ошибочки. Не понимаю, чего от меня хочет приложение :( Мне показалось, БПМ ищет колонки с определенными названиями.

Хэлп!

SELECT TOP (1000) [UsrId]
      ,[UsrCaseId]
      ,[UsrCreatedOn]
      ,[UsrGroupId]
      ,[UsrUserid]
      ,[UsrStatusId]
  FROM [dbo].[Usr1LineReport]

Нравится

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

А добавьте все необходимые колонки (Id, CreatedById, ModifiedById, ModifiedOn, ProccessListener - если наследуетесь от Base object) во View

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

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

Необходимо создать отдельный раздел по анолигии "Итогов", чтобы при переходе отображалась сразу и только аналитика. Как? Какой родительский объект в данном случае должен быть?

 

Нравится

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

Добрый день, 

 

Раздел по аналогии "Итогов" базовыми инструментами  создать не получится. DashboardsModule это отдельный клиентский модуль. Также он не использует родительский объект. 

 

С реализацией которого можно ознакомится в разделе конфигурация выбрав DashboardsModule.

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

Доброго дня, коллеги!

 

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

 

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

Нравится

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

Михаил, насколько понимаю, сейчас такое нельзя:

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

Но уже зарегистрирована идея расширения поиска на детали. Там же предлагают обходное решение: при помощи БП копировать значения поля всех записей с детали в специально созданное поле в объекте раздела и искать по нему.

Михаил, насколько понимаю, сейчас такое нельзя:

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

Но уже зарегистрирована идея расширения поиска на детали. Там же предлагают обходное решение: при помощи БП копировать значения поля всех записей с детали в специально созданное поле в объекте раздела и искать по нему.

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

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

Пытаюсь в итогах в графике (в режиме отображения данных) сделать ссылки на приложенные файлы. Если в колонку выводить непосредственную ссылку вида http://bpm/0/rest/FileService/GetFile/080c9917-7ec9-42e5-86ff-75a683d4f…, то при клике на нее можно взять файл. Если же попытаться обернуть ссылку в тэги <a href""></a> для человеческого представления, то ссылка не работает. В отладке я вижу, что тэги были убраны системой. Хочу, чтобы было так же, как при отображении столбца Заголовок. Подскажите, пожалуйста, как это реализовать?

Нравится

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

Старожилы, помогите, пожалуйста

Сергей, насколько понимаю, это не конкретно для итогов, а базовая логика компонента Grid, реализованного в JS-ядре (см. сайт/0/core/hash/Terrasoft/controls/grid/grid.js):

 /**
  * Generates html cell.
  * @private
  * @param {String} dataType Cell type.
  * @param {String} cellData Cell text.
  * @return {String} Cell html.
  */
 formatCellSpan: function(dataType, cellData) {
  const spanCellXTemplate = this._getSpanCellXTemplate();
  const valueWithoutTags = Terrasoft.removeHtmlTags(cellData);
  const text = this.encodeHtml(valueWithoutTags);
  let direction = null;
  if (Terrasoft.getIsRtlMode()) {
   direction = Terrasoft.containsRtlChars(cellData) ? direction : "ltr";
  }
  const html = spanCellXTemplate.apply({
   type: dataType,
   text: text,
   direction: direction
  });
  return html;
 },

 А затем в соседней функции добавляет, если нужно, внутренние ссылки на карточки записей в разделах системы:

 /**
  * Generates html cell-link.
  * @private
  * @param {Object} linkData Link params.
  * @param {String} dataColumn Links data-column attribute.
  * @param {String} innerHtml Links internal content.
  * @return {String} Cell html.
  */
 formatCellLink: function(linkData, dataColumn, innerHtml) {
  const linkTpl = "<a href=\"{0}\" target=\"{1}\" title=\"{2}\" data-column=\"{3}\">{4}</a>";
  if (linkData.customUrlsExists) {
   const urlOccurrencePattern = "url_occurrence_{0}";
   linkData.customUrls.forEach(function(url, index) {
    innerHtml = innerHtml.replace(this.encodeHtml(url), Ext.String.format(urlOccurrencePattern, index));
   }, this);
   linkData.customUrls.forEach(function(url, index) {
    innerHtml = innerHtml.replace(Ext.String.format(urlOccurrencePattern, index),
     Ext.String.format(linkTpl, url, linkData.target, this.encodeHtml(url), "", url));
   }, this);
   return innerHtml;
  }
  return Ext.String.format(linkTpl, linkData.url, linkData.target, this.encodeHtml(linkData.title),
   dataColumn, innerHtml);
 },

Соответственно, доработать будет непросто, поскольку нужно вмешиваться в логику ядра, а не скриптов в конфигурации.

 

Возможно, лучше будет сделать в итогах свой виджет с нужной логикой?

Спасибо, Александр! Надо подумать, поизучать матчасть.

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

Добрый день. Было бы неплохо предусмотреть группировку аналитических отчетов. Например, есть 5 отчетов по текущим обращениям и 5 отчетов с детализацией по конкретным подразделениям. Сортировка по имени делает просмотр аналитики сложным, так же как и отображение сразу 10+ отчетов. При этом руководители должны иметь доступ ко всем отчетам и текущая форма усложняет процесс поиска.

 

В итоге будет 2-3 группы по нажатию на которые появляются отчеты, водящие в эту группу

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

Сергей, Вы имеете в виду группировать печатные формы в карточке? В этом меню:

А то просто в итогах можно настроить много вкладок по смыслу:

 

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

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

Здравствуйте, Сергей!

Передали данное пожелание команде разработки для анализа возможности внедрения такой возможности в будущих версиях продукта.

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

Будет примерно так:

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

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

Необходимо создать виджет, который будет формировать динамическую ссылку вида <a href='https:\\домен\{заданный ID}'>ссылка</a>.

Как создать виджет с произвольным html разобрался (использовал вот этот пример https://community.terrasoft.ru/questions/vidzet-knopka), а вот как передать в этот виджет какой-нибудь параметр в виде JSON не совсем понятно.

 

Нравится

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

В примере виджета в академии у него есть параметры в JSON:

И в коде виджета создаются эти параметры:

columns: {
    // Название валюты.
    CurrencyName: {
        type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
        dataValueType: Terrasoft.DataValueType.TEXT,
        value: null
    },
    // Значение валюты.
    CurrencyValue: {
        type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
        dataValueType: Terrasoft.DataValueType.FLOAT,
        value: null
    }
},

 

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

Добрый день!

Есть задача: показать в итогах динамику изменения запросов по услугам (которых более 40). Выводить все 40 слишком глупо, а хардкодить какие-то 5 не правильно.

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

Пока я вижу нюансы:
1) надо реализовать новый график с кнопкой

2) надо реализовать автодобавление серий в графике

Если кто-то решал хотя бы одну из этих задач - был бы признателен за помощь в реализации

Нравится

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

Настройки графиков хранятся в таблице SysDashboard, где одна строка соответствует одной вкладке итогов (таких как «Статистика по обращениям за квартал» в разделе «Обращения»).

Расположение графиков сериализированно в текстовом поле ViewConfig, а сами графики и их серии — в Items. Например, графику «Динамика регистрации и закрытия обращений» с двумя сериями «Количество закрытых» и «Количество зарегистрированных» соответствует код:

 "Chart2":{ 
    "parameters":{ 
  "seriesConfig":[ 
     { 
   "primaryColumnName":"Id",
   "yAxisConfig":{ 
      "position":0
   },
   "schemaName":"Case",
   "func":1,
   "type":"line",
   "xAxisColumn":"RegisteredOn",
   "XAxisCaption":"",
   "YAxisCaption":"Количество зарегистрированных",
   "styleColor":"widget-coral",
   "filterData":"{\"className\":\"Terrasoft.FilterGroup\",\"items\":{\"5b0dd07d-63de-44e0-9801-b744333e1176\":{\"className\":\"Terrasoft.CompareFilter\",\"filterType\":1,\"comparisonType\":3,\"isEnabled\":true,\"trimDateTimeParameterToDate\":true,\"leftExpression\":{\"className\":\"Terrasoft.ColumnExpression\",\"expressionType\":0,\"columnPath\":\"RegisteredOn\"},\"isAggregative\":false,\"key\":\"5b0dd07d-63de-44e0-9801-b744333e1176\",\"dataValueType\":7,\"leftExpressionCaption\":\"Дата регистрации\",\"rightExpression\":{\"className\":\"Terrasoft.FunctionExpression\",\"expressionType\":1,\"functionType\":1,\"macrosType\":13}}},\"logicalOperation\":0,\"isEnabled\":true,\"filterType\":6,\"rootSchemaName\":\"Case\",\"key\":\"\"}"
     }
  ],
  "orderBy":"GroupByField",
  "orderDirection":"Ascending",
  "dateTimeFormat":"Day;Month",
  "caption":"Динамика регистрации и закрытия обращений",
  "sectionId":"c97824d9-3952-4d5e-9a5b-c6c468bf555a",
  "primaryColumnName":"Id",
  "yAxisConfig":{ 
     "position":0
  },
  "schemaName":"Case",
  "func":1,
  "type":"line",
  "xAxisColumn":"ClosureDate",
  "XAxisCaption":"",
  "YAxisCaption":"Количество закрытых",
  "styleColor":"widget-dark-turquoise",
  "filterData":"{\"className\":\"Terrasoft.FilterGroup\",\"items\":{\"da33da51-d43b-4eed-a25c-665dfaeb11ea\":{\"className\":\"Terrasoft.CompareFilter\",\"filterType\":1,\"comparisonType\":3,\"isEnabled\":true,\"trimDateTimeParameterToDate\":true,\"leftExpression\":{\"className\":\"Terrasoft.ColumnExpression\",\"expressionType\":0,\"columnPath\":\"ClosureDate\"},\"isAggregative\":false,\"key\":\"da33da51-d43b-4eed-a25c-665dfaeb11ea\",\"dataValueType\":7,\"leftExpressionCaption\":\"Дата закрытия\",\"rightExpression\":{\"className\":\"Terrasoft.FunctionExpression\",\"expressionType\":1,\"functionType\":1,\"macrosType\":13}}},\"logicalOperation\":0,\"isEnabled\":true,\"filterType\":6,\"rootSchemaName\":\"Case\",\"key\":\"\"}"
    },
    "widgetType":"Chart"
 },

Как видим, первая серия — в основной части, вторая — в массиве seriesConfig (вероятно, и остальные будут там же). Теоретически, можно программно формировать этот текст и добавлять или удалять серии. А как дать каждому свои графики, можно попробовать раздавать права доступа на записи в этой таблице и каждому показывать только свою.

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