Всем привет.

Не могу найти нигде как строку конвертировать в число. 

Есть поле Кол.дн., формат - целое число, значение 10

Есть кнопка, в меню действий, Добавить дни. По нажатию этой кнопки появляется окошко, где юзер вносит кол.дней, например, 5. 

И нужно что бы в поле Кол.дн произошел расчет, 10+5 = 15, и, соответственно, значение 10 изменилось на 15. 

Ниже пример реализации:

ExtendDeadLineButtonClick: function(caption, buttonCaption, maxCommentSize, callback, scope) {
					var controls = {
						comment: {
							dataValueType: Terrasoft.DataValueType.INTEGER,
							"Caption": {"bindTo": "Resources.Numbers.Comments"},
							customConfig: {
								className: "Terrasoft.MemoEdit",
								height: "25px",
								width: "50px"
///								maxlength: maxCommentSize
							}
						}
					};
 
					var config = {
						defaultButton: 0,
						style: {
							borderStyle: "ts-messagebox-border-style-blue visa-action",
							buttonStyle: "blue"
						}
					};
 
					Terrasoft.utils.inputBox(caption, function(result, arg) {
						if (result === "ok") {
							var comment = arg.comment.value;
							if (comment != 0) {
								var days = this.get("UsrGSApplDeadline");
								var calc = days + comment;
								this.set("UsrGSApplDeadline", calc);
							}
						}
					}, ["ok", "cancel"], this, controls, config);
			}

 

В результате, в поле Кол.дн я получаю следующее:

10+5 = 105

Тоесть, происходит конкатенация, а не сложение. 

 

Нравится

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

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

В переменную comment записывается значение типа string, в результате сложения str(comment)+num(days) получаете конкатенацию. Вы можете изменить тип на числовой, модернизировав код одним из способов ниже:

1) var comment = parseInt(arg.comment.value);

2) var calc = + comment + days;

Первый вариант изменит тип переменной для всей функции в зоне видимости. Второй вариант заменит значение comment только в рамках данной строки.

С уважением, Ангелина!

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

В переменную comment записывается значение типа string, в результате сложения str(comment)+num(days) получаете конкатенацию. Вы можете изменить тип на числовой, модернизировав код одним из способов ниже:

1) var comment = parseInt(arg.comment.value);

2) var calc = + comment + days;

Первый вариант изменит тип переменной для всей функции в зоне видимости. Второй вариант заменит значение comment только в рамках данной строки.

С уважением, Ангелина!

Добрый день.

 

Огромное спасибо. 

parseInt - именно то что нужно. 

Теперь работает корректно.

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

Здравствуйте, помогите решить задачу, пожалуйста,

На странице редактирования выведены 2 поля: Оценка (число), Оценка традиционная (Справочник).

Справочник традиционная оценка содержит колонки Название (например Удовлетворительно), Балл от (напр. 50), Балл до (напр. 69).

Как сделать так, чтобы после ввода числового значения X в поле Оценка на странице редактирования, сравнивалось значение числа по справочнику [Балл от] < X < [Балл до], и затем в справочном поле Оценка традиционная заполнялось Id найденного значения?

Хотелось бы это сделать не процессом после сохранения и закрытия карточки, а именно на странице редактирования после изменения поля.

Колонки:

Изображение удалено.

Справочник:

Изображение удалено.

Нравится

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

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

attributes: {
	"UsrRatingLookup": {
		dependencies: [
			{
				columns: ["UsrRating"],
				methodName: "setRatingLookup"
			}
		]
	},
},
 
methods: {
	setRatingLookup: function() {
			var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
				rootSchemaName: "UsrRatingLookup"
			});
esq.addColumn("Id");
			esq.addColumn("Name");
			var esqIdFilter = esq.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.GREATER_OR_EQUAL, "UsrRatingMin", this.$UsrRating);
			esq.filters.add("esqFilter", esqIdFilter);
			var esqIdFilter2 = esq.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.LESS_OR_EQUAL, "UsrRatingMax", this.$UsrRating);
			esq.filters.add("esqFilter2", esqIdFilter2);
			esq.getEntityCollection(function (result) {
				if(result.success &amp;&amp; result.collection.collection.items.length&gt;0) {
					this.set("UsrRatingLookup", {value: result.collection.collection.get(0).get("Id"), displayValue: result.collection.collection.get(0).get("Name")});
				}
			}, this);
	},
}

 

Доброе утро.

 

Вам нужно Ваше поле сделать вычисляемым. Посмотрите на Академии пример, как это можно сделать, по ссылке.

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

Простенькая функция, с помощью которой можно получить более читаемые сообщения с числами.

function PluralForm (n, FormArray) {
        if (n%100 > 10 && n%100 20) return FormArray[2];
        switch (n % 10) {
                case 1:return FormArray[0];
                case 2:
                case 3:
                case 4:return FormArray[1];
                default:return FormArray[2];
        }
}

Тестовый пример:

function Main() {
        var Arr =new Array('кочерга', 'кочерги', 'кочерёг');
        for (var i = 1; i = 1000; i++) {
                Log.Write(0, i + ' ' + PluralForm (i, Arr));
        }                      
}

Фрагмент выводимых результатов (нажимаем F9 и смотрим журнал по Ctrl+Alt+L):

[12.07.18 23.48.08.418] 1 кочерга
[12.07.18 23.48.08.418] 2 кочерги
[12.07.18 23.48.08.418] 3 кочерги
[12.07.18 23.48.08.418] 4 кочерги
[12.07.18 23.48.08.418] 5 кочерёг
[12.07.18 23.48.08.418] 6 кочерёг
[12.07.18 23.48.08.418] 7 кочерёг
[12.07.18 23.48.08.418] 8 кочерёг
[12.07.18 23.48.08.418] 9 кочерёг
[12.07.18 23.48.08.418] 10 кочерёг

В идеале стоит для 0 предусмотреть отдельную логику, чтобы не писать "0 кочерёг", а сообщить, скажем, что "Ни одной кочерги нет".

Нравится

Поделиться

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

При синхронизации полей раздела "Контакты" с MS Outlook возникает ситуация, когда информацию из некоторых полей нет надобности переносить.
Для того, чтобы сократить число синхронизируемых полей, достаточно закомментировать соответствующие строки в функции SetContactInfoFromMSOutlook скрипта scr_MSOutlookContactSynchronization. В этом скрипте описан перечень полей, информация которых должны быть синхронизирована. Вам необходимо закомментировать те поля, которые нет надобности синхронизировать, сохранить внесенные изменения, перезапустить рабочее приложение Terrasoft CRM и протестировать работоспособность системы.

Желаю удачи!

С уважением,
Мельникова Екатерина

Нравится

Поделиться

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