графики
7.9
sales

Возникло сразу несколько вопросов по графикам:

1. Можно ли показатель поделить на какое-то число перед отображением? Например, сумму выводить в миллионах рублей, а не в единицах рублей? Огромные числа не информативны!

2. Можно ли в горизонтальной гистограмме выводить top 5, 10 или 20 линий в сортировке по убыванию?

3. Как настроить подписи по оси Х, чтобы они были развернуты на 90%, т.е. вертикально? Тогда они перестанут наезжать друг на друга.

Нравится

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

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

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

2. Индивидуально для каждого графика такой возможности нет, но можно ограничить количество выводимых на дашборд данных в системной настройке "Ограничение запроса данных графика". Тогда на графике будет отображаться только топ-N категорий согласно сортировке (работает начиная с версии 7.11.2, только с графиками, где настроена одна серия данных). Также можем предложить устанавливать дополнительные фильтры, чтоб уменьшить количество выводимых данных

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

Мы передали все Ваши пожелания аналитикам продукта. Спасибо, что помогаете улучшать наши продукты!

Посмотрел в 7.11.2 как работает эта настройка.

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

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

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

Показать все комментарии
Google Maps
7.11
sales

Есть где то манул по том как работать с Google Maps?

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

В инете есть некоторые примеры, но как их связать с BPM я нигде не видел(

Нравится

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

Еще советую поинтересоваться вопросом лицензирования Google maps при использовании в коммерческих целях

Последний раз когда я имел дело с Google maps можно было делать некоторое кол-во запросов в сутки без лицензии, для демо версии - хватит

Здравствуйте, Виталий

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

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

В чем Ваша проблема, чтобы связать с bpm? Вам нужно создать контейнер и указать в скрипте его id. Чтобы создать контейнер div, добавляете в diff схемы обычный контейнер, а скрипты из CDN можно грузить используя ajax или любой другой способ на Ваше усмотрение.

Например, чтобы вставить на страницу карту Гугл, можно сделать следующим образом:

  • Добавьте jQuery в зависимости
    define("MyPage", ["jQuery"],
        function (){

     

  • Вставьте контейнер на страницу

     

    {
       "operation": "insert",
       "name": "GMaps",
       "values": {
           "itemType": Terrasoft.ViewItemType.CONTAINER,
           "id": "googleMap",
           "styles": {
               "height": "200px"
           },
           "items": []
       },
       "parentName": "LeftModulesContainer",
       "propertyName": "items",
    }

     

  • В зависимости от того, куда вставляем карты, определить в функции срипт отрисовки карты

     

    onRender: function () {
        this.callParent(arguments);
    
        // Функция отрисовки карты гугл, после того как загрузится скрипт
        window.initMap = function() {
            var map = new google.maps.Map(document.getElementById('googleMap'), {
                center: {lat: 55.800287, lng: 49.105937},
                zoom: 8
            });
        };
    
        // загружаем скрипт с сайта гугл (необходимо получить ключ приложения)
        $.ajax({
            url: "https://maps.googleapis.com/maps/api/js?key=Ключ_Приложения_Гугл&callback=initMap",
                dataType: "script"
          });
    },

     

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

Здравствуйте, подскажите как правильно настроить WebStorm для разработки под BPM.Какие библиотеки, подводные камни и тд

Нравится

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

Добрый день, нет никаких особенных настроек. Просто создаете проект с указанием пути к папке с js файлами

Артем Гура,

а насчет библиотек? просто хотелось бы использовать не как редактор кода, а как полноценную IDE 

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

Артем Гура,

Насчет debug тоже интересно можно ли? Если насчет IDE то к примеру удобство написания Crud запросов и прочих особенностей Bpm

 

Касательно debug, то не пробовал, ибо в Chrome удобнее :)

А на счет функциональности IDE, то он подхватывает функции нормально. Чтобы он подхватывал ядровый js, то нужно подключить папку ...\Terrasoft.WebApp\Resources\ui. Там js-ы ядра (контролы, схемы...). Но их изменять не нужно, ибо приложение их не подхватывает. Они больше именно для разработки

Показать все комментарии
элемент БП
7.9
sales

У меня реализована система интеграции через EntityDataService, и когда данные приходят в интеграционные сущности, запускается БП по сигналу и обрабатывает данные. Иногда возникает странная ошибка 

Terrasoft.Common.ItemNotFoundException: Элемент с именем "UsrIntMyTable" не найден в
Terrasoft.Core.ManagerItemCollection`1.GetByName(String name) в
Terrasoft.Core.Manager`2.GetInstanceByName(String name) в
Terrasoft.Core.Entities.EntitySchemaQuery..ctor(EntitySchemaManager entitySchemaManager, String sourceSchemaName) в
Terrasoft.Core.Process.UsrMyProcessing.ScriptTask1Execute(ProcessExecutingContext context) в
Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

где UsrIntMyTable - моя интеграционная таблица в БД, которой соответствует объект в конфигураторе (или наоборот).

БП всегда отрабатывает одинаково, но ошибка случается иногда. При этом, что самое обидное, данные по сути теряются, т.к. не обрабатываются.

Судя по всему, ошибка случается здесь

var userConnection = UserConnection;
var DealEsq = new EntitySchemaQuery(userConnection.EntitySchemaManager,"UsrIntMyTable");

Буду благодарен за любые советы на тему что это и как это поправить.

Нравится

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

Добрый день

Единственное предположение в том, что в эти моменты производится компиляция. Проверьте это предположение

"За ширмой" происходит следующее:

EntitySchemaManager ищет созданный инстанс, если его нет, то создает (new UsrIntMyTable). И вот, если его в сборке нет, то создать его возможности нет

Показать все комментарии
вычисляемое поле
7.9
sales

В реестре есть механизм модификации выводимых полей. А есть ли механизм выведения несуществующих в базе полей? Например,

addItemsToGridData: function() {
    this.callParent(arguments);
	debugger;
	var gridDataItems = this.getGridData().getItems();
	gridDataItems.forEach(function(item) {
		item.set("IsUpdated", 1);
	});
.....

Можно ли в реестр вывести IsUpdated, чтобы пользователи его видели?

Нравится

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

К сожалению, механизм выведения несуществующих полей не предусмотрен. Самым простым выходом будет добавить к обьекту поле, при инициализации коллекции на странице присваивать этому полю для всех обьектов определенные значения по-умолчанию и дальше работать с ними. Это позволяет с помощью этого поля работать с реестром в клиентской части.

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

Добрый день.

Подрядчик разработал для нас пакеты. Хотелось бы вносить в эту функциональность изменения. В связи с этим есть два таких вопроса:

  1. Рядом с пакетами подрядчика в списке пакетов стоит "замочек". Что означает этот замочек? Можем ли мы редактировать такие пакеты?
  2. Пакет подрядчика включает в себя бизнес-процессы и скрипт на C#. Если нам необходимо отредактировать, например, скрипт на C#, то каким образом это лучше сделать? Редактировать пакет подрядчика? Как я понимаю, создать свой пакет с замещением скрипта на C# или бизнес-процесса нельзя?

Заранее спасибо за ответы.

Нравится

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

Игорь, этот пакет, судя по всему, установлен из SVN. Если вы не имеете доступа к этому SVN, то попросите подрядчика отдать вам исходные коды в виде архива (ну, либо скопировать утилитами SVN-to-SVN). Далее вы поднимите свой собственный SVN, поменяете настройки репозитория и тогда сможете работать с этими пакетами, как со своими собственными.

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

Создать пакет с "замещением" C# - нельзя, но вы можете описать данный класс как partial и дорабатывать его. Правда это несет дополнительные проблемы. Можно также создать "наследника" исходного класса и использовать уже его в новой логике.

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

Здравствуйте, Игорь!

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

 

Обратитесь к подрядчику с данными вопросами для поиска оптимальных путей решения Вашей потребности.

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

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

Как это лучше сделать?

Я, например, вижу, что есть метод setActiveTab, однако, надо номер таба получить.

Нормально ли сделать ссылку вида

/0/Nui/ViewModule.aspx#CardModuleV2/UsrMyPage/edit/3f199545-fd54-46fb-b801-f711014389f2/4

Не окажется ли так, что такая приписка к урлу будет валить систему в будущих версиях?

Нравится

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

Добрый день

Вы можете оперировать не номерами Tab'а, а их именами и в урле будете передавать его имя. В будущих релизах не планируется что-то добавлять после Id записи

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

Алексей-Карягин пишет:

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

Это потому , что с табами всё очень плохо smiley Попробуйте вот так написать:

onEntityInitialized: function() {
	this.callParent(arguments);
	this.tabsCollectionActions();
},
tabsCollectionActions: function() {
	var tabsCollection = this.get("TabsCollection"); //получаем коллекцию
	//что-то с ней делаем (или нет)
	this.setActiveTab("ProductsInDiscountTab"); //устанавливаем активную
	this.set("ProductsInDiscountTab", true); //в этом set-е вся соль. Нафига он - непонятно. Но без него не рендерится содержимое вкладки
},

 

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

this.set("ProductsInDiscountTab", true); тоже не рендерится. Только таймаут, только хардкор!

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

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

Либо вариант, есть ли возможность фильтрации печатных форм, в зависимости от выбранной записи?

Нравится

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

Добрый день, Егор!

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

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

Так же рекомендую ознакомиться со статьями на академии Террасофта: https://academy.terrasoft.ru/documents/sales-commerce/7-11/nastroyka-pe…

https://academy.terrasoft.ru/documents/sales-commerce/7-11/registraciya…

Так же я передам информацию по данному вопросу в отдел разработки для оценки и принятия решения внедрения данной возможности в новых версиях bpm'online.

 

Дело в том, что я понимаю как добавить печатную форму в меню Печать, просто у меня их порядка 30-40 в разделе контакты, и хотелось их группировать, для удобства поиска.

Алексaндр Егоров,

Добрый день, Егор!

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

К примеру, будем делать для карточки "Контакты". Перед тем как переопределять методы необходимо в секции attributes объявить все группы для группировки. Пусть для примера будет две группы:

attributes: {
	subMenuGroup1: {
		dataValueType: Terrasoft.DataValueType.COLLECTION
	},
	subMenuGroup2: {
		dataValueType: Terrasoft.DataValueType.COLLECTION
	}
}

Для карточки нужно переопределить методы initCardPrintForms и generateCardPrintForm и в них "перетасовать" все ваши печатные формы, например так:

initCardPrintForms: function(callback, scope) {
	this.callParent([function(callback, scope) {
		var position = 0;
		var myFirstPrintFormId = "4a0ad08a-8c80-e011-afbc-00155d04320c";
		var mySecondPrintFormId = "55e7f911-9def-48c6-8405-8e9b682bf3b3";
		//получаем коллекцию всех печатных форм
		var printMenuItems = this.get(this.moduleCardPrintFormsCollectionName);
		//создаем две группы печатных форм
		var subMenu1 = this.Ext.create("Terrasoft.BaseViewModelCollection");
		var subMenu2 = this.Ext.create("Terrasoft.BaseViewModelCollection");
		//для примера у нас две печатных формы, одну - в первую группу, другую - во вторую
		subMenu1.add(myFirstPrintFormId, printMenuItems.get(myFirstPrintFormId), position);
		subMenu2.add(mySecondPrintFormId, printMenuItems.get(mySecondPrintFormId), position + 1);
		this.set("subMenuGroup1", subMenu1);
		this.set("subMenuGroup2", subMenu2);
		//переменная для хранения всего меню печатных форм
		var printMenu = this.Ext.create("Terrasoft.BaseViewModelCollection");
		//добавляем две группы
		printMenu.add(printMenu.getUniqueKey(), this.getButtonMenuItem({
			"Caption": {"bindTo": "Resources.Strings.ReportGroup1"},
			"Items": {"bindTo": "subMenuGroup1"}
		}), position);
		printMenu.add(printMenu.getUniqueKey(), this.getButtonMenuItem({
			"Caption": {"bindTo": "Resources.Strings.ReportGroup2"},
			"Items": {"bindTo": "subMenuGroup2"}
		}), position + 1);
		//устанавливаем на меню печати
		this.set(this.moduleCardPrintFormsCollectionName, printMenu);
	}, this]);
},
generateCardPrintForm: function(tag) {
	var cardPrintFormsCollection = this.get(this.moduleCardPrintFormsCollectionName);
	var menuGroups = [];
	cardPrintFormsCollection.each(function(item) {
		menuGroups.push(item.get("Items").bindTo);
	});
	var printForm;
	for (var i = 0; i < menuGroups.length; i++) {
		var subMenu = this.get(menuGroups[i]);
		if (subMenu.contains(tag)) {
		printForm = subMenu.get(tag);
		}
	}
	this.generatePrintForm(printForm);
}

Небольшое пояснение к коду: метод initCardPrintForms загружает все печатные формы для нашей карточки, в коде комментарии. Метод generateCardPrintForm нужно переопределять так как наша карточка не знает, что меню печати имеет вложенную структуру, поэтому немного другим способом нужно подготавливать форму к печати, перебирая коллекции, которые завязаны на Items группы форм печати. Пример выше - это минимальный пример без обязательных проверок обьектов.

Обращаю ваше внимание, что если вам необходимо делать все это для раздела, а не карточки, то не стоит забывать, что там кроме этих методов необходимо кроме указанных выше переопределить методы initSectionPrintForms и generateSectionPrintForm, которые будут работать с реестром, а при открытии карточки в совмещенном режиме (Combined Mode) отработают методы initCardPrintForms и generateCardPrintForm.

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

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

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

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

Нравится

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

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

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

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

Добрый день, в мастере раздела Лид есть пользовательское поле справочник, ссылающееся на справочник Контакт. Необходимо убрать кнопку Добавить в представлении справочника.

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

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

Нравится

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

Добрый день, Иван!

В системе нет отдельных схем для полей. Указанное Вами поле в карточке записи лида является мультилукапом и состоит из двух сущностей: "Заказ" и "Продажа". Код данного поля (указание на поля, с которых оно будет состоять) записано в коде схемы LeadPageV2 в пакете [SalesEnterprise]. Код для данного поля в атрибутах страницы:

attributes: {

                "OpportunityOrOrder": {

                    "caption": {"bindTo": "Resources.Strings.OpportunityOrOrderCaption"},

                    "dataValueType": this.Terrasoft.DataValueType.LOOKUP,

                    "multiLookupColumns": ["Opportunity", "Order"]

                }

            }

Адасюк Валерий Викторович,

Достаточно ли в этом случае удалить из [] "Order"?

Спасибо, помогло!

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