Вопрос

Кликабельные ссылки в детали с редактируемым реестром

Возможно ли сделать, чтобы после сохранения записи в деталь с редактируемым реестром, запись была кликабельной? В моем случае есть 2 поля "ФИО студента" и "Договор".

Нравится

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

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

Для наглядного примера реализации используйте базовую схему SupplyPaymentDetailV2 - http://prntscr.com/i95aqv (см. метод - linkClicked и "useLinks").

Спасибо, поковыряем.

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

А можете помочь разобраться в моем го*нокоде?) Я попытался сделать так, чтобы в Дробное поле "Сумма" подтягивалось значение "Сумма", которое находится в карточке договора, который мы выбираем в поле "Договор" в нашей детальке. Так вот, сумма подтягивается, но после этого действия я не могу сменить договор, он просто не удаляется из этого поля. Можно снести только всю запись. Ниже прикреплю код.

attributes: {
			"UsrAmountInCommission": {
				dataValueType: Terrasoft.DataValueType.FLOAT,
				dependencies: [
					{
						columns: ["UsrContract"],
						methodName: "recalcCommission"
					}
				]
			}
		},
		methods: {
			recalcCommission: function() {
				var contract = this.get("UsrContract").value;
				var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
				rootSchemaName: "UsrContract"
				});
				esq.addColumn("UsrAmountCommission", "UsrAmountCommission");
				esq.getEntity(contract, function(result) {
				this.set("UsrAmountInCommission", result.entity.get("UsrAmountCommission"));
				}, this);
			}
		},

предварительно:

1) функция отрабатывает на каждое(!) изменение поля UsrContract. вы выбрали значение, this.get("UsrContract").value; вам что-то вернул. вы удалили значение - угадайте что произойдет. спойлер - "can't take value of undefined". проверки, везде проверки на null надо бы сделать)
2) Ну почему esq???) почему не вот так:

attributes: {
	"UsrAmountInCommission": {
		dataValueType: Terrasoft.DataValueType.FLOAT,
		lookupListConfig: {
			columns: ["UsrAmountCommission"]
		}
		dependencies: [
			{
				columns: ["UsrContract"],
				methodName: "recalcCommission"
			}
		]
	}
},
methods: {
	recalcCommission: function() {
		var contract = this.get("UsrContract");
		if (!Ext.isEmpty(contract)) {
			this.set("UsrAmountInCommission", contract.UsrAmountCommission || 0);
		}
	}
},

 

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

Спасибо за помощь. Не совсем понял Ваш код, но немного покопав в комьюнити отредактировал Ваш код (прикреплю ниже) и вроде бы теперь все корректно работает. Благодарю. Скоро программистом стану, благодаря этому комьюнити :D

attributes: {
	"UsrContract": {
		lookupListConfig: {
			columns: ["UsrAmountCommission"]
		}
	},
	"UsrAmountInCommission": {
		dataValueType: Terrasoft.DataValueType.FLOAT,
		dependencies: [
			{
				columns: ["UsrContract"],
				methodName: "recalcCommission"
			}
		]
	}
},
methods: {
	recalcCommission: function() {
		var contract = this.get("UsrContract");
		if (contract) {
			if (contract.UsrAmountCommission) {
				this.set("UsrAmountInCommission", contract.UsrAmountCommission || 0);
			}
			else {
				this.set("UsrAmountInCommission", 0);
			}
		} 
		else {
			this.set("UsrAmountInCommission", 0);
		}
	}
},

 

Alex Zaslavsky пишет:
Не совсем понял Ваш код

 Просмотрел его сейчас, тоже не особо понял) Не стоит, видимо, в полночь логику писать) Если что-то не поняли - пишите, форум для этого и существует.

Можно немного подсократить ваш вариант, убрать один else: Конструкция contract.UsrAmountCommission || 0 - как раз проверит есть ли значение в contract.UsrAmountCommission, если его нет вернёт 0, если есть - вернёт значение contract.UsrAmountCommission.

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

а не подскажете, если у меня, допустим не дробное число, а какое-то значение в справочнике, например, валюта или просто текстовое поле?

contract.UsrStudentName || "" - для текстового поля вот так, наверное.

contract.UsrCurrency || "..."

А как сделать пустым валютный справочник, если я надумал удалить договор?

null туда засетить и все

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