Добрый день!

Приложение on-site.

Я создал объект UsrTestForDataBT. Зарегистрировал на основе его справочник (с таким же именем - UsrTestForDataBT). Наполнил справочник. Выполнил привязку данных справочника и его данных.

Удалил обе привязки данных в Конфигурации. Удалил сам объект в Конфигурации.

НО! Таблица в БД с таким названием осталась и в этой таблице содержатся данные, которые я вводил при наполнении справочника. При компиляции появляется ошибка (One or more errors occurred.
Элемент с именем "UsrTestForDataBT" не найден).

Что необходимо сделать чтобы из БД все пропало и нормально проходила компиляция?

Нравится

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

Если в таблице есть записи, то она не удаляются вместе с объектом. После удаления объекта Вам необходимо удалить ее в базе самостоятельно.

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

Если в таблице есть записи, то она не удаляются вместе с объектом. После удаления объекта Вам необходимо удалить ее в базе самостоятельно.

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

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

Спасибо!

Лобанова Мария Сергеевна, добрый день!
При ручном удалении записей, система позволяет увидеть все связанные объекты, которые не позволяют удалить запись и соответственно объект.

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

Есть ли легитимная возможность определить источник вызова создания новой карточки?

Например, в контрагенте я выбираю Контакт, но могу нажать Добавить. В карточке контакта, в init или как-то еще можно определить Id контрагента, из которого вызвалось добавление?

Нравится

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

При открытии карточки контрагента, класть id контрагента в кэш. В карточке контакта считать значение из кэша.

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

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

Добрый день!

Я добавил несколько записей в созданный мной справочник. Эти записи успешно сохранились в БД. Но позже я изменил Название в нескольких записях данного справочника. Если в Creatio открыть наполнение, то видны последние записи, а в БД данные изменения не произошли, т.е. в БД хранится первоначальная информация. Как это исправить?

Нравится

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

Смотрите свои значения в таблице Sys______Lcz, где пробел - это название вашего справочника.

Исправить у меня не получилось, тоже интересно.

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

 

Доброго времени суток!

Прошу подсказать - столкнулся с такой задачей:

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

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

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

Нравится

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

Добрый день.

 

Вносите данные через пункт [Импорт данных] главного меню:

 

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

Доброго времени суток коллеги. Как поставить значение по умолчанию в справочнике, так чтобы можно было поменять вручную. Имею контакт "Должность" - "Разработчик".

Мне нужно чтобы во всех случаях стояло "Маркетолог". И менять этот параметр когда будет надобно, то есть чтобы он был не заблокирован.  Тут  описан способ, но я не понял куда нужно вписать  "Reserved" . Прощу помощи, спасибо

Нравится

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

Установить константу. И выбираешь из списка.

Значение по умолчанию

Установить константу. И выбираешь из списка.

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

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

attributes: {
           "qrtClientAccountSigner": { // поле, в котором создаем мультилукап
              "dataValueType": this.Terrasoft.DataValueType.LOOKUP,
              "multiLookupColumns": ["qrtContact", "qrtCounterparty"]  // перечисляем созданные нами колонки, которые будет содержать мультилукап
          }
        },

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

Нравится

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

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

Зверев Александр,
т.е вывести результат этого поля в реестре не выйдет?
и решение таковое, что выводим поля , по которым оно сформировано, а значения этих полей формируем при создании записи в мультисправочном поле

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

 

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

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

 

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

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

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

Нравится

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"]
		}
	}

 

Владимир Соколов,
Хорошо я вроде понял щас попробую

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

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

В указанном справочнике страница редактирования "OpportunityStagePageV2", работает она понятно как, но как она вызывается не понятно.

Может у кого есть опыт с данным типом справочника?

Нравится

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

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

https://prnt.sc/vo7c2d

Если мне не изменяет память, делал так, создал деталь со страницей редактирования(через мастер раздела) и привязал ее к объекту справочника. Попробуйте так.

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

https://prnt.sc/vo7c2d

Если мне не изменяет память, делал так, создал деталь со страницей редактирования(через мастер раздела) и привязал ее к объекту справочника. Попробуйте так.

Через мастер деталей только.

Спасибо за ответы! Сам бы не за что не догадался

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

Есть необходимость перенести данные справочника Tax , включая id,на препрод
Я спросил как это правильно сделать, и мне посоветовали создать замещающий объект, но при попытке публикации пишет , что Элемент с именем "Tax" не найден
Для исправления ошибки, пробовал советы из этой темы  https://community.terrasoft.ru/questions/oshibka-sokhraneniya-element-n…
А именно генерацию исходных кодов, просто вылетает страница с ошибкой
А при компиляции всего, вылетает Элемент с именем "Tax" не найден

Нравится

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

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

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

Если второе, то нужно не создавать объект или замещающий объект вручную, а переносить с сайта-источника готовую схему (или путём выгрузки в md-файл, или через SVN, или пакетами).

Объект Tax — стандартный, у Вас в нём есть какие-то доработки?

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

Есть раздел UsrTenant, в нем есть поле Room, принимающее значения из справочника UsrRoom. В свою очередь, в UsrRoom есть поле-справочник Shop, принимающее значение из справочника UsrShop. В UsrShop есть текстовое поле Name. Задача - показать в карточке UsrTenant значение UsrTenant.Room.Shop.Name (сделать привязку элемента управления на это значение), лучше в режиме "только чтение". Как это сделать?

Теоретически, можно прикрутить к UsrTenant атрибут, привязать к нему элемент управления в diff, в UsrTenant.onEntityInitialized() определять значение Room.Shop.Name через EntitySchemaQuery и присваивать его атрибуту. Но нет ли способа, позволяющего напрямую привязать элемент управления по такой иерархии? Что-то, может, вроде:

 

// Конечно, прямо в таком виде код не работает, выдается ошибка, 
// что невозможно найти колонку по конфигурации Room.Shop.Name
{
  "operation": "insert",
  "name": "ShopNameView",
  "values": {
    "layout": {
      "colSpan": 12,
      "rowSpan": 1,
      "column": 12,
      "row": 1,
      "layoutName": "Header"
    },
    "bindTo": "Room.Shop.Name",
    "enabled": false,
    "contentType": 5
  },
  "parentName": "Header",
  "propertyName": "items",
  "index": 3
}

 

Нравится

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

Добрый день.

 

В атрибутах добавляете виртуальное поле, которое будет отображаться в карточке:

			"DBMReady": {
				"dataValueType": Terrasoft.DataValueType.BOOLEAN,
				"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
				"value": false
			}

В атрибутах указываете, какие поля справочного поля нужно ещё получить:

			"BTContactPatient": {
				"lookupListConfig": {
					"columns": ["BTDBMReady"]
				}
			},

Переопределяете метод onEntityInitialized - добавляете вызов метода, в котором будут считываться нужные значения из справочника и устанавливаться в виртуальные поля:

			onEntityInitialized: function() {
				this.callParent(arguments);
				if (!this.isNew) {
					this.setPatientFieldsValue();
					}
			},
			setPatientFieldsValue: function() {
				var patient = this.get("BTContactPatient");
				if (!patient) {
					return;
				}
				this.set("DBMReady", patient.BTDBMReady);
			},

 

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

Добрый день. Может, я не совсем точно донес свою мысль...

В общем, моя ситуация такова, что BTDBMReady - не скалярное значение, а ссылка на справочник. И атрибуту на странице мне нужно присвоить, например, BTContactPatient.ВTDBMReady.CustomParameter (т.е. простым

ВTDBMReady.displayValue тут не обойтись). Можно ли это сделать без EntitySchemaQuery? 

Юрий, а почему не использовать EntitySchemaQuery?

Пример заполнения виртуальных полей таким образом есть в OpportunityMiniPage пакета Opportunity:

/**
 * Last activity in opportunity.
 * @type {Object}
 */
"LastActivity": {
	"dataValueType": Terrasoft.DataValueType.LOOKUP,
	"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
	"referenceSchemaName": "Activity"
},
 
/**
 * Last activity result caption in opportunity.
 * @type {String}
 */
"LastActivityCaption": {
	"dataValueType": Terrasoft.DataValueType.TEXT,
	"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
	"value": ""
},
...
onEntityInitialized: function() {
...
	this.getLastActivity();
...
	this.callParent(arguments);
},
...
/**
 * Gets last activity from opportunity.
 * @protected
 */
getLastActivity: function() {
	var esq = this.getLastActivitySelect();
	esq.getEntityCollection(function(response) {
		if (response && response.success) {
			var collection = response.collection;
			if (collection.getCount() > 0) {
var firstItem = collection.getByIndex(0);
this.setLastActivityAttributes(firstItem);
			}
		}
	}, this);
},
 
/**
 * Sets last activity attributes.
 * @protected
 * @param {Object} activity Activity object from response.
 */
setLastActivityAttributes: function(activity) {
	var date = this.getShortDate(activity.get("DueDate"));
	this.set("LastActivityCaption", Ext.String.format(
			this.get("Resources.Strings.LastActivityCaption"), date));
	this.set("LastActivity", {
		value: activity.get("Id"),
		displayValue: Ext.String.format("{0} / {1}", activity.get("CategoryName"),
				activity.get("StatusName"))
	});
},
 
/**
 * Gets last activity select.
 * @protected
 * @return {Terrasoft.EntitySchemaQuery} Last activity select query.
 */
getLastActivitySelect: function() {
	var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
		rootSchemaName: "Activity"
	});
	esq.rowCount = 1;
	esq.addColumn("Status.Name", "StatusName");
	esq.addColumn("ActivityCategory.Name", "CategoryName");
	var dueDate = esq.addColumn("DueDate");
	dueDate.orderPosition = 0;
	dueDate.orderDirection = Terrasoft.OrderDirection.DESC;
	this.setLastActivityRequestFilters(esq);
	return esq;
},
 
/**
 * Sets last activity filters.
 * @protected
 * @param {Terrasoft.EntitySchemaQuery} esq Activity select query.
 * @return {Terrasoft.EntitySchemaQuery} Activity select query with filter.
 */
setLastActivityRequestFilters: function(esq) {
	var id = this.get("Id");
	if (!Ext.isEmpty(id)) {
		esq.filters.add("opportunityFilter", Terrasoft.createColumnFilterWithParameter(
			Terrasoft.ComparisonType.EQUAL, "Opportunity", id));
	}
	return esq;
},

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

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