Lotus Notes: сравнение двух полей
У меня есть два поля диалогового списка Cutt_Start
а также Cutt_End
оба поля имеют пример выбора: январь | 1
Февраль | 2
Март | 3
...
Декабрь | 12
Теперь я хочу, чтобы при выборе января на Cutt_Start
и март на Cutt_End
, это должно вызвать ошибку, Month2 should be next to Month1
, Я попробовал этот код, но ничего не происходит.
If Cutt_Start = "January" & Cutt_End <> "February" Then
Msgbox "Month2 should be next to Month1"
Else
Msgbox "January to February selected"
End If
Вы можете мне помочь?
3 ответа
Как уже упоминалось, сохраненные значения полей являются правыми от трубы. НО: такие поля всегда являются текстовыми полями!!!!
Чтобы сделать вычисление, вам нужно преобразовать текст в числа...
_start := @TextToNumber( Cutt_Start );
_end := @TextToNumber( Cutt_End );
_res := _end - @Modulo(_start; 12)
@If( !@IsError(_res) &_res != 1; @Failure( "your message" ); @Success)
Это входит в валидацию поля Cutt_end- field.
Если вам нужен LotusScript (чтобы он был в QuerySave или OnChange-Event поля, то код будет:
Option declare
Dim ws as New NotosUiWorkspace
Dim doc as NotesDocument
Set doc = ws.CurrentDocument.Document
If Cint(doc.Cutt_End) - CInt(doc.Cutt_Start) <> 1 then
messagebox "your Message"
End if
Этот код НЕ содержит обработчика ошибок.
И, как упоминалось в других комментариях: это точно не правильный способ сделать это. Если cut_end всегда должен быть на месяц позже, просто измените его на computed и напишите в качестве значения:
@If(Cutt_Start = ""; ""; @Text(@Modulo(@TextToNumber( Cutt_Start ); 12) + 1))
Тогда вам не нужно будет делать чек...
Пожалуйста, проверьте следующее и вставьте свой код в событие onchange. Для веб-клиента и клиента заметок поведение функции onchange различно.
Число справа от символа канала - это значение поля. Имя слева от канала - это то, что отображается пользователю.
Так что если вы просто проверяете, что числа последовательные, и добавляете специальный случай для декабря к январю (1 идет после 12), то вы должны получить результат, который вы ищете.
Обратите внимание, что числовое значение все еще находится в текстовом формате, поэтому вам нужно сначала привести его к числовому значению.
If Cutt_End - Cutt_Start <> 1 Then Msgbox "Error!"
Тем не менее, если Cutt_End всегда должен быть через 1 месяц после Cutt_Start, то зачем вообще это поле? Просто рассчитайте это поле и сделайте так, чтобы пользователь просто выбрал начальный месяц.