Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/170: Рейтинг темы: голосов - 170, средняя оценка - 4.83
mosymo

Выборка по дате и времени во ВЬЮ

08.06.2009, 20:11. Показов 31740. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблемма такая!!!
Существует форма в которой есть поле datapostanovki (тип Data) и vremiyprinrehen (тип Time).
Нужно сделать Вью в которой нужно сделать выборку данных за сутки по этим поля.
Сутки начинаются с 20:00.

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


[codebox]SELECT ((Form = "ФОРМА")
& (@Text(datapostanovki)>= @Text(@Date(@Yesterday)) & @Text(@Hour(vremiyprinrehen))>="20")
& (@Text(datapostanovki)<= @Text(@Date(@Now)) & @Text(@Hour(vremiyprinrehen))<="20")[/codebox]


Заранее всем благодарен, кто откликниться на эту проблему.

P/S
Да и еще один вопрос. Как распечатать ВЬЮ по своей форме Отчета?????
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.06.2009, 20:11
Ответы с готовыми решениями:

Выборка по дате и времени.
Всем привет! Есть таблица в mysql, в ней есть столбцы &quot;Дата_начала&quot; (DATE) и &quot;Время_начала&quot; (TIME). Вопрос: Как...

Выборка по дате и времени
SELECT dbo.TestCS.idTestCS, dbo.TestCS.NoOrder, dbo.Customer.Name as Customer, dbo.Manufacture.Name AS Manufacturer,...

Выборка по дате и времени
Здравствуйте. Пытаюсь сделать выборку, где по дате типа TDateTime ищет совпадение. У меня есть переменная, в ней хранится значение...

24
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
08.06.2009, 20:18
не надо так делать!
ужо скока говорено - там много граблей
Чем не устроит пущать скрипт и получать выборку, либо (ежели задача позволяет) - встроенную вьюшку делать (с категорией отбора)
0
mosymo
08.06.2009, 20:50
Цитата Сообщение от lmike
не надо так делать!
ужо скока говорено - там много граблей
Чем не устроит пущать скрипт и получать выборку, либо (ежели задача позволяет) - встроенную вьюшку делать (с категорией отбора)


Желательно примерчик Скрипта ;)
Tyo
08.06.2009, 21:02
Цитата Сообщение от masyna
SELECT ((Form = "ФОРМА")
& (@Text(datapostanovki)>= @Text(@Date(@Yesterday)) & @Text(@Hour(vremiyprinrehen))>="20")
& (@Text(datapostanovki)<= @Text(@Date(@Now)) & @Text(@Hour(vremiyprinrehen))<="20")

НИКОГДА во вьюшках не используйте @Now, @Today, @Yesterday!!!! Т.е. параметров, зависящих от времени. Это приводит к тому, что индекс видов никогда не актуален и индексёр его всегда перестраивает полностью. При большой БД, сервер только на вашу вьюшку будет работать.

Используйте
@TextToTime ("Сегодня") или @TextToTime ("Today")
в зависимости от локали

или скриптом с клиента меняйте формулу отбора раз в сутки через NotesView.SelectionFormula, устанавливая дату константой, типа

myView.SelectionFormula = {SELECT (datapostanovki <= [} & CStr(Now) & {])}

Правда, надо ещё обеспечить, чтоб только один пользователь раз в сутки инициировал операцию перестроения индекса при открытии данной вьюшки
Call ws.ViewRebuild()
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
08.06.2009, 21:23
Цитата Сообщение от TIA
Правда, надо ещё обеспечить, чтоб только один пользователь раз в сутки инициировал операцию перестроения индекса при открытии данной вьюшки
Call ws.ViewRebuild()
А альтернатива - ежедневный серверный агент, выполняющий updall для нужной вьюшки, здесь не покатит?
0
Tyo
08.06.2009, 21:46
OKEN
А в принципе, почему бы и нет!? После такой существенной модификации, как SelectionFormula, и обычный Refresh должен бы приводить к ребилду индекса. На практике не доводилось использовать, но проверю на досуге. Если подтвердится, то и Updallа будет достаточно или UI-обращения к автоматическому виду.
(Кстати, может кто-то точно знает?)
mosymo
08.06.2009, 22:05
Фильтрация просто по полю datapostanovki за сутки у меня работает!


Code
1
2
3
SELECT ((Form = "Неисправности")
& (@Text(datapostanovki)>= @Text(@Date(@Yesterday)))
& (@Text(datapostanovki)<= @Text(@Date(@Now)) )
Но у меня еще есть поле vremiyprinrehen (время принятия решения), по которому тоже необходимо сделать фильтрацию.

ВЬЮ Должна выводить данные, имеенно по этим полям, за сутки, причем сутки начинаются с 20:00, т.е. vremiyprinrehen должно быть >= 20:00 вчерашнего дня и <= 20:00 сегоднешнего дня!
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
08.06.2009, 22:24
TIA
Указанный случай изменения формулы отбора не использовался, поэтому заинтересовало.
Было подобное решение с помощью @Environment.
Но вот насчет настроенных свойств обновления этих представлений сейчас не подскажу.

masyna
Ну, стоило прислушаться к совету не использовать @Now.
Что мешает через | добавить в представление аналогичное условие по второму нужному полю, правильно расставив скобки?
Если 2-я дата в документе не указана, можно использовать проверку @IsTime.
Возможно, конечно, я не поняла задачи и надо совместить их по &, т.е. отбирать только если оба поля содержат значения в рамках тек. суток?
ps:
Yesterday можно заменить на @Adjust(@Date(today); 0; 0; -1; 0; 0; 0);
Даты стоит сравнивать как даты все-таки, а не как текст.
0
mosymo
08.06.2009, 22:58
Ну, стоило прислушаться к совету не использовать @Now.
Что мешает через | добавить в представление аналогичное условие по второму нужному полю, правильно расставив скобки?
Или я не поняла задачи и надо совместить их по &, т.е. отбирать только если оба поля содержат значения в рамках тек. суток?

Именно так, нужно отбирать по & ;)

И желательно побольше примеров, так как я начинающий ( да Ламер Я ;) )
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
09.06.2009, 07:41
Сорри, изначально невнимательно прочла условие - думала, что отбор по 2м независимым датам, а не дата + время.
1. Немного извращенческий отбор в представление по дате и времени с @now в предположении, что дата datapostanovki содержит только дату -проверяется только равенство дат (может, я и не права, но я не думаю, что 20:00 должно учитываться двое суток подряд, поэтому рассматриваю вариант, что сутки заканчиваются до 20:00, а дальше начинаются новые) - чего-то хорошо упростить тут не получилось ;)

Code
1
2
3
4
5
6
Today := @TextToTime("Today");
StartTime:=20;
hs20 := @Hour(vremiyprinrehen) < StartTime;
hsNow := @Hour(@Now) >= StartTime;
SELECT Form = "Неисправности" & @If(hsNow; @If(hs20; @Adjust(datapostanovki; 0; 0; -1; 0; 0;0) = Today; Today=datapostanovki);
@If(hs20; Today=datapostanovki; @Adjust(datapostanovki; 0; 0; 1; 0; 0;0) = Today))
2. Еще один вариант, который как-то опробовали - обойтись без @now c серверным агентом, устанавливающим дату в серверную переменную Startday notes.ini и обновляющий представление в момент перехода дат.
Формула отбора в представление в этом случае чуть попроще:

Code
1
2
3
4
Today20 := @TextToTime(@Environment("Startday"));
StartTime:=20;
hs20 := @Hour(vremiyprinrehen) < StartTime;
SELECT Form = "Неисправности" & @If(hs20; @Adjust(datapostanovki; 0; 0; -1; 0; 0;0) = Today20; Today20 =datapostanovki)
Агент должен запускаться ежедневно в 20:00 (уровень безопасности 2 -allow restricted). Нужно запустить агент изначально для получения отбора по вьюшке.
В момент запуска он проверяет время сервера (то перестраховка - если агент запустится не в нужное время, чтоб не менял дату на текущую до начала суток).

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    Const StartTime = 20  время начала суток
Const viewName = "TestSel2"  имя вьюшки
Dim s As New NotesSession
Dim Db As NotesDatabase
Dim prevDate As String
Dim сDate As String
Set db = s.CurrentDatabase
prevDate = s.GetEnvironmentString("Startday")
If Hour(Now) >= StartTime Then
cDate = Format(Today, "Short Date")
Else
cDate = Format(Today-1, "Short Date")  yesterday
End If
If prevDate <> cDate Then
Call s.SetEnvironmentVar("Startday", сDate)
Msgbox "обновляем индекс с датой " & сDate
Call s.SendConsoleCommand("", "load updall " & {"} & db.FilePath & {"} & " -t " & viewName & " -r")  Update thys view only
End If
0
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
09.06.2009, 09:33
Про папки еще никто не упомянул? ;)
0
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
09.06.2009, 10:42
Цитата Сообщение от Medevic
Про папки еще никто не упомянул?
это твоя привилегия )))

TIA, чесгря я не понял, чего ты такое насоветовал...
не использовать @Today, но использовать @TextToTime ("Today")... ведь эти функции возвратят один результат, только в разном типе, если уточнять... чесгря, меня это сбило с толку ;)
к стати, еженочный агент, вызывающий updall на нужный вид с использованием @Environment работает, проверено, и не только на этой задаче...

я поддерживаю вариант lmike, либо Medevic, но папки мне не по душе, т.с...

