Числовое поле

Тема в разделе "Lotus - Программирование", создана пользователем oxystile, 2 апр 2008.

  1. oxystile

    oxystile Гость

    где надо че дописать, чтобы при попытке поставить в поле типа "Number" не число программа не давала сохранить, пока пользователь поле не исправит

    заранее спасибо!
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    можно попробовать Input Validation c формулой @textToNumber ( обработать ошибку ), НО! @TextToNumber вернёт 123 если в поле написать "123йцу" , и вернёт ошибку если "йцу123" ... так что можно добавить исчо Input Translation @TextToNumber( @thisValue)
     
  3. ukr

    ukr Гость

    Я тебе советую на сохранение документа повесить код на проверку этого поля, является ли оно числовым или нет.

    Код (Text):
    IsNumeric(doc.[твое поле])
    Либо отлавливать ошибку при сохранении, её номер 4412
     
  4. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Если не использовать Input Validation, то проверка будет автоматическая при сохранении.
    Если использовать @ToNumber, то ошибку вернет в любом случае.
    Надо в InputValidation прописать @If(@IsDocBeingSaved & @IsError(@ToNumber(@ThisValue)); @Failure("Ошибка"); @Success)
     
  5. Sandr

    Sandr Гость

    проверка на кверисейве - самый действеннный способ...
     
  6. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Sandr
    +1

    И главное, в одном месте.
    А то потом (след. программеру) придётся по всей форме рыскать, где это validation плюётся.
     
  7. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Synopsis спасет след. программера. :)
     
  8. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Medevic
    Тогда уж TeamStudio Configurator.
    Ибо дефаултный синопсис, кмк, гогнецо :)
     
  9. Sandr

    Sandr Гость

    Omh
    +1
    TeamStudio Configurator рулез
     
  10. oxystile

    oxystile Гость

    Medevic
    @If(@IsDocBeingSaved & @IsError(@ToNumber(@ThisValue)); @Failure("Ошибка"); @Success)
    -я ввожу в поле букви, нажимаю сохранить получаю сообщение "Ошибка" , закрываю
    открываю снова этот док и в поле запись "ERROR: Cannot convert text to a number"
    т.е. что-то не так..ошибку выдает, но значение как бы сохраняет

    ukr
    если на кверисейф IsNumeric(doc.[твое поле]) точнее я делаю проверку
    If Not(Isnumeric(doc.trud(0))) Then и на этой строке у меня возвращается error 184 "variant doesn't contain a container"
     
  11. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Случайно в другом месте сохранения нет? В QuerySave?
     
  12. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    oxystile
    такс... тут If Not(Isnumeric(doc.trud(0))) - надо сначала проверить на IsEmpty, а уж потом на изнумерик... потому как для поля с типом число неправильное значение будет означать что в поле empty ... проверено на датах(недавно обсуждали )
     
  13. Sandr

    Sandr Гость

    Код (Text):
    If doc.GetItemValue("myField")(0) <> "" Then

    If Not Isnumeric(doc.GetItemValue("myField")(0)) Then
    Msgbox "Поле " & Chr(34) & "ПОЛЕ" & Chr(34) & " должно содержать числовое значение!", 48, "Ошибка"
    source.GotoField("myField")
    End If
    End if
    Morpheus
    Зачем на эмпти проверять? Достаточно doc.GetItemValue("myField")(0) <> "" .
     
  14. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    или так или empty
     
  15. Sandr

    Sandr Гость

    Это при рефреше документа происходит... Проверять надо раньше...
     
  16. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Код (Text):
    Function ValidateNumericFlds(doc As NotesDocument) As Integer
    On Error Goto Errh

    Dim rv As Integer
    rv = True

    lsf_ValidateNumericFlds = rv

    Dim NumFlds List As String
    NumFlds("FLD_NAME_1") = "LABEL_1"
    NumFlds("FLD_NAME_2") = "LABEL_2"

    Dim V As Variant
    Dim VEmpty As Variant
    Dim IsError As Integer

    Forall x In NumFlds
    V = VEmpty
    IsError = False

    On Error Resume Next
    V = doc.GetItemValue(Listtag(x))(0)
    On Error Goto Errh

    If Not Isempty(V) Then IsError = Not Isnumeric(V) Else IsError = True

    If IsError Then
    Messagebox {Ой бяда, ребятушки! В поле "} + x + {" какое-то гогно!}, 0 + 16, "Бяда"
    rv = False
    Exit Forall
    End If
    End Forall

    lsf_ValidateNumericFlds = rv

    Exit Function
    Errh:
    Call lsf_ErrorTrack
    Exit Function
    End Function
    Скелет не очень красивой ф-ии (но, на мой вкус, лучше чем использование Validation Formula)
    Тут ещё Integer вместо Boolean юзается, ибо надо было компатибле виз эр пять.
     
  17. ukr

    ukr Гость

    В начале писал два способа, чувствуется прийдется их расписать

    1 способ:

    Код (Text):
    Dim doc As NotesDocument
    Dim v As Variant

    Set doc = source.Document

    v = doc.GetItemValue("Имя твоего поля")

    if IsNumeric(doc.GetItemValue) Then
    MessageBox "Введено число"
    Else
    MessageBox "Вы ввели текст"
    End if
    Второй способ:

    Код (Text):
       
    On Error 4412 Goto ErrHnd

    [твой код]

    Done:  
    Exit Sub
    ErrHnd:
    Msgbox "Поле не является строковым",16,"Предупреждение"
    Resume Done
    Вырезка из Help
     
  18. oxystile

    oxystile Гость

    да у меня ошибка уже на
    If Isnumeric(doc.GetItemValue("trud")) Then
    Msgbox "число"
    ввожу буквы, а получаю сообщение "число"

    причем проверку писала и на кверисейф в самом начале, и на соб. change поля
    причем, если там же написать что-то типа t=doc.trud(0) то ошибка "Variant doesn't contain a container"
     
  19. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    oxystile
    Попробуй мою ф-ию.
     
  20. oxystile

    oxystile Гость

    Omh
    работает! :)
    просто мега-функция!
    спасибо!!!
     
Загрузка...

Поделиться этой страницей