Добрый день
Подскажите, пожалуйста, как лучше сделать логику заполнения поля в карточке КЕ:
нужно, чтобы поле содержало строго 10 символов (или цифр?), при заполнении этого поля должна быть проверка на уникальность (значения этого поля не должны повторяться).
Примеры заполнения поля: 0000000001, 0000000002, ..., 0000000011, ....

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

Нравится

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

Татьяна! Может Вам подойдет настроить автонумерацию для поля? Для этого необходимо создать две системные настроки [название объекта][LastNubmber] и [название объекта][CodeMask] во втором в случае ввиде маски указать необходимые Вам 10 цифр как {0000000000}, затем добавить код генераци в код страницы для этого поля в метод init по типу:
if (this.action === ConfigurationEnums.CardState.Add ||
this.action === ConfigurationEnums.CardState.Copy) {
this.getIncrementCode(this.entitySchema.name, function(response) {
this.set('Number', response);
});
}
Тогда при содании поля новой КЕ автоматом будет присваиваться номер. Или вы хотите чтобы пользователь заполнял все сам, но реалиизовать проверку на 10 цифр? и чтобы таких номеров в бд не было?

Добрый день.
Я ошиблась с версией системы - у нас 5-ка, а не 7-ка. Подойдет ли Ваш ответ к нашей системе?

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

С примером настройки автонумерации в 5.x вы можете ознакомиться в этом посте - ссылка.

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

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

Версия 7.7.0.2325

Нужно реализовать дополнительный реестр, с сохранением всех функций раздела (вариант из https://community.terrasoft.ru/blogs/12682 не подходит). Принцип работы такой же как в разделе активности, только место расписания должны отображаться отфильтрованные данные, также для пользователя должен сохраняться выбор реестра с которым он закончил работать, т.е. стандартный функционал - если зашел в аналитику раздела, следующий раз при переходе в раздел из основного меню попадаешь не в реестр а в аналитику.

Создал новый раздел и работаю в нем(код раздела в приложении).
Переход между представлениями работает нормально, скрывается стандартное GridDataView и отображаеться новое WarehouseDataView и наоборот(одноименные скриншоты в приложении).

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

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

Нравится

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

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

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

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

getProfileKey: function() {
	var parentKey = this.callParent(arguments);
	return parentKey + "GridSettingsGridDataView";
}

Если просто заменить возвращаемое значение на ключ своего профиля, то потеряется профиль для базового представления. Поэтому необходимо добиться, чтобы при инициализации профиля в SchemaBuilderV2 свойство profile схемы содержало все необходимые профили (например, путём переопределения метода initSchemaProfile в SchemaBuilderV2).

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

Здравствуйте, примеров, к сожалению, в системе нет. Но вы можете попробовать пойти обходным путем. Создать схему раздела на основании базовой схемы, по аналогию с основным разделом.
Тогда в ней по умолчанию будут работать настройка колонок.
И, к примеру, заходя по ссылке:
…/0/Nui/ViewModule.aspx#SectionModuleV2/UsrContactSectionV2Type2

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

А заходя по ссылке:
…/0/Nui/ViewModule.aspx#SectionModuleV2/ContactSectionV2
Будет работать настройка колонок стандартной, собственно ContactSectionV2, и обрабатываться все будет ей.

В разных схемах вы сможете реализовать разное поведение.
Единственное что, вам необходимо будет сделать, что бы кнопки(иконки) “представлений” вели к нужной вам схеме, первая к основной, и ваша, к UsrContactSectionV2Type2, или как вы там назовете схему.

Илья, ваш способ пробовал, есть тема с этим способом, но у него есть недостатки, он не походит.

Хотелось бы добить способом который предложил Олег.
Сейчас поведение такое: при переходе на новую вкладку информация не отображаеться, если зайти в настройку колонок и просто сохранить(в мастере уже добавлены текущие колонки т.е. профиль закладки сохраняется по своему ключу), данные появляются, при новой загрузке пропадают.

Подскажите? что такого происходит при открытии и сохранении настроек колонок. Возможно получиться это повторить.

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

Также интересует, как можно получить профиль по ключу аналогично его получению в SchemaBuilderV2, в разделе сделать это не получилось, возвращает undefined.

Еще один момент:
Путем переопределения SchemaBuilderV2 и подстановкой нужного ключа профиля:

initSchemaProfile: function(callback, config) {
	var profileKey = config.profileKey;
	if (profileKey == "UsrImplSectionGridSettingsGridDataView") {
		profileKey = "UsrImplSectionGridSettingsWarehouseDataView";
		config.profileKey = profileKey;
	}
	this.getProfile(profileKey, function(profile) {
		config.schemaResponse.profile = profile;
		callback(config);
	}, this);
},

колонки начали отображаться нормально. Что нужно сделать что бы при инициализации в config передавался ключ активного профиля?

Актуальный скрипт раздела в приложении.

Данный ключ генерируется в "SectionModuleV2" в методе getProfileKey :

getProfileKey: function() {
      var parentKey = this.callParent(arguments);
      return parentKey + "GridSettingsGridDataView";
},

Родительский метод же объявлен следующим образом:

getProfileKey: function() {
      return this.schemaName;
},

Илья, этот метод переопределен(также пробовал фиксированно задавать ключ нового представления), и с помощью точке останова установил что SchemaBuilderV2.initSchemaProfile вызывается раньше SectionModuleV2.getProfileKey

initSchemaProfile вызывается раньше именно потому что использует getProfileKey в своей работе. Я не совсем понимаю, почему не получается использовать getProfileKey, для получения ключа как предложил Илья
getProfileKey: function() {
var currentTabName = this.getActiveViewName();
var schemaName = this.name;
return schemaName + this.entitySchemaName + "GridSettings" + currentTabName;
}

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

На карточке раздела "Заявки на товары и услуги" есть деталь "Товары/услуги", которая работает с развязочной таблицей. Реестр в детали редактируемый.
Если открыть карточку, обновить страницу с очисткой кеша, и перейти в другой раздел, или просто по ссылке из справочного поля - карточки других разделов загружаются с пустыми полями. Выдает ошибку: "Элемент коллекции с именем SxProdDemand не найден". Если я правильно понимаю, в запрос почему-то добавляются колонки из детали.
Если обновить страницу с очисткой кеша в другом разделе - все разделы и ссылки работают.
Если отключить редактируемый реестр - все работает.
Деталь в базе зарегистрирована. Карточки редактирования у детали нет.
В чем дело и как это исправить?

Нравится

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

Добавил страницы редактирования - проблема исчезла. Есть ли возможность не добавлять страницы, т.к. они не будут использоваться?

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

Рекомендую Вам обратиться в службу технической поддержки bpm'online.
Т.к. данный вопрос требует доступа к БД и Сайту для анализа вопроса.

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

Добавил несколько полей в чистую конфигурацию и вот что выбило:


Уже чистил кеш, перезаходил в систему и компилировал - не помогло.

Нравится

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

А в новых полях на Opportunity кто нибудь ссылается?
Еще redis можно сбросить попробовать

Opportunity такого поля нет, больше никаких доработок не было.

"Александр Кудряшов" написал:Еще redis можно сбросить попробовать


это где?

"Радчук Виталий Владимирович" написал:это где?

Версия у вас в облаке или локально развернута?
Если в облаке - пишите запрос в поддержку TS на очистку Redis для вашего сайта

"Радчук Виталий Владимирович" написал:

Opportunity такого поля нет, больше никаких доработок не было.


Речь о поле, которое у вас добавлено, и в нем ссылка на объект Продажа (Opportunity) - искать нужно начинать с него...
В других браузерах тоже кракозябры в тексте ошибки?

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

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

"Александр Кудряшов" написал:Речь о поле, которое у вас добавлено, и в нем ссылка на объект Продажа (Opportunity) - искать нужно начинать с него...

Нет таких ссылок..
"Липатов Юрий Сергеевич" написал:Пришлите пожалуйста скриншот ошибки из консоли браузера с помощью google Chrome
Т.к. в хроме текст ошибки будет корректно отображаться.

Спасибо за помощь, исправлено. Нужно было удалить с карточки заказа базовое поле "Продажа"

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

Добрый день!
Есть бизнес-процесс, который преобразует Объект недвижимости в Листинг. У Объекта недвижимости есть деталь Контакты. Нужно чтобы при преобразовании объекта недвижимости деталь добавлялась в Листинг. При этом, контактов у Объекта недвижимости может быть несколько. И нужно, чтобы переносились они все. Подскажите как это лучше сделать.

Нравится

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

Наталья,

Не совсем понятно что значит “Нужно чтобы при преобразовании объекта недвижимости деталь добавлялась в Листинг.”
Условно - есть деталь [Контакты в об. недв.] в разделе Объект недвижимости. Есть деталь [Контакты в листинге] в разделе Листинги.
Для того, чтобы перенести записи с одной детали в другую следует использовать элемент “Добавить данные”.
В элементе указать “Добавить результат выборки” по объекту [Контакты в об. недв.] с фильтром по Id объекта недвижимости.
Добавлять данные в объект [Контакты в листинге]. Поле Контакт = Результат выборки. Контакт.

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

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

Версия 7.6.0.1265

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

При редактирование через мастер деталей там отображаються контейнеры, а не контролы. При замещение объекта Relationship(Взаимосвязь) - у полей RelationType и ReverseRelationType признак Список не доступен для редактирования (скриншот в приложении).

Подскажите как реализовать данную задачу.

Нравится

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

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

Это возможно сделать через мастер деталей.
Откройте настройки детали:
и измените поле справочника как показано на скриншоте

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

Коллеги, доброго дня!
Возможно, кто-то сталкивался с необходимостью скрывать/отображать кнопки в реестре по условию? Пример из документации SDK не получилось адаптировать:

isCategory: function() {
        var activeRow = this.get("ActiveRow");
        if (activeRow)
                    {
                        var cat = this.get("GridData").get(activeRow).get("Category");
                        return (cat == "ID_нужной_категории") ? true : false;
                    }
       return false;
}

Необходимо в зависимости от категории и состояния Активности скрывать и отображать различные кнопки

Нравится

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

Антон, у Вас в в переменной cat хранится объект с value и displayValue.
Для сравнения с "ID_нужной_категории" нужно брать cat.value.
Также важно, что если у вас не будет выведена колонка в реестр, то вы не сможете получить ее значение.
Для того, чтобы необходимая колонка всегда тянулась в ActiveRow можете переопределить следующий метод:

getGridDataColumns: function(){
                var gridDataColumns = this.callParent(arguments);
                gridDataColumns.Category= gridDataColumns.Category|| {path: "Category"};
                return gridDataColumns;
            }

Александр, спасибо, однако это не помогло, к сожалению. Как только делаю привязку свойства visible к функции isComplectationCategory, так сразу кнопка пропадает независимо от категории выбранной активности. Изменение условия проверки (с "==" на "!=") не помогает, кнопка в любом случае скрыта.

Вот полный код ActivitySectionV2:

define("ActivitySectionV2", ['ConfigurationConstants', 'ProcessModuleUtilities'],
	function(ConfigurationConstants, ProcessModuleUtilities) {
		return {
			entitySchemaName: "Activity",
			methods: {
						// добавляем новые пункты в меню "Действия"
				getSectionActions: function() {
					var actionMenuItems = this.callParent(arguments);
					actionMenuItems.addItem(this.getButtonMenuItem({
						Type: "Terrasoft.MenuSeparator",
						Caption: "Задачи на комплектацию"
					}));
					actionMenuItems.addItem(this.getActionsMenuItem({
						Caption: "Взять в работу",
						Click: {bindTo: "Get2Work"}
				}));
					return actionMenuItems;
				},
						// отработка нажатия пункта "Взять в работу" в "Действиях"
				Get2Work: function() {
					debugger;
					var processArgs = {
						sysProcessName: "UsrProcessGet2Work",
							parameters: {
							IncomingActivitiesList: this.getSelectedItems()
								}
					};
					ProcessModuleUtilities.executeProcess(processArgs);
				},
						// выбор функций для отработки нажатий кнопок в реестре
				onActiveRowAction: function(buttonTag, primaryColumnValue) {
					switch (buttonTag) {
						case "ComplectationFinished":
							this.ComplectationFinishedProcess(primaryColumnValue);
							break;
						case "Sended":
							this.SendedProcess(primaryColumnValue);
							break;
						case "SamplesReceived":
							this.SamplesReceivedProcess(primaryColumnValue);
							break;
						default:
							this.callParent(arguments);
							break;
					}
				},
						// отработка кнопки "Скомплектовано"
				ComplectationFinishedProcess: function(recordId) {
					debugger;
					var activeRow = this.get("ActiveRow");
					var processArgs = {
						sysProcessName: "UsrComplectationFinishedProcess",
							parameters: {
								recordId: activeRow
							}
					};
					ProcessModuleUtilities.executeProcess(processArgs);
				},
						// отработка кнопки "Отправлено"
				SendedProcess: function(recordId) {
					debugger;
					var activeRow = this.get("ActiveRow");
					var processArgs = {
						sysProcessName: "UsrSendedProcess",
							parameters: {
								recordId: activeRow
							}
					};
					ProcessModuleUtilities.executeProcess(processArgs);
				},
						// отработка кнопки "Образцы получены"
				SamplesReceivedProcess: function(recordId) {
					debugger;
					var activeRow = this.get("ActiveRow");
					var processArgs = {
						sysProcessName: "UsrSamplesReceivedProcess",
							parameters: {
								recordId: activeRow
							}
					};
					ProcessModuleUtilities.executeProcess(processArgs);
				},
						// установка видимости кнопки "Скомплектовано", если категория активности == "Комплектация"
				isComplectationCategory: function() {
					var activeRow = this.get("ActiveRow");
					if (activeRow) {
						var cat = this.get("GridData").get(activeRow).get("ActivityCategory");
						return (cat.value != "4b9497c0-e794-40bc-81e0-5f46c9bde343") ? true : false;	// 4b9497c0-e794-40bc-81e0-5f46c9bde343 категория "Комплектация"
					}
					return false;
				},
				getGridDataColumns: function() {
					var gridDataColumns = this.callParent(arguments);
					gridDataColumns.ActivityCategory= gridDataColumns.ActivityCategory|| { path: "ActivityCategory" };
					return gridDataColumns;
				}
			},
			diff: /**SCHEMA_DIFF*/[
						// вставка кнопки "Скомплектовано"
				{ 
					"operation": "insert",
					"name": "ComplectationFinishedAction",
					"parentName": "DataGrid",
					"propertyName": "activeRowActions",
					"values": {
						"className": "Terrasoft.Button",
						"caption": "Скомплектовано",
						"style": Terrasoft.controls.ButtonEnums.style.GREEN,
						"tag": "ComplectationFinished",
						"visible": {"bindTo": "isComplectationCategory"}
					}
				},
						// ставка кнпоки "Отправлено"
				{ 
					"operation": "insert",
					"name": "SendedAction",
					"parentName": "DataGrid",
					"propertyName": "activeRowActions",
					"values": {
						"className": "Terrasoft.Button",
						"caption": "Отправлено",
						"style": Terrasoft.controls.ButtonEnums.style.GREEN,
						"tag": "Sended"
					}
				},
						// вставка кнопки "Образцы отправлены"
				{ 
					"operation": "insert",
					"name": "SamplesReceivedAction",
					"parentName": "DataGrid",
					"propertyName": "activeRowActions",
					"values": {
						"className": "Terrasoft.Button",
						"caption": "Образцы получены",
						"style": Terrasoft.controls.ButtonEnums.style.GREEN,
						"tag": "SamplesReceived"
					}
				}
			]/**SCHEMA_DIFF*/
		};
	}
);

При установке внутрь функции isComplectationCategory точек остановки или уведомлений ничего не происходит - ощущение, что при выборе текущей строки реестра эта функция не срабатывает. Может, что-то ещё упустил в коде?

И ещё бы весьма признателен за подсказку, как скрыть стандартные кнопки в реестре

Попробуйте создать атрибут и забиндить видимость на него. Изменять состояние атрибута можно при изменении активного столбца, например.
А какие именно стандартные кнопки нужно скрыть? Они либо в diff по названию удаляются,либо методы, которые их формируют нужно сделать пустыми.
В этой теме есть пример:
http://www.community.terrasoft.ru/forum/topic/15106

Снова не помогло:

define("ActivitySectionV2", ['ConfigurationConstants', 'ProcessModuleUtilities'],
	function(ConfigurationConstants, ProcessModuleUtilities) {
		return {
			entitySchemaName: "Activity",
			attributes: {
				'isComplectationCategoryAttribut': {
					type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
					dataValueType: Terrasoft.DataValueType.BOOLEAN,
					dependencies: [{
						columns: ["ActivityCategory"],
						methodName: "isComplectationCategoryAttributSet"
					}]
				}
			},
			methods: {
						// добавляем новые пункты в меню "Действия"
				getSectionActions: function() {
					var actionMenuItems = this.callParent(arguments);
					actionMenuItems.addItem(this.getButtonMenuItem({
						Type: "Terrasoft.MenuSeparator",
						Caption: "Задачи на комплектацию"
					}));
					actionMenuItems.addItem(this.getActionsMenuItem({
						Caption: "Взять в работу",
						Click: {bindTo: "Get2Work"}
				}));
					return actionMenuItems;
				},
				isComplectationCategoryAttributSet: function() {
					var activeRow = this.get("ActiveRow");
					var cat = this.get("GridData").get(activeRow).get("ActivityCategory");
					this.set('isComplectationCategoryAttribut', cat.value === "4b9497c0-e794-40bc-81e0-5f46c9bde343")
					return true;	// 4b9497c0-e794-40bc-81e0-5f46c9bde343 категория "Комплектация"
				},
						// отработка нажатия пункта "Взять в работу" в "Действиях"
				Get2Work: function() {
					debugger;
					var processArgs = {
						sysProcessName: "UsrProcessGet2Work",
							parameters: {
							IncomingActivitiesList: this.getSelectedItems()
								}
					};
					ProcessModuleUtilities.executeProcess(processArgs);
				},
						// выбор функций для отработки нажатий кнопок в реестре
				onActiveRowAction: function(buttonTag, primaryColumnValue) {
					switch (buttonTag) {
						case "ComplectationFinished":
							this.ComplectationFinishedProcess(primaryColumnValue);
							break;
						case "Sended":
							this.SendedProcess(primaryColumnValue);
							break;
						case "SamplesReceived":
							this.SamplesReceivedProcess(primaryColumnValue);
							break;
						default:
							this.callParent(arguments);
							break;
					}
				},
						// отработка кнопки "Скомплектовано"
				ComplectationFinishedProcess: function(recordId) {
					debugger;
					var activeRow = this.get("ActiveRow");
					var processArgs = {
						sysProcessName: "UsrComplectationFinishedProcess",
							parameters: {
								recordId: activeRow
							}
					};
					ProcessModuleUtilities.executeProcess(processArgs);
				},
						// отработка кнопки "Отправлено"
				SendedProcess: function(recordId) {
					debugger;
					var activeRow = this.get("ActiveRow");
					var processArgs = {
						sysProcessName: "UsrSendedProcess",
							parameters: {
								recordId: activeRow
							}
					};
					ProcessModuleUtilities.executeProcess(processArgs);
				},
						// отработка кнопки "Образцы получены"
				SamplesReceivedProcess: function(recordId) {
					debugger;
					var activeRow = this.get("ActiveRow");
					var processArgs = {
						sysProcessName: "UsrSamplesReceivedProcess",
							parameters: {
								recordId: activeRow
							}
					};
					ProcessModuleUtilities.executeProcess(processArgs);
				},
						// установка видимости кнопки "Скомплектовано", если категория активности == "Комплектация"
				/*isComplectationCategory: function() {
					debugger;
					var activeRow = this.get("ActiveRow");
					debugger;
					if (activeRow) {
						var cat = this.get("GridData").get(activeRow).get("ActivityCategory");
						debugger;
						return (cat.value === "4b9497c0-e794-40bc-81e0-5f46c9bde343") ? true : false;	// 4b9497c0-e794-40bc-81e0-5f46c9bde343 категория "Комплектация"
					}
					return false;
				},*/
				getGridDataColumns: function() {
					var gridDataColumns = this.callParent(arguments);
					gridDataColumns.ActivityCategory= gridDataColumns.ActivityCategory|| { path: "ActivityCategory" };
					return gridDataColumns;
				}
			},
			diff: /**SCHEMA_DIFF*/[
						// вставка кнопки "Скомплектовано"
				{ 
					"operation": "insert",
					"name": "ComplectationFinishedAction",
					"parentName": "DataGrid",
					"propertyName": "activeRowActions",
					"values": {
						"className": "Terrasoft.Button",
						"caption": "Скомплектовано",
						"style": Terrasoft.controls.ButtonEnums.style.GREEN,
						"tag": "ComplectationFinished",
						"visible": {"bindTo": "isComplectationCategoryAttribut"}
					}
				},
						// ставка кнпоки "Отправлено"
				{ 
					"operation": "insert",
					"name": "SendedAction",
					"parentName": "DataGrid",
					"propertyName": "activeRowActions",
					"values": {
						"className": "Terrasoft.Button",
						"caption": "Отправлено",
						"style": Terrasoft.controls.ButtonEnums.style.GREEN,
						"tag": "Sended"
					}
				},
						// вставка кнопки "Образцы отправлены"
				{ 
					"operation": "insert",
					"name": "SamplesReceivedAction",
					"parentName": "DataGrid",
					"propertyName": "activeRowActions",
					"values": {
						"className": "Terrasoft.Button",
						"caption": "Образцы получены",
						"style": Terrasoft.controls.ButtonEnums.style.GREEN,
						"tag": "SamplesReceived"
					}
				}
			]/**SCHEMA_DIFF*/
		};
	}
);

Кнопка теперь всегда скрыта. Подозреваю, что для Section некорректно писать type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, или вообще где-то глобально ошибаюсь?

с удалением стандартных кнопок разобрался, достаточно в diff добавить код:

{
				"operation": "remove",
				"name": "DataGridActiveRowDeleteAction"
}

где "DataGridActiveRowDeleteAction" это название кнопки, взятое из BaseSectionV2

Антон, для наглядности оставил только 1 кнопку и соответствующие методы.
Обратите внимание на метод addColumnLink. Без него зависимость видимости не срабатывает.
Пример найден в LeadSectionV2.

define("ActivitySectionV2", ["terrasoft",'ConfigurationConstants', 'ProcessModuleUtilities'],
    function(Terrasoft,ConfigurationConstants, ProcessModuleUtilities) {
        return {
            entitySchemaName: "Activity",
            attributes: {},
            methods: {
 
                addColumnLink: function(item) {
                    var self = this;
                    item.isComplectationCategoryAttributSet= function() {
                        return self.isComplectationCategoryAttributSet.call(self, this.get(this.primaryColumnName));
                    };
                    return this.callParent(arguments);
                },
 
                isComplectationCategoryAttributSet: function(activeRow) {
                    if (!activeRow) return true;
                    var cat = this.get("GridData").get(activeRow).get("ActivityCategory");
                    return cat&&cat.value === "f51c4643-58e6-df11-971b-001d60e938c6"; //категория = выполнить. Для теста
                    //return cat&&cat.value === "4b9497c0-e794-40bc-81e0-5f46c9bde343"; //категория "Комплектация"
 
                }
            },
            diff: /**SCHEMA_DIFF*/[
                {
                    "operation": "insert",
                    "name": "ComplectationFinishedAction",
                    "parentName": "DataGrid",
                    "propertyName": "activeRowActions",
                    "values": {
                        "className": "Terrasoft.Button",
                        "caption": "Скомплектовано",
                        "style": Terrasoft.controls.ButtonEnums.style.GREEN,
                        "tag": "ComplectationFinished",
                        "visible": {"bindTo": "isComplectationCategoryAttributSet"}
                    }
                }
            ]/**SCHEMA_DIFF*/
        };
    }
);

Александр, прекрасно! Ваше решение работает, большое спасибо

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

Добрый день!

Как в bpm (7.6) создать свои периоды для фильтров?
Например "С начала текущего года по сегодняшнюю дату",
"С начала прошлого года по такую же дату в прошлом году",
"Последние 12 месяцев" и т.п.?

https://community.terrasoft.ua/system/files/period_0.png

Нравится

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

Здравствуйте, Владимир!
Привожу примеры с полем с типом "Дата"

  1. С начала текущего года и по сегодняшнюю дату
  2. С начала прошлого года по такую же дату в прошлом году
  3. Последние 12 месяцев

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

Спасибо! Действительно, всё легче, чем казалось.

Хотя, у меня такая конструкция работает хорошо:

Date<Previous Days365
Date=Previous Year

А такая плохо:

Date≤Previous Days365
Date=Previous Year
Показать все комментарии

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

Версия 7.7.0.2325

Создал объект UsrOrderType, унаследован от базового справочника, свои поля не добавлял. Через раздел Справочники зарегестрировал объект.

При открытии по кнопке Открыть наполнение, в консоли ошибка "Uncaught Terrasoft.ItemNotFoundException: Объект Terrasoft.UsrOrderType не найден".

Подскажите пожалуйста, что еще нужно сделать что бы он просто работал, как остальные базовые справочники в режиме реестра?

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

Нравится

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

Добрый день.

Попробуйте пере сохранить одну любую клиентскую схему.

"Липатов Юрий Сергеевич" написал:

Добрый день.

Попробуйте пере сохранить одну любую клиентскую схему.

Помогло, спасибо.

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

Здравствуйте.
Версия 7.7.0.2293

При установке пакета изменений возникла ошибка при Обновление измененных схем конфигурации (Генерации исходного кода схемы) трех пользовательских деталей:
Элемент коллекции с идентификатором "{AE0E45CA-C495-4FE7-A39D-3AB7278E1617}" не найден
--- Exception info ---
Error: Элемент коллекции с идентификатором "{AE0E45CA-C495-4FE7-A39D-3AB7278E1617}" не найден
Source: Terrasoft.Core
StackTrace: at Terrasoft.Core.MetaItemCollection`1.GetByUId(Guid uid)
at Terrasoft.Core.Entities.EntitySchemaGenerator.WriteEntityColumns(GeneratorContext context, EntitySchema entitySchema)
at Terrasoft.Core.Entities.EntitySchemaGenerator.WriteEntityCode(GeneratorContext context, SchemaCodeGeneratorResource`1 resource)
at Terrasoft.Core.Entities.EntitySchemaGenerator.WriteSchemaClassBody(GeneratorContext context, SchemaCodeGeneratorResource`1 resource, GeneratorTokenVisibility sourceVisibility)
at Terrasoft.Core.CodeGeneration.SchemaCodeGenerator`1.GenerateSchemaSource(SchemaCodeGeneratorResource`1 resource, EntityCollection sourceCollection, String sourceFileName)
at Terrasoft.Core.CodeGeneration.SchemaCodeGenerator`1.GenerateSources(SchemaCodeGeneratorResource`1 resource)
at Terrasoft.Core.Entities.EntitySchemaGenerator.GenerateSources(SchemaCodeGeneratorResource`1 resource)
at Terrasoft.Core.SchemaManager`1.GetSchemaSources(TSchemaManagerSchema schema, Guid schemaId, UserConnection userConnection)
at Terrasoft.Core.SchemaManager`1.GenerateSchemaSources(TSchemaManagerSchema schema, Guid schemaId, UserConnection userConnection)
at Terrasoft.Core.SchemaManager`1.GenerateSchemaSources(Guid sysSchemaId, ISchemaManagerItem schemaManagerItem, UserConnection userConnection)
at Terrasoft.Core.Packages.PackageInstallUtilities.InternalInstallSchemasAssociatedData(Guid schemaId, Guid schemaUId, String managerName, Guid packageUId, Boolean continueIfError)

Три детали унасследованны от базового объекта.
Указанный идентификатор "{AE0E45CA-C495-4FE7-A39D-3AB7278E1617}" нашел в Базовом объекте это Uid колонки Id, этот Uid присутствует в исходном коде и метаданных Базового объекта, и в методанных трех объектов деталей.

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

Нравится

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

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

Для анализа вопроса направьте на support@terrasoft.ru

1. Пакеты которые необходимо установить
2. Логи работы Workspace Console
3. Копию БД

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