Добрый день. Применил валидацию даты согласно статье https://academy.terrasoft.ru/documents/technic-sdk/7-15/dobavlenie-validacii-k-polyu-stranicy
Всё работает хорошо. Но при удалении значения поля почему, то распознаёт что не проходит валидацию.
У меня поле желаемая дата не должна быть меньше текущей даты и времени или должно быть пусто. Пустым полем он не даёт сохранить. Скрин вложил.
https://i.imgur.com/H9hksBj.png
Вот код:
// Метод-валидатор значения колонок [UsrCustomDate] и [CreatedOn].
dueDateValidator: function() {
// Переменная для хранения сообщения об ошибке валидации.
var invalidMessage = "";
// Проверка значений колонок [UsrCustomDate] и [CreatedOn].
if (this.get("UsrCustomDate") < this.get("UsrDateReal")) {
// Если значение колонки [UsrCustomDate] меньше значения колонки [CreatedOn],
// в переменную invalidMessage помещается значение локализуемой строки с сообщением
// об ошибке валидации.
invalidMessage = this.get("Resources.Strings.CreatedOnLessDueDate");
}
// Объект, свойство которого содержит сообщение об ошибке валидации.
// Если валидация прошла успешна, в объекте возвращается пустая строка.
return {
// Сообщение об ошибке валидации.
invalidMessage: invalidMessage
};
}
Нравится
Если в базе в поле Null, не факт, что в переменной JS тоже так. добавьте вывод в лог, посмотрите что там, а затем можно будет вписать в условие if проверку на такое значение.
Не смотрели, что попадает в переменную при очистке? Может, там как раз минимальная дата, вроде 01.01.01? Или оба сравниваемые поля пустые, их значения одинаковы и строгое сравнение при помощи «<» даёт отрицательный ответ? Попробуйте отладиться или просто выводить в консоль значение полей и результаты проверки.
Зверев Александр,
Насколько я понял NULL. А NULL это меньше текущей даты. Можно ли
if (this.get("UsrCustomDate") < this.get("UsrDateReal")) как то изменить.? Чтобы принимал тоже NULL.
Если в базе в поле Null, не факт, что в переменной JS тоже так. добавьте вывод в лог, посмотрите что там, а затем можно будет вписать в условие if проверку на такое значение.
Я по трассировке проверил почему то window.console.log(); ничего не возвращает.
if (this.get("UsrCustomDate") < this.get("UsrDateReal")) {
if (this.get("UsrCustomDate") !== null) {
// Если значение колонки [UsrCustomDate] меньше значения колонки [CreatedOn],
// в переменную invalidMessage помещается значение локализуемой строки с сообщением
// об ошибке валидации.
invalidMessage = this.get("Resources.Strings.CreatedOnLessDueDate");
}
}
А есть ли текущее значение, а то я через бизнес-процессы обновляю всегда поле UsrDateReal???
В JS текущую дату и время можно узнать при помощи присвоения или сравнения с new Date().
Я проще нашёл решение. Просто к сравнительному полю привязал системную переменную текущая дата https://i.imgur.com/Xf3bcEA.png.
С new Date() нужно было попотеть по моему.
Мне кажется, от лишнего поля в таблице расходов ресурсов всё же больше, чем от пары строк на JS, даже если нужно привести к нужному формату кодом.