Здравствуйте, подскажите пожалуйста
Имеется поле "Фактическое время" (после выполнения задачи считает сколько часов было потрачено на задачу). Поле является "Text Data Control"
И имеется drop-down список с коэффициентом (от 0.1 до 2.0)
Мне необходимо при выборе коэффициента реализовать автоматическое умножение этого коэффициента на "Фактическое время" и результат занести в поле "Количество часов".

Надеюсь на вашу помощь. Заранее спасибо

Нравится

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

Добрый день Дмитрий!!!

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

Спасибо за помощь, а то, что поле с затраченным временем является "Text Data control" это ничего страшного? :)

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

можете привести пример окна (принскрин окна в Terrasoft, а также принскрин окна в Администраторе).
Также укажите тип drop-down компонента и компонентов которые будут задействованы в операции по вычислению "Количества часов".

drop-down сделал через enm

Уточните, какой именно Enum:

  • EnumDataControl
  • EnumControl

Прошу прощения, не так понял Вас
EnumDataControl

В датасете (dlData) окна на события dlDataOnDatasetDataChange пишите код:

var DataFieldName = DataField.Name;
if (DataFieldName == 'Имя Вашего поля в компоненте EnumDataControl') {
	var Val = преобразовываете значение поля [Фактическое время] в цифровое значение;
	var Res = Val * (1 * DataField.ValAsEnumItem.Code);
	[Количество часов] = Res;
}

Где-то приблизительно должен получиться такой код, при условии, что Enum такого вида:

Павел, спасибо большое за помощь! Сейчас попробую

Павел, а может быть Вы мне еще подскажете принцип вычитания 2-ух дат?
Или где это можно подсмотреть :)

Посмотрите на сайтах:

В итоге получилось так:

//Коэффициент занятости
case ('CoefficientID'):
	if (DataFieldName == 'CoefficientID') {
	var theDateStart = new Date(Date.parse(Dataset.ValAsDateTime('ActualStartDate')));
    	var theDateFinish = new Date(Date.parse(Dataset.ValAsDateTime('ActualFinishDate')));
 
        var oneHour=1000*60*60;
	var Val = ((theDateFinish - theDateStart) / oneHour);
 
        var Res = (Val * (1 * DataField.ValAsEnumItem.Code));
    	Res = Res.toFixed(2);
	Dataset.Values('RealHours') = Res;
 
        }		
break;	 

У Вас лишний if, его можно убрать, т.к. case как раз выполняет роль if. Получилась лишняя проверка.

Ой, спасибо. Сейчас уберем :wink:

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