Возможно ли сделать, чтобы после сохранения записи в деталь с редактируемым реестром, запись была кликабельной? В моем случае есть 2 поля "ФИО студента" и "Договор".
Нравится
Здравствуйте!
Для наглядного примера реализации используйте базовую схему 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 || "..."
А как сделать пустым валютный справочник, если я надумал удалить договор?