1

Тема: Работа с датой в lotus script

Задача: на лотус скрипте получить текущюю дату и прибавить к ней n дней.

Вариант 1:

Dim dateTime As New NotesDateTime( "" )
Call dateTime.SetNow
CurDoc.ДАТА_РЕЗОЛЮЦИИ_ = dateTime.DateOnly
days= DelDoc.SrokIspol(0) ' тянем срок исполнения с номенклатуры
Call dateTime.AdjustDay(days) 
days = dateTime.DateOnly
'days = dateTime.LocalTime   вносит в формате 25.01.2014 13:19:51 ZE2
'days = Format$(days, "Short Date" )   
CurDoc.ДАТА_РЕЗОЛЮЦИИ_= days ' вносит в формате 11.01.2014
CurDoc.СРОК_ИСПОЛНЕНИЯ_= days  (её может редактировать руководитель)
CurDoc.СРОК_ИСПОЛНЕНИЯ_2 = days (для отображения исполнителям, его value = СРОК_ИСПОЛНЕНИЯ_)

Но будет ошибка
comparison operators must be supplied two values of the same data type
, если в поле СРОК_ИСПОЛНЕНИЯ_    в событии  input validation

@If(ДАТА_РЕЗОЛЮЦИИ_ > СРОК_ИСПОЛНЕНИЯ_ ; @Prompt([YesNo]; "ОШИБКА!"; "Не правильно указанна дата Срока исполнения документа!");@True)

Вариант 2 с использованием Evaluate:

days= 10
macro$={@Adjust(@Date(@Now([ServerTime]));0;0;} & Cint(days) & {;0;0;0)}
serverDate= (Evaluate(macro$))

Поделиться

2

Re: Работа с датой в lotus script

И при такой формуле ошибка на событии валидации:

@If( !@IsNull(ДАТА_РЕЗОЛЮЦИИ_) & (ДАТА_РЕЗОЛЮЦИИ_ > СРОК_ИСПОЛНЕНИЯ_) ; @Prompt([YesNo]; "ОШИБКА!"; "Не правильно указанна дата Срока исполнения документа!");@False)
@If(ДАТА_РЕЗОЛЮЦИИ_<СРОК_ИСПОЛНЕНИЯ_; @Success; @Failure("Ошибка"))

Получилось только с агентом:

CurDoc.ДАТА_РЕЗОЛЮЦИИ_ = [b]Cdat[/b](dateTime.DateOnly)

Поделиться

3

Re: Работа с датой в lotus script

Получение в лотусе времени сервера в формате год-месяц-число-час-минута-секунда:
Вариант 1. мега-костыль

Sub Click(Source As Button)
    Dim serverDate, macro$ ' для получения времени сервера
    macro1$="@Year(@Now([ServerTime]))"
    macro2$="@Month(@Now([ServerTime]))"
    macro3$="@Day(@Now([ServerTime]))"
    macro4$="@Hour(@Now([ServerTime]))"
    macro5$="@Minute(@Now([ServerTime]))"
    macro6$="@Second(@Now([ServerTime]))"
    serverDate1= (Evaluate(macro1$))
    serverDate2= (Evaluate(macro2$))
    serverDate3= (Evaluate(macro3$))
    serverDate4= (Evaluate(macro4$))
    serverDate5= (Evaluate(macro5$))
    serverDate6= (Evaluate(macro6$))
    servdate$ =  Cstr (serverDate1(0)) +  Cstr (serverDate2(0)) +  Cstr (serverDate3(0))+  Cstr (serverDate4(0))+  Cstr (serverDate5(0)) +  Cstr (serverDate6(0))
    Msgbox servdate$
    
End Sub

Поделиться

4

Re: Работа с датой в lotus script

Дата в формате:  04.08.2016 8:27:30

Dim strr As Variant
strr = Evaluate("@Adjust( @Now( [ServerTime]) ; 0 ; 0 ; 0 ; -1 ; 0 ; 0 )")

Или

Evaluate("@Now( [SERVERTIME])")

Поделиться

5

Re: Работа с датой в lotus script

Сравнение дат в лотус-скрипте. Это просто пипец.
Если я сделал формат до сравнения дат, то сравнение дат не работает корректно.


Пример.
Вот если даты привести к формату командой
Arrmy1(ArX%) =Format$( doc2.DateF1_1(0), "dd.mm.yyyy" )
то потом уже
Set lastd =  New NotesDateTime(Arrmy1(x))
Set prevd = New NotesDateTime(Arrmy1(x-1))
mytime# = prevd.TimeDifferenceDouble(lastd)
Значение в днях  Abs(mytime# / 86400)   -  будет работать совсем некорректно, как то рандомно prevd  > lastd  !


А если дату не форматировать, а взять просто значение с поля:  Arrmy1(ArX%) =doc2.DateF1_1(0)
то
mytime# = prevd.TimeDifferenceDouble(lastd)
работает корректно.


Или проблема в Format$  ? а не в Format...
Переводит во время не дату, а строку.

Поделиться

6

Re: Работа с датой в lotus script

есть два поля типа дата.   dat-  число, tim - минуты
Хочу в docTMP.time  получить полную дату...
docTMP.time = cd.dat  +"."+ cd.tim

Решение: используем класс notesdatetime

Dim dateTime1 As New NotesDateTime( cd.dat(0))
Dim dateTime2 As New NotesDateTime( cd.tim(0))
 print  "Date:   " & dateTime1.DateOnly & Chr(10) &  "Time:   " & dateTime2.TimeOnly

просто не всегда можно вытащить из поля дата просто дату.. бывает она вместе со временем тащится.. поэтому нужно иногда использовать этот класс, а методами dateonly и timeonly конкретно дату или время вытаскивает

Поделиться