Коллеги, всем добрый день! Работаю в CRM Creatio v. 7.14 и не получается получить доступ к редактированию печатных форм в MS Word. Скачиваю плагин для Word вот отсюда: Установить плагин Creatio для Word | Creatio Academy (terrasoft.ru) Устанавливаю. Всё делаю по инструкции. В Word появляется надстройка (вкладка) Creatio. При попытке коннекта ввожу User, Password и подключаю новый сервер Name: Creatio, Link: http://crm-app. Логин и пароль принимаются без ошибок, окно коннекта к серверу закрывается, но вот это действие из инструкции я выполнить не могу: 

"4. Выберите нужный отчет из списка по кнопке [ Выбрать печатную форму ].

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

При попытке выбрать печатную форму (Creatio Word Reports) мне пишет Server Connection Failed. И соответственно не появляются поля печатной формы, которые я бы потом смог вставить в шаблон печатной формы. 

Подскажите, пожалуйста, как исправить данную ситуацию. Я предполагаю, что, возможно, дело в плагине, что на сайте он выложен для версии Creatio 7.17, а у меня 7.14. Как можно получить плагин именно для версии 7.14? Или всё же дело не в этом?

 

 

Прикрепленные файлы

Нравится

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

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

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

Запросите у службы поддержки Террасофт (их email - support@terrasoft.ru) плагин для Вашей версии.

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

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

Запросите у службы поддержки Террасофт (их email - support@terrasoft.ru) плагин для Вашей версии.

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

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

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

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

Как это можно реализовать?

Нравится

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

Антон, логика при открытии лукапа — в функции loadVocabulary схемы BaseSchemaViewModel:

		/**
		 * Open selection page from the directory or trying to add a record.
		 * @protected
		 * @param {Object} args Params.
		 * @param {Object} columnName Column name.
		 */
		loadVocabulary: function(args, columnName) {
			var multiLookupColumns = this.getMultiLookupColumns(columnName);
			var config = (Ext.isEmpty(multiLookupColumns))
				? this.getLookupPageConfig(args, columnName)
				: this.getMultiLookupPageConfig(args, columnName);
			this.openLookup(config, this.onLookupResult, this);
		},

Там проверяется наличие у колонок некоторого свойства (а именно multiLookupColumns) и если оно не пусто, запускается окно мультилукапа вместо обычного. То есть Вы можете переопределить, чтобы проверяло ещё какое-то свойства у поля на карточке и если оно есть, то произвести сохранение (например, при помощи отправки отсюда карточке команды на тихое сохранение через «песочницу»).

Антон, логика при открытии лукапа — в функции loadVocabulary схемы BaseSchemaViewModel:

		/**
		 * Open selection page from the directory or trying to add a record.
		 * @protected
		 * @param {Object} args Params.
		 * @param {Object} columnName Column name.
		 */
		loadVocabulary: function(args, columnName) {
			var multiLookupColumns = this.getMultiLookupColumns(columnName);
			var config = (Ext.isEmpty(multiLookupColumns))
				? this.getLookupPageConfig(args, columnName)
				: this.getMultiLookupPageConfig(args, columnName);
			this.openLookup(config, this.onLookupResult, this);
		},

Там проверяется наличие у колонок некоторого свойства (а именно multiLookupColumns) и если оно не пусто, запускается окно мультилукапа вместо обычного. То есть Вы можете переопределить, чтобы проверяло ещё какое-то свойства у поля на карточке и если оно есть, то произвести сохранение (например, при помощи отправки отсюда карточке команды на тихое сохранение через «песочницу»).

Благодарю, все работает)

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

Коллеги подскажите пожалуйста есть необходимость в окружение добавить пользовательский компонент и получать к нему доступ через Terrasoft.{пользовательский компонент}. 

Трудность заключается в том, что данные компонента находятся в БД и на данный момент получаются с помощью конфигурационного сервиса. Сам компонент заполняется  в callback функции. То есть доступен не сразу, а только после получения ответа от сервиса.

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

Нравится

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

Егор, а в чём отличие Вашего компонента от какой-то стандартной функциональности, например, AcademyUtilities? Там тоже в функции getAcademyUrlFromLookup получают данные из базы по SQ, что происходит не мгновенно.

/**
 * Gets academy URL from lookup.
 * @private
 * @param {Object} config Configuration object.
 * @param {Function} config.callback Callback function.
 */
