![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Учет времени [D6, Win2k]
Pashkerton © (2004-10-13 13:11:00)Добрый день.
На SQL Server-e есть следующая таблица:
| cardcode | action | date | time |
где: cardcode - код сотрудника
action - событие (0-сотрудник ушел, 1-сотрудник пришел)
date - дата событи action
time - время события action
За один день сотрудник может несколько раз прийти на работу и уйти. Число приходов и уходов должно быть одинаковым. Отсюда вопрос - каким алгоритмом организовать поиск 'коллизий', если человек допустим лишний раз отметился, или вообще забыл отментится.
Pashkerton (2004-10-13 14:43:00) [21]Так вот я и ищу решение отлова коллизий. А исправлять их ручками
, и только после производить подсчет времени. Интелектуальные алгоритмы (чтоб сами исправляли коллизии) я писать не собираюсь.
Reindeer Moss Eater (2004-10-13 14:43:00) [22]А что вообще мы хотим узнать написав какой-то запрос?
На работе ли человек или уже дома?
Цель-то какая?
Число приходов и уходов должно быть одинаковым.
А типа без SQL сервера человек запутается и дважды уйдет с работы, придя на нее всего один раз.
Какая цель?
Ega23 (2004-10-13 14:40:00) [23]
TimeToStr(StrToDateTime('13.10.2004 23:30:39') - StrToDateTime('14.10.2004 00:10:29'));
А нафига так сложно????? И, кстати, нафига в таблице 2 разных поля date и time? Можно же одним datetime обойтись...
Johnmen (2004-10-13 14:38:00) [24]>jack128 © (13.10.04 14:23) [10]
День здесь непринципиален.
Просто решение, которое ты привел, неверно, т.к. сотрудник может отметиться два раза подряд при входе и два раза при выходе. Это коллизия. Даже две. А ты не ловишь...:)
Pashkerton (2004-10-13 14:35:00) [25]Да сколько бы он не просидел, хоть даже заполночь. В Delphi замечательно работает следующее:
TimeToStr(StrToDateTime('13.10.2004 23:30:39') - StrToDateTime('14.10.2004 00:10:29'));
Pashkerton (2004-10-13 14:26:00) [26]
> Johnmen
На сервере висит сервис. на клиентских машинах маленькое приложение следующего характера: при логоне на сервис отправляется запрос, отметился ли человек. При отрицательном ответе его периодически начинают раздражать MessageBox-ы гласящие о том что он не отметился.
jack128 (2004-10-13 14:23:00) [27]Ega23 © (13.10.04 14:08) [8]
Тогда вы сначала дайте определение, что такое РАБОЧИЙ ДЕНЬ ;-)
Pashkerton (2004-10-13 14:17:00) [28]Ха - ха - ха ))
Да собственно не так уж там всё и сложно. Я сейчас в розысках новых решений. Работающая программа есть, тока она на VBA. Я перешел на SQL 2000. Теперь делаю всё красиво.
Ega23 (2004-10-13 14:08:00) [29]2 jack128 © (13.10.04 13:34) [6]
Ага, а если он заполночь засиделся? Или в ночную смену работает?
Поверь там далеко не всё просто.
Johnmen (2004-10-13 13:55:00) [30]>если человек допустим лишний раз отметился,
Это понятно.
>или вообще забыл отментится.
А это прикольно... Чел на работе, а следов в таблице об этом нет.
:)
jack128 (2004-10-13 13:34:00) [31]Количество приходов = select count(*) from table where action = 1 and cardcode = :cardcode and date = :date
Количество уходов = select count(*) from table where action = 0 and cardcode = :cardcode and date = :date
и сравнивай.
Если бы уход кодировался -1 , то можно было бы проще
select sum(action) from cardcode = :cardcode and date = :date Если не равно нулю, то коллизия.
Ega23 (2004-10-13 13:30:00) [32]А не Полярные Зори, случайно? :о)
Pashkerton (2004-10-13 13:26:00) [33]Гораздо проще. Апатиты.
Ega23 (2004-10-13 13:24:00) [34]Мурманск? Билибино?
Pashkerton (2004-10-13 13:15:00) [35]Скажем так, за полярным кругом...
Ega23 (2004-10-13 13:12:00) [36]Гы-ы-ы... Знаем-знаем...
В какой конторе работаешь, конкурент?