Добрый день, есть числовое поле ввода, в нем можно вводить числа от 0 до 3, но проблема в том что когда я ввожу 0, поле очищается, 0 не записывается.
Поставил представление нуля, теперь по умолчанию стоит ноль, но 0 вводить так же нельзя, хоть там уже и стоит ноль, поле провепряется на заполненность, и выдается ошибка.
Как ввести ноль?
---
Сделать поле строковым (наложить маску, чтобы нельзя было вводить ничего кроме разрешёных значений), тогда 0 не будет означать не заполнено, а при использовании преобразовать в строку. Ещё лучше - задать для поля список выбора из нужных значений...
---
Сделайте строковым
"0","1","2" и "3" тогда 0-будет считаться заполненным
---
Все теперь понятно что вы имели ввиду, но с числовыми типами значения, у вас наверное не получиться. Либо какой то дополнительный признак вести указывал ли в то или ином поле пользователь значение (даже если оно и 0 - ноль)
---
Сделать поле строковым (наложить маску, чтобы нельзя было вводить ничего кроме разрешёных значений), тогда 0 не будет означать не заполнено, а при использовании преобразовать в строку. Ещё лучше - задать для поля список выбора из нужных значений...
---
Хитрая вещь, вы нажимаете на ноль на клавиатуре и оно не вводится?? Или оно вводится но при проверке ругается - тогда может пересмотреть проверку
---
Я нажимаю 0 на клавиатуре, оно вводится, хочу ввести в другое поле, нажимаю на него, ноль из предыдущего поля удаляется))
Проверка стоит стандартная, Выдавать ошибку
---
в числовом поле, получается, не заполненном как раз 0 и есть. Соответственно, если может быть от 0 до 3, то смысла в проверке на заполненность нет...
---
Если не проверять на заполненность, при записи, в поле 0 не будет записываться, хоть там ноль и введен, поле подчеркнуто красной линией. а если убрать проверку, то 0 не будет записываться.
---
ну у поля тип стоит - Числовой же. Значит значение по умолчанию 0. 0 - это пустое значение если его проверять, то есть будет говорит что оно не заполнено.
Ну а как в поле не будет 0 записывается ведь у вас тип поля числовой, там уже храниться 0. Можно убрать вашу проверку
---
Допустим все записалось, а как быть с тем, что.
исходя из первых двух полей у меня расчитываетсятретье поле, если первые два = 0 то третье тоже должно быть = 0, а оно не расчитывается))
---
а какая формула расчета третьего поля?
---
Поле1 * поле2.
Можно же сделать так?

```1c
    Если Поле1 = 0 или Поле 2 = Ноль Тогда
    Поле 3 = 0
```

 вот что у меня сейчас:

```1c
    Процедура ОценкаВероятностьРискаПриИзменении(Элемент)

    ТекДанные = Элементы.Оценка.ТекущиеДанные;
    Если ТекДанные = Неопределено Тогда
    Возврат
    КонецЕсли;
    ТекДанные.ЗначимостьРиска = ТекДанные.ВероятностьРиска * ТекДанные.ПоследствияРиска;

    КонецПроцедуры
```
---
ну 0 в третьем поле и будет, если в первых двух по 0
---
При выполнении этого кода если первые два поля = 0 третье не считается

```1c
    Процедура ОценкаВероятностьРискаПриИзменении(Элемент)

    ТекДанные = Элементы.Оценка.ТекущиеДанные;
    Если ТекДанные = Неопределено Тогда
    Возврат
    КонецЕсли;
    ТекДанные.ЗначимостьРиска = ТекДанные.ВероятностьРиска * ТекДанные.ПоследствияРиска;

    КонецПроцедуры
```
---
ну вы покажите код, и мы посмотрим что там происходит, может проблема далеко не вводе значения 0
---
Посмотрите (12)
---
Ну все же у вас корректно написано

ТекДанные.ЗначимостьРиска = ТекДанные.ВероятностьРиска * ТекДанные.ПоследствияРиска;

Единственное у вас это событие срабатывает когда вы меняете поле ВероятностьРиска, а сделайте еще при изменении поля ПоследствияРиска