getAcademyUrlFromLookup: function(config) {
	var cacheItemName = "AcademyURL_" + Terrasoft.currentUserCultureName;
	var getLmsUrlQuery = Ext.create("Terrasoft.EntitySchemaQuery", {
		rootSchemaName: "AcademyURL",
		rowCount: 1,
		serverESQCacheParameters: {
			cacheLevel: Terrasoft.ESQServerCacheLevels.WORKSPACE,
			cacheGroup: "AcademyUtilities",
			cacheItemName: cacheItemName
		}
	});
	getLmsUrlQuery.clientESQCacheParameters = {cacheItemName: cacheItemName};
	getLmsUrlQuery.addColumn("Description", "Description");
	getLmsUrlQuery.getEntityCollection(function(response) {
		var collection = response.collection;
		var academyRootUrl = "";
		if (collection.getCount()) {
			academyRootUrl = collection.first().get("Description");
		}
		Ext.callback(config.callback, this, [academyRootUrl]);
	}, this);
}

Или под компонентом имеете в виду что-то другое, вроде виджета в итогах или iframe на главной странице?

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

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

 

Удалось успешно привязать к данных

  • Доступ к объектам - SysEntitySchemaOperationRight
  • Операции - SysAdminOperation
  • Права на операции - SysAdminOperationGrantee

 

Однако

  • настройку прав на колонки SysEntitySchemaColumnRight
  • и настройку прав по умолчанию SysEntitySchemaRecordDefRight

добавить в пакет не получается - просто не даёт выбрать такие объекты.



Как лучше поступить для решения?

Нравится

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

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

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

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

Есть даже пример таких скриптов для переноса этих настроек?

 

Или, может, Terrasoft сделает возможным перенос стандартными средствами? 

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

 

Реализовать перенос настроек организационной структуры и прав доступа из одного стенда на другой можно с помощью SQL-скриптов. Для этого на эталонной среде необходимо сформировать insert-запросы на основании записей со следующих таблиц:

  • SysAdminUnit (Объект администрирования: пользователи и роли)
  • SysUserInRole (Непосредственные вхождения пользователей в роли)
  • SysFuncRoleInOrgRole (Вхождение функциональной роли в организационную)
  • SysAdminOperation (Системные операции, если необходимо)
  • SysAdminOperationGrantee (Доступ к системным операциям, если необходимо)
  • SysEntitySchemaOperationRight (Доступ к объектам)
  • SysEntitySchemaRecordDefRight (Доступ к записям по умолчанию)
  • SysEntitySchemaColumnRight (Доступ к колонкам объекта)
  • SysAdminUnitGrantedRight (Делегирование)

Для формирования запросов можно воспользоваться Microsoft SQL Server Database Publishing Wizard и подобными инструментами. Полученный SQL-скрипт необходимо прикрепить к пакету (вкладка - «SQL-сценарии»).

Если перенос происходит на продуктивную среду, то мы рекомендуем предварительно сделать резервное копирование данных, и, в первую очередь, заливать пакет на тестовую среду, чтобы проверить результат выполнения скрипта. Эти работы необходимо выполнять не в бизнес-время.

Ещё очень интересное поведение заметили.



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



Какие процессы могут полностью сменить Id в этой таблице? И на что это может повлиять?

 

Может, компилировали объект? Актуализацию прав запускали?

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

Может, компилировали объект? Актуализацию прав запускали?

Да, компиляция же происходит после каждой установки новых пакетов (с того же Marketplace), насколько я понимаю.



И актуализация прав запускается после изменений в пользователях/ролях.

 

1. Но как это влияет на настройки доступа по колонкам?



2. И как переносить последующие изменения в настройках доступа по колонкам, если по Id уже не понять, это те же настройки или уже другие?

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

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

 

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

Какие есть способы перенести все схемы из Custom в другой пакет?

Можно ли переименовать пакет "Custom" и создать свой?

или в SQL перенести все схемы в другой пакет?

Нравится

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

Добрый день.

 

Всё зависит от того, в какой версии нужно сделать перенос.

 

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



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

 

Относительно переименования пакета 'Custom' в пользовательский - этого не в коем случае нельзя делать, так как данный пакет является системным и зависит от всех остальных пакетов конфигурации.

Добрый день.

 

Всё зависит от того, в какой версии нужно сделать перенос.

 

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



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

 

Относительно переименования пакета 'Custom' в пользовательский - этого не в коем случае нельзя делать, так как данный пакет является системным и зависит от всех остальных пакетов конфигурации.

Я бы на месте разработчиков просто очистил бы значение Current package в системных настройках, чтобы новые пользователи осознанно выбирали, а не попадали на известные грабли с переносом из Custom

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

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

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

я имел в виду - очистить эту настройку в дистрибутиве, который выдаётся клиенту.  

Алла Савельева пишет:

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

А где этот функционал описан? И включает ли он в себя перенос данных? 

Владимир Соколов пишет:

очистить эту настройку в дистрибутиве, который выдаётся клиенту.  

В таком случае до её заполнения не получится настраивать систему пользовательскими средствами.

Владимир Соколов пишет:

А где этот функционал описан?

См. тему

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

Последнее сообщение в этой теме в 2020 году, что функциональность ещё не готова до конца

Владимир, если релиза ещё не было, следите за анонсами в описании новых версий.

А вот интересно, этот функционал сможет менять префикс Usr на другой, ведь с таким префиксом даже перенеся в другой пакет будут проблемы скорее всего?

Александр, Вы можете проверить на предварительной версии функциональности, включив её, как описано в этой теме.

Александр Тыра пишет:

А вот интересно, этот функционал сможет менять префикс Usr на другой, ведь с таким префиксом даже перенеся в другой пакет будут проблемы скорее всего?

А какие должны быть проблемы, если используется префикс Usr?  

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

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

Каким образом можно динамически устанавливать интервалы для виджета "Шкала" на странице? 

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

Нравится

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

Владимир, существующая реализация компонента Gauge отображает изменения только цифры в центре, а 4 других параметра, означающие границы цветов, задаются в настройках и хранятся в json-конфиге в SysDashboard:

   "Gauge":{
      "parameters":{
         "caption":"Closed cases",
         "entitySchemaName":"Case",
         "filterData":"{\"className\":\"Terrasoft.FilterGroup\",\"items\":{\"12f77c73-1263-4d79-b397-8f55e2f8653e\":{\"className\":\"Terrasoft.CompareFilter\",\"filterType\":1,\"comparisonType\":3,\"isEnabled\":true,\"trimDateTimeParameterToDate\":false,\"leftExpression\":{\"className\":\"Terrasoft.ColumnExpression\",\"expressionType\":0,\"columnPath\":\"Status.IsFinal\"},\"isAggregative\":false,\"key\":\"12f77c73-1263-4d79-b397-8f55e2f8653e\",\"dataValueType\":12,\"leftExpressionCaption\":\"Status.Status is final\",\"rightExpression\":{\"className\":\"Terrasoft.ParameterExpression\",\"expressionType\":2,\"parameter\":{\"className\":\"Terrasoft.Parameter\",\"dataValueType\":12,\"value\":true}}}},\"logicalOperation\":0,\"isEnabled\":true,\"filterType\":6,\"rootSchemaName\":\"Case\",\"key\":\"\"}",
         "aggregationType":1,
         "style":"widget-navy",
         "orderDirection":1,
         "min":0,
         "middleFrom":5,
         "middleTo":8,
         "max":10
      },
      "widgetType":"Gauge"
   }

А в GaugeDashboardItemData с ними работают:

 

		/// <summary>
		/// Returns data for indicator dashboard item.
		/// </summary>
		public override JObject GetJson() {
			JObject itemObject = base.GetJson();
			CopyProperties(itemObject);
			if (string.IsNullOrEmpty(GetSchemaName())) {
				return itemObject;
			}
			GaugeDashboardItemSelectBuilder selectBuilder = GetSelectBuilder();
			object value = GetData(selectBuilder);
			itemObject["dataValueType"] = selectBuilder.ColumnDataValueType;
			itemObject.Add(new JProperty("data", value));
			itemObject["min"] = Parameters.Value<int?>("min");
			itemObject["middleFrom"] = Parameters.Value<int?>("middleFrom");
			itemObject["middleTo"] = Parameters.Value<int?>("middleTo");
			itemObject["max"] = Parameters.Value<int?>("max");
			itemObject["orderDirection"] = Parameters.Value<int?>("orderDirection");
			return itemObject;
		}

То есть Вам надо будет делать свои аналоги GaugeDashboardItemData, GaugeModule (отображение в итогах), GaugeDesigner (окно настроек), где с ними работают, Возможно, понадобится ещё что-то изменить или просто скопировать с другим названием GaugeChartJsConfigBuilder.

node button icon

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

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



Это позволит точнее контролировать процесс импорта, избегая ситуаций, когда добавляются ошибочно написанные валюты, страны и тому подобное

Нравится

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

Доброе утро, Владимир!

 

Есть такой, не до конца протестированный, вариант:

- забрать права доступа на операцию "Создание" для юзеров/ролей в объекте "Справочник": https://prnt.sc/wljjrd. Это относится только к справочникам, т.е. тем объектам у кого родителем является "Базовый справочник". Ни поле "Контакт", ни "Контрагент" под эти правила уже не подойдут.

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

 

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

Доброе утро, Владимир!

 

Есть такой, не до конца протестированный, вариант:

- забрать права доступа на операцию "Создание" для юзеров/ролей в объекте "Справочник": https://prnt.sc/wljjrd. Это относится только к справочникам, т.е. тем объектам у кого родителем является "Базовый справочник". Ни поле "Контакт", ни "Контрагент" под эти правила уже не подойдут.

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

 

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

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

 

Также в стандартном механизме уже предусмотрено отсеивание некоторых случаев ошибочного добавления:

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

В файле импорта указан тип контакта “клиент”.
В справочнике [ Типы контактов ] содержится значение “Клиент”.

В этом случае импортированная запись связывается с существующим значением. Новая запись в справочник добавлена не будет.

В файле импорта указан тип контакта “«Клиент»”.
В справочнике [ Типы контактов ] содержится значение “Клиент”.

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

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

А как насчёт чистки данных перед импортом?) 

Или после, уже в базе. Или в момент, созданием своего специализированного механизма импорта, учитывающего все специальные случаи. До определённой версии была возможность запустить старое окно импорта с большим числом настроек, но в современных, где нет логики на основе 5.Х, такого, видимо, не выйдет.

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

Добрый день!



Подскажите, пожалуйста, как можно реализовать несколько уровней в печатной форме MS Word?

 

Например:

1. Счёт

     1.1. Категория продукта 1

         1.1.1. Продукт 1

         1.1.2. Продукт 2

     1.2 Категория продукта 2

         1.2.1. Продукт 3

         1.2.2. Продукт 4



Категория печатается нормально, а вот затем в каждой категории печатается весь набор продуктов (от 1-4) без привязки к предыдущему уровню (категории)

Нравится

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

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

Или не view, а записи в специальной таблице, наполняемой программно для каждого построения отчёта.

Идея  о возможности выводить табличные части в виде иерархического (древовидного) реестра уже заведена и принята.

View не годится, так как у разных уровней разное форматирование в Word'e.



Как я понимаю, тогда только в Fast report?

Либо чисто программно формировать в скрипте документ Word с каким угодно форматированием при помощи библиотеки  DocumentFormat.OpenXml.dll, которая загружена в систему и используется и в стандартных схемах ReportService, WordReportingDesignWorker, WordReportUtility и WordReportGenerator.

Но перед этим проверьте в маркете существующие движки отчётов, нет ли там такого формата, который Вам нужен.

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

Как настроить зависимость между справочниками. 

Пример: Есть два справочника 

- Область

- Район 

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

Нравится

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

1. Добавьте зависимость в атрибут схемы.

2. Добавьте фильтрацию к справочному полю.

1. Добавьте зависимость в атрибут схемы.

2. Добавьте фильтрацию к справочному полю.

Дамиан Викторович пишет:

1. Добавьте зависимость в атрибут схемы.

2. Добавьте фильтрацию к справочному полю.

Возможно есть другое решение?

Артём, можно настроить бизнес-правило пользовательскими средствами или средствами разработки.

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

Добрый день!

Перед мной стоит такая задача. Нужно в бизнес-процессе, который запускается периодически (раз в 10 минут), получать список Обращений (Case) по определенному критерию и затем по каждому такому Обращению отправлять письмо. Я читал, что можно сформировать список объектов и передать его каким-то образом в бизнес-процесс, который обрабатывал бы этот список и отправлял письма. К сожалению, не могу найти примеров такого решения. Возможно, кто-то может дать ссылку на описание подобного варианта? Или же есть более удобные способы решения такой задачи? Заранее спасибо за ответ.

Нравится

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

Добрый день.

 

Посмотрите описание решения подобной задачи в статье по работе с коллекциями.

Добрый день.

 

Посмотрите описание решения подобной задачи в статье по работе с коллекциями.

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

 Большое спасибо за Ваш ответ. Очень полезная ссылка.

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