Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Учет времени [D6, Win2k]


Страницы:   1 2

Pashkerton ©   (2004-10-13 13:11:00) 

Добрый день.
На SQL Server-e есть следующая таблица:
| cardcode | action | date | time |
где: cardcode - код сотрудника
    action - событие (0-сотрудник ушел, 1-сотрудник пришел)
    date - дата событи action
    time - время события action
За один день сотрудник может несколько раз прийти на работу и уйти. Число приходов и уходов должно быть одинаковым. Отсюда вопрос - каким алгоритмом организовать поиск 'коллизий', если человек допустим лишний раз отметился, или вообще забыл отментится.


Ega23   (2004-10-13 16:00:00) [1]

2 Pashkerton   (13.10.04 15:46) [34]
date - дата
time - время
и
time_stamp - тут всё ясно

IMHO, для данной таблицы лишнее.
Вот наша структура аналогичной таблицы:
unid        
PersId      
datin                                                  
PointUID
ZoneFromUID
ZoneToUID
CardId      
Pincode    
CardNr      
actFl
TraceTypCod


jack128   (2004-10-13 15:49:00) [2]

Johnmen ©   (13.10.04 15:39) [31]
Не придираюсь я.. Я так... ;-)


Pashkerton   (2004-10-13 15:46:00) [3]

Да я же кусочек таблицы выдал на рассмотрение (и об этом я писал чуть выше). Вот 'полная версия':
|rkey|cardcode|date|time|tdatetime|terminalid|action|time_stamp|
rkey - это ясно
cardcode - код карты
date - дата
time - время
tdatetime - оно самое про что Вы писали
terminalid - идентификатор терминала с которого получена запись
action - событие
time_stamp - тут всё ясно


Reindeer Moss Eater   (2004-10-13 15:43:00) [4]

нету у нас datetime. У нас только DATE
Date тоже можно выкинуть.
И использовать числовой первичный ключ.

Система вполне эффективна для малых предприятий
Система вполне эффективна, если можно доверять её данным.
Если же их надо править руками, то это игра в систему.


Pashkerton   (2004-10-13 15:40:00) [5]

Система вполне эффективна для малых предприятий (у нас 52 человека). В помещении находится 2 терминала которые считывают штрихкоды с карточек (проходной нет, они просто висят на стеночке и глаза не мазолят). На сервере стоит SQL Server с работает сервис который постоянно опрашивает терминалы. В любой момент я могу узнать кто находится в помещении (если он не забыл отметится). Благодаря ей у человека получается 'свободный' график, 'чем больше работаешь - тем больше плучишь'.


Johnmen   (2004-10-13 15:39:00) [6]

>jack128 ©   (13.10.04 15:37) [30]

Ну зачем придираться. Это общая схема. Ничто не мешает подправить под раздельное хранение. Но я Пашкертону уже говорил, что такое разделение не только неудобно, но и вредно...
:)


jack128   (2004-10-13 15:37:00) [7]

Johnmen ©   (13.10.04 15:27) [26]
Коллизии примерно так (при условии, что две соседние отметки не могут иметь одинаковое datetime):
нету у нас datetime. У нас только DATE
Pashkerton   (13.10.04 13:11)
date - датасобыти action


Reindeer Moss Eater   (2004-10-13 15:32:00) [8]

Коллизии такого рода можно обнаружить если чел забыл отметить приход или уход.
Если же он забудет и то и другое подряд, то коллизий не будет.
Зато будет фигня в табеле.


Reindeer Moss Eater   (2004-10-13 15:30:00) [9]

Я тебе не про таблицу и её структуру (Вполне корректную кстати).
А про системуучета рабочего времени.


Pashkerton   (2004-10-13 15:28:00) [10]

Спорить ни с кем не собираюсь. Как можно судить о чем то (в рамках существующей структуры...) по одной таблице. Предложил на рассмотрение вопрос в поисках интересных решений. Вывел на рассмотрение только те поля таблицы, которые вписывались imho в суть вопроса.


Johnmen   (2004-10-13 15:27:00) [11]

>jack128 ©   (13.10.04 15:19) [24]

Конечно.

>Pashkerton  

Коллизии примерно так (при условии, что две соседние отметки не могут иметь одинаковое datetime):
SELECT * FROM Table T1
JOIN Table T2 ON (T1.cardcode=T2.cardcode) AND
 (T1.datetime<T2.datetime) AND (T1.action =T2.action) AND
 (T2.datetime-T1.datetime=(SELECT MIN(T3.datetime-T1.datetime)
             FROM Table T3
             WHERE (T3.cardcode=T1.cardcode) AND
               (T3.datetime>T1.datetime))


Reindeer Moss Eater   (2004-10-13 15:27:00) [12]

Конечно возможно


jack128   (2004-10-13 15:19:00) [13]

Johnmen ©   (13.10.04 14:38) [13]
в рамках существующей структуры таблицы это возможно ? ;-)


Reindeer Moss Eater   (2004-10-13 15:09:00) [14]

Сначала найти и уничтожить коллизии, а потом подсчитать время.

И как же посчитать время, если сытый чел пришел  с обеда на час позже чем надо и забыл шоркнуть карточкой?

Для детского сада такая система учета времени.


Reindeer Moss Eater   (2004-10-13 15:08:00) [15]

Искать коллизии :

Строим курсор по регистрациям работника в хронологическом порядке.
Коллизии есть, если существует регистрация с таким же типом "x" и временем регистрации меньшим, чем ближайшая более поздняя регистрация противоположного типа (к регистрации из курсора)


Pashkerton   (2004-10-13 15:07:00) [16]

Сначала найти и уничтожить коллизии, а потом подсчитать время.


Johnmen   (2004-10-13 14:58:00) [17]

>Pashkerton

Уточни. Тебе надо считать "рабочее" время или искать коллизии ?


Reindeer Moss Eater   (2004-10-13 14:56:00) [18]

Я что-то полета мысли понять не могу.

Ставим систему. (Что бы иметь некие данные)
После чего зачем-то пытаемся найти софтварное подтверждение такой естественной особенности человека - "один раз пришел - один раз ушел (а не два)"
Потом ищем ошибки.
Потом их правим руками.
Потом на основе данных введенных руками делаем выводы о рабочем времени человека.

По моему сама система учета времени в этой изящной архитектуре - вещь лишняя.


Pashkerton   (2004-10-13 14:51:00) [19]


> Reindeer Moss Eater

Утром пришел - отметился. 8.00
Пошел на обед - отметился - 13,00
Пришел сытый -не отметился - ~ 14.00
Поше домой - отметился - 17,00

А вообще я таких кадров насмотрелся. По секрету, есть такие сотрудники которым карточки вообще в руки давать не следует )


Reindeer Moss Eater   (2004-10-13 14:44:00) [20]

Если хотим узнать сколько времени чел был на работе, то надо при регистрации "выхода" искать последний вход и считать время.
Расчитав его, складывать в таблицу - табель.
Вот и все.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо