Здравствуйте, подскажите пожалуйста
Имеется поле "Фактическое время" (после выполнения задачи считает сколько часов было потрачено на задачу). Поле является "Text Data Control"
И имеется drop-down список с коэффициентом (от 0.1 до 2.0)
Мне необходимо при выборе коэффициента реализовать автоматическое умножение этого коэффициента на "Фактическое время" и результат занести в поле "Количество часов".
Надеюсь на вашу помощь. Заранее спасибо
Нравится
Добрый день Дмитрий!!!
ну я думаю подход у вас должен быть очень простым. Получаем текущее затраченное время, я думаю вы его уже знаете. Переводим полученное время в Минуты, в Секунды, в Миллисекунды, в ту единицу измерения в которой вам будет удобно считать. После конвертации из вида Часы.Минуты.Секунды к примеру в Секунды, умножаем полученный результат на выбранный Коэффициент и полученный результат конвертируем обратно к виду Часы.Минуты.Секунды.
Спасибо за помощь, а то, что поле с затраченным временем является "Text Data control" это ничего страшного? :)
Здравствуйте,
можете привести пример окна (принскрин окна в Terrasoft, а также принскрин окна в Администраторе).
Также укажите тип drop-down компонента и компонентов которые будут задействованы в операции по вычислению "Количества часов".
Прошу прощения, не так понял Вас
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. Получилась лишняя проверка.