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

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

Нравится

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

Игорь, Вы можете включить и настроить права доступа по записям в объекте «Справочник» (Lookup).  Также, чтобы не только администраторы, но и пользователи, нужно выдать им права на операцию «Доступ к разделу "Справочники"» (CanManageLookups).

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

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

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

Нравится

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

Посмотрите BaseOpportunityPage в пакете Opportunity поле OpportunityClient

 

 

"Client": {
	"caption": {"bindTo": "Resources.Strings.Client"},
	"dataValueType": this.Terrasoft.DataValueType.LOOKUP,
	"multiLookupColumns": ["Contact", "Account"],
	"isRequired": true
}
....
 
{
	"operation": "insert",
	"parentName": "ProfileContainer",
	"propertyName": "items",
	"name": "OpportunityClient",
		"values": {
	    	"bindTo": "Client",
			"layout": {"column": 0, "row": 1, "colSpan": 24},
			"tip": {
				"content": {"bindTo": "Resources.Strings.ClientTip"}
			},
			"controlWrapConfig": {
				"classes": {"wrapClassName": ["client-edit-field"]}
			},
			"controlConfig": {
				"enableLeftIcon": true,
				"leftIconConfig": {"bindTo": "getMultiLookupIconConfig"}
			}
		},
		"alias": {
			"name": "Client",
			"excludeProperties": ["layout"],
			"excludeOperations": ["remove", "move"]
		}
	}





 

Посмотрите BaseOpportunityPage в пакете Opportunity поле OpportunityClient

 

 

"Client": {
	"caption": {"bindTo": "Resources.Strings.Client"},
	"dataValueType": this.Terrasoft.DataValueType.LOOKUP,
	"multiLookupColumns": ["Contact", "Account"],
	"isRequired": true
}
....
 
{
	"operation": "insert",
	"parentName": "ProfileContainer",
	"propertyName": "items",
	"name": "OpportunityClient",
		"values": {
	    	"bindTo": "Client",
			"layout": {"column": 0, "row": 1, "colSpan": 24},
			"tip": {
				"content": {"bindTo": "Resources.Strings.ClientTip"}
			},
			"controlWrapConfig": {
				"classes": {"wrapClassName": ["client-edit-field"]}
			},
			"controlConfig": {
				"enableLeftIcon": true,
				"leftIconConfig": {"bindTo": "getMultiLookupIconConfig"}
			}
		},
		"alias": {
			"name": "Client",
			"excludeProperties": ["layout"],
			"excludeOperations": ["remove", "move"]
		}
	}





 

Владимир Соколов,

Хорошо я вроде понял щас попробую

Показать все комментарии
Пробую развернуть стенд на centos. Делаю все по шагам:

1. https://academy.terrasoft.ru/docs/user/ustanovka_i_administrirovanie/razvertyvanie_onsite/server_subd/razvernut_bazu_dannykh_postgresql_linux
2. https://academy.terrasoft.ru/docs/user/ustanovka_i_administrirovanie/razvertyvanie_onsite/server_keshirovaniya/nastroit_server_keshirovaniya_dannykh_redis_na_linux
3. https://academy.terrasoft.ru/docs/user/ustanovka_i_administrirovanie/razvertyvanie_onsite/server_prilozhenij_net_core_na_linux/ustanovit_creatio_net_core_na_linux

не стартует dotnet Terrasoft.WebHost.dll

в чем может быть проблема?

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

Нравится

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

eugenes, покажите весь текст стека. Похоже, на скриншот не попала верхняя часть, где непосредственно текст исключения.

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

Похоже, не может подключиться к БД, ошибка тайм-аута.

Проверьте правильность настройки параметров подключения в ConnectionStrings.config и доступность по сети сервера БД с веб-сервера.

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

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

 

Нравится

7 комментариев
var userConnection = Get<UserConnection>("UserConnection");
var esq = new EntitySchemaQuery(userConnection.EntitySchemaManager, <SchemaName>);
esq.AddAllSchemaColumns();
esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, <FieldName>, fieldValue));
var enitites = esq.GetEntityCollection(userConnection);
ver entity = enitites.FirtsOrDefault();

Примерно так.

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

Правильнее будет перед этим дописать:

esq.RowCount = 1;

Аналогично и с колонками, оставить только нужные.

Дмитрий, а почему такие крайности, от 20000 к 1? Что именно Вы получаете и что потом с этими данными делаете? Может, подобрать оптимальный размер порции для обработки за раз?

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

Александр, спасибо за уточнение. Нашёл еще один подход.

public Entity GetEntity(UserConnection userConnection)
{
    var entitySchema = userConnection.EntitySchemaManager.GetInstanceByName(name);
    var esq = new EntitySchemaQuery(entitySchema);
    esq.AddAllSchemaColumns();
    return esq.GetEntity(userConnection, primaryColumnValue);
}

 

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

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

у нас логи по 1с пишутся в системе, куда отправили , что отправили , также получаем данные из 1с, из-за этого логов за один проход чуть больше 100 получается каждые пол часа

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


Соответственно он не сможет дальше писать ничего , если при записи лога взял пулом 20 тыс записей разом

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

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