Поля же все числовие.
То есть если в поле ввести ВероятностьРиска - 0, а в поле ПоследствияРиска - 2 То в поле ЗначимостьРиска не будет 0???
---
Единственное у вас это событие срабатывает когда вы меняете поле ВероятностьРиска, а сделайте еще при изменении поля ПоследствияРиска
Это сделано уже, просто выбрано то же событие)
То есть если в поле ввести ВероятностьРиска - 0, а в поле ПоследствияРиска - 2 То в поле ЗначимостьРиска не будет 0???
Нет, в том то и проблема.
Я хотел чтоб изначально поля были пустые(а сейчас там стоит 0 по умолчанию), и при вводе 0 в первые два поля, то и треть е должно было быть ноль. Но так не работало, так как при вводе нуля поле очищалось. Сейчас я поставил во все 3 поля представление нуля, и везде по умолчанию стоит ноль. Отключил проверку. Сейчас все работает.
Но я хотел так чтоб по умолчанию поля были пустые, и была проверка.
---
Все теперь понятно что вы имели ввиду, но с числовыми типами значения, у вас наверное не получиться. Либо какой то дополнительный признак вести указывал ли в то или ином поле пользователь значение (даже если оно и 0 - ноль)
---
Не совсем внятно сформулирована проблема.
Речь про поле ввода числового типа, но при этом упоминается "запись". Вероятно, поле отображает числовой реквизит какого-то объекта, сохраняемого в СУБД.
Если отключить проверку заполненности такого реквизита, то никаких проблем с записью нуля в базу быть не должно.
Если тип числовой и при отключенной проверке запись происходит но не нуля, то что же тогда у вас записывается? :) Для числового типа никаких "пустых" значений не предусмотрено.
---
Аа, понятно
 Для числового типа никаких "пустых" значений не предусмотрено.
Я этого не знал. Значит просто надо отключит проверку.
---
Сделайте строковым
"0","1","2" и "3" тогда 0-будет считаться заполненным
---
Если я сделаю строковым, как задать маску чтоб там вводились числа только от 0 до 3?
В свойствах маске задать числа через запятые?
---
Просто - 9
будут вводиться числа от 0-9
дальше проверяешь и даешь сообщение, если что-то не так

либо вешай список значений от 0 до 3. и пользователь будет выбирать уже в списке.
---
Че то не работает, я ввел в поле маски просто 3. Числа от 0 до 3 не вводятся, можно вводить только 3
---
9-в маску нужно.
---
Получается проверку что число не меньше нуля и не больше 3 надо програмно делать?

Точнее на отрицательность не надо проверять, ведь строка длиною в 1 символ
---
Ну в свойствах я не нашел установки пределов. Значит нужно проверять.
Либо список
---
(27)
В итоге сделал поле строками и выполнил проверку что число не больше 3.

```1c
    ТекДанные = Элементы.Оценка.ТекущиеДанные;
    Если ТекДанные.ВероятностьРиска > "3" Тогда
    Сообщить("Не правильно введено значение");
    ТекДанные.ВероятностьРиска = ";
    ИначеЕсли
    ТекДанные.ПоследствияРиска > "3" Тогда
    Сообщить("Не правильно введено значение");
    ТекДанные.ПоследствияРиска = ";
    КонецЕсли;
    Если ТекДанные = Неопределено Тогда
    Возврат
    ИначеЕсли ЗначениеЗаполнено(ТекДанные.ВероятностьРиска) И ЗначениеЗаполнено(ТекДанные.ПоследствияРиска) тогда
    ТекДанные.ЗначимостьРиска = ТекДанные.ВероятностьРиска * ТекДанные.ПоследствияРиска;
    КонецЕсли;
```
---
со списком не понравилось? в списке можно еще пустое значение по умолчанию предусмотреть.

Пустая строка
0
1
2
3
---
Да не, сойдет и так. Главное проверка есть, спасибо
---
Можете плюсануть несколько моих сообщений?
Никак не насобираю 20 штук.
Спасибо.
---
Плюсанул
---
Спасибо. Может хоть сообщение исчезнет
---
Точно. убрали с меня сообщение о 20 одобренных
спасибо
---
а для чего это? что дают плюсики? и как заработать звездочку(рейтинг)?)))
---
ограничения еще всякие есть, если плюсов не хватает. Например на почту никому не мог написать.
---
Насчет рейтинга еще не читал. Возможно за публикации всякие и выложенные обработки. в FAQ должно быть описано.
---
Да я читал, но там написано, пишите статьи, обсуждайте, ничего конкретного
---
У меня вроде за обработку рейтинг дали. Там тоже 8. Но как он сформировался не знаю.
---
Может, сколько раз плюсанули. Плюсов и минусов не видно.
---
А нет. Точно, сколько плюсов на обработке стоит, такой у меня и рейтинг. На другой смотрел - там нет.
---
Может так при вводе

Поле1 = ? (ЗначениеЗаполнено(Поле1), Поле1, 0)
---
маленько набросал