я бы, наверное, добавил в документ поле, содержащее дату из одного поля и время из другого, чтобы было удобнее использовать.
тогда для скриптового варианта могу порекомендовать метод notesView.GetAllDocumentsByKey( keyArray [, exactMatch% ] ), где
keyArray будет в виде объекта NotesDateRange. и вьюху по одному общему полю отсортировать.
либо notesView.FTSearch( query$, maxDocs% ), с запросом приблизительно такого вида
([newDateItemName] >= starttime) and ([newDateItemName] <= endtime)
где starttime - дата пред.дня от текущего со временем 20-00 и соотв. endtime свое значение нужное содержит, передевать в строку запроса в виде строкового значения даты (например, 09.05.2009 20:00)...
0
0 / 0 / 0
Регистрация: 26.05.2006
Сообщений: 1,313
10.06.2009, 11:00
Сравнение дат, как текстов (причем на больше/меньше) - уже та ещё засада. Только для профессиональных граблеходцев
0
Tyo
10.06.2009, 12:44
Цитата Сообщение от Akupaka
TIA, чесгря я не понял, чего ты такое насоветовал...
не использовать @Today, но использовать @TextToTime ("Today")... ведь эти функции возвратят один результат, только в разном типе, если уточнять...
Ну какже, разве вы ещё не в курсе?
Вон, OKEN использует @TextToTime("Today"), правда тут же следом @Now

Почитайте.
http://www.notesnet.ru/library/docid/829BC8

masyna, Вам особенно рекомендую.

Могу только добавить, что у зависящих от времени видов есть поле $FormulaTV. По нему можно аудит дизайна делать на предмет использования зависящих от времени представлений. Так вот, @TextToTime ("Today") не приводит к появлению $FormulaTV.
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
10.06.2009, 13:42
TIA, спасибо за статью, почитаю... когда-то давно я читал похожую, но на английском, и в виду плохого владения языка она мне плохо запомнилась... но я сделал один хороший вывод - не использовать в формулах отбора представлений никаких функций-времени/даты

все-равно, я бы рекомендовал не торчать на подобном, а использовать возможности поиска по дате, а не по ее текстовому представлению, которое, к тому же зависит от поясов и т.п., например, 20:00 (в поясе +2) отличное время от 20:00 (+4). а время на сервере в виде будет преобразовываться по поясу сервера, а не того, кто делает запрос. соотв, результат запроса может быть несоответсвующим... (формулы отбора в вид это, конечно, не касается, это относится к отбору по текствовому представлению данных)
0
Tyo
10.06.2009, 14:10
Цитата Сообщение от Akupaka
все-равно, я бы рекомендовал не торчать на подобном, а использовать возможности поиска по дате, а не по ее текстовому представлению,
Подожди, я и не призывал использовать текстовое представление даты. @TextToTime даёт DATETIME. Ессно, все операции сравнения дат должны быть в типе "datetime".
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
10.06.2009, 15:56
оу... прошу прощения, меня проглючило после поста автора темы


Цитата Сообщение от masyna
(@Text(datapostanovki)>= @Text(@Date(@Yesterday))
0
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
10.06.2009, 17:07
Цитата Сообщение от TIA
Ну какже, разве вы ещё не в курсе?
Вон, OKEN использует @TextToTime("Today"), правда тут же следом @Now
Я знала о преимуществе @TextToTime("Today") и ему говорила, даже по ходу проверила, не путаю ли я чего.
Только я не знаю лотус так глубоко, чтобы знать про $FormulaTV, поэтому огромное спасибо за инфу
в 1м примере я сначала предупредила, что вариант с @Now - человек изначально хотел отбор во вьюшку и примеров побольше. И дальше уже смотрю оптимальные варианты насоветовали, я тогда зациклилась на постановке автора.
я в следующем примере исправилась - обошлась без @Now
0
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
10.06.2009, 17:17
Цитата Сообщение от OKEN
и ему говорила
вот взяла и сдала )))
0
mosymo
10.06.2009, 22:03
Всем огромное спасибо за участие в моей теме!
По поводу исползования даты взятую с сервера, то это я думаю не подойдет, эта база будет использоваться на 6 серверах. А сбор данных будет на головном, где будут проводить сверку действительности этих данных.
Но все же попробую. Как и остальные примеры, так как я еще раз повторюсь, что новичек в этом деле!!!



Да я еще просил дать ответ на вопрос - Как распечатать Вью по своей форме отчета!!!!
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.06.2009, 22:03
Помогаю со студенческими работами здесь

Выборка по заданной дате и времени
Здравствуйте, уважаемые форумчане. Помогите, пожалуйста, решить задачу: Есть таблица со столбцом dt_Date в формате dd.mm.yyyy...

Множественная выборка по времени и дате
Не удается написать запрос по времени и дате с произвольной выборкой данных. Пример записи времени: 30.10.2018 14:00:00 ...

Интервал времени и выборка по дате
SELECT S.NAME AS SERVICES, SUM(IF(P.DATE &lt; '2017-01-01', ROUND(SUMMA, 2), 0)) AS DATE, ...

Выборка записи по максимальной дате и времени
Здасте. Подскажите как в представленном коде (под id_order = 963 в таблице d_document имеются две записи) выбрать узнать id_code записи с...

Выборка из timestamp по дате или по времени
Всем привет, подскажите как сделать запрос по полю timestamp, дата хранится в виде 2016-05-07 08:45:05, возможно ли как то выбрать только...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru