Здравствуйте .ниже представлен код вычисляемых полей. Скажите если несколько вычисляемых полых нужно что то изменить. И что нужно изменить что бы расчеты срабатывали сразу после добавления записи, а не как сейчас после изменения какого-нибудь поля?
define("InvoiceProductPageV2", [], function() {
return {
entitySchemaName: "InvoiceProduct",
details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
attributes: {
"Usrcenabez": {
dataValueType: Terrasoft.DataValueType.FLOAT,
dependencies: [
{
Amount].
columns: ["TotalAmount", "Usrfff", "Quantity", "Price", "DiscountPercent"],
methodName: "calculatecenabezNDS"
}
]
},
"UsrNDS": {.
dataValueType: Terrasoft.DataValueType.FLOAT,
dependencies: [
{
columns: ["TotalAmount", "Usrfff", "Quantity", "Price", "DiscountPercent"],
methodName: "calculatebezNDS"
}
]
},
"UsrbezNDS": {
dataValueType: Terrasoft.DataValueType.FLOAT,
dependencies: [
{
columns: ["TotalAmount", "Usrfff", "Quantity", "Price", "DiscountPercent"],
methodName: "calculateNDS"
}
]
},
"UsrStoimsdos": {
dataValueType: Terrasoft.DataValueType.FLOAT,
dependencies: [
{
columns: ["TotalAmount", "Usrfff", "Quantity", "Price", "DiscountPercent"],
methodName: "calculateStoim"
}
]
},
"Usrcenasdost": {
dataValueType: Terrasoft.DataValueType.FLOAT,
dependencies: [
{
columns: ["UsrStoimsdos", "Quantity"],
methodName: "calculateCena"
}
]
}
},
methods: {
onEntityInitialized: function() {
this.callParent(arguments);
this.calculateCena();
},
calculateCena: function() {
var ct = this.get("UsrStoimsdos");
var kol = this.get("Quantity");
//}
var res = ct / kol;
this.set("Usrcenasdost", res);
},
onEntityInitialized: function() {
this.callParent(arguments);
this.calculatecenabezNDS();
},
calculatecenabezNDS: function() {
var q = this.get("UsrbezNDS");
var g = this.get("Quantity");
var rez = q / g;
this.set("Usrcenabez", rez);
},.
onEntityInitialized: function() {
this.callParent(arguments);
this.calculatebezNDS();
},
calculatebezNDS: function() {
var ob = this.get("UsrStoimsdos");
var dt = this.get("UsrbezNDS");
var rez = ob - dt;
this.set("UsrNDS", rez);
},
onEntityInitialized: function() {
this.callParent(arguments);
this.calculateNDS();
},
calculateNDS: function() {
var st = this.get("UsrStoimsdos");
var rez = st / 1.18;].
this.set("UsrbezNDS", rez);
},
onEntityInitialized: function() {
this.callParent(arguments);
this.calculateStoim();
},
calculateStoim: function() {
var amount = this.get("TotalAmount");
var dost = this.get("Usrfff");
var result = amount + dost;\
this.set("UsrStoimsdos", result);
}
},
rules: {},
businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/
};
});
Нравится
Алена, добрый день. Если под "добавление записи" вы подразумеваете сохранение, вам необходимо переопределить метод save или onSaved и вызвать в нем ваши методы. Если речь об открытии карточки новой записи - аналогичные действия для методы onEntityInitialized.
Кот Владимир Владимирович,
Можете подробно рассказать как мне это сделать?
Алена, да, конечно. Повторно посмотрев ваш код стало ясно что вы были на правильном пути. Ваши methods должны выглядеть так:
onEntityInitialized: function() { this.callParent(arguments); this.calculateCena(); this.calculateNDS(); this.calculatebezNDS(); this.calculatecenabezNDS(); this.calculateStoim(); }, calculateCena: function() { var ct = this.get("UsrStoimsdos"); var kol = this.get("Quantity"); //} var res = ct / kol; this.set("Usrcenasdost", res); }, calculatecenabezNDS: function() { var q = this.get("UsrbezNDS"); var g = this.get("Quantity"); var rez = q / g; this.set("Usrcenabez", rez); }, calculatebezNDS: function() { var ob = this.get("UsrStoimsdos"); var dt = this.get("UsrbezNDS"); var rez = ob - dt; this.set("UsrNDS", rez); }, calculateNDS: function() { var st = this.get("UsrStoimsdos"); var rez = st / 1.18;]. this.set("UsrbezNDS", rez); }, calculateStoim: function() { var amount = this.get("TotalAmount"); var dost = this.get("Usrfff"); var result = amount + dost;\ this.set("UsrStoimsdos", result); }
Кот Владимир Владимирович,
Спасибо большое, а как мне сделать чтобы рассчитывалось сразу после сохранения, а не после редактирования какого то значения
Алена, та же логика - вызвать все ваши методы чтобы установились необходимые аттрибуты, а потом сохранить:
save: function() { this.calculateCena(); this.calculateNDS(); this.calculatebezNDS(); this.calculatecenabezNDS(); this.calculateStoim(); this.callParent(arguments); }
Кот Владимир Владимирович,
Владимир.
"Usrcenabez": {
// Тип данных колонки модели представления.
dataValueType: Terrasoft.DataValueType.FLOAT,
// Массив конфигурационных объектов, определяющих зависимости колонки [UsrBalance].
dependencies: [
{
// Значение колонки [UsrBalance] зависит от значений колонок [Amount]
// и [PaymentAmount].
columns: ["TotalAmount", "Usrfff", "Quantity", "Price", "DiscountPercent"],
// Метод-обработчик, который вызывается при изменении значения одной из колонок [Amount]
// и [PaymentAmount].
methodName: "calculatecenabezNDS"
}
]
},
В этом месте метод вызывается при изменении одной из колонок. Скажите а что нужно сделать чтобы он вызывался при добавлении?
Алена, на добавление значений в указанных колонках метод также будет вызываться, ничего дополнительно указывать не нужно.
у меня просто данные при добавлении не рассчитываются, а рассчитываются только после редактирования значений
В таком случае рекомендуем посмотреть нет ли ошибок в консоли, скорее всего у вас значения согласно вашей бизнес-логики рассчитываются только если заполнены все необходимые поля. Если причину такого поведение обнаружить не удастся, напишите, пожалуйста, письмо на support@terrasoft.ru с описанием кейс воспроизведения и ссылкой на ваш сайт и этот пост.
Кот Владимир Владимирович,
можете мне подсказать что нужно сделать в странице
ProductSelectionModule чтобы продукты рассчитывались сразу
Алена, вам необходимо скопировать вашу логику из страницы продукта в данный модуль.