Спасибо за строчку с лимитом на выборку записей.

esq.RowCount = 1; // 20_000 - максимальный лимит

 

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

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

Мы команда крупного предприятия в Москве, внедряем сами себе Creatio. На данный момент ищем человека в команду, который мог бы нам помочь с интеграциями и другими задачами по внедрению платформы (более 700 рабочих мест и куча бизнес-процессов). Для внедрения есть целый проектный офис, который уже описал большую часть процессов в bpmn и провел другие работы. В общем мы знаем что и как, только рук не хватает).

Проект примерно на год-полтора, возможно потом остаться на поддержке, можно удаленно. Достойная ЗП и работодатель.

Нравится

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

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

 

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

  • Доступ к объектам - 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, они должны быть стабильными.

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

 

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

Добрый день



Система требует заполнить поле "Заголовок". При заполнении “Заголовка” далее требует заполнить поле “Название”, но поле “Название” нет на детали.

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

Нравится

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

Александр,

 

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

 

 

Александр, добрый день,

 

как обходное решение вопроса на версии 7.17.1 нужно выключить фичу UseNewStructureExplorer , исправление ошибки и глобальное решение запланировано в следующих релизах Creatio. Для информации добавляю ссылку на статью по работе с фичами https://academy.terrasoft.ru/docs/node/2845.

Лазоренко Ирина,

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

на версии 7.17.1 эта фича выключена. Данная проблема так и осталась

Андрей, добрый вечер!

повторно направила вопрос ответственной команде.

Шибаев Андрей, столкнулись с аналогичной проблемой.

Нашел следующее обходное решение. Для добавление новой колонки в существующий отчет можно скопировать существую колонку отчета.

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

Коллеги, здравствуйте.

Не до конца понимаю как задать фильтрацию выпадающего списка времени для полей с типом "Дата/Время" в карточке.

Идея в том, чтобы ужать выпадающий список под рабочие часы (9:00-18:00).

Подскажите пожалуйста как грамотнее всего реализовать?

Спасибо!

Нравится

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

Александр, это поле — компонент ядра, в конфигурации он не дорабатывается. Можно сделать рядом два поля: одно для ввода только даты, без времени, а другое — справочное с выпадающим списком только рабочего времени. И программно сводить их значения в одно поле объекта с полной датой.

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

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

Александр, это поле — компонент ядра, в конфигурации он не дорабатывается. Можно сделать рядом два поля: одно для ввода только даты, без времени, а другое — справочное с выпадающим списком только рабочего времени. И программно сводить их значения в одно поле объекта с полной датой.

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

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

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

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

 

Зарегистрировал онлайн стенд через https://www.terrasoft.ru/trial/creatio

В коммуникационной панели в пункте "Звонки" отображается ошибка "Отсутствует подключение к серверу телефонии. Возможно, не настроены параметры соединения или сервер телефонии недоступен.

 

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

Нравится

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

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



Для использования функционала звонков в 14-дневной триал версии необходимо выполнить настройку интеграции с одной из телефоний из данного списка - https://academy.terrasoft.ru/documents/sales-enterprise/7-10/sravnenie-vozmozhnostey-integracii-s-razlichnymi-ats.



С уважением, Елена.

 

support,

 

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

Добрый вечер, Александр!

 

Ранее в 14-дневных триал версиях, по умолчанию, был представлен продукт Webitel Collaboration, который давал возможность осуществлять внутренние звонки.

В последних релизах эту функциональность убрали, так как развитие Webitel Collaboration приостановлено.

 

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

Tseberko Kristina,

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

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

Да, к сожалению, уже не входят.

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

Есть Объект со статусами Новое-В работе-Выполнено. В объекте есть деталь. Запись объекта создает Подразделение "А". Создает в статусе "Новое". Добавляет данные в деталь. Потом переводят в статус "В работе". Данные из детали анализирует подразделение "Б". Когда завершают работу, переводя на статус "Выполнено".

Требуется запретить изменять объект и данные в детали для подразделения "А" в момент когда статус объекта не равен "Новое". Если с запретом на изменение данных проблем нет - все решается администрированием Объекта по записям и наследование полномочий в детали от Объекта, а бизнес-процессом отбираем права на редактирование при смене статуса. То вот с запретом на добавление данных в деталь случился небольшой затык. Как это можно сделать?

Нравится

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

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

Стандартно она такая:

/**
 * Determines, if add record button is enabled.
 * @private
 * @returns {Boolean} - Flag of add record button enabled.
 */
_isAddRecordButtonEnabled: function() {
	const isDetailEnabled = this.get("IsEnabled");
	if (this.isEmpty(isDetailEnabled)) {
		return true;
	}
	return isDetailEnabled;
},
 
/**
 * ########## ########### ###### ########## ######.
 * @return {Boolean}
 */
getAddRecordButtonEnabled: function() {
	return this._isAddRecordButtonEnabled();
},
 
/**
 * ########## ########### ###### # #### ########## ######.
 * @return {Boolean}
 */
getAddTypedRecordButtonEnabled: function() {
	return this._isAddRecordButtonEnabled();
},

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

 

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

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