Total Days In View Column

Тема в разделе "Lotus - Программирование", создана пользователем wowa, 11 ноя 2010.

  1. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Здравствуйте...
    Есть такая проблема.
    Есть два поля, вот пример что в них хранится:
    dtRefunded = 05/22/2009 12:00:00 AM GDT
    Date = 05/14/2009

    Все поля тип - Date/Time
    Есть колонка во вью, с такой формулой:
    Код (Text):
    @Integer((dtRefunded-Date)/86400)
    Дак вот, для данного примера, результат = 7, хотя должно быть 8...
    Видел пример, сейчас я его найти не могу, где оно правильно считается...
    Насколько я понимаю, все это зависит от локальных настроек, из-за часовых поясов, так как меняются часы в поле. Или я не прав?
    Кстати, если нажать правой кнопкой на документ и посмотреть поле, то показывается:
    dtRefunded = 05/22/2009 12:00:00 AM GDT
    а если глянуть с помощью ScanEZ, то 01:00:00 AM GDT.

    Короче все из-за часов..
    Скажите, есть ли способ правильно отображать количество дней? переделывая только формулу в колонке?
     
  2. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    может подтолкнете на идею......

    dtRefunded - редактируемое поле, нигде кодом не заполняется... почему в некоторых случаях со временем, а в некоторых нет?

    dtRefunded = 05/22/2009 12:00:00 AM GDT
    dtRefunded = 10/11/2009
     
  3. nnikishi

    nnikishi Гость

    вероятнее всего значение поля с часовым поясом модифицируется через back-end лотусскриптом
    второй вариант заполняется через UI пользователем

    чтобы отсекать в первом варианте с лотусскриптом время и часовой пояс, мспользуйте NotesDateTime класс и в нем метод SetAnyTime - он обрежет время и часовой пояс
     
  4. amigolinx

    amigolinx Гость

    Может, как вариант чисто, обрезать в формуле dtRefunded и приводить к виду "только дата":
    Код (LotusScript):
    dtRefundedText := @Word( @Text( dtRefunded ); " "; 1);
    dtRefunded := @TextToTime( dtRefundedText );
    ... ну и с Date аналогичным образом поступить - во избежание и в назидание так сказать ...
     
  5. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    amigolinx, ужас. ;)
    Можно просто @Date использовать.
     
  6. amigolinx

    amigolinx Гость

    ну да, такой вот звращенец ;) с заскриптованой квадратной бошкой ;)
     
  7. nnikishi

    nnikishi Гость

    рекомендую все таки обязательно обрезать время и часовой пояс как я написал выше и хранить в поле только дату. Иначе могут быть очень неприятные результаты если база используется в разных часовых поясах - дата может быть смещена на день

    @date корректно отработает (с точки зрения сервера), только если база на одном сервере и нет локальных реплик, иначе даты тоже могут плясать из-за часовых поясов
     
  8. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    nnikishi , да, скорее всего вы правы что касается этих двух пунктов. Буду пробовать....


    Нельзя, так как:

    Если я открою док, допустим в России, я увижу дату 15.11.2010... А где-н в Америки 14.11.2010....
     
  9. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Еще вопрос, работает один и тот же агент на сервере, почему в некоторых случаях

    27.11.2010 00:00:00 GMT

    а в некоторых

    27.11.2010 00:00:00 GDT

    Как это может такое происходить?
     
  10. nnikishi

    nnikishi Гость

  11. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.082
    Симпатии:
    300
    прежде всего - нужно разобраться самому, что хотелось бы получить...?
    оценить результат с т.з. процесса:
    -где заносятся даты
    -где происходит анализ
    -что является критерием правильности разницы
     
  12. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Наверно потиху я прихожу к истине.
    Дело в том, что все документы хранятся в одной базе...там с датами вроде как все ок, но надо еще проверить

    И есть вторая база, Репортер...
    Там есть кнопка синхронизации
    Код (Text):
    @Command([ToolsRunMacro];"aSynchronizer")
    Запускается агент, который переносит нужные поля, в том числе эти даты...

    Код (Text):
    Call docReport.ReplaceItemValue(varItems(intUpd), docSource.GetItemValue(varItems(intUpd)))
    Может есть какой-то более правильный способ для дат?

    Я не сильно соображаю как работает запуск этого агента... Но возможно оно дописывает часы в дату с часовым поясом где находится чел, который запустил этот агент?
     
  13. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.082
    Симпатии:
    300
    не могу с уверенностью сказать, но даты хранят тот часовой пояс где с ними происходят манипуляции
    т.к. поле менялось - я полагаю, часовой пояс будет текущий (где выполнен агент) и дата пересчитается в него
    но если мы считаем рабочие часы - пересчет часов на локальную зону не нужен
     
  14. nnikishi

    nnikishi Гость

    Да, в вашем случае агент запускается в локальном контексте пользователя, который нажал на кнопку и его часовой пояс становится критичным

    воткните что то вроде такого костылька:


    Dim ndt as NotesDateTime

    if IsDate(docSource.GetItemvalue(varItems(intUpd))) Then 'проверяем является ли значение поля датой

    Set ndt = New NotesDateTime(docSource.GetItemvalue(varItems(intUpd)))
    Call ndt.SetAnyTime 'обрезаем время

    Call docReport.ReplaceItemValue(varItems(intUpd), ndt)

    Else
    Call docReport.ReplaceItemValue(varItems(intUpd), docSource.GetItemvalue(varItems(intUpd)))
    End if
     
  15. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    nnikishi , сделал как вы говорили... на первый взгляд , некоторые тоталы изменились в правильный вид. Тестирование продолжаю....
    Но время вроде как бы не исчезло, а просто привели в общему часовому поясу (типа того)

    dtRefunded = 05/22/2009 12:00:00 AM ZE2
    dtRefunded = 10/11/2009 12:00:00 AM ZE2

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




    Добавлено:
    да, так и получилось... изменил на компе часовой пояс и дата изменилась,

    была

    dtRefunded = 05/22/2009 12:00:00 AM ZE2

    стала

    dtRefunded = 05/21/2009 11:00:00 PM ZE2
     
Загрузка...
Похожие Темы - Total Days View
  1. fiandy
    Ответов:
    7
    Просмотров:
    1.425
  2. iivvnn
    Ответов:
    10
    Просмотров:
    1.936
  3. lionk
    Ответов:
    6
    Просмотров:
    1.729
  4. nayke
    Ответов:
    4
    Просмотров:
    1.768
  5. dimat
    Ответов:
    1
    Просмотров:
    1.527

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