Добрый день!

Никто не сталкивался с задачей, что нужно настроить доступ к отдельным записям справочника? (например есть справочник "Специальность" и часть записей в нём нужно скрыть от пользователей определённой функц. роли)

Нравится

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

А такая же настройка доступа к объекту по записям не работает?



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

А такая же настройка доступа к объекту по записям не работает?



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

Да, для объекта справочника можно так же включить администрирование по записям, как и для другой таблицы. При этом автоматически в базе должна создаться таблица Sys...Right. Поскольку справочник не зарегистрирован как раздел, добавить в неё записи можно через базу. Либо попробовать через БП, при помощи блока «Изменить права доступа».

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

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

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



Как можно в bpm'online перевести кроме элементов интерфейса на несколько языков еще и данные?

Необходимо отображать на языке пользователя некоторые поля справочников (Name, Description), а также некоторые поля разделов (например, названия, описания сервисов или продуктов)

Нравится

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

В схеме таблицы для тех полей, которые хотите локализировать, установить признак 'Локализируемый текст' (Localizable Text):

 

По умолчанию для таблиц, которые наследованы от Base lookup, для полей Name и Description эти признаки уже установлены.

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

Для примера на скриншоте ключ выглядит следующим образом: Data:Contact.OfficialName:82d21f9f-4cec-4ff7-aeee-9255cc4f37f3. Contact - это название таблицы, OfficialName - название локализируемого поля, 82d21f9f-4cec-4ff7-aeee-9255cc4f37f3 - Id записи в таблице Contact, для которой делается перевод.

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

В схеме таблицы для тех полей, которые хотите локализировать, установить признак 'Локализируемый текст' (Localizable Text):

 

По умолчанию для таблиц, которые наследованы от Base lookup, для полей Name и Description эти признаки уже установлены.

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

Для примера на скриншоте ключ выглядит следующим образом: Data:Contact.OfficialName:82d21f9f-4cec-4ff7-aeee-9255cc4f37f3. Contact - это название таблицы, OfficialName - название локализируемого поля, 82d21f9f-4cec-4ff7-aeee-9255cc4f37f3 - Id записи в таблице Contact, для которой делается перевод.

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

Спасибо!



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



А как все уже существовавшие записи добавить для перевода?

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

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

Добрый день,

Возможно ли отфильтровать справочное поле внутри модального окна? Я попробовал обычным путем через атрибуты, но это не сработало, бпм даже не зашла в реализацию "lookupListConfig". В справочнике просто отображались абсолютно все значения

 

После решил попробовать заполнить справочник вручную нужными значениями

//attributes
"RIBDocType": {
    "dataValueType": Terrasoft.DataValueType.ENUM,
    "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
    "caption": "RIBDocType"
},
"documentTypeList": {
    "dataValueType": Terrasoft.DataValueType.ENUM,
    "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
    "isCollection": true
}
 
//diff
{
	"operation": "insert",
	"parentName": "Header1",
	"propertyName": "items",
	"name": "RIBDocType",
	"values": {
		"bindTo": "RIBDocType",
		"caption": "Тип документа",
		"classes": {"wrapperClass": ["base-edit"]},
		"layout": {"column": 0, "row": 3, "colSpan": 24},
		"textSize": "Default",
		"contentType": Terrasoft.ContentType.ENUM,
		"labelConfig": {
			"visible": true
		},
		"controlConfig": {
			"className": "Terrasoft.ComboBoxEdit",
			"list": {
				"bindTo": "documentTypeList"
			},
			"change": {
				"bindTo": "onMyValueChange"
			},
			"prepareList": {
				"bindTo": "prepareDocumentTypeList"
			}
		}
	},
	"index": 3
}
 
//methods
 
onRender: function() {
	if (!this.get("documentTypeList")) {
		this.set("documentTypeList", this.Ext.create("Terrasoft.Collection"));
	}
 
},
 
prepareDocumentTypeList: function(filter, list) {
	if (list === null) {
		return;
	}
	list.clear();
	var columns = {};
	var value1 = {
		displayValue: "Type1",
		value: "e8670398-603b-43ca-820d-03e5b03fc275"
	};
	var value2 = {
		displayValue: "Type2",
		value: "14fcef3a-7d9e-4737-810f-52d57db3673a"
	};
	var value3 = {
		displayValue: "Type3",
		value: "672606f8-da25-40bd-a4ef-95c958331743"
	};
	columns[1] = value1;
	columns[2] = value2;
	columns[3] = value3;
	list.loadAll(columns);
	console.log(list);
},
 
onMyValueChange: function(val) {
	if (val && val.displayValue) {
		console.log("you pick: ", val.displayValue);
	}
},

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

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

 

Нравится

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

Сериков Асхат Кайратович,

Вот, например, код страницы с проекта. Если в attributes добавить lookupListConfig для поля Contact, всё подтянется

/*jshint ignore: start*/
define("UsrSchema", [],
	function() {
		return {
			mixins: {},
			messages: {},
			attributes: {},
			details: {},
			diff: /**SCHEMA_DIFF*/[
				{
					"operation": "insert",
					"name": "mainBoxContainer",
					"values": {
						"id": "mainBoxContainer",
						"itemType": Terrasoft.ViewItemType.CONTAINER,
						"items": []
					}
				},
				{
					"operation": "insert",
					"name": "mainBoxContainerGrid",
					"parentName": "mainBoxContainer",
					"propertyName": "items",
					"values": {
						"itemType": Terrasoft.ViewItemType.GRID_LAYOUT,
						"items": []
					}
				},
				{
					"operation": "insert",
					"parentName": "mainBoxContainerGrid",
					"propertyName": "items",
					"name": "Contact",
					"values": {
						"bindTo": "Contact",
						"caption": "Контакт",
						"contentType": Terrasoft.ContentType.ENUM,
						"layout": {
							"column": 0,
							"row": 0,
							"colSpan": 24
						}
					},
				}
			]/**SCHEMA_DIFF*/,
			methods: {
				init: function() {
					this.callParent(arguments);
				},
 
				getLookupQuery: function(filter, column) {
					var esq = this.callParent(arguments);
					var lookupListConfig = this.getLookupListConfig(column);
					if (lookupListConfig) {
						this.Terrasoft.each(lookupListConfig.columns, function(column) {
							if (!esq.columns.contains(column)) {
								esq.addColumn(column);
							}
						}, this);
					}
 
					var schemaColumn = this.getColumnByName(column);
					if (schemaColumn.lookupListConfig && schemaColumn.lookupListConfig.filter) {
						esq.filters.addItem(schemaColumn.lookupListConfig.filter());
					}
 
					return esq;
				},
				getLookupListConfig: function(columnName) {
					var schemaColumn = this.getColumnByName(columnName);
					if (!schemaColumn) {
						return null;
					}
					var lookupListConfig = schemaColumn.lookupListConfig;
					if (!lookupListConfig) {
						return null;
					}
					var excludedProperty = ["filters", "filter"];
					var config = {};
					this.Terrasoft.each(lookupListConfig, function(property, propertyName) {
						if (excludedProperty.indexOf(propertyName) === -1) {
							config[propertyName] = property;
						}
					});
					return config;
				}
			}
		};
	});
/*jshint ignore: end*/

 

1) Я бы попробовал 

columns[value1.value] = value1;
columns[value2.value] = value2;
columns[value3.value] = value3;

+ в каждом объекте продублировал 

var value1 = {
	displayValue: "Type1",
        name: "Type1",
	value: "e8670398-603b-43ca-820d-03e5b03fc275"
};

чисто на всякий случай

2) Если это своё модальное окно, не унаследованное от basePage, то придётся копировать логику из getLookupQuery (BasePageV2). Там как раз таки и идёт перебор аттрибутов на фильтры, доп колонки и т.п.

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

Спасибо, да не наследованное, пойду пробовать 

Сериков Асхат Кайратович,

Вот, например, код страницы с проекта. Если в attributes добавить lookupListConfig для поля Contact, всё подтянется

/*jshint ignore: start*/
define("UsrSchema", [],
	function() {
		return {
			mixins: {},
			messages: {},
			attributes: {},
			details: {},
			diff: /**SCHEMA_DIFF*/[
				{
					"operation": "insert",
					"name": "mainBoxContainer",
					"values": {
						"id": "mainBoxContainer",
						"itemType": Terrasoft.ViewItemType.CONTAINER,
						"items": []
					}
				},
				{
					"operation": "insert",
					"name": "mainBoxContainerGrid",
					"parentName": "mainBoxContainer",
					"propertyName": "items",
					"values": {
						"itemType": Terrasoft.ViewItemType.GRID_LAYOUT,
						"items": []
					}
				},
				{
					"operation": "insert",
					"parentName": "mainBoxContainerGrid",
					"propertyName": "items",
					"name": "Contact",
					"values": {
						"bindTo": "Contact",
						"caption": "Контакт",
						"contentType": Terrasoft.ContentType.ENUM,
						"layout": {
							"column": 0,
							"row": 0,
							"colSpan": 24
						}
					},
				}
			]/**SCHEMA_DIFF*/,
			methods: {
				init: function() {
					this.callParent(arguments);
				},
 
				getLookupQuery: function(filter, column) {
					var esq = this.callParent(arguments);
					var lookupListConfig = this.getLookupListConfig(column);
					if (lookupListConfig) {
						this.Terrasoft.each(lookupListConfig.columns, function(column) {
							if (!esq.columns.contains(column)) {
								esq.addColumn(column);
							}
						}, this);
					}
 
					var schemaColumn = this.getColumnByName(column);
					if (schemaColumn.lookupListConfig && schemaColumn.lookupListConfig.filter) {
						esq.filters.addItem(schemaColumn.lookupListConfig.filter());
					}
 
					return esq;
				},
				getLookupListConfig: function(columnName) {
					var schemaColumn = this.getColumnByName(columnName);
					if (!schemaColumn) {
						return null;
					}
					var lookupListConfig = schemaColumn.lookupListConfig;
					if (!lookupListConfig) {
						return null;
					}
					var excludedProperty = ["filters", "filter"];
					var config = {};
					this.Terrasoft.each(lookupListConfig, function(property, propertyName) {
						if (excludedProperty.indexOf(propertyName) === -1) {
							config[propertyName] = property;
						}
					});
					return config;
				}
			}
		};
	});
/*jshint ignore: end*/

 

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

Спасибо

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

Коллеги всем доброго времени суток!

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

Например: Есть справочники Tarifs в нем есть поле Position. И в зависимости от значения Position (1,2,3...)нужно сортировать выпадающий список.

Нравится

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

Это можно сделать при формировании запроса EntitySchemaQuery.

var sortPosition = esq.addColumn("Position");

sortPosition.orderDirection = Terrasoft.OrderDirection.ASC;

Я не уверен, что правильно понял кейс, но у меня, например, есть справочное поле "Рейтинг заявки", где значения от 1 до 10. И десятка идет сразу после единицы, так как оно сортируется как текст. Я на пейдже заявки создал атрибут, где указал сортировку по нужному мне целочисленному полю UsrNumber, которое я чуть ранее добавил в этот справочник.

"UsrRate": {
    lookupListConfig: {
	    orders: [
			{
			    columnPath: "UsrNumber", 
				direction: Terrasoft.OrderDirection.ASC
			}
		]
	}
}

 

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

Добрый день!

Был создан обьект как справочник унаследован от (базовый справочник (base))

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

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

(BPM 7.11)

Собственно вопрос как это сделать из справочника раздел?

Нравится

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

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

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

1) Создание страницы редактирования

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

Либо создать по аналогии как в справочнике «Источник лида» (см. Схему «LeadSourcePageV2»).

Либо же попробовать вручную (см. приближенный пример, который по необходимости нужно «дебажить»):

Создаем схему модели представления карточки, наследуемся от «BaseModulePageV2» вводя ее имя заголовка в поле «родительский объект», в разных конфигурациях может быть переведена по-разному, в нашем примере это «Страница активности V2».

Заполняем ее нужными полями, в нашем примере только Name, а объект в нашем примере называется «UsrAccStage»:

define("UsrAccStagePageV2", ["AccountPageV2Resources", "GeneralDetails"],

function(resources, GeneralDetails) {

    return {

        entitySchemaName: "UsrAccStage",

        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,

        diff: /**SCHEMA_DIFF*/[

               {

                "operation": "insert",

                "name": "Name",

                "parentName": "Header",

                "propertyName": "items",

                "values": {

                       "bindTo": "Name",

                       "layout": {

                           "column": 0,

                           "row": 0,

                           "colSpan": 12

                      }

                }

            }

        ]/**SCHEMA_DIFF*/,

        attributes: {},

        methods: {},

        rules: {},

        userCode: {}

    };

});

Далее нашей целью является зарегистрировать связь страницы редактирования в базе данных в таблице «SysModuleEdit» через развязочную таблицу «SysModuleEntity» с сущностью объекта, в котором хранится информация. В нашем случае «UsrAccStage». Листинг SQL приводим ниже:

SELECT * FROM SysSchema Where Name = 'UsrAccStagePageV2'

-- UId карточки редактирования = 064A98B5-E6FE-47E7-B9A6-499561BD1347

SELECT * FROM SysSchema Where Name = 'UsrAccStage"

-- колонка UId объекта = E894EBA6-9FBB-4AA7-90E4-6A99B6CD5329

-- проверяем развязочную таблицу

SELECT * FROM SysModuleEntity

WHERE SysEntitySchemaUId = 'E894EBA6-9FBB-4AA7-90E4-6A99B6CD5329'

-- если нет там записи, добавляем:

INSERT INTO SysModuleEntity (SysEntitySchemaUId) VALUES ('E894EBA6-9FBB-4AA7-90E4-6A99B6CD5329')

-- проверяем развязочную таблицу

SELECT * FROM SysModuleEntity

WHERE SysEntitySchemaUId = 'E894EBA6-9FBB-4AA7-90E4-6A99B6CD5329'

-- берем от туда Id = 671F61D8-2E72-47A4-95C7-D67E2C8B723F

INSERT INTO SysModuleEdit (SysModuleEntityId, CardSchemaUId, ActionKindCaption, ActionKindName, PageCaption) VALUES ('671F61D8-2E72-47A4-95C7-D67E2C8B723F', '064A98B5-E6FE-47E7-B9A6-499561BD1347', 'Добавить нашу сущность',

'UsrAccStage','Стадия контрагента')

SELECT * FROM SysModuleEdit WHERE SysModuleEntityId = '671F61D8-2E72-47A4-95C7-D67E2C8B723F'

2) Вопрос по регистрации схемы раздела и самого раздела уже обсуждался на комьюнити (например, https://community.terrasoft.ru/node/26721)

 

Одеяненко Юлия,

Спасибо за оперативность. Пробую.

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

Всем привет. Такой вопрос.

В разделе выведено справочное поле (lookup), к примеру ссылка на организацию. Через get я могу получить id-шник выбранной записи (value) и имя записи (displayValue).

Стоит задача прочитать другие поля записи этого справочника через js код, например ИНН организации. Подскажите есть ли какая-то функция, передав в которую guid записи справочка, названия схемы и названия поля она возврвщала значение этого поля. Как это сделать через EntitySchemaQuery я представляю, но может есть вариант попроще?

Нравится

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

через attributes подтягиваете нужные вам колонки. пример

Account: {
   lookupListConfig: {
      columns: ["UsrINN"]
   }
}
 
//где-то в коде
var acc = this.get("Account");
var inn = acc ? acc.UsrINN : null;

 

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

Спасибо, попробую.

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

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

На нескольких проектах столкнулись со следующей ситуацией.

Описания кейса:



1) Рассмотрим раздел обращения, Колонки "Контакт" и "Контрагент".

Пробуем добавить новый контакт через "Всплывающее действие" при вводе не существующего ФИО в системе.



https://yadi.sk/i/OQCOmeQw3TedkE



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

Штатный функционал работает корректно.

 

Потребность:

Необходимо добавить сложный фильтр для lookup "Контакта".

Логика фильтра: Если "Контрагент" заполнен, то отображать к выбору только те контакты, у которых на детали "Карьера контакта" (деталь в разделе контакт) есть записи по связанному контрагенту, Который выбран в обращении.



Был выбран способ реализации путём задания фильтра через атрибуты.

"Contact": {
                lookupListConfig: {
                    filters: [
                        function() {
                            var accountId = this.get("Account");
                            var filterGroup = Ext.create("Terrasoft.FilterGroup");
                            if (accountId){
                                var filterById = Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "[ContactCareer:Contact].Account", accountId.value);
                                filterGroup.add("filterById", filterById);
                            return filterGroup;
                        }
                    ]
                }
            }



Фильтрация работает корректно.



2) Однако возникла следующая проблема, которой нет при создании фильтров через бизнес-правила:



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

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



https://yadi.sk/i/4baUZyPr3Tee7E



Есть только возможность выбора из отфильтрованных значений.



https://yadi.sk/i/a-qH6I0R3TefZq

https://www.screencast.com/t/6Mu2hFnkt



Если, согласно условию if, Контрагент не заполнен, то действие для создания появляется.



https://yadi.sk/i/HaQF5U1L3Teg7r



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

Возможно есть простой способ реализации подобного фильтра через бизнес-правила? У нас попросту не получилось организовать подобный фильтр другим способом.

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

Нравится

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

Чисто в теории в LookupQuickAddMixin отсекается возможность быстрого создания, если функция checkIsComplicatedFiltersExists вернёт true. Можно прям на странице переопределить эту функцию

checkIsComplicatedFiltersExists: function() {
	return false;
}

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

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

Спасибо за подсказку! Закрыли задачу!

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

Коллеги, как запретить добавлять новые города пользователям (в том числе и System adminsitator'ам) через такую прекрасную функциональность, как Создать в Lookup?

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



Если честно, пользователи жмут, не думая. Потом чистить надоедает.

 

Нравится

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

Добрый день, Владимир!

Данная логика настраивается на уровне системной операции с кодом "CanManageLookups". На детали "Доступ к операции" удалить те пользователи или роли, у которых нужно забрать права на данную функциональность. После этого не будет появляется кнопка «Создать» в самом поле страницы, если такой записи еще нет в справочнике. Минусом данного варианта является тот момент, что у пользователей не будет доступа к разделу "Справочники", так как это взаимосвязанный функционал. 

в LookupQuickAddMixin закомментировать или изменить строчку:

config.objects[Terrasoft.GUID_EMPTY] = this.getNewListItemConfig(config.filterValue);

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

upd. меня опередили) в принципе совет сверху тоже подойдет, ибо там же в init стоит проверка 

RightUtilities.checkCanExecuteOperation({
	operation: "CanManageLookups"
}

 

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

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

Борис Леонов пишет:

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

Resources. это вкратце.

Подробнее: замещаем схему (модуля). копируем туда подчистую код. 

1) отсутствует вкладка less. надо модуль сохранить, перезайти заново и только тогда она появится

2) локализ. строки - они есть, но их нет. В буквальном смысле. Приходится перед всеми строками ставить точку, сохранять, потом убирать точки и пересохранять

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

4) все messages нужно перевбивать. руками. good luck have fun

мб что-то ещё. уже не помню)

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

очень сильно вкратце :)

Борис Леонов пишет:

очень сильно вкратце :)

 расписал) ух как горит пятая точка - проблемы не могут исправить 2 год как

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

Данная логика настраивается на уровне системной операции с кодом "CanManageLookups"

У меня ощущение, что на города это не действует. Кроме того, эта логика останется на Контрагенты, Контакты и другие Lookup-поля, которые ссылаются не на Справочники, а на Разделы 

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

ценная инфо, спасибо!

это не всегда происходит, случайным образом?

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

Борис Леонов,

Всегда, при замещении модуля. при замещении простых page и section(к примеру) всё отлично.

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

еще раз спасибо за информацию!

Радикальный вариант — пустым INSTEAD OF INSERT триггером на таблице городов. Или такой же логикой на уровне БП при добавлении записей в этой таблице.

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

Права доступа на справочник.

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

Запрещаю для Роли изменение, записи созданы после настройки роли.

Нравится

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

Евгений, здравствуйте!

Как Вы используете версию продукта?

Проверьте, что на уровне объекта стоит соответствующий признак. Также прикрепите скриншот с настройками прав (по записям/по операциям).

Вильшанский Дмитрий,

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

Alex Zaslavsky,

Так можно же дать права на сам объект в администрировании. По идее этот механизм должен работать, но с ним проблемы. При этом на 14 дневном триальном все работает.

Евгений.,

я нажимал галочку в "Администрируется по операциям", но менеджер не может добавить в справочник город, пока я не дам ему права доступа на операции с кодом CanManageLookups. А если я это делаю, то он получает доступ на все...

Alex Zaslavsky,

Понял о чем вы. Мы делали так.

Тут нужно будет программировать.

Механизм такой:

1) в справочниках создать новую группу справочников например "Справочники для роли1" - это делается руками.

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

3) настроить фильтрацию (отображение) по ролям. на группы справочников.

Таким образом пользователь с Ролью1 увидит только те справочники, которые были помещены в группу справочников "Справочники для роли1".

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

Евгений.,

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

Alex Zaslavsky,

Это решается просто.

https://community.terrasoft.ru/questions/vsplyvausaa-strocka-sozdat

коллеги уже подсказывали мне. Но это вообще всем запретит создавать какие либо записи из этого окошка.

 

А точнее совсем уберет это окошко, оно даже показываться не будет.

Евгений.,

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

Здравствуйте, Евгений, Alex!

К сожалению, на данный момент раздавать права на редактирование отдельных справочников возможности нет. Можем предложить такое решение: раздать права пользователю на CanManageLookups, но сделать объекты справочника, которые он не должен редактировать, администрируемым по операциям и забрать права у пользователя на добавление+изменение+удаление - http://prntscr.com/ih3w8h. Тогда и добавлять значения пользователь не сможет - http://prntscr.com/ih3xfh, и система не будет предлагать добавить новое значение в карточке, на которой есть соответствующее справочное поле - http://prntscr.com/ih3yby.

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

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

Подскажите, нигде не могу найти ответ. Есть страница для двухуровневого справочника (По аналогии со справочником "Результат активности по категориям" в интерфейсе 5.х). Из дизайнера страниц запускается, работает (добавляет, удаляет). Как привязать страницу к самому справочнику, чтобы она открывалась из раздела "Справочники"? 

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

Нравится

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

Здравствуйте, Лидия!

Системные составные справочники, основанные на устаревших aspx страницах еще функционируют благодаря таблице «SysLookup». Которая содержит необходимую информацию по страницам редактирования. На пользовательском уровне указать их уже нельзя задать.

 

Вы можете посмотреть, как устроен справочник:

SELECT * FROM [Lookup] WHERE Name = 'Communication option types'

И увидеть у него в последней колонке SysLookupId ссылку на:

SELECT * FROM SysLookup WHERE Id = 'BE01987D-37FE-DF11-B154-001D60E938C6'

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

 

Также aspx страницы не рекомендуются к использованию, если вам необходим справочник на старом интерфейсе, смотрите, как устроен 'Communication option types', но лучше придумать обходное решение на новом интерфейсе.

 

Ниже примерный алгоритм реализации:

 

1. создаете новый справочник, у Вас должна появиться запись в Lookup;

2. добавляете в старую таблицу SysLookup запись:

                -  в SysGridPageSchemaUid это Uid схемы из таблицы SysSchema;

                -  в SysEntitySchemaUid это Uid объекта, который выступает в качестве справочника;

                - в другие колонки заполняете советующими значениями;

3. в таблице Lookup нужного справочника в колонке SysLookupId заполняете Id из пункта 2.

 

Также подобная тема была на community - https://community.terrasoft.ru/questions/sloznyi-spravocnik-v-bpmonline…